老金
今天来给大家讲一讲
Zabbix监控日志文件
文| 懒懒的天空
最近很多人在咨询日志监控的事情,对于日志这个问题,简单也简单,不简单也不简单,日志最先反映出应用当前的问题,在海量日志里面找到我们异常记录,然后记录下来,并且根据情况报警,大家可以监控系统日志、nginx、Apache、业务日志。想用好用对,不是辣么容易,一直想系统的写下,无奈人比较懒,就把自己的微薄经验跟大家一起互相学习下。zabbix最主要的是监控日志文件中有没有某个字符串的表达式,支持日志文件正则和关键字正则,其是把日志文件中符合关键字的日志过滤出来入库,不包含的日志不采集,且只支持主动模式。
1、 zabbix日志监控表达式描述
1)log[/var/log/syslog,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
2)logtr[/var/log/.*.log,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
l egexp:要匹配内容的正则表达式,或者直接写你要检索的内容也可以。譬如一个ERROR 二个 ERROR|FALSE,当然你也可以不写,就采集了所有的日志了
l encoding:编码相关,linux建议用UTF-8,WIN建议用ANSI,具体情况具体分析
l maxlines:一次性最多提交多少行,这个参数覆盖配置文件zabbxi_agentd.conf中的’MaxLinesPerSecond’,默认留空
l mode:默认是all,也可以是skip,skip会跳过老数据,这个最好是skip,不然会采集历史数据
l output:输出给zabbixserver的数据。可以是\1、\2一直\9,\1表示第一个正则表达式匹配出得内容,\2表示第二个正则表达式匹配错的内容。这个没怎么用
log支持日志切割,只监控当前文件夹日志 logrt支持文件正则,支持多个日志文件采集,不管新旧文件,只要他们有变更,zabbix都会监控。
注意,一定要保证Zabbix用户对日志文件有可读权限,否则这个Item的状态会变“unsupported”。
2、zabbix监控linux日志举例
zabbix监控linux登陆日志,如下有日志切割
1) -rw-------. 1 root root 0 6月 15 09:42 secure
2) -rw-------. 1 root root 91 2月 26 12:50 secure-20170226
3) -rw-------. 1 root root 91 2月 26 17:51 secure-20170317
4) -rw-------. 1 root root 60 3月 27 12:35 secure-20170329
5) -rw-------. 1 root root 0 3月 29 20:34 secure-20170615
监控项配置如下图,过滤用了正则(Accepted|Failed)
采集后的日志如下图
触发器配置如下图,我是非法登陆6次才报警,不然被攻击了报个不停
注意,日志触发器一般要加nodata(60)=0,不然你的触发器的值会一直是problem,会一直触发报警,切记
3、zabbix监控windows日志举例
windows日志如果日志内容有中文的话,你不配置好编码,你就等着乱码吧,哈哈哈哈哈。具体跟前面差不多,怎样判断编码方式呢,这里有个小技巧,你用记事本打开日志内容,然后另存日志,就可以看到你的日志的编码方式了,不知道准不准,我反正都是这么干的,一般来说都是ANSI编码,我就下面举个简单的logrt例子:
1) logrt[{"c:\server.*.log","连接服务器失败",ANSI,,skip,]
4、日志监控题外话
zabbix只能做简易的日志采集报警,如果需要做日志分析,或者做日志查询展示,这个ELK真是不二选择。 ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈,架构如下,就不展开说了:
不过现在前端采集日志文件一般用filebeat了。我自己开发了一套简易的日志采集报警方式,应付日常应用勾勒,架构如下图,见笑了:
采集服务器用filebeat送到kafka集群缓存,python客户端处理日志,入mysql数据库,同时从redis服务器取过滤关键字,匹配日志,匹配则发送到redis消息发布,客户端通过消息订阅即可实时收到报警日志。同时使用loganalyzer进行日志的查询分析。