Zabbix通过自动发现监控端口

╰+攻爆jí腚メ 2022-12-22 15:23 294阅读 0赞

安装环境

Zabbix server和agent通过编译方式安装在服务器192.168.25.106上。Zabbix server/agent的安装目录为:/usr/local/zabbix。

创建脚本

创建自动发现Shell脚本
创建Shell脚本,使用zabbix_sender命令将监控项的值发送给监控项。脚本主要分为三部分:检查自定义配置文件的合法性,发送json数据给自动发现规则的键值,为每个监控项发送值。
在/usr/local/zabbix/目录下创建script/目录,用于存放脚本,注意修改权限(添加可执行权限,拥有着和所属组为zabbix)。脚本具体如下:

  1. #!/bin/bash
  2. # Discovery port list and get status of port.
  3. # port_discovery.sh
  4. ZABBIX_SENDER=/usr/local/zabbix/bin/zabbix_sender
  5. CONFIG_FILE=/usr/local/zabbix/etc/port.conf
  6. PROXY_IP=192.168.25.106
  7. # HOSTNAME 必须和zabbix前端定义的主机名称一致。
  8. HOSTNAME=192.168.25.106
  9. # 检查自定义配置文件的合法性,除注释和空行外只能包含有效的端口号。
  10. checkConfig(){
  11. grep -vE '(^ *#|^$)' ${ CONFIG_FILE} | grep -vE '^ *[0-9]+' &> /dev/null
  12. if [ $? -eq 0 ]
  13. then
  14. echo Error: ${ CONFIG_FILE} contains wrong port number.
  15. exit 1
  16. else
  17. while read line
  18. do
  19. echo ${ line} | grep -vE '(^ *#|^$)' &> /dev/null
  20. if [ $? -eq 0 ]
  21. then
  22. [ ${ line} -gt 0 -a ${ line} -lt 65536 ] || { echo Error: port number ${ line} in ${ CONFIG_FILE} is not between 1 and 65535.; exit 1; }
  23. fi
  24. done < ${ CONFIG_FILE}
  25. fi
  26. }
  27. # 输出必须是JSON格式的文本。
  28. portDiscovery(){
  29. num=0
  30. # 变量num和countNum比较,确定是否输出逗号。最后一个列表项后不加逗号。
  31. countNum=$(cat ${ CONFIG_FILE} | grep -vE '(^ *#|^$)' |wc -l)
  32. echo -e "{\n\t\"data\":["
  33. while read line
  34. do
  35. echo ${ line} | grep -E '(^ *#|^$)' &> /dev/null && continue
  36. num=$((num+1))
  37. echo -e "\t{"
  38. echo -e "\t\t\"{#PORT_NAME}\":\"${line}\""
  39. [ "$num" == "$countNum" ] && echo -e "\t}" || echo -e "\t},"
  40. done < ${ CONFIG_FILE}
  41. echo -e "\t]\n}"
  42. }
  43. # 单独为每个监控项发送值,-k port.status[{ #PORT_NAME}]是不行的。
  44. getPortStatus(){
  45. while read line
  46. do
  47. echo ${ line} | grep -E '(^ *#|^$)' &> /dev/null && continue
  48. PORT_STATUS=$(netstat -lnt | awk '{print $4}' | grep ":${line}$" &> /dev/null && echo 1 || echo 0)
  49. ${ ZABBIX_SENDER} -z ${ PROXY_IP} -s ${ HOSTNAME} -k port.status[${ line}] -o "${PORT_STATUS}" &> /dev/null
  50. done < ${ CONFIG_FILE}
  51. }
  52. main(){
  53. # 调用checkConfig和getPortStatus函数。
  54. checkConfig
  55. ${ ZABBIX_SENDER} -z ${ PROXY_IP} -s ${ HOSTNAME} -k port.discovery -o "$(portDiscovery)" &> /dev/null
  56. getPortStatus
  57. # 执行脚本成功会输出下面的字符。
  58. echo Successfully executed
  59. }
  60. [ $# -eq 0 ] && main || echo Usage: $0

添加自定义配置文件
端口自定义配置文件port.conf文件放置在和zabbix_agentd.conf同一目录下。具体信息如下:

  1. # 一个端口号单独一行,左右可以包含空格。端口号范围为1到65535。
  2. # 空行和注释行是允许的。
  3. 22
  4. 80
  5. 50
  6. 3306
  7. 8080
  8. 10050
  9. 10051

添加自定义键值
在Zabbix agent配置文件中加入自定义键值(如下表),然后重启Zabbix agent服务。自定义键值是为了定时执行脚本,将最新值发送给相应监控项。如果客户端没有安装Zabbix agent,则可以考虑使用周期性计划任务。

  1. UserParameter=port.run, /usr/local/zabbix/script/port_discovery.sh

创建模板

创建端口监控模板

创建模板,定义自动发现规则,注意键值与脚本中一致,类型为Zabbix采集器(Zabbix trapper)。注意监控项原型使用的宏名和脚本中一致,类型也是Zabbix采集器(Zabbix trapper)。模板中还创建一个“Zabbix客户端”类型的键值,用于定时调用脚本,监控项的“信息类型”为字符。
在这里插入图片描述
关联模板

将zbx_port_linux模板和主机192.168.25.106关联。
在这里插入图片描述
测试

将模板和主机关联后,等待片刻就会有数据出现,如下图。
在这里插入图片描述

参考链接 :
Zabbix通过自动发现监控端口
https://mp.weixin.qq.com/s/wbkHJxXTR-LvLb28H22t6g

发表评论

表情:
评论列表 (有 0 条评论,294人围观)

还没有评论,来说两句吧...

相关阅读