要监控日志,必须使用主动模式,那么,什么是主动模式?什么是被动模式呢?html
一、主动模式和被动模式node
主动模式web
主动模式通信过程:
● Agent打开TCP链接(主动检测变成Agent打开)
● Agent向Server请求items检测列表
● Server返回items列表
● Agent 处理响应
● 关闭TCP链接
● Agent开始收集数据正则表达式
主动检测提交数据过程
● Agent创建TCP链接
● Agent提交items列表收集的数据
● Server处理数据,并返回响应状态
● 关闭TCP链接算法
0、Zabbix Server和Zabbix Agent会追踪日志文件的大小和最后修改时间(对于logrt),而且分别记录在字节计数器和最新的时间计数器中。数据库
一、Agent会从上次读取日志的地方开始读取日志。
二、已经分析的字节数和最新时间计数器的数据会被记录在Zabbix数据库,而且发送给Agent,这样可以保证Agent从上次中止的地方开始读取日志。
三、当日志文件大小小于Agent字节计数器中的数字时,字节计数器会变为0,从头开始读取文件。服务器
四、若是目录中存在多个匹配文件,且最后修改时间相同,则Agent会尝试以相同的修改时间对全部日志文件进行正确分析,并避免跳过数据或分析相同的数据两次(尽管有时不能保证)。Agent不承担任何特定的日志文件轮询方案。网络
当提供具备相同修改时间的多个日志文件时,Agent将以字典顺序降序处理它们。 所以,对于某些轮询方案,日志文件将按原始顺序进行分析。对于其它轮询方案,原始日志文件顺序将不会被执行,这可能致使以更改顺序报告匹配的日志文件记录(若是日志文件的上次修改时间不一样,则不会发生问题)。
五、全部符合配置的文件,都会被监控。
六、一个目录下的多个文件若是修改时间相同,会按照字母顺序来读取。
七、到每一个Update interval的时间时,Agent会检查一次目录下的文件。
八、Zabbix Agent每秒发送日志量,有一个日志行数上限,防止网络和CPU负载太高,这个数字在zabbix_agentd.conf中的MaxLinePerSecond。测试
九、要找到所需的字符串,Zabbix将处理比MaxLinesPerSecond中设置的新行多4倍。 所以,若是log[]或logrt[]监控项的更新间隔为1秒,则默认状况下,Agent将分析小于80个日志文件记录,并在一次检查中向Zabbix服务器发送不超过20个匹配记录。经过在Agent配置文件中增长MaxLinesPerSecond或在监控项Key中设置maxlines参数,能够在一次检查中将限制最多增长4000个分析的日志文件记录和1000个匹配记录发送到Zabbix服务器。若是更新间隔设置为2秒,则一次检查的限制将被设置为更新间隔1秒的2倍。编码
十、此外,日志和日志计数值始终限于代理发送缓冲区大小的50%,即便其中没有非日志值。 所以,为了在一个链接(而不是几个链接)中发送最大值,代理BufferSize参数必须至少为maxlines x 2。
十一、对大于256kB的日志文件记录,只有第一个256kB与正则表达式匹配,其他的记录将被忽略。 可是,若是Zabbix代理在处理长记录时中止,代理内部状态将丢失,而且能够在代理从新启动后再次分析不一样的长记录。
十二、“\”路径分隔符的特殊注意事项:若是file_format是“file\.log”,则不该该有“file”目录,由于不可能明确地定义是否转义了“.”,以及是否为第一个文件名符号。
1三、仅在文件名中支持logrt的正则表达式,不支持目录正则表达式匹配。
1四、在UNIX平台上,若是要找的日志文件的目录不存在,则logrt[]监控项将变为NOTSUPPORTED。
1五、在Microsoft Windows上,若是目录不存在,则监控项将不会变为NOTSUPPORTED(例如,若是目录在监控项Key中拼写错误)。
1六、没有用于logrt[]监控项的日志文件不会使其NOTSUPPORTED。读取logrt[]监控项的日志文件的错误将做为告警记录到Zabbix代理日志文件中,但不要使监控项NOTSUPPORTED。
1七、Zabbix代理日志文件能够帮助你找出为何log[]或logrt[]监控项成为NOTSUPPORTED。Zabbix能够监视其代理日志文件,除了在DebugLevel=4时。
1八、在logtr中,正则表达式只对文件名有效,对文件目录无效。
针对日志监控,zabbix在3.2之前有2个专门的监控项:log和logtr,在3.2之后新增了2个log.count和logtr.count。
log[/path/to/some/file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
logtr[/path/to/some/filename_format,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
◆/path/to/some/file:要监控的日志文件
◆ regexp:要匹配内容的正则表达式,或者直接写你要检索的内容也能够,例如我想检索带ERROR关键词的记录
◆ encoding:编码相关,留空便可
◆ maxlines:一次性最多提交多少行,这个参数覆盖配置文件zabbxi_agentd.conf中的’MaxLinesPerSecond’,这里优先级比配置文件里面的高,咱们也能够留空
◆ mode:默认是all,也能够是skip,skip会跳过老数据
◆ output:输出给zabbix server的数据。能够是\一、\2一直到\9,\1表示第一个正则表达式匹配出得内容,\2表示第二个正则表达式匹配得出的内容。
注意:
一、logtr的第一个参数是文件名的格式,能够是正则表达式,主要用于针对轮询或滚动日志使用,好比咱们平常的程序日志:gameserver.20180102.log、gameserver.20180103.log、gameserver.20180104.log......
二、无论新日志、老日志,只要他们有变动,zabbix都会监控。
三、只要配置了<regexp>,Zabbix会根据<regexp>的正则表达式来匹配日志中的内容。
四、必定要保证Zabbix用户对日志文件有可读权限,不然这个Item的状态会变成“unsupported”。
配置前,请确保Agent有以下两项配置
一、Hostname设定为Server建立主机是填写的Host name,必须一致
二、ServerActive设定为Server的IP
1、log[/path/to/some/file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
配置步骤
一、Web端配置监控项
二、Agent端配置Hostname
这里必定要和web端的主机名一致!!!!!!!!!
三、测试并查看结果
咱们这里是测试经过rz上传文件后,会在messages里面出现rz字符串。
查看最新数据:
2、logtr[/path/to/some/filename_format,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
配置步骤基本上和log同样。
一、配置监控项
二、查看结果
主动模式第一阶段:(请求items,并准备采集数据)
1.Agent向ServerActive机器发起请求
20674:20160728:155754.489 active checks #1 [getting list of active checks]
20674:20160728:155754.489 In refresh_active_checks() host:'192.168.1.100' port:10051
20674:20160728:155754.490 sending [{
"request":"active checks",
"host":"192.168.1.100",
"host_metadata":"Linux bgp-bjzw-zabbix-server02.xsjom.cn 2.6.32-431.20.3.el6.x86_64 #1 SMP Thu Jun 19 21:14:45 UTC 2014 x86_64"}]
2.ServerActive响应后,Agent得到从ServerActive返回的items列表
20674:20160728:155754.490 before read
20666:20160728:155754.493 collector [processing data]
20666:20160728:155754.493 In update_cpustats()
20666:20160728:155754.493 End of update_cpustats()
20666:20160728:155754.493 collector [idle 1 sec]
20674:20160728:155754.494 got [{"response":"success","data":[{"key":"log[/var/log/messages,charts,,,skip,]","delay":10,"lastlogsize":19499,"mtime":0}]}]
3.关闭TCP链接,准备收集数据
20674:20160728:155754.494 In parse_list_of_checks()
20674:20160728:155754.494 In disable_all_metrics()
20674:20160728:155754.495 In add_check() key:'log[/var/log/messages,charts,,,skip,]' refresh:10 lastlogsize:19499 mtime:0
20674:20160728:155754.495 End of add_check()
20674:20160728:155754.495 End of refresh_active_checks():SUCCEED
主动模式第二阶段:(agent提交items数据,ActiveServer处理并回应结果)
1.Agent获取itmes列表后,处理里面的items
20674:20160728:155754.495 active checks #1 [processing active checks]
20674:20160728:155754.495 In process_active_checks() server:'192.168.1.100' port:10051)
20674:20160728:155754.495 In process_logrt() is_logrt:0 filename:'/var/log/messages' lastlogsize:19499 mtime:0 error_count:0
20674:20160728:155754.496 In add_logfile() filename:'/var/log/messages' mtime:1469692670 size:19586
20674:20160728:155754.496 add_logfile() logfiles:0x282e540 logfiles_alloc:64
20674:20160728:155754.496 End of add_logfile()
20674:20160728:155754.496 setup_old2new: is_same_file(/var/log/messages, /var/log/messages) = 1
1.1.处理老的文件
20674:20160728:155754.496 process_logrt() old file list:
20674:20160728:155754.496 nr:0 filename:'/var/log/messages' mtime:1469692248 size:19499 processed_size:19499 seq:1 incomplete:0 dev:64768 ino_hi:0 ino_lo:652985 md5size:512 md5buf:b2f842e0e504b09c8cac18795a66bc93
1.2处理新的文件
20674:20160728:155754.496 process_logrt() new file list: (mtime:0 lastlogsize:19499 start_idx:0)
20674:20160728:155754.496 nr:0 filename:'/var/log/messages' mtime:1469692670 size:19586 processed_size:19499 seq:0 incomplete:0 dev:64768 ino_hi:0 ino_lo:652985 md5size:512 md5buf:b2f842e0e504b09c8cac18795a66bc93
1.3获取符合要求结果的数据值
20674:20160728:155754.496 In process_log() filename:'/var/log/messages' lastlogsize:19499 mtime: 0
20674:20160728:155754.497 In process_value() key:'192.168.1.100:log[/var/log/messages,charts,,,skip,]' value:'Jul 28 15:57:50 localhost rz[23429]: [root] charts.html/ZMODEM: 9976 Bytes, 102576 BPS'
20674:20160728:155754.497 In send_buffer() host:'192.168.1.100' port:10051 values:0/100
20674:20160728:155754.497 End of send_buffer():SUCCEED
20674:20160728:155754.497 buffer: new element 0
20674:20160728:155754.497 End of process_value():SUCCEED
20674:20160728:155754.497 End of process_log() filename:'/var/log/messages' lastlogsize:19586 mtime: 0 ret:SUCCEED
20674:20160728:155754.497 End of process_logrt():SUCCEED error_count:0
20674:20160728:155754.497 End of process_active_checks()
20674:20160728:155754.497 In get_min_nextcheck()
20674:20160728:155754.498 active checks #1 [idle 1 sec]
20666:20160728:155755.494 collector [processing data]
20666:20160728:155755.494 In update_cpustats()
20666:20160728:155755.494 End of update_cpustats()
20666:20160728:155755.495 collector [idle 1 sec]
1.4发送数据给ActiveServer
20674:20160728:155755.498 In send_buffer() host:'192.168.1.100' port:10051 values:1/100
20674:20160728:155755.499 JSON before sending [{
"request":"agent data",
"data":[
{
"host":"192.168.1.100",
"key":"log[\/var\/log\/messages,charts,,,skip,]",
"value":"Jul 28 15:57:50 localhost rz[23429]: [root] charts.html\/ZMODEM: 9976 Bytes, 102576 BPS",
"lastlogsize":19586,
"clock":1469692674,
"ns":497558898}],
"clock":1469692675,
"ns":498717648}]
2.ActiveServer回应收到数据,并返回状态 20674:20160728:155755.499 JSON back [{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000101"}] 20674:20160728:155755.499 In check_response() response:'{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000101"}' 20674:20160728:155755.500 info from server: 'processed: 1; failed: 0; total: 1; seconds spent: 0.000101' 20674:20160728:155755.500 End of check_response():SUCCEED 20674:20160728:155755.500 OK 20674:20160728:155755.500 End of send_buffer():SUCCEED 20674:20160728:155755.500 active checks #1 [idle 1 sec]