rsyslog 无论在性能还是部署上都优于其它日志收集应用,因系统自带,需要新功能只需要做升级即可,方便部署!
一、Rsyslog特性
- Multi-threading, high availability
- TCP, SSL, TLS, RELP
- MySQL, Redis,Elasticsearch, Oracle and more
- Filter any part of syslog message
- Fully configurable output format
- Encryption and compression transmission
- Suitable for enterprise-class relay chains
更多rsyslog本身的一些功能介绍,请看我之前写的一个PPT。rsyslog的使用
二、日志收集规划
- 提前规划日志标准格式、目录,做到日志类型通用、覆盖度广、易处理。
比如:
1 | logtime client_ip server_ip domain level http_code url response_time msg |
1 | 27/Apr/2016:15:50:55 1.1.1.1 127.0.0.1 www.elain.org ERROR 499 /elk/rsyslog 0.007 xxxxx |
日期也要严格使用统一格式,推荐ISO8601时间格式,日志经过这样规范处理后,无论是在单台上使用awk,cut,sed来查看日志,或是写一些简单实用的日志处理小工具都会比较通用。
当然,如果你非要说不会有单机上去查看日志的情况,那使用纯json格式也是相当不错的,针对ELK来说更是方便,可以直接使用logstash或hangout解析json,反而提高grok的性能。
比如:
1 | {"logtime":"value","client_ip":"value","server_ip":"value","domain":"value","level":""value","http_code":"value","url":"value","response_time":""value","msg":"value"} |
1 | {"logtime":"27/Apr/2016:15:50:55","client_ip":"1.1.1.1","server_ip":"127.0.0.1","domain":"www.elain.org","level":""ERROR","http_code":"499","url":"/elk/rsyslog","response_time":""0.007","msg":"xxxxx"} |
当然,你还可以把前面这些固定的字段从json中扔出来,只把msg做成json,但切记,为了方便通用,在日志中使用json格式时不要做多级嵌套,这样大大增加了日志处理的复杂度,且不同日志如果没有明确级数,就搞的不通用了,大大增加了运维复杂度。
- 使用rsyslog日志收集是尽量保证日志的原始性
不去做任何处理 ,直接收集入到队列,如kafka、redis,这样做的的好处时,减少日志客户端rsyslog的性能压力,从而不影响所在服务器上正常业务,并且保持原始日志也便于各自业务方处理,自己写的日志自己最熟悉。 - 日志收集客户端rsyslog 使用守护进程的工具做守护,如supervisor、monit等
三、使用rsyslog收集常见日志配置
- 单行日志,如nginx app 业务日志等,最常用
1 | module(load="imfile") # if you want to tail files |
- 多行日志 如php_slow_log