码迷,mamicode.com
首页 > 其他好文 > 详细

zabbix优化之LLD Filter Multi-macro

时间:2014-08-05 23:00:01      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:zabbix   zabbix lld   zabbix filter multi-macro   

提出问题:

    zabbix对文件系统的监控是通过LLD实现的,zabbix首先通过Discovery rule发现所有的文件系统名称和类型,如下:

shell# zabbix_get -s 127.0.0.1 -k vfs.fs.discovery
{
       "data":[
              {
                     "{#FSNAME}":"/",
                     "{#FSTYPE}":"rootfs"
              },
              {
                     "{#FSNAME}":"/proc",
                     "{#FSTYPE}":"proc"
              },
              {
                     "{#FSNAME}":"/sys",
                     "{#FSTYPE}":"sysfs"
              },
              {
                     "{#FSNAME}":"/dev",
                     "{#FSTYPE}":"devtmpfs"
              },
              {
                     "{#FSNAME}":"/dev/pts",
                     "{#FSTYPE}":"devpts"
              },
              {
                     "{#FSNAME}":"/dev/shm",
                     "{#FSTYPE}":"tmpfs"
              },
              {
                     "{#FSNAME}":"/",
                     "{#FSTYPE}":"ext4"
              },
              {
                     "{#FSNAME}":"/proc/bus/usb",
                     "{#FSTYPE}":"usbfs"
              },
              {
                     "{#FSNAME}":"/boot",
                     "{#FSTYPE}":"ext4"
              },
              {
                     "{#FSNAME}":"/data",
                     "{#FSTYPE}":"ext4"
              },
              {
                     "{#FSNAME}":"/proc/sys/fs/binfmt_misc",
                     "{#FSTYPE}":"binfmt_misc"
              }
       ]
}

    然后通过在Discovery rule中配置的宏过滤规则(Filter Macro),把不需要监控的文件系统类型过滤掉,见下图。

bubuko.com,布布扣

    上图是zabbix默认的配置,通过宏{#FSTYPE}和正则表达式“File systems for discovery”过滤文件系统类型。

bubuko.com,布布扣

    现在问题来了,如果我想同时根据{#FSNAME}这个宏过滤掉一些我不关心的文件系统,该怎么办?

分析问题:

    zabbix在Discovery rule中只能过滤单个宏,不支持多宏过滤的写法,因此上述需求就无法实现了。

    但是通过修改zabbix底层C代码,可以支持多宏过滤的。

规定参数写法:

    Macro 多个宏变量之间用逗号分隔;

    Regexp 正则表达式名前面加‘@‘,多个表达式之间也用逗号分隔;

    相同位置的宏变量和正则表达式是对应的,即第一个宏对应第一个正则表达式,第二个宏对应第二个正则表达式...

    填写方式如下:

    bubuko.com,布布扣

解决方法:

    建议先在自己的测试环境中修改,测试成功后再应用到生产环境。   

    第一步,下载附件,改名为lld.c。如果你的zabbix版本是2.2.5,下载源码安装包,解压:

shell# tar xvzf zabbix-2.2.5.tar.gz

    第二步,把上面下载的lld.c文件覆盖掉zabbix原始lld.c文件,zabbix2.2.2及以上版本可直接覆盖:

shell# \cp lld.c zabbix-2.2.5/src/libs/zbxdbhigh/lld.c

    第三步,编译zabbix server:

shell# cd zabbix-2.2.5
shell# ./configure --prefix=/etc/zabbix --with-mysql --with-net-snmp --with-libcurl --with-openipmi --with-ssh2 --enable-server
shell# make

    没有报错的话,编译成功~见下图

bubuko.com,布布扣

    第四步,停掉zabbix server服务,备份zabbix_server主程序

shell# /etc/init.d/zabbix-server stop
shell# cp /usr/sbin/zabbix_server /usr/sbin/zabbix_server.bak

    第五步,将编译好的zabbix_server覆盖原zabbix_server主程序,启动zabbix server服务

shell# cp src/zabbix_server/zabbix_server /usr/sbin/zabbix_server
shell# /etc/init.d/zabbix-server start

测试结果:

    第一步:只过滤{#FSTYPE},配置Discovery rule如下:

bubuko.com,布布扣

监控间隔设置120秒,"Keep lost resources period"设置为0,方便观察结果。

"Filter Macro"填写"{#FSTYPE}";"Regexp"填写"@File systems for discovery"。

查看监控项组Filesystems下的监控项:

bubuko.com,布布扣

    第二步:同时过滤{#FSTYPE}和{#FSNAME},使{#FSNAME}过滤掉boot目录

    先创建正则表达式"Filter file system name":

bubuko.com,布布扣

    配置Discovery rule:

bubuko.com,布布扣

"Filter Macro"填写"{#FSTYPE},{#FSNAME}";

"Regexp"填写"@File systems for discovery,@Filter file system name"。

注意:这里是英文的逗号‘,‘。

大约120秒后,查看监控项组Filesystems下的监控项:

bubuko.com,布布扣

发现boot目录已经被过滤掉了。测试完成。

=====================================================================================================

附:lld.c主要修改部分截图,右侧是优化后的

bubuko.com,布布扣

本文出自 “启程-Linux技术博客” 博客,请务必保留此出处http://qicheng0211.blog.51cto.com/3958621/1536072

zabbix优化之LLD Filter Multi-macro,布布扣,bubuko.com

zabbix优化之LLD Filter Multi-macro

标签:zabbix   zabbix lld   zabbix filter multi-macro   

原文地址:http://qicheng0211.blog.51cto.com/3958621/1536072

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!