小白踩坑Zabbix logrt[]监控日志文件关键句

逐渐更新

一、服务器配(置简单带过,网上教程很多)

  1. 服务器RHEL8

  1. zabbix server端:版本5.4.9。别人配好了,端口防火墙开好了,我直接拿来用,怎么配置的不知道...

  1. zabbix agent端:版本5.4.4。自己配制的,但是端口防火墙是已经就开好了的

agent端服务器没连公网,无法通过命令直接安装,我去别人装好了agent的服务器上拷贝了rpm文件运行了一把。我觉得是没装上,但是启动服务居然启动成功了?!

按照网上教学简单配置了conf文件,把agent设置成Active

按照别人已经添加好的Host和网上教学添加了Host

坑:权限(zabbix没权限进入log文件夹读取log)

填坑:用了以下这位大哥的方法成功解决

项目采坑日志——zabbix agent执行脚本,提示 Permission denied http://t.csdn.cn/2cdLc

二、Zabbix页面端配置(没有Admin权限

暂时只用了logrt[],只说logrt[],其他不会,用到的时候再学吧...

regexp,AKA regular expression,正则表达式,坑了我了,由于没有Zabbix页面端admin权限就没法使用zabbix自带的正则表达式test功能,就只能蒙着来(主要还是不会,不然两秒钟也就写完了),正则表达式具体怎么写这里就不赘述了,网上一搜一大把,还有在线工具可以用,学起来就还挺方便。

首先看logrt[]模板:

logrt[file_regexp,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>,<persistent_dir>]

就不逐一解释每个参数都什么意思了,zabbix官网上有。

坑一:item的too many parameters

填坑一:比如agent端5.4.4最多支持9个参数,由于手残多敲了一个逗号,导致变成了10个参数,然后就会有这个红“i”出现在info栏,鼠标放上面就会有too many parameters。注意检查agent版本可支持的参数是什么有多少个。

如果你写了<encoding>参数又写了<options>参数,然后这两个参数之间的参数都留默认值,那么,就要把这两个参数之间的“,”都敲出来!具体参数留空即可。

比如:logrt[file_regexp,regexp,encoding,,,,,options]

如果你写了<encoding>参数然后后面所有参数都要留默认值那么这个参数后面的“,”就都不用敲出来!

比如:logrt[file_regexp,regexp,encoding]

如果你没按照这个规则写,并且“,”写多、少了,都有可能出现too many parameters的红i

坑二:正则表达式的双引号“”

填坑二:如果你在可以使用正则表达式的参数里没有用到正则表达式则可以不用把参数放在双引号“”里。

比如:logrt[/home/zabbix32/test.log,error]

如果你在可以使用正则表达式的参数里使用了正则表达式则必须把参数放在双引号“”里。

比如logrt["/home/zabbix32/test[0-9].log","large result buffer allocation.*Entries: ([0-9]+)"]

总结起来一个字就是,file_regexp,<regexp>那个用了正则表达式那个就“”起来,没用就不“”。

坑三:正则表达式的空格

填坑三:针对<regexp>这个参数,在不用正则表达式的情况下是可以直接识别空格这个符号的。

比如logrt["/home/zabbix32/test[0-9].log",large result buffer allocation]

这里zabbix会去log的每一行里找large result buffer allocation这段话进行匹配并将整行返回给你

比如的比如This is a large result buffer allocation会匹配成功并返回整行

比如的比如large result buffer allocation in memory 也会匹配成功并返回整行

比如的比如This is a large result buffer allocation in memory还会匹配成功并返回整行

总结,如果需要匹配的关键字只有单纯的一句话,就不用像我似的花一个来小时查怎么用正则表达式写空格了。直接把句子写出来就行了...

坑四:正则表达式匹配多行

填坑四:例如需要匹配log内如下文本,注意单词之间都是用空格隔开的,然后DOWN之后还有多个空格,然后才是新启一行

server1 api1 DOWN

server2 api2 DOWN

server3 api3 DOWN

server4 api4 DOWN

server5 api5 DOWN

一次性匹配所有行的正则表达式为:

api1.*DOWN.*\n.*api2.*DOWN.*\n.*api3.*DOWN.*\n.*api4.*DOWN.*\n.*api5.*DOWN

其中\n表示新起一行然后.*表示通配符,其他都是关键字了

我首先尝试了匹配api1.*DOWN与api2.*DOWN与api3.*DOWN... ...但经过多方查证后正则表达式内没有单独表示”与“的通配符,所以需要换个角度思考。

坑五:item正则表达式无法返还多行内容

填坑五:如坑四所说,经过正则表达式在线工具测试的填坑四内的正则表达式可以匹配多行。但是,写在zabbix的item里之后,latest data里没有任何返回值。虽然暂时没有查到任何资料明确表示item的返回值无法将匹配到的多行内容返还,但是测试结果的确是就算在保存item时没有报错提示说正则表达式写的有问题,但是latest data返还值是空的。估计可以通过使用user parameters来返还多行?还没试,不知道。

·填坑五:书接上文,我监控的APP需要设置crontab跑一个checkstatus.sh,.sh内用>>将checkappstatus命令结果输出到一个txt文件内。来了来了,开始了啊~checkappstatus命令给的结果是多行的,如坑四。我的想法是通过item一次性返还所有行的内容,然后通过trigger加以分析并作出对应action。结果踩进了坑五。在zabbix官网和Forum和support翻阅各种资料,除了创建多个item分别匹配多行,没人给出更好的方法,甚至有个大哥在一个十年前的帖子里回复说“这都十年了啊!还这德行”,我心一凉,这咋办呢这?!突然之间,天昏地暗,世界可以突然什么都没有。我想起了...可以在.sh里输出到txt的时候把命令结果转换到同一行。又是一痛搜索,发现了tr,可以将换行符\n替换为其他字符,然后输出的结果就都挤在一行里了。再创建一个item随便匹配这一行里随便那个固定的内容并返回,这样就实现了内个Forum里十年来都没解决的问题。同时也填上了一次返回“多行”内容这个坑。

坑六:触发器find表达式触发Problem后不自动关闭

填坑六:在触发器的Expression内使用了History functions中的find()表达式find(logrt["/test/key",error],10m,"like","error")=1,我对该表达式的理解是,从现在开始往前10min之内,如果在logrt["/test/key",error] item内匹配到error关键字就触发problem。该触发器的OK event generation选择了Expression,根据Expression选项在zabbix官网文档内的解释“OK events are generated based on the same expression as problem events”,我对该解释的理解为,如果Expression内的表达式的整体为True时,触发problem,为False时,关闭problem。我对该触发器的整体理解为,从现在开始往前10min之内,如果在logrt["/test/key",error] item内匹配到error关键字就触发problem,在problem触发后如果我晾着这个problem不管,随着时间的推移,当系统根据OK event generation选项判定匹配到的error关键字是出现在第11min之前的时候,就会自动关闭该problem。然鹅...真实情况是系统并没有自动关闭该problem,每次都要手动去点啊天哪... 在无数的无奈的叹息中,当我再一次打开这个触发器想试试还有没有其他办法时,显示器内一道耀眼的闪电闪瞎了我的狗眼,与此同时nodata(logrt["/test/key",error],10m)=1闪亮登场,这个小家伙表示它从现在开始往前10min之内如果没发现logrt["/test/key",error] item有任何更新就会帮我关掉problem的想法,我觉得这小家伙人真好,就把小家伙安排到了OK event generation的Recovery expression选项的Recovery expression里,结果problem成功自动关闭了(虽然是在第14min的时候)。我很开心,就跑来写CSDN了(我今天废话真多)。

仔细一想应该是我item和trigger使用逻辑有些许问题?正常都应该是用item读取log内的全部内容,然后通过触发器的problem expression匹配关键字并触发problem。我现在的情况是,用item读取log并匹配关键字,然后触发器再匹配一次item已经匹配好了的关键字然后再触发problem。这简直就是脱了裤子,然后再脱了内裤,再放*。不过唐朝时有句古话说的好,“代码什么的能跑起来就行了,不用在乎那么多细节。”

【待更新】坑七:使用其他item内抓取的关键字自动关闭problem

坑n:待定

小技巧一、zabbix内生成关键字的正则表达式

在写item里的logrt key的时候如果不确定需要匹配的关键字的正则表达式怎么写,可以先去triggers里新建一个trigger,然后在expression区域选择add,我个人一般会在condition弹出窗口内的function下拉菜单内选择find(),然后再V框里输入需要生成正则表达式的关键字,其他选项随便写,然后点insert,这时候zabbix就会自动生成关键字的正则表达式,然后拿着这个正则表达式贴在item的key里就好了,当然我知道zabbix自带正则表达式测试功能,但是我这不没有权限用不了么,只能曲线一把了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Zabbix监控 MySQL 数据库,需要进行以下步骤: 1. 安装 Zabbix Agent 在要监控的 MySQL 服务器上安装 Zabbix Agent。你可以从 Zabbix 官网下载适合你系统的安装包,或使用包管理器进行安装。 2. 安装 MySQL 监控插件 在 Zabbix Server 上安装 MySQL 监控插件。你可以从 Zabbix 官网下载适合你版本的插件。 3. 配置 MySQL 监控插件 在 Zabbix Server 上编辑插件配置文件(mysql.conf),配置 MySQL 数据库的连接信息和监控项。 例如: ``` UserParameter=mysql.ping, mysqladmin -uroot ping | grep -c alive UserParameter=mysql.version, mysql -V UserParameter=mysql.status[*], mysqladmin -uroot -p$1 status $2 | awk '{print $$NF}' UserParameter=mysql.size[*], mysql -uroot -p$1 -e 'SELECT table_schema "$2", Round(Sum(data_length + index_length) / 1024 / 1024, 2) "Size (MB)" FROM information_schema.tables WHERE table_schema="$2";' | grep -v Size UserParameter=mysql.qps, mysqladmin -uroot -p$1 status | cut -f9 -d':' | awk '{print $$1}' ``` 这些配置项允许 Zabbix Agent 在远程 MySQL 服务器上执行命令并获取数据。 4. 添加 MySQL 监控项 在 Zabbix Server 上添加 MySQL 数据库监控项。你可以通过 Zabbix Web 界面添加监控项,包括: - MySQL 数据库版本 - MySQL 数据库状态 - MySQL 数据库大小 - MySQL 数据库 QPS(每秒查询数) 5. 创建 MySQL 监控模板 在 Zabbix Web 界面上创建 MySQL 监控模板,并将监控项添加到模板中。 6. 将 MySQL 主机关联到监控模板 将要监控的 MySQL 主机关联到 MySQL 监控模板。 完成以上步骤后,你就可以在 Zabbix Web 界面上查看 MySQL 数据库的监控数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值