zabbix监控日志文件的实现原理


1. 日志文件监控原理

通过zabbix agentd程序按照zabbix server上配置的item更新时间间隔和规则去检索指定的日志文件,找出与定义的模式(pattern)相匹配的字符串(行),然后将其送给zabbix server进行分析处理,zabbix
server根据预先设置的trigger及时提供预警信息。 不对日志信息进行过滤直接送给zabbix server也行,但明显不合适。

2. 监控日志文件的相关细节

监控日志文件的要点:

  • 当使用logrt时,zabbix server和agent会对日志文件的大小和最后修改时间进行追踪,分别对应不同的counter。
    • agent内部在Unix/GNU/Linux中使用inode number,在MS Windows中使用文件索引,以及日志文件的前512字节的MD5 sum值来追踪文件。文件在切割时这些信息会改变。
  • 在Unix/GNU/Linux系统中会假定文件的inode number可以用来追踪文件。
  • 在Windows系统上不同的文件系统使用不同的追踪方式。
    • NTFS文件系统上使用64位的文件索引。
    • ReFS(Windows Server 2012)上使用128位的文件ID。
  • 日志文件的inode number,文件索引和MD5 sum都只由zabbix agent收集,它们不会传递给server,当zabbix_agentd停止的时候,它们会丢失。
  • 不要使用touch指令修改日志文件的最后修改时间, do not copy a log file with later restoration of the original name,其实就是不要对日志文件进行一些会改变其inode number的操作。否则会导致agent重新开始分析文件,会导致告警重复。
  • 如果有多个匹配的日志文件,zabbix agent只会分析最新的一个匹配的日志文件,如果最新的日志文件被删除了,会产生告警信息。
  • agent会从它上次停止的时间点开始读取日志文件。
  • server会将已经分析过的日志文件的字节数(the size counter)和最后的修改时间(the time counter)存储到zabbix database中,在agent刚启动或者收到某item之前是禁用或者不支持现在启用了时,发送给agent便于它从指定位置开始读取日志文件。
  • 无论何时当日志文件的大小变得比agent知道的要小时,the size counter会重置为0,然后agent会根据the time counter的记录开始读取日志文件。
  • 如果有多个匹配的文件,它们的最后修改时间相同时,agent会分析所有的文件,并避免跳过数据,或者分析相同数据2次。
  • zabbix agent按照定义的Update interval seconds时间间隔分析日志文件的新记录。
  • zabbix agent会一秒最多发送key中定义的maxlines行的日志文件给server,这个参数会覆盖agnetd配置文件中的MaxLinesPerSecond参数的配置。
  • 默认情况下,agent在一次检测中最多可以分析80条日志文件记录,并且发送最多20条匹配的记录给server。maxlines可以增加到4000,这样可以一次检测时发送1000条日志记录给server。
  • log和log.count的值总是被限制在agent send buffer size的50%。所以maxlines会被一次发送完成,agent的BufferSize参数最少为maxlines x2。
  • 日志文件记录超过了256kB时,剩下的部分将会被忽略。(应该是文件的增量?)
  • logrt匹配置日志文件名时,其路径不能使用正则表达式匹配,只能用正则表达式匹配文件名。
  • logr[] item找不到的日志文件,不会标示item为NOTSUPPORTED。读取日志文件发生错误会以警告信息记录到agent的日志中,但也不会标示这一item为NOTSUPPORTED。
  • zabbix agent的日志文件,对查找log[]或logrt[] item变得NOTSUPPORTED时很有帮助。只要agent日志文件不设置在Debuglevel=4时,zabbix可以监控agent日志文件。被标示为NOTSUPPORTED的item在item中查看会有显示,在Latest data中查看时该item会显示为灰色。
  • 如果server(proxy)和agent的通信中断,对于日志文件的检测将会停止,但通信恢复后,检测也会恢复,同时继续从之前检测过的位置开始检测,不会漏掉匹配的信息,只不过会延后。
  • server(proxy)和agent通信中断,agent它也会保持和日志文件的联系。
  • maxdelay如果保持默认(maxdelay=0),当server和agent通信中断恢复后,agent会将之前log.count和logrt.count计数和新匹配的计数一起发送给server。
  • maxdelay如果大于0,且log file没有行被跳过,则和上面一样将新旧count一起发送给server,如果log file有行被跳过,则之前的count结果将会被丢弃。

3. 日志文件监控类型

3.1 常用的日志监控item key类型

  • log[/path/to/file/file_name,,,,,,]
  • logrt[/path/to/file/regexp_describing_filename_pattern,,,,,,]
  • log.count[/path/to/file/file_name,,,,,]
  • logrt.count[/path/to/file/regexp_describing_filename_pattern,,,,,]

3.2 key参数的含义

  • /path/to/file/file_name表示日志文件的绝对路径。
  • regexp表示用于匹配特定字符串的正则表达式,如果留空会将整个日志文件记录发给server。
  • encoding表示日志文件记录的编码格式,一般留空,使用日志文件的默认格式。
  • maxproclines表示agent一次可以发送最多多少条日志记录给server。
  • output表示只将与正则表达式匹配的字符串发给server,而非整行记录。
  • maxdelay这一参数用于允许跳过日志中一些陈旧的记录,以找到最新的日志记录,这个跳过时长即为maxdelay。这有可能会导致忽略了一些重要日志。所以谨慎使用,一般保持默认值0即可。
  • mode表示处理数据的模式,默认为all,也可以是skip,表示跳过老数据。

3.3 监控不同类型的日志文件

  • log用于监控日志文件名称不会变化的场景。
  • logrt用于监控日志文件名会变化的场景,如会自动切割的带有日期的文件名。
  • count用于统计相应日志文件中含有匹配字符的日志行数。

4. 日志文件监控item参数选择及含义

字段 选择及含义
Type Zabbix agent(active),让agentd主动上报信息
Type of information log和logrt时选择Log,log.count和logrt.count时选择numeric(unsigned)
Update interval in sec 定义agnet检测日志文件的间隔时长,检测出日志文件的变化
Log time format 用字母yMdhms分别表示年月日时分秒,用字符p和:代表占位符,当日志的时间戳有空格或者其它item里表示不出来的时间日期时可以用它们代替,如表星期的Mon,直接用ppp代替即可

5. 小结

使用zabbix监控日志文件,把握两个要点:

  • 确保zabbix对要监控的日志文件有读取权限。
  • 监控item配置正确。

你可能感兴趣的:(zabbix监控日志文件的实现原理)