天天看点

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

一、说明

zabbix监控支持自定义脚本以及自制模板来扩展监控,换句话说就是对业务自定义监控;因此通过撰写脚本完成自定义监控十分有必要;这里的脚本既可以用shell也可以用python等语言;

另外自定义了脚本主要目的是获取业务相关的监控数据;还需要结合zabbix web GUI上的模板才能生效;本文的目的就是基于之前的zabbix相关部署操作之后的补充!

任务:

通过撰写脚本获取tcp 的各种状态,添加tcp状态模板,添加触发器;添加图形;完整实现脚本自定义监控的整个步聚流程!

二、agent端配置

创建目录存放自定义脚本

[root@node2 ~]# mkdir -pv /etc/zabbix/bin
[root@node2 ~]# chown zabbix.zabbix /etc/zabbix/bin           

脚本内容

[root@node2 ~]# cat /etc/zabbix/bin/tcp.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_conns.txt
   TCP_NUM=$(grep "$TCP_STAT" /tmp/tcp_conns.txt | cut -d ' ' -f2)
   if [ -z $TCP_NUM ];then
      TCP_NUM=0
   fi
   echo $TCP_NUM
}

main(){
    case $1 in
    tcp_status)
    tcp_conn_status $2;
    ;;
esac
}

main $1 $2
           

配置zabbix-agentd.conf

执行自定义脚本获取数据时;需要打开对应选项

[root@node2 ~]# egrep -v "(^#|^$)" /etc/zabbix/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
EnableRemoteCommands=1                #远程执行命令的选项
Server=172.16.3.152
ServerActive=172.16.3.152
Hostname=node2.san.com
Include=/etc/zabbix/zabbix_agentd.d/*.conf      
UnsafeUserParameters=1                        #设置为1 表示允许用户算定义key(监控项)
           

修改/etc/sudoers

由于zabbix server获取数据是通过自定义脚本基于agent 代理执行获取,因此需要修改sudo的配置以便执行

/etc/sudoers中添加如下内容并注释如下行

#Defaults    requiretty                               #不需要tty终端即可执行命令
zabbix  ALL=(root)      NOPASSWD: /usr/sbin/ss
           

自定义key配置文件

[root@node2 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp_conns.conf 
UserParameter=tcp_status[*],/bin/bash /etc/zabbix/bin/tcp.sh $1 $2 $3           

说明:此处的tcp_status就是监控key或叫监控项名 后面的$1 $2 $3是对应的参数;

重启zabbix-agent服务

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

可以通过zabbix server端的zabbix_get测试是否能获取自定义监控项的数据

[root@zabbix ~]# zabbix_get -s 172.16.3.216 -p 10050 -k "tcp_status[tcp_status,ESTAB]"
2           

以上已经可以获取172.16.3.216上的自定义监控项tcp ESTAB的数据(2);至此通过脚本自定义监控项agent端的配置已经完成;

三、自定义模板使用

在agent端完成脚本和自定义的监控项配置后,zabbix server web GUI上需要创建对应的模板;其他的主机可以套用模板以获取自定义数据;

创建模板:

配置-->模块-->创建模板-->模板名称 "TCP_CONN_STATUS" -->放入 Template组-->添加 如图:

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

添加itme监控项

配置-->模块-->TCP_CONN_STATUS -->监控项 -->创建监控项-->名称 "TCP_CONN_ESTAB" -->键值"tcp_status[tcp_status,ESTAB]" -->应用集"TCP_CONN_STATUS" -->添加

如图:

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

通过以上步聚依次创建

TCP_CONN_FIN-WAIT-1、TCP_CONN_LAST-ACK、 TCP_CONN_LISTEN 、TCP_CONN_SYN-RECV、TCP_CONN_TIME-WAIT监控项 最终监控项如图:

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

创建触发器:

创建一个ESTAB大于500时的触发器~

配置-->模块-->TCP_CONN_STATUS -->触发器-->创建触发器-->名称"Too Many Tcp ESTAB" -->严重性"警告"-->表达式 通过选择ESTAB的项 最后获取大于500 即"{TCP_CONN_STATUS:tcp_status[tcp_status,ESTAB].last()}>500"

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

创建图形:

配置-->模块-->TCP_CONN_STATUS -->图形 -->创建图形 -->名称 "TCP_CONN_STATUS_Graph" -->选择之前的监控项 -->添加 如图:

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

至此一个自定义的监控模板制作完成!

关联主机

配置-->主机-->node2.san.com -->模板 -->链接的模板 "添加自定义模板 TCP_CONN_STATUS" -->更新 如图:

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

验证:

查看node.san.com主机监控项:

配置-->主机-->node2.san.com -->监控项 如图:

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

查看生成的图形:

监测-->图形--> 如图

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

以上的自制的模板也可以导出,以便后期分享与重复使用!

zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:
zabbix自定义脚本做监控及自制模板初探一、说明二、agent端配置三、自定义模板使用四、自动发现应用总结:

四、自动发现应用

一般我们经常去侦测服务器对外开放的端口,加上触发器,可以很好的达到如果端口异常关闭则说明对应的服务故障;做至好自动发现并监控服务器上所有开放的端口就变得很方便;

脚本:

cat /etc/zabbix/bin/tcp_ports.sh

#!/bin/bash
portarray=(`sudo netstat -tnlp|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort |uniq   2>/dev/null`)
length=${#portarray[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
        printf '\n \t {\t'
        printf " \n\t\t\t\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
        if [ $i -lt $[$length-1] ];then
                printf ','
        fi
done
printf  "\n\t]\n"
printf "}\n"           

配置:

cat /etc/zabbix/zabbix_agent.d/tcp_ports.conf

UserParameter=tcpportlisten,/etc/zabbix/bin/tcp_ports.sh           

总结: