您的位置 首页 zabbix

zabbix 监控docker 容器

zabbix 监控docker 容器

客户端配置,可以参考:

zabbix自定义监控 之获取用户登录信息 :  连接 

然后再配置监控docker 容器的;

2. 创建 Docker 监控脚本

创建 /etc/zabbix/scripts/docker_monitor.sh

#!/bin/bash

CONTAINER_NAME="$1"
METRIC="$2"

# 参数检查
if [ -z "$CONTAINER_NAME" ] || [ -z "$METRIC" ]; then
    echo "ERROR: Missing parameters"
    exit 1
fi

# 检查 Docker 命令是否存在
if ! command -v docker &> /dev/null; then
    echo "ERROR: Docker not found"
    exit 1
fi

# 处理容器名称(去除可能的前导斜杠)
CLEAN_CONTAINER_NAME=$(echo "$CONTAINER_NAME" | sed 's/^\///')

# 检查容器是否存在
if ! docker ps -a --format '{{.Names}}' | grep -Fx "$CLEAN_CONTAINER_NAME" > /dev/null 2>&1; then
    echo "ERROR: Container $CLEAN_CONTAINER_NAME not found"
    exit 1
fi

case "$METRIC" in
    "status")
        # 容器状态 (1=运行, 0=停止)
        if docker inspect --format='{{.State.Running}}' "$CLEAN_CONTAINER_NAME" 2>/dev/null | grep -q "true"; then
            echo 1
        else
            echo 0
        fi
        ;;
    "cpu")
        # CPU 使用百分比
        RESULT=$(docker stats --no-stream --format "{{.CPUPerc}}" "$CLEAN_CONTAINER_NAME" 2>/dev/null | sed 's/%//' | head -1)
        if [ -n "$RESULT" ] && [ "$RESULT" != "<NA>" ] && [ "$RESULT" != "--" ]; then
            echo "$RESULT"
        else
            echo 0
        fi
        ;;
    "memory")
        # 内存使用百分比
        RESULT=$(docker stats --no-stream --format "{{.MemPerc}}" "$CLEAN_CONTAINER_NAME" 2>/dev/null | sed 's/%//' | head -1)
        if [ -n "$RESULT" ] && [ "$RESULT" != "<NA>" ] && [ "$RESULT" != "--" ]; then
            echo "$RESULT"
        else
            echo 0
        fi
        ;;
    "memory_usage")
        # 内存使用量 (MB)
        RESULT=$(docker stats --no-stream --format "{{.MemUsage}}" "$CLEAN_CONTAINER_NAME" 2>/dev/null | awk '{print $1}' | head -1)
        if [ -n "$RESULT" ] && [ "$RESULT" != "<NA>" ] && [ "$RESULT" != "--" ]; then
            # 转换为 MB
            if [[ $RESULT == *GiB ]]; then
                echo "$(echo "$RESULT" | sed 's/GiB$//' | awk '{print $1*1024}')" 
            elif [[ $RESULT == *MiB ]]; then
                echo "$(echo "$RESULT" | sed 's/MiB$//' | awk '{print $1}')"
            elif [[ $RESULT == *KiB ]]; then
                echo "$(echo "$RESULT" | sed 's/KiB$//' | awk '{print $1/1024}')"
            else
                echo "$RESULT"
            fi
        else
            echo 0
        fi
        ;;
    *)
        echo "ERROR: Unknown metric $METRIC"
        exit 1
        ;;
esac

 

设置脚本权限

sudo mkdir -p /etc/zabbix/scripts
sudo chmod +x /etc/zabbix/scripts/docker_monitor.sh
sudo chown zabbix:zabbix /etc/zabbix/scripts/docker_monitor.sh

3. 配置 UserParameter

创建 /etc/zabbix/zabbix_agentd.d/docker.conf:

# Docker 容器监控 UserParameter
UserParameter=docker.container.status[*],/etc/zabbix/scripts/docker_monitor.sh "$1" status
UserParameter=docker.container.cpu[*],/etc/zabbix/scripts/docker_monitor.sh "$1" cpu
UserParameter=docker.container.memory[*],/etc/zabbix/scripts/docker_monitor.sh "$1" memory
UserParameter=docker.container.memory_usage[*],/etc/zabbix/scripts/docker_monitor.sh "$1" memory_usage

# 容器发现规则
UserParameter=docker.container.discovery,/etc/zabbix/scripts/docker_discovery.sh

 

4. 创建容器发现脚本

创建 /etc/zabbix/scripts/docker_discovery.sh:

#!/bin/bash

echo '{"data":['

FIRST=true
docker ps --format '{{.Names}}' | while read container; do
    if [ -n "$container" ]; then
        if [ "$FIRST" = true ]; then
            FIRST=false
        else
            echo ","
        fi
        # 转义特殊字符
        ESCAPED_CONTAINER=$(echo "$container" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g')
        echo -n "{\"{#CONTAINER.NAME}\":\"$ESCAPED_CONTAINER\"}"
    fi
done

echo ""
echo ']}'

设置权限:

sudo chmod +x /etc/zabbix/scripts/docker_discovery.sh
sudo chown zabbix:zabbix /etc/zabbix/scripts/docker_discovery.sh

5. 启动 Zabbix Agent

 

# 确保 zabbix 用户可以访问 Docker
sudo usermod -aG docker zabbix

# 启动 Zabbix Agent
sudo systemctl enable zabbix-agent
sudo systemctl restart zabbix-agent
sudo systemctl status zabbix-agent

6. 在 Zabbix Server 上配置

找到主机,然后点击 监控项- 》 创建监控项

 

 

欢迎来撩 : 汇总all

白眉大叔

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

热门文章