8.Zabbix自定义Key

Zabbix虽然有了众多的基础item配置监控,但是很多item并不能满足我们的需要。此时,我们需要借助Zabbix的用户自定义参数UserParameter来自定义我们的Item。

UserParameter语法说明

UserParameter=,

用户自定义参数包含一个key和一个命令,key必须整个系统唯一,配置好之后,重启客户端。 然后配置item,在key的位置填上我们自定义的key即可。

Zabbix-agent配置文件

自定义Key的配置文件需要放在指定的目录下,这个目录由zabbix-agent配置文件来指定。

[root@node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf

添加配置文件

[root@node2 zabbix_agentd.d]# vim  /etc/zabbix/zabbix_agentd.d/os.conf
UserParameter=os.memory.used,free -m|awk '/^Mem/ {print $3}'

添加配置文件后需要重启服务才能生效

[root@node2 zabbix_agentd.d]# systemctl  restart zabbix-agent

Zabbix程序测试

我们已经通过上面的配置,定义好了一个key(os.memory.used),接下来我们可以使用zabbix-agent来手动测试是否能获取到我们定义的key.
服务端使用程序zabbix-get

[root@node1 ~]# zabbix_get -s 192.168.1.74 -k os.memory.used
107

Zabbix web页面配置

我们已经通过测试,并且能够娶到响应的值了,接下来需要在zabbix web页面下进行配置,添加此key。

添加新的监控项

找到我们的目标host,添加一个新的监控项,手动填写我们的key值os.memory.used

8.Zabbix自定义Key_第1张图片
图片.png

定义完之后,我们就可以在Latest Data 查看其Graph

8.Zabbix自定义Key_第2张图片
图片.png

UserParameter参数高级用法

UserParameter中的参数能接收参数的方法,是的添加Item更加方便。

语法

UserParameter=key[*],

高级用法示例

我们通过写脚本来自定义,监控TCP状态的连接数
各种状态的说明

- LISTEN - 侦听来自远方TCP端口的连接请求; 
- SYN-SENT -在发送连接请求后等待匹配的连接求; 
- SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; 
- ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; 
- FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
- FIN-WAIT-2 - 从远程TCP等待连接中断请求; 
- CLOSE-WAIT - 等待从本地用户发来的连接中断请求; 
- CLOSING -等待远程TCP对连接中断的确认; 
- LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; 
- TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认; 
- CLOSED - 没有任何连接状态

使用命令获取TCP连接的状态
要想监控TCP的连接数目,我们需要通过编写脚本获取各个TCP连接的状态,这是一个基础。

[root@node2 ~]# netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S)print a,S[a]}'
LISTEN 7
ESTABLISHED 2
TIME_WAIT 4096

1.提供配置文件
在zabbix-agent端指定的目录下提供配置文件status.conf

[root@node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@node2 zabbix_agentd.d]# vim /etc/zabbix/zabbix_agentd.d/*.conf/status.conf
UserParameter=linux.status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh "$1" "$2"

2.编写获取tcp状态的脚本

[root@node2 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_conn.sh
#!/bin/bash
tcp_conn_status(){
        TCP_STAT=$1
        ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txt
        TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)
        if [ -z $TCP_STAT_VALUE ];then
                TCP_STAT_VALUE=0
        fi
        echo $TCP_STAT_VALUE
}

main(){
        case $1 in
            tcp_status)
                tcp_conn_status $2;
                ;;
                *)
                echo "$0 + tcp_status + SYN-RECV | LISTEN | CLOSE-WAIT | ESTAB | FIN-WAIT-1 | TIME-WAIT | SYN-SENT "

        esac
}

main $1 $2

[root@node2 zabbix_agentd.d]# chmod +x tcp_conn.sh

3.修改完后,我们需要重启zabbix-agent

[root@node2 ~]# systemctl  restart zabbix-agent

4.测试脚本
运行脚本

/etc/zabbix/zabbix_agentd.d/tcp_conn.sh + tcp_status + SYN-RECV | LISTEN | CLOSE-WAIT | ESTAB | FIN-WAIT-1 | TIME-WAIT | SYN-SENT 
[root@node2 ~]# /etc/zabbix/zabbix_agentd.d/tcp_conn.sh tcp_status  SYN-RECV
0
[root@node2 ~]# /etc/zabbix/zabbix_agentd.d/tcp_conn.sh tcp_status  LISTEN
7

因为脚本执行后产生的文件/tmp/tcp_conn.txt在/tmp下,所以我们需要让zabbix对这个文件有读写权限

[root@node2 zabbix_agentd.d]# chown zabbix.zabbix /tmp/tcp_conn.txt
[root@node2 ~]# cat /tmp/tcp_conn.txt
SYN-RECV 154
LISTEN 7
CLOSE-WAIT 1
ESTAB 927
FIN-WAIT-1 15
TIME-WAIT 4061
SYN-SENT 318

5.使用程序手动获取数据
我们写好脚本之后,但是不确定是否能取到数据,我们就是用zabbix的命令行工具手动去获取数据,看看是否能取到我们想要的参数。

获取参数的语法需要结合脚本跟脚本执行生成的conn.txt文件去使用

[root@node1 ~]# zabbix_get -s 192.168.1.74 -k linux.status[tcp_status,SYN-RECV]
256
[root@node1 ~]# zabbix_get -s 192.168.1.74 -k linux.status[tcp_status,LISTEN]
7
[root@node1 ~]# zabbix_get -s 192.168.1.74 -k linux.status[tcp_status,CLOSE-WAIT]
208
[root@node1 ~]# zabbix_get -s 192.168.1.74 -k linux.status[tcp_status,ESTAB]
1018
[root@node1 ~]# zabbix_get -s 192.168.1.74 -k linux.status[tcp_status,FIN-WAIT-1]
61
[root@node1 ~]# zabbix_get -s 192.168.1.74 -k linux.status[tcp_status,TIME-WAIT]
4083
[root@node1 ~]# zabbix_get -s 192.168.1.74 -k linux.status[tcp_status,SYN-SENT]
190

6.在web界面添加这些key值
我们已经能取到tcp状态的key值了,接下来我们将这些key配置到对应主机的Item中

8.Zabbix自定义Key_第3张图片
图片.png
8.Zabbix自定义Key_第4张图片
图片.png

其他几个跟上面一样添加,添加完之后,我们需要自定义Graph才能看到对应的图像

7.添加图形
这里我们将这些key都定义到一个图像中
创建Graphs

8.Zabbix自定义Key_第5张图片
图片.png

添加items

8.Zabbix自定义Key_第6张图片
图片.png

8.查看图形

8.Zabbix自定义Key_第7张图片
图片.png

你可能感兴趣的:(8.Zabbix自定义Key)