您的位置 首页 zabbix

Zabbix 监控 jar 进程的 CPU、内存和网络带宽

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

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章