业务日志收集方案
版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 起因: 我们线上的业务通常会部署到10几台或者几十台机器上,线上的日志如果用salt执行命令远程的grep已经是越来越不方便了,所以我们决定对日志进行统一收集,管理 1. 选择方案 我们业务日志不算特别的多,因此不想方案过于复杂,并且公司内部已经有ES和kafaka集群 因此可以选方案有 1) rsyslog + kafka + elasticsearch 2)fluentd + kafka + elasticsearch 我最终选择了方案1: a) 由于公司的服务器主要是centos, 默认已经安装了rsyslog b) Fluentd是JRuby开发的,而rsyslog是二进制程序 以前有过logstash的使用经历,当日志量较大时,logstash会把CPU打的很高 感受:rsyslog的功能其实非常强大, 它所有配置都是从某个input获取数据再发送到output(和logstask很像) 支持: 1) 文件 –> kafka 2) 文件 –> elasticsearch 3) tcp/udp –> 文件 4)文件 –> 其它主机(TCP/UDP) input 和 output 是可以任意组合的 如果你不想搭建Elasticsearch和Kafka,完全可以把所有日志收集到某个文件服务器 然后在这台文件服务器上再使用logrotate,完全可以满足日常的开销 kafka只是用来做缓冲的,如果日志没有明显的波峰,可以不使用kafka 2. 实施 2.1 统一日志字段 我们多个业务项目,并且有Golang、Python等多种语言,为了保证,入ES的数据格式一致,我们统一了日志的字段,如下 所有字段都是比选的,如果没有请留成空字符串* 字段 类型 是否必填 说明 备注 service string 是 业务标识 使用英文字符和下划线,中划线 name string 是 logger名称 level string 是 日志级别 ERROR/INFO/DEBUG/WARNING pathname string 是 文件全路径 lineno int 是 在文件中的行号 如果没有, 给默认值-1 msg string 是 消息体 task_id string 是 任务ID log_date string 是 日志时间 ES上的字段类型为datetime 2017-01-01T00:00:00+0800 不同的业务和项目之间通过service字段区分 ...