Zabbix 监控 jar 进程的 CPU、内存和网络带宽
1. 创建综合监控脚本
创建 Java 进程监控脚本
/etc/zabbix/scripts/java_network_monitor.sh
如下:
#!/bin/bash
# 文件路径: /etc/zabbix/scripts/java_network_monitor.sh
# 功能: 监控指定 Java 进程的 CPU、内存和网络带宽使用情况
JAR_NAME="aimonitor-collector-1.7.1.jar"
METRIC="$1" # cpu, mem, pid, threads, uptime, net_in, net_out
if [ -z "$METRIC" ]; then
echo "Usage: $0 <cpu|mem|pid|threads|uptime|net_in|net_out>"
exit 1
fi
# 获取 Java 进程 PID
get_java_pid() {
pgrep -f "$JAR_NAME"
}
# 获取进程信息
get_metric() {
local pid=$(get_java_pid)
if [ -z "$pid" ]; then
echo "0"
return
fi
case "$1" in
"cpu")
# 获取 CPU 使用率
ps -p $pid -o %cpu --no-headers | tr -d ' '
;;
"mem")
# 获取内存使用率
ps -p $pid -o %mem --no-headers | tr -d ' '
;;
"pid")
# 返回 PID
echo "$pid"
;;
"threads")
# 获取线程数
ps -p $pid -o thcount --no-headers | tr -d ' '
;;
"uptime")
# 获取进程运行时间(秒)
ps -p $pid -o etimes --no-headers | tr -d ' '
;;
"rss")
# 获取物理内存使用(KB)
ps -p $pid -o rss --no-headers | tr -d ' '
;;
"vsz")
# 获取虚拟内存使用(KB)
ps -p $pid -o vsz --no-headers | tr -d ' '
;;
"net_in")
# 获取网络接收流量(bytes)
if [ -f "/proc/$pid/net/dev" ]; then
# 简化处理,实际应用中可能需要更精确的计算
awk '{rx += $2} END {print rx+0}' "/proc/$pid/net/dev" 2>/dev/null || echo "0"
else
echo "0"
fi
;;
"net_out")
# 获取网络发送流量(bytes)
if [ -f "/proc/$pid/net/dev" ]; then
# 简化处理,实际应用中可能需要更精确的计算
awk '{tx += $10} END {print tx+0}' "/proc/$pid/net/dev" 2>/dev/null || echo "0"
else
echo "0"
fi
;;
*)
echo "Unknown metric: $1"
exit 1
;;
esac
}
get_metric "$METRIC"
创建网络流量监控脚本(更精确
/etc/zabbix/scripts/java_bandwidth_monitor.sh
#!/bin/bash
# 文件路径: /etc/zabbix/scripts/java_bandwidth_monitor.sh
# 功能: 使用 ss 或 netstat 监控 Java 进程网络连接和流量
JAR_NAME="aimonitor-collector-1.7.1.jar"
METRIC="$1" # connections, listen_ports, active_connections
if [ -z "$METRIC" ]; then
echo "Usage: $0 <connections|listen_ports|active_connections>"
exit 1
fi
# 获取 Java 进程 PID
get_java_pid() {
pgrep -f "$JAR_NAME"
}
# 获取网络连接信息
get_network_info() {
local pid=$(get_java_pid)
if [ -z "$pid" ]; then
echo "0"
return
fi
case "$1" in
"connections")
# 获取总连接数
if command -v ss >/dev/null 2>&1; then
ss -tuln | grep -c ":.*" || echo "0"
else
netstat -tuln | grep -c ":.*" || echo "0"
fi
;;
"listen_ports")
# 获取监听端口数
if command -v ss >/dev/null 2>&1; then
ss -tlnp | grep -c "pid=$pid" || echo "0"
else
netstat -tlnp 2>/dev/null | grep -c "$pid" || echo "0"
fi
;;
"active_connections")
# 获取活跃连接数
if command -v ss >/dev/null 2>&1; then
ss -tuln | grep -c ESTAB || echo "0"
else
netstat -an | grep -c ESTABLISHED || echo "0"
fi
;;
*)
echo "Unknown metric: $1"
exit 1
;;
esac
}
get_network_info "$METRIC"
然后:设置脚本权限
sudo chmod +x /etc/zabbix/scripts/java_network_monitor.sh
sudo chmod +x /etc/zabbix/scripts/java_bandwidth_monitor.sh
sudo chown zabbix:zabbix /etc/zabbix/scripts/java_network_monitor.sh
sudo chown zabbix:zabbix /etc/zabbix/scripts/java_bandwidth_monitor.sh
2. 配置 Zabbix Agent
创建 UserParameter 配置文件
# 创建配置文件
vim /etc/zabbix/zabbix_agentd.d/userparameter_java_network.conf
添加监控项定义
# 监控 aimonitor-collector Java 进程的 CPU 使用率
UserParameter=java.aimonitor.cpu,/etc/zabbix/scripts/java_network_monitor.sh cpu
# 监控 aimonitor-collector Java 进程的内存使用率
UserParameter=java.aimonitor.mem,/etc/zabbix/scripts/java_network_monitor.sh mem
# 获取 aimonitor-collector Java 进程的 PID
UserParameter=java.aimonitor.pid,/etc/zabbix/scripts/java_network_monitor.sh pid
# 监控 aimonitor-collector Java 进程的线程数
UserParameter=java.aimonitor.threads,/etc/zabbix/scripts/java_network_monitor.sh threads
# 监控 aimonitor-collector Java 进程的运行时间
UserParameter=java.aimonitor.uptime,/etc/zabbix/scripts/java_network_monitor.sh uptime
# 监控 aimonitor-collector Java 进程的物理内存使用(KB)
UserParameter=java.aimonitor.rss,/etc/zabbix/scripts/java_network_monitor.sh rss
# 监控 aimonitor-collector Java 进程的虚拟内存使用(KB)
UserParameter=java.aimonitor.vsz,/etc/zabbix/scripts/java_network_monitor.sh vsz
# 监控 aimonitor-collector Java 进程的网络接收流量
UserParameter=java.aimonitor.net_in,/etc/zabbix/scripts/java_network_monitor.sh net_in
# 监控 aimonitor-collector Java 进程的网络发送流量
UserParameter=java.aimonitor.net_out,/etc/zabbix/scripts/java_network_monitor.sh net_out
# 监控 aimonitor-collector Java 进程的总连接数
UserParameter=java.aimonitor.connections,/etc/zabbix/scripts/java_bandwidth_monitor.sh connections
# 监控 aimonitor-collector Java 进程的监听端口数
UserParameter=java.aimonitor.listen_ports,/etc/zabbix/scripts/java_bandwidth_monitor.sh listen_ports
# 监控 aimonitor-collector Java 进程的活跃连接数
UserParameter=java.aimonitor.active_connections,/etc/zabbix/scripts/java_bandwidth_monitor.sh active_connections
3. 重启 Zabbix Agent
systemctl restart zabbix-agent
4. 在 Zabbix Web 界面配置
创建监控项
CPU 使用率监控项:
名称: aimonitor-collector CPU Usage
键值: java.aimonitor.cpu
类型: Zabbix agent
信息类型: Numeric (float)
单位: %
更新间隔: 30s
历史数据保留时间: 7d
内存使用率监控项:
名称: aimonitor-collector Memory Usage
键值: java.aimonitor.mem
类型: Zabbix agent
信息类型: Numeric (float)
单位: %
更新间隔: 30s
历史数据保留时间: 7d
网络带宽监控项:
名称: aimonitor-collector Network In (Bytes)
键值: java.aimonitor.net_in
类型: Zabbix agent
信息类型: Numeric (unsigned)
单位: B
更新间隔: 1m
历史数据保留时间: 7d
名称: aimonitor-collector Network Out (Bytes)
键值: java.aimonitor.net_out
类型: Zabbix agent
信息类型: Numeric (unsigned)
单位: B
更新间隔: 1m
历史数据保留时间: 7d
连接数监控项:
名称: aimonitor-collector Total Connections
键值: java.aimonitor.connections
类型: Zabbix agent
信息类型: Numeric (unsigned)
更新间隔: 1m
历史数据保留时间: 7d
名称: aimonitor-collector Active Connections
键值: java.aimonitor.active_connections
类型: Zabbix agent
信息类型: Numeric (unsigned)
更新间隔: 1m
历史数据保留时间: 7d
6. 创建触发器 (
资源使用率过高:
名称: aimonitor-collector CPU usage is too high
表达式: {hostname:java.aimonitor.cpu.last()}>80
严重性: 警告
名称: aimonitor-collector memory usage is too high
表达式: {hostname:java.aimonitor.mem.last()}>80
严重性: 警告
名称: aimonitor-collector network bandwidth is too high
表达式: {hostname:java.aimonitor.net_in_bandwidth.last()}>1048576 or {hostname:java.aimonitor.net_out_bandwidth.last()}>1048576
严重性: 警告
进程未运行:
名称: aimonitor-collector process is not running
表达式: {hostname:java.aimonitor.pid.last()}=0
严重性: 高
7. 创建图形
资源使用率图形:
名称: aimonitor-collector Resource Usage
图形类型: 普通
图形项目:
- 名称: CPU Usage (%)
键值: java.aimonitor.cpu
类型: 线条
颜色: 1A7C11 (绿色)
- 名称: Memory Usage (%)
键值: java.aimonitor.mem
类型: 线条
颜色: 2774A4 (蓝色)
网络带宽图形:
名称: aimonitor-collector Network Bandwidth
图形类型: 普通
图形项目:
- 名称: Network In (Bps)
键值: java.aimonitor.net_in_bandwidth
类型: 线条
颜色: F63100 (红色)
- 名称: Network Out (Bps)
键值: java.aimonitor.net_out_bandwidth
类型: 线条
颜色: 2774A4 (蓝色)
连接数图形:
名称: aimonitor-collector Connections
图形类型: 普通
图形项目:
- 名称: Total Connections
键值: java.aimonitor.connections
类型: 线条
颜色: 1A7C11 (绿色)
- 名称: Active Connections
键值: java.aimonitor.active_connections
类型: 线条
颜色: F63100 (红色)
欢迎来撩 : 汇总all