三门峡市救护车出租网

zabbix 通过 agent 监控进程、端口的详细过程

2026-04-02 14:14:04 浏览次数:0
详细信息

一、监控进程状态

1. 使用内置监控项

进程数量监控(通过 proc.num):

# 监控所有名为 "nginx" 的进程
proc.num[nginx]

# 监控特定用户的进程
proc.num[nginx,,www-data]

# 监控指定命令参数的进程
proc.num[,,,mysql]

# 监控特定进程ID文件
proc.num[,,,pid,/var/run/nginx.pid]

2. 配置步骤

在 Zabbix Agent 配置文件中添加zabbix_agentd.conf):

# 启用进程监控
EnableRemoteCommands=1

# 自定义监控项(可选)
UserParameter=process.check[*],ps aux | grep -v grep | grep $1 | wc -l

在 Zabbix Web 界面配置

创建监控项:

配置触发器:

# 当进程数为0时触发告警
{Template OS Linux:proc.num[nginx].last()}=0

# 进程数超过阈值
{Template OS Linux:proc.num[nginx].min(5m)}>50

二、监控端口状态

1. 使用 net.tcp.listen 监控项

# 监控TCP端口
net.tcp.listen[80]
net.tcp.listen[3306]

# 监控UDP端口
net.udp.listen[53]

# 指定IP地址监控
net.tcp.listen[127.0.0.1,80]

2. 使用自定义脚本监控

创建监控脚本 /etc/zabbix/scripts/check_port.sh

#!/bin/bash
PORT=$1
TIMEOUT=3

# 检查端口是否监听
nc -z -w $TIMEOUT 127.0.0.1 $PORT > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo 1
else
    echo 0
fi

配置 UserParameter

UserParameter=port.status[*],/etc/zabbix/scripts/check_port.sh $1

3. 使用 ss 或 netstat 命令

UserParameter=tcp.port[*],ss -tln | grep :$1 | wc -l
UserParameter=port.process[*],netstat -tlnp | grep :$1 | awk '{print $7}' | cut -d'/' -f1

三、完整配置示例

1. Agent 端配置

/etc/zabbix/zabbix_agentd.d/process_port.conf

# 进程监控
UserParameter=service.status[*],systemctl is-active $1
UserParameter=process.count[*],pgrep -c $1

# 端口监控
UserParameter=port.listen[*],netstat -tln | grep ":$1 " | wc -l
UserParameter=port.tcp.status[*],timeout 2 bash -c "echo > /dev/tcp/127.0.0.1/$1" && echo 1 || echo 0

# 获取进程详细信息
UserParameter=process.info[*],ps aux | grep $1 | grep -v grep | head -1

2. 监控模板配置

创建模板包含以下监控项:

进程监控项: | 名称 | 键值 | 触发器条件 | |------|------|------------| | Nginx进程数 | proc.num[nginx] | {last()}=0 | | MySQL进程状态 | proc.num[mysqld] | {last()}=0 | | Java应用进程 | proc.num[java] | {max(5m)}>100 |

端口监控项: | 名称 | 键值 | 触发器条件 | |------|------|------------| | SSH端口 | net.tcp.listen[22] | {last()}=0 | | HTTP端口 | net.tcp.listen[80] | {last()}=0 | | 数据库端口 | net.tcp.listen[3306] | {last()}=0 |

四、自动发现进程和端口

1. 自动发现监控的进程

创建发现规则:

{
    "data": [
        {
            "{#PROCNAME}": "nginx",
            "{#USER}": "www-data"
        },
        {
            "{#PROCNAME}": "mysql",
            "{#USER}": "mysql"
        }
    ]
}

2. 端口自动发现脚本

/etc/zabbix/scripts/discover_ports.sh

#!/bin/bash
echo '{"data":['

# 获取监听端口
netstat -tln | grep 'LISTEN' | awk '{print $4}' | cut -d':' -f2 | sort -nu | while read port
do
    echo -n '{"{#PORT}":"'$port'"},'
done | sed 's/,$//'

echo ']}'

对应的 UserParameter:

UserParameter=discover.ports,/etc/zabbix/scripts/discover_ports.sh

五、高级监控配置

1. 进程资源监控

# 监控进程CPU使用率
UserParameter=process.cpu[*],ps aux | grep $1 | grep -v grep | awk '{print $3}' | head -1

# 监控进程内存使用
UserParameter=process.mem[*],ps aux | grep $1 | grep -v grep | awk '{print $4}' | head -1

2. 依赖服务监控

# 监控服务及其依赖端口
UserParameter=service.health[*],/etc/zabbix/scripts/service_health.sh $1

六、测试和验证

1. 手动测试监控项

# 在Agent端测试
zabbix_agentd -t "proc.num[nginx]"
zabbix_agentd -t "net.tcp.listen[80]"

# 从Server端测试
zabbix_get -s 客户端IP -k "proc.num[nginx]"

2. 调试日志

# 在agent配置中开启调试
DebugLevel=4
LogFile=/var/log/zabbix/zabbix_agentd.log

最佳实践建议

权限管理

性能优化

告警策略

安全考虑

这样的配置可以实现对进程和端口的全面监控,并能及时发现问题并告警。

相关推荐