9-Zabbix自定义监控项

9-Zabbix自定义监控项

Zabbix 的监控功能强大,支持定制的自定义监控项,可以说能做到想监控什么就可以监控什么

以下实战案例中实现了对生产环境中各种资源的监控

自定义模版和监控项

之前对Linux系统的监控是使用系统内置的监控项,虽然 Zabbix 内置的模版及其包括的监控项已经很丰富,但实际生产中仍可能需要监控内置模版所不具有的特定的监控指标,可以通过自定义监控项实现

自定义模版和监控项实现过程

在Zabbix 被监控主机上编写自定义监控项的取值的脚本,并加执行权限

在Zabbix 被监控主机上的配置文件中添加自定义监控项,指定 key 和 对 key 赋值的脚本及参数

在Zabbix Server 上使用 zabbix_get 工具测试是否能取到自定义监控项信息

在Zabbix WEB 创建模版,在模版中添加自定义监控项

在Zabbix WEB 将模版关联至被监控的主机

导出自定义模版可以在其它Zabbix Server复用

除了自定义模版,也可以从zabbix网站查找适合自已的模版

https://share.zabbix.com/


image-20220802110435922.png


自定义监控项

系统内置的监控项如下

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

image-20220802110550138.png

客户端可以自定义监控项,在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 Server上可以使用zabbix_get工具获取自定义监控项

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

10.0.0.10这台主机

如果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界面,添加此监控项

image-20220802123030619.png


创建监控项

image-20220802123051138.png


image-20220802123433824.png


名称:自己需要监控的用途
 
键值:就是key值,我的key值叫sda_tps,这里一定要和你的key值一定要一模一样,否则取不了值
 
信息类型:展示界面的形式样子,
最后点击添加即可

查看刚才添加的监控项是否取到值


image-20220802133602095.png


image-20220802133706953.png


再来添加一条监控项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


先来创建一个独立的模板,方便后期关联主机

image-20220802135949814.png


image-20220802140243326.png


查找此模板

image-20220802140420062.png


把刚才的监控项添加到刚才的模板里面

image-20220802141256267.png



创建监控项


image-20220802141501679.png


image-20220802144400967.png



填写好以后点击添加

image-20220802144422994.png


image-20220802144515103.png


把这个模板关联到10.0.0.10这台主机上面

image-20220802144858771.png


image-20220802144912055.png


image-20220802145024251.png


查看9527edu这个应用集的主机


image-20220802145516480.png


自定义监控项,方便批量部署

查看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编辑一个新的文件

比如我我们可以把刚才的单独卸载zabbix配置文件里面的内容写在这里目录下,只要以.conf结尾即可

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.11这台主机到zabbix-server

image-20220802151310017.png


image-20220802151359252.png


image-20220802151439988.png


从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这台主机的自定义的监控项

image-20220802152311911.png


把 sda硬盘每秒传输次数这条监控项复制9527edu这个模板里

image-20220802153406937.png


image-20220802153537394.png


image-20220802153601882.png



再看查看9527edu这个模板

image-20220802153659245.png



再来添加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模板

image-20220802155505149.png



image-20220802155526531.png


image-20220802155644122.png


image-20220802155652478.png


查看9527edu模板的数据

image-20220802155847003.png


默认模板是被动模式,把9527eduzheg模板改成主动模式

image-20220802162117649.png

image-20220802162135921.png


image-20220802162226768.png



image-20220802162238105.png


查看9527edu这个模板的最新数据

image-20220802162355539.png



批量添加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这个模板里面

image-20220803094310830.png


image-20220803094405449.png


11种状态

ESTABLISHED SYN-SENT SYN-RECV FIN-WAIT-1 FIN-WAIT-2 TIME-WAIT CLOSED CLOSE-WAIT LAST-ACK LISTEN CLOSING


TCP ESTABLISHED的状态监控项

image-20220803095412421.png



image-20220803095201502.png


可以利用克隆,重新克隆出来一个新的监控项,修改一下TCP的状态值

image-20220803095540610.png


image-20220803095559222.png


image-20220803095638975.png


image-20220803095659714.png


剩下的9种以此类推添加

剩下的9种
SYN-RECV FIN-WAIT-1 FIN-WAIT-2 TIME-WAIT CLOSED CLOSE-WAIT LAST-ACK LISTEN CLOSING


添加好以后,把原来的添加的TCP的状态删除掉

image-20220803100538436.png


image-20220803100600418.png


查看有没有检测到TCP的状态

image-20220803100809672.png


image-20220803100828176.png

Powered By Z-BlogPHP 1.7.3

 Theme By 优美模版

本博客为开源博客,本博客联系QQ:372097243