zabbix使用内置监控项实现日志监控告警
# zabbix 5.0 监控日志
除了灵活的使用自定义监控项的方式,这里使用zabbix自带的日志监控。本文使用的是zabbix-5.0版本
# 使用条件
项目 | 要求 |
---|---|
zabbix_agent | 配置主动式参数 |
时间同步 | zabbix_server和zabbix_agent |
监控项类型 | zabbix客户端(主动式) |
被监控日志文件 | zabbix用户需要可读权限 |
注意点:
其中,zabbix_agent.conf内关于zabbix客户端(主动式)的配置有以下2个
ServerActive=192.168.1.101 #填写zabbix_server的地址
Hostname=Zabbix server #填写本机主机名,要求一套监控系统内唯一,且要和web端配置的主机名一项保持一致。建议填写zabbix_agent的ip地址
日志文件的权限问题,可以用这条测试
sudo -u zabbix cat /usr/local/nginx/logs/access.log
# 监控项说明
# 内置的监控项
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>]
日志文件监控。返回日志,是一条记录一行日志内容
log.count[fil,<regexp>,<encoding>,<maxproclines>,<mode>,<maxdelay>,<options>]
监控日志文件行数统计。返回整数
logrt[file_regexp,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>]
日志文件监控与轮转服务。返回日志
logrt.count[file_regexp,<regexp>,<encoding>,<maxproclines>,<mode>,<maxdelay>,<options>]
日志文件监视中匹配行的计数与日志轮换支持。 返回整型
2
3
4
5
6
7
8
9
# 参数说明
- file或file_regexp
日志文件所在的路径或者绝对路径名,后者可以使用正则匹配分割日志,比如/usr/local/nginx/logs/access.log*
- regexp
匹配正则表达式,可以使用关键词,比如ERROR
- encoding
在Linux/unix系统下默认编码为UTF-8,在Windows系统下默认编码为ANSI
- maxlines
每次给zabbix-server或者zabbix-Proxy发送的日志的最大行数,此参数会高于zabbix-agent.conf中的MaxLinesPerSecond参数值,通过此参数,可以控制一次发送的日志的数据条数,如果发送次数过多,可能会对zabbix-agnet的负载和I/O有很大的影响
- mode
- all
为默认参数,表示匹配所有的日志,包括以前存的日志也会进行匹配
- skip
表示跳过已存在的日志数据,只有新的日志才会进行匹配,一般使用此项
- output
表示匹配输出的正则表达式,\1~\9表示返回的匹配的第几个字符串,\0表示返回匹配的全部字符串,全部输出为默认值
- maxdelay
以秒为单位的最大延迟,用于忽略老的日志数据,及时获取当前的日志数据。(4.0+)当处理日志过多,在更新周期内达到maxlines的发送上限,但还有日志未发送时,会导致大量堆积,在严重的情况下,会造成日志处理速度跟不上,使用此参数忽略过期的日志发送0是默认值,永远不会忽略日志文件行输入可以是浮点数(float)>0.0,忽略较旧的行,以获得在maxdelay秒内分析最新行,会丢弃在规定时间内的无法发送的数据
- options
日志轮询、切割方式(4.0+)rotate,日志轮询、切割,默认值copytruncate,先拷贝文件,然后清空日志的轮询方式,copytruncate不能与maxdelay一起使用,如使用此参数,maxdelay必须为0或者未指定[size=12.0000pt]
# 使用实例
# 新建监控项
logrt[/tmp/error.log,"error",,,,skip,,]
# 表示监控的日志文件为/tmp/error.log,正则匹配关键词error,模式选择跳过旧日志,不使用的其他参数需要留空
2
# 查看最新数据
通过echo模拟日志写入,之后根据【更新间隔】时间的不同,可以在【监控】–【最新数据】内看到模拟的报错信息
# 新建触发器
{192.168.1.100:logrt[/tmp/error.log,"error",,,skip,,,].str(error)}=1
and
{192.168.1.100:logrt[/tmp/error.log,"error",,,skip,,,].nodata(60s)}=0
# 实测这样的表达式可以实现,日志内出现error关键词即告警,在60秒内未收到新的error信息视为故障恢复
2
3
4
5