Zabbix可以集中监控和分析 支持/不支持日志轮询的日志文件。
当日志文件包含某些字符串或字符串模式时,可以使用通知来警告用户。
要监控日志文件,前提:
确保在 代理配置文件 中已设置:
配置一个日志 监控项
所有标有红色星号的为必填字段。
具体日志监控项的输入:
| Type | 这里选择 Zabbix agent (active) |
| Key | 设置: log[/path/to/file/file_name,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>] or logrt[/path/to/file/regexp_describing_filename_pattern,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>] Zabbix agent将通过内容正则表达式过(如果存在的话)滤日志文件的条目。 如果只需要匹配行的数量,设置: log.count[/path/to/file/file_name,<regexp>,<encoding>,<maxproclines>,<mode>,<maxdelay>] or logrt.count[/path/to/file/regexp_describing_filename_pattern,<regexp>,<encoding>,<maxproclines>,<mode>,<maxdelay>]. 确保zabbix用户具有文件的读写权限,否则监控项将被设置为“不支持”状态。 更多细节,请在 Zabbix agent监控项的键值章节中查看 log, log.count, logrt 和 logrt.count 的条目。 |
| Type of information | 在这里,log和logrt选择Log,log.count和logrt.count选择Numeric (unsigned). 如果可选使用 output参数,则可以选择除“日志”之外的适当类型的信息.注意,选择非日志类型的信息将导致本地时间戳的丢失. |
| Update interval (in sec) | 该参数定义了Zabbix代理检查日志文件中任何更改的频率。 将其设置为1秒将确保你能尽快的获得新记录。 |
| Log time format | 在此字段中,您可以选择指定解析日志行的时间戳的模式。 如果留空,则不会解析时间戳。 支持的占位符: * y: 年 (0001-9999) * M: 月 (01-12) * d: 日 (01-31) * h: 小时 (00-23) * m: 分 (00-59) * s: 秒 (00-59) 例如, 从Zabbix agent日志文件中查看以下行: “ 23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2 (revision 11211).” 它以PID的六个字符位置开始,后面跟日期、时间和行的其余部分。 此行的日志时间格式为 “pppppp:yyyyMMdd:hhmmss”。 注意, “p”和“:”字符只是占位符,而且只能是“yMdhms” |
* 服务器和代理将监视日志的大小和最后修改时间(对于logrt)的跟踪保存在两个计数器中. 此外:
有时我们可能只想从目标文件中提取感兴趣的值,而不是在找到正则表达式匹配时返回整行。
自Zabbix 2.2.0以后,日志监控项能够从匹配的行中提取所需的值。这是在通过“log”和“logrt”监控项中附加 output* 参数来实现的。 使用“output”参数可以指示我们可能感兴趣的匹配的子组。 例如 log[/path/to/the/file,“large result buffer allocation.*Entries: ([0-9]+)”,,,,\1] 应该可以返回在以下内容中找到的条目数: Fr Feb 07 2014 11:07:36.6690 */ Thread Id 1400 (GLEWF) large result buffer allocation - /Length: 437136/Entries: 5948/Client Ver: >=10/RPC ID: 41726453/User: AUser/Form: CFG:ServiceLevelAgreement Zabbix只返回数字的原因是因为这里的'output'是由\1定义的,指的是第一个也是唯一的想要的子组:([0-9]+) 而且,通过提取和返回数字的能力,该值可用于定义触发器。 === 使用maxdelay参数 === 日志监控项中的“maxdelay”参数允许忽略日志文件中的一些较旧的行,以便在“maxdelay”秒内获取最近分析的行。 <note warning>指定'maxdelay'>0可能导致 忽略重要的日志文件记录和错过的报警** ,只有在必要时才使用。</note>
默认情况下,日志监控项将跟踪出现在日志文件中的所有新行。 但是,有些应用程序在某些情况下开始在其日志文件中写入大量的消息。例如,如果数据库或DNS服务器不可用,则此类应用程序会向日志文件中注入数千条几乎相同错误消息,直到恢复正常为止。默认情况下,所有这些消息将被完全分析,并将匹配的行发送到配置为“log”和“logrt”监控项的服务器上。
内置防过载保护包括一个可配置的“maxlines”参数(保护服务器免受太多传入匹配的日志行)和4*'maxlines限制(保护主机CPU和I/O免受代理在一次检查中过载)。不过,内置保护有两个问题。 首先,向服务器报告大量潜在的不太有用的消息,消耗数据库中的空间。 第二,由于每秒分析的行数有限,代理可能会滞后于最新的日志记录数小时。你可能希望尽快了解日志文件中的当前情况,而不是检查数小时的历史记录
这两个问题的解决方案都是是使用了'maxdelay'参数。 如果指定'maxdelay'> 0,在每次检查处理字节数时,将测量剩余字节数和处理时间。 代理根据这些数字,计算估计的延迟 - 分析日志文件中所有剩余记录所需的秒数。
如果延迟不超过“maxdelay”,那么代理将像往常一样继续分析日志文件。
如果延迟大于“maxdelay”,那么代理将通过“跳转”到一个新的估计位置来忽略日志文件的一个块,以便在“maxdelay”秒内分析剩下的行。
请注意,代理甚至不会将忽略的行读入缓冲区,而是计算要在文件中跳转的大致位置。
跳过日志文件行的事实记录在代理日志文件中,如下所示:
14287:20160602:174344.206 item:"logrt["/home/zabbix32/test[0-9].log",ERROR,,1000,,,120.0]" logfile:"/home/zabbix32/test1.log" skipping 679858 bytes (from byte 75653115 to byte 76332973) to meet maxdelay
“to byte”数字是近似的,因为在“跳转”之后,代理将文件中的位置调整到日志行开头,日志行可能在文件中更远或更早。
根据增长速度与分析日志文件的速度的不同,你可能会看到没有“跳转”、少有或经常“跳转”、大或小的“跳转”,甚至每次检查中的“跳转”都很小。系统负载和网络延迟的波动也会影响延迟的计算,因此“跳转”可以跟上“maxdelay”参数。
不推荐设置 'maxdelay' <'update interval'(这可能会导致频繁的“jumps”)
带有“copytruncatetable”选项的“logrt”假定不同的日志文件有不同的记录(至少它们的时间戳不同),因此初始块的MD5(最多512字节)将不同。两个具有相同的MD5初始块和的文件意味着其中一个是原始块,另一个是副本。
使用“copytruncatetable”选项的“logrt”将努力正确处理日志文件副本,而不报告副本。但是,与logrt[]监控项更新间隔相比,生成具有相同时间戳的多个日志文件副本、日志文件旋转频率更高、不建议频繁重新启动代理。代理试图合理地处理所有这些情况,但是在所有情况下都不能保证良好的结果。
来自log[]和logrt[]监控项的每个匹配行以及每个log.count[]和logrt.count[]监控项检查的结果都需要代理发送缓冲区中指定的50%区域中的空闲时隙。缓冲区元素定期发送到服务器(或代理服务器),缓冲区可以再次释放。
虽然代理发送缓冲区中的指定日志区域中有空闲时隙,并且代理和服务器(或代理服务器)之间的通信失败,但是日志监控结果在发送缓冲区中累积。这有助于缓解短暂的通信故障。
在较长的通信失败期间,所有日志槽都被占用,并采取以下操作: