Zabbix-监控程序端口连接状态

说明

在日常巡检工作中,要检查各程序端口状态,为的是避免进程存在,但程序端口连接异常导致的故障。为了能对此类场景进行自动、批量、实时的监控,于是结合shell、zabbix研究出一个小方法,现在分享出来也是避免自己忘记。

拓扑

简单举例,我有五台服务器,其中四台服务器上安装的程序相同,并都要与同一台调度服务器的10100端口保持长连接,当连接异常时视为程序故障,需要zabbix及时告警。

方法

创建检测模板

创建好检测模板后,记得应用到被检测的主机上。

模板 监控项 触发器

编写检测脚本

我习惯在zabbix服务器的外部检查脚本目录下编写脚本,并将脚本添加到计划任务里。

*/5 * * * * /apps/zabbix/share/zabbix/externalscripts/port_check.sh
[root@Zabbix_Server externalscripts]# pwd
/apps/zabbix/share/zabbix/externalscripts
[root@Zabbix_Server externalscripts]# tree -L 3
.
├── port_check
│   ├── host.txt
│   └── result.txt
└── port_check.sh
[root@Zabbix_Server externalscripts]# cat port_check/host.txt 
192.168.1.10 1qaz3edc 192.168.1.100 10100 test_app  
192.168.1.11 1qaz3edc 192.168.1.100 10100 test_app
192.168.1.12 1qaz3edc 192.168.1.100 10100 test_app
192.168.1.13 1qaz3edc 192.168.1.100 10100 test_app
#!/bin/bash
work_dir=/apps/zabbix/share/zabbix/externalscripts
host_file=${work_dir}/port_check/host.txt
result_file=${work_dir}/port_check/result.txt

rm -rf ${result_file}

function fun_check_port()
{
          
   
  #$1被检测服务器的ip 
  #$2被检测服务器的密码 
  #$3要与其建连的服务器IP 
  #$4要监控的端口
  #$5端口的程序,用来与端口合并使用,定义zabbix键值的 
  echo $1 $5_$4 `sshpass -p $2 ssh root@$1 netstat -anpt | grep $3:$4 | grep ESTABLISHED | wc -l` >> ${result_file}
}

for Ip in `awk {print $1} ${
           
    host_file}`
do
  Passwd=`awk -v I=${
           
    Ip} {if(I==$1) print $2} ${
           
    host_file}`
  Other_ip=`awk -v I=${
           
    Ip} {if(I==$1) print $3} ${
           
    host_file}`
  Port=`awk -v I=${
           
    Ip} {if(I==$1) print $4} ${
           
    host_file}`
  Soft=`awk -v I=${
           
    Ip} {if(I==$1) print $5} ${
           
    host_file}`
  fun_check_port ${Ip} ${Passwd} ${Other_ip} ${Port} ${Soft}
done

if [ -s ${result_file} ]
then
  /apps/zabbix/bin/zabbix_sender -vv -z 127.0.0.1 -i ${result_file}
fi
经验分享 程序员 微信小程序 职场和发展