问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Zabbix 配置端口监控

创作时间:
作者:
@小白创作中心

Zabbix 配置端口监控

引用
CSDN
1.
https://m.blog.csdn.net/networken/article/details/140152195

Zabbix 是一个广泛使用的开源监控解决方案,能够帮助用户监控服务器和网络设备的运行状态。其中,端口监控是Zabbix的重要功能之一,可以实时检查特定端口是否开放和可访问。本文将详细介绍如何在Zabbix中配置端口监控,包括使用简单检查和自定义脚本两种方式。

Zabbix 端口监控简介

在Zabbix中配置端口监控,可以帮助你实时监控服务器或网络设备上的特定端口是否开放和可访问。Zabbix提供了多种方式来监控端口,主要包括简单的端口可用性检查和更复杂的服务监控。

在Zabbix中进行端口监控时,不一定需要Zabbix Agent参与。可以选择使用Zabbix的内置“简单检查”(Simple check)功能来实现端口监控,这种方式不依赖于Zabbix Agent。

如果需要更复杂的监控,或者在监控过程中需要进行一些自定义处理,可以使用Zabbix Agent和自定义用户参数来实现端口监控。

安装了Zabbix Agent后,登录Zabbix Server的Web界面添加新主机,通过配置相应的监控项(Item)和触发器来监控特定端口的状态。

以下是Zabbix进程标准检测器的列表:


# 检查 TCP 端口 是否处于侦听状态。返回 0 - 未侦听;1 - 正在侦听
net.tcp.listen[port]
# 检查是否能建立 TCP 连接到指定端口。返回 0 - 不能连接;1 - 可以连接
net.tcp.port[<ip>,port]
# 检查 TCP 服务的性能。返回 0 - 服务已关闭;或连接到服务所用的秒数	
net.tcp.service.perf[service,<ip>,<port>]
# 检查服务是否运行并接受 TCP 连接。返回 0 - 服务关闭;1 - 服务运行
net.tcp.service[service,<ip>,<port>]
# 返回与参数匹配的 TCP 套接字数量。返回整数
net.tcp.socket.count[<laddr>,<lport>,<raddr>,<rport>,<state>]
# 检查 UDP 端口 是否处于侦听状态。返回 0 - 未侦听;1 - 正在侦听
net.udp.listen[port]
# 检查 UDP 服务的性能。返回 0 - 服务已关闭; 或等待服务响应的秒数
net.udp.service.perf[service,<ip>,<port>]
# 检查服务是否运行并响应 UDP 请求。返回 0 - 服务关闭;1 - 服务运行
net.udp.service[service,<ip>,<port>]
# 返回匹配参数的 UDP 套接字数量。返回整数
net.udp.socket.count[<laddr>,<lport>,<raddr>,<rport>,<state>]

Zabbix 端口监控配置

zabbix环境信息:

节点 IP OS Role

zabbix-server 192.168.72.31 Ubuntu 22.04 zabbix-server

web-server 192.168.72.33 Ubuntu 22.04 web-server/zabbix-agent

zabbix 版本: v7.0.0

前置要求:已在web-server上安装zabbix-agent,并且在zabbix-server上添加web-server主机。

在web-server上安装nginx服务作为示例应用端口。


apt install -y nginx  

查看nginx 监听的80端口


root@web-server:~# ss -antulp |grep ':80 '
tcp   LISTEN 0      511          0.0.0.0:80         0.0.0.0:*    users:(("nginx",pid=49839,fd=6),("nginx",pid=49838,fd=6),("nginx",pid=49837,fd=6))                                                                                                                                                                                                                                                                                                                                                                  
tcp   LISTEN 0      511             [::]:80            [::]:*    users:(("nginx",pid=49839,fd=7),("nginx",pid=49838,fd=7),("nginx",pid=49837,fd=7))                                                                                     

在zabbix web控制台上,导航到数据采集 -> 主机,选择web-server节点

选择监控项,新建监控项

配置参数说明:

  • 名称:

Check Port 80 Status

  • 类型:Zabbix 客户端

  • 键值:

net.tcp.service[tcp,,80]

选择触发器,创建触发器,在表达式中选择

Check Port 80 Status

配置参数说明:

  • 名称:

Port 80 Down

  • 表达式:点击添加,监控项选择

Check Port 80 Status

,插入后表达式为:

last(/web-server/net.tcp.service[tcp,,80])=0

,当80端口不存在时进行告警。

选择告警->动作->创建动作,在触发器中选择

Port 80 Down

配置参数说明:

  • 名称:

Notify on Port 80 Down

  • 条件:点击添加,触发器选择

Port 80 Down

配置操作

自定义消息内容如下:


Problem: {EVENT.NAME}
-=【告警】=-
告警组:{TRIGGER.HOSTGROUP.NAME}
告警主机:{HOSTNAME1} 
告警主机别名:{HOST.NAME}
主机IP:{HOST.IP}
主机描述:{HOST.DESCRIPTION}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
警报类别:{TRIGGER.NAME}
当前状态:{ITEM.LASTVALUE}
告警平台:http://192.168.72.31/zabbix  

说明:告警平台地址为zabbix-server地址。

配置恢复操作

自定义消息内容如下:


Resolved:{EVENT.NAME}
-=【告警取消啦】=-
恢复主机:{HOSTNAME1}
恢复时间:{EVENT.DATE} {EVENT.TIME}
主机IP:{HOST.IP}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

在监测->最新数据中,选择web-server,查看监控数据图形:

在Zabbix-server服务端执行。

如果192.168.1.100的8080端口正常可达,此时应该返回1,如果不通则返回0


root@zabbix-server:~# apt install -y zabbix-get
root@zabbix-server:~# zabbix_get -s 192.168.72.33 -k net.tcp.service[tcp,,80]
1  

在web-server上停止nginx服务


root@web-server:~# systemctl stop nginx  

查看收到的钉钉告警消息

自定义脚本配置文件

通过在Zabbix客户端配置文件中添加自定义用户参数(UserParameter),可以实现对特定端口的监控。这是一种灵活的监控方法,可以根据需求定制化监控项。以下是具体步骤和示例:

通过为zabbix设计脚本文件加端口列表文件,

port_alert.sh

为端口自发现脚本,

port.conf

为指定的监控端口号,然后结合UserParameter来批量监控端口。可以轻松地批量监控多个端口,并且可以通过简单修改配置文件来更新监控列表,无需频繁修改Zabbix配置。

在web-server节点创建脚本文件


root@web-server:~# cat /etc/zabbix/port_alert.sh 
#!/bin/bash
# 端口自发现脚本
discover_ports() {
    ports=$(cat /etc/zabbix/port.conf | grep -v '^#' | tr '\n' ' ')
    printf '{"data":['
    comma=""
    for port in $ports
    do
        printf '%s{"{#PORT}":"%s"}' "$comma" "$port"
        comma=","
    done
    printf ']}\n'
}
# 检查端口是否开放
check_port() {
    port=$1
    timeout 1 bash -c "echo >/dev/tcp/localhost/$port" 2>/dev/null
    if [ $? -eq 0 ]; then
        echo 1
    else
        echo 0
    fi
}
# 主逻辑
case "$1" in
    discover)
        discover_ports
        ;;
    check)
        check_port $2
        ;;
    *)
        echo "Usage: $0 {discover|check port}"
        exit 1
        ;;
esac
exit 0  

修改脚本执行权限


chmod +x /etc/zabbix/port_alert.sh  

创建要监控的端口列表


root@web-server:~# cat /etc/zabbix/port.conf
# 要监控的端口列表
80
443
3306
8080  

新建

zabbix_agentd.conf

配置文件


cat >/etc/zabbix/zabbix_agentd.d/zabbix_agentd.conf<<'EOF'
UserParameter=custom.port.discovery,/etc/zabbix/port_alert.sh discover
UserParameter=custom.port.check[*],/etc/zabbix/port_alert.sh check $1
EOF  

重启zabbix-agent服务


systemctl restart zabbix-agent.service  

Zabbix Web界面配置,选择数据采集->主机->web-server->自动发现->创建自动发现。

创建自动发现规则

  • Name:

Port Discovery

  • Type:

Zabbix agent

  • Key:

custom.port.discovery

  • Update interval:

1h (或根据需要调整)

创建监控项原型

  • Name:

Port {#PORT} status

  • Type:

Zabbix agent

  • Key:

custom.port.check[{#PORT}]

  • Type of information:

Numeric (unsigned)

  • Update interval:

1m (或根据需要调整)

创建触发器类型

  • Name:

Port {#PORT} is down on {HOST.NAME}

  • Expression:

last(/web-server/custom.port.check[{#PORT}])=0

  • Severity:

High (或根据需要调整)

查看最新数据

创建告警动作

查看告警信息

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号