9-Zabbix自定义监控项
Zabbix 的监控功能强大,支持定制的自定义监控项,可以说能做到想监控什么就可以监控什么
以下实战案例中实现了对生产环境中各种资源的监控
自定义模版和监控项
之前对Linux系统的监控是使用系统内置的监控项,虽然 Zabbix 内置的模版及其包括的监控项已经很丰富,但实际生产中仍可能需要监控内置模版所不具有的特定的监控指标,可以通过自定义监控项实现
自定义模版和监控项实现过程
在Zabbix 被监控主机上编写自定义监控项的取值的脚本,并加执行权限
在Zabbix 被监控主机上的配置文件中添加自定义监控项,指定 key 和 对 key 赋值的脚本及参数
在Zabbix Server 上使用 zabbix_get 工具测试是否能取到自定义监控项信息
在Zabbix WEB 创建模版,在模版中添加自定义监控项
在Zabbix WEB 将模版关联至被监控的主机
导出自定义模版可以在其它Zabbix Server复用
https://share.zabbix.com/
自定义监控项
系统内置的监控项如下
https://www.zabbix.com/documentation/5.0/zh/manual/config/items/itemtypes/zabbix_agent
自定义监控项配置
监控项键值的格式
https://www.zabbix.com/documentation/5.0/zh/manual/config/items/item/key
客户端可以自定义监控项,在Zabbix Agent 配置文件添加内容,格式如下
#cat /etc/zabbix/zabbix_agentd.conf UserParameter=<key>,<shell command> Include=/etc/zabbix/zabbix_agentd.d/*.conf #或者创建独立的自定义文件 #cat /etc/zabbix/zabbix_agentd.d/*.conf UserParameter=<key>,<shell command>
key 必须整个系统唯一。Key名本身具有有限的允许字符范围,允许的字符是:
0-9a-zA-Z_-.
key使用 [*] 用于定义该key接受括号内的参数。参数需在配置监控项时给出;参数禁止使用下列字符:\ ’ ” ` * ? [ ] { } ~ $ ! & ; ( ) <>
Command:命令用于生成key对应的值。可以在命令中使用位置引用$1 … $9来引用监控项Key中的相应参数。Zabbix解析监控项Key的[]中包含的参数,并相应地替换$1,…,$9。$0会替换为完整的原始命令(在对$0,…,$9执行替换之前的命令)运行。不管位置参数($0,…,$9)是用双引号( “ )还是单引号( ’ )括起来,都会解析位置引用
zabbix_get -s 客户端IP -p 10050 -k "在客户端定义的key名" 例如: root@ubuntu-1:~# zabbix_get -s 10.0.0.10 -k vm.memory.size[available]
宏Macros
另外Zabbix 支持用户自定义宏,即支持变量定义
自定义宏格式为: {$macrosz_name}
https://www.zabbix.com/documentation/5.0/zh/manual/appendix/macros
自定义监控项配置案例
比如我想监控sda的TPS值,首先利用awk把相关的取出来.利用shell
如果iostat没有安装可以利用yum安装 [root@centos7 ~]# yum install sysstat -y shell取出值命令如下 [root@centos7 ~]# iostat|awk '$1 ~/sda/{print $2}'
然后需要zabbix-agent的配置文件里面添加相关的配置写法
[root@centos7 ~]# vim /etc/zabbix/zabbix_agentd.conf 然后找到# UserParameter= 具体写法如下: UserParameter=名称作用,shell命令 实际写法 UserParameter=sda_tps,iostat|awk '$1 ~/sda/{print $2}' 修改号以后重启zabbix-agent [root@centos7 ~]# systemctl restart zabbix-agent.service
用浏览器打开zabbix-web界面,添加此监控项
创建监控项
名称:自己需要监控的用途 键值:就是key值,我的key值叫sda_tps,这里一定要和你的key值一定要一模一样,否则取不了值 信息类型:展示界面的形式样子, 最后点击添加即可 查看刚才添加的监控项是否取到值
再来添加一条监控项tcp的ESTAB的状态
编辑配置文件
[root@centos7 ~]# vim /etc/zabbix/zabbix_agentd.conf
添加如下内容
UserParameter=tcp_state_ESTAB,ss -ntla|grep -c ESTAB
给ss这条命令添加权限,默认zabbix用户无法使用这条命令
[root@centos7 ~]# chmod u+s /usr/sbin/ss
重启zabbix-agent
[root@centos7 ~]# systemctl restart zabbix-agent.service
服务端检测一下这条监控项是否能取到值
root@ubuntu-1:~# zabbix_get -s 10.0.0.10 -k tcp_state_ESTAB 2
先来创建一个独立的模板,方便后期关联主机
查找此模板
把刚才的监控项添加到刚才的模板里面
创建监控项
填写好以后点击添加
把这个模板关联到10.0.0.10这台主机上面
查看9527edu这个应用集的主机
自定义监控项,方便批量部署
查看zabbix_agentd.conf的include的文件 grep -Ev '^$|#' /etc/zabbix/zabbix_agentd.conf 返回结果: PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.0.0.80 ServerActive=10.0.0.80 Hostname=10.0.0.10 Include=/etc/zabbix/zabbix_agentd.d/*.conf UserParameter=sda_tps,iostat|awk '$1 ~/sda/{print $2}' UserParameter=tcp_state_ESTAB,ss -ntla|grep -c ESTAB
这里面是自定义监控项的配置文件目录,可以把所有的自定义的配置文件全部方便这里目录下面方便迁移,和方便别的主机统一部署
/etc/zabbix/zabbix_agentd.d/*.conf
利用vim编辑一个新的文件
vim /etc/zabbix/zabbix_agentd.d/9527edu.conf 写入以下内容: UserParameter=sda_tps,iostat|awk '$1 ~/sda/{print $2}' UserParameter=tcp_state_ESTAB,ss -ntla|grep -c ESTAB 我们需要把原来的/etc/zabbix/zabbix_agentd.conf里面的注释掉,不然两者会冲突 vim /etc/zabbix/zabbix_agentd.conf 找到一下内容注释掉 #UserParameter=sda_tps,iostat|awk '$1 ~/sda/{print $2}' #UserParameter=tcp_state_ESTAB,ss -ntla|grep -c ESTAB 解释: 这样,以后把所有的命令直接写在这里配置文件里面.方便以后批量部署,只需要修改此文件即可,不需要改动默认的配置文件
重启zabbix-agent
[root@centos7 ~]# systemctl restart zabbix-agent.service
zabbix-server取值测试一下
root@ubuntu-1:~# zabbix_get -s 10.0.0.10 -k tcp_state_ESTAB 2 root@ubuntu-1:~# zabbix_get -s 10.0.0.10 -k sda_tps 0.63
比如我的10.0.0.11这台主机也想监控这两项自定义监控项,只需要把配置文件拷贝过去,重启一下,添加一下模板就可以使用了
从10.0.0.10拷贝自定义监控项,到10.0.0.11这台主机上面
[root@centos7 ~]# scp /etc/zabbix/zabbix_agentd.d/9527edu.conf root@10.0.0.11:/etc/zabbix/zabbix_agentd.d/
修改配置文件:
修改Server=10.0.0.80 Zabbix-server的服务端的IP地址 [root@centos7 ~]# sed -i.bak 's/Server=127.0.0.1/Server=10.0.0.80/' /etc/zabbix/zabbix_agentd.conf 修改主动模式下Zabbix-server服务段的IP地址 [root@centos7 ~]# sed -i 's/ServerActive=127.0.0.1/ServerActive=10.0.0.80/' /etc/zabbix/zabbix_agentd.conf 修改hostname为自己的主机IP地址 [root@centos7 ~]# sed -i 's/Hostname=Zabbix server/Hostname=10.0.0.11/' /etc/zabbix/zabbix_agentd.conf
启动zabbix-agent并设置开机自启动
[root@centos7 ~]# systemctl enable zabbix-agent.service --now
查看10.0.0.11这台主机的自定义的监控项
把 sda硬盘每秒传输次数这条监控项复制9527edu这个模板里
再看查看9527edu这个模板
再来添加TIME-WAIT的数量
[root@centos7 ~]# vim /etc/zabbix/zabbix_agentd.d/9527edu.conf 在最后一行添加如下内容 UserParameter=tcp_state_TIME-WAIT,ss -ntla|grep -c TIME-WAIT 把这个配置文件复制到10.0.0.11 [root@centos7 ~]# scp /etc/zabbix/zabbix_agentd.d/9527edu.conf root@10.0.0.11:/etc/zabbix/zabbix_agentd.d/
重启zabbix-agent,10.0.0.10和10.0.0.11都重启一下
[root@centos7 ~]# systemctl restart zabbix-agent.service
zabbix-server服务段取值测试
root@ubuntu-1:~# zabbix_get -s 10.0.0.10 -k tcp_state_TIME-WAIT 2 root@ubuntu-1:~# zabbix_get -s 10.0.0.11 -k tcp_state_TIME-WAIT 2
添加tcp_state_TIME-WAIT这条自定义监控项到9527edu模板
查看9527edu模板的数据
默认模板是被动模式,把9527eduzheg模板改成主动模式
查看9527edu这个模板的最新数据
批量添加tcp的状态,利用传参的方式添加
例如:
tcp-state[*],ss -ntla|grep -c $1
先把原有的TCP的状态值删除掉
[root@centos7 ~]# vim /etc/zabbix/zabbix_agentd.d/9527edu.conf 删除下面这两行 UserParameter=tcp_state_ESTAB,ss -ntla|grep -c ESTAB UserParameter=tcp_state_TIME-WAIT,ss -ntla|grep -c TIME-WAIT
重新添加一个文件,作为tcp状态的配置文件
[root@centos7 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_state.conf
11种状态只需要填写一行就行
UserParameter=tcp_state[*],netstat -ant|grep -c $1
重启zabbix-agent客户端
[root@centos7 ~]# systemctl restart zabbix-agent.service
zabbix-server测试取值
root@ubuntu-1:~# zabbix_get -s 10.0.0.10 -k tcp_state[TIME-WAIT] 1
把此文件复制到10.0.0.11上面
[root@centos7 ~]# scp /etc/zabbix/zabbix_agentd.d/tcp_state.conf root@10.0.0.11:/etc/zabbix/zabbix_agentd.d/
10.0.0.11把原有的TCP的配置文件修改掉
[root@centos7 ~]# vim /etc/zabbix/zabbix_agentd.d/9527edu.conf 删除下面这两行 UserParameter=tcp_state_ESTAB,ss -ntla|grep -c ESTAB UserParameter=tcp_state_TIME-WAIT,ss -ntla|grep -c TIME-WAIT
重启10.0.0.11的zabbix-agent客户端
[root@centos7 ~]# systemctl restart zabbix-agent.service
zabbix-server测试取值
root@ubuntu-1:~# zabbix_get -s 10.0.0.11 -k tcp_state[ESTABLISHED] 2
把TCP的11种状态添加到9527edu这个模板里面
11种状态
ESTABLISHED SYN-SENT SYN-RECV FIN-WAIT-1 FIN-WAIT-2 TIME-WAIT CLOSED CLOSE-WAIT LAST-ACK LISTEN CLOSING
TCP ESTABLISHED的状态监控项
可以利用克隆,重新克隆出来一个新的监控项,修改一下TCP的状态值
剩下的9种以此类推添加
剩下的9种 SYN-RECV FIN-WAIT-1 FIN-WAIT-2 TIME-WAIT CLOSED CLOSE-WAIT LAST-ACK LISTEN CLOSING
添加好以后,把原来的添加的TCP的状态删除掉
查看有没有检测到TCP的状态