侧边栏壁纸
  • 累计撰写 123 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Zabbix监控多个指定端口

梁来福
2023-03-10 / 0 评论 / 0 点赞 / 0 阅读 / 4467 字
温馨提示:
本文最后更新于 2024-05-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

背景

监控生产环境服务的时候,通常需要对多个端口进行监控,手动一个个添加会让我们崩溃,所以批量添加端口就是一个非常常见的需求。

解决方案

1、准备脚本

准备端口自发现脚本,check_port.py

#!/usr/bin/env python
#coding:utf-8

import os, json

port_list=[]
port_dict={"data":None}
cmd='''''netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort |uniq   2>/dev/null'''
local_ports=os.popen(cmd).readlines()

for port in local_ports:
    pdict={}
    pdict["{#TCP_PORT}"]=port.replace("\n", "")
    port_list.append(pdict)

port_dict["data"]=port_list
jsonStr = json.dumps(port_dict, sort_keys=True, indent=4)

print jsonStr

脚本的作用:就是从被监控的服务器上面采集数据,并且转换为特定的字典格式,这种格式是Zabbix可以识别的一种数据字典格式。

准备完成后,将脚本放至/etc/zabbix/scripts 路径下。

2、配置文件

修改被监控端的zabbix_agent2.conf配置文件(或者在zabbix_agent2.d下新建,看自己习惯),新增KEY值tcp.port

[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agent2.d/port.conf

UserParameter=tcp.port,/etc/zabbix/scripts/check_port.py

3、重启服务

重启agent端的zabbix服务

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

4、测试

在服务端使用zabbix_get工具测试,或者在agent执行脚本测试

[root@receive scripts]# python /etc/zabbix/scripts/check_port.py

出现类似以下内容(返回json格式的合法端口号),说明成功

{
    "data": [
        {
            "{#TCP_PORT}": "9071"
        },
        {
            "{#TCP_PORT}": "9072"
        },
        {
            "{#TCP_PORT}": "9073"
        },
        {
            "{#TCP_PORT}": "5555"
        }
    ]
}

5、Zabbix-Web界面配置

新建模版

新建自动发现规则

image.png

注意键值的一致性

新建监控项原型

image.png

新建触发器

image.png

最后将此新建的模版关联需要的主机就可以了。

优化脚本

有时候我们不需要监控自动扫描出来的所有端口,所以我们需要自己指定端口,这个需求是比较常见的。

我们需要将脚本替换成下列脚本就可以了,在portlist中添加我们想要监控的端口。

脚本展示

#!/usr/bin/env python
#coding:utf-8

import os, json

portlist=["9071",
	"9072",
	"9073",
	"5555"]
port_list=[]
port_dict={"data":None}

for port in portlist:
    pdict={}
    pdict["{#TCP_PORT}"]=port
    port_list.append(pdict)

port_dict["data"]=port_list
jsonStr = json.dumps(port_dict, sort_keys=True, indent=4)

print jsonStr

数据展示

image.png

问题展示

image.png

加入媒介,根据需求实现钉钉、微信报警即可。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
博主关闭了所有页面的评论