之前博客写过nginx日志错误数量监控,达到触发器阈值就报警,最近出了一个事故,数据库主库磁盘满了,导致主从异常,线上好多业务都down,所以数据库这块的监控尤其重要,下面做个mysql log 监控,如果匹配到异常错误,就输出这条错误日志。


zabbix版本:3.0.4

mysql5.6.29 二进制安装


做法如下:

使用zabbix 系统自带的模板就行:


新建一个模板,随便起个标识的名字(mysql error log)

wKioL1kTy7-jpVRfAACU_EctOtk786.png


在对应的模板中新建一个应用集,名字也叫(mysql error log)

wKiom1kTzEPgAOsKAAA4v5nLRMo385.png

在对应的模板中新建一个监控项:名称(mysql error log) 类型:zabbix客户端主动式  键值:log[/var/log/mysqld.log,ERROR]  多个错误的话可以尝试log[/var/log/mysqld.log,"(ERROR|error|not"]等怎么高兴怎么来;信息类型:日志。

wKioL1kTzKHTGWZYAABpEpXOeDY675.png

新建一个触发器:

名称:mysql log 异常

表达式:添加表达式,到模板里找到这个监控项就好了。

#添加匹配错误字符串的的正则表达式。

wKiom1kTzOahru7WAAB4nuqguFk261.png

#添加数据匹配正则。


wKioL1kTzPiBPpZwAABuc-9KRm0624.png

#添加触发器:

wKiom1kTzL7SeQ2VAABvfkqkbGw229.png


正则表达式:

{mysql error log:log[/var/log/mysqld.log,ERROR].str(ERROR)}=1 and {mysql error log:log[/var/log/mysqld.log,ERROR].nodata(60)}=0


这段正则的意思是:匹配最新60s内的mysqld.log的日志,如果60s内有新的日志匹配到含有ERROR字符串的就触发,否则就不触发,防止60s内没有新数据zabbix 一直检测老数据触发。


效果如下:

wKiom1kTzZmgBRdfAABJLRdV7pA171.png