Zabbix 모니터링 도커 활성 모드 스크립트 모니터링

인터넷에서 도커를 모니터링하는 zabbix 메소드를 찾았습니다. 기본적으로 두 가지 방법이 있습니다. 하나는 모니터링을위한 템플릿을 추가하기 위해 외국 신이 작성한 zabbix_module_docker.so를 사용하는 것입니다.이 방법은 컨테이너 ID가 불편하다는 것만 알 수 있습니다. 모니터링을위한 스크립트를 직접 작성하고, 인터넷에서 모니터링을 위해 다른 사람의 스크립트를 다운로드 한 결과 데이터가 항상 간헐적이며 한동안 데이터가 없음을 발견하여 간단한 스크립트를 직접 작성하는 것입니다.

내 생각은 docker와 함께 제공되는 docker stats 명령을 사용하여 cpu, 메모리 및 네트워크를 보는 것입니다. 어쨌든 나는 많이 필요하지 않습니다. . 다음이 공식적으로 시작됩니다.


1. zabbix에 비밀없는 sudo 권한 부여

echo "zabbix ALL=(root) NOPASSWD:/bin/docker,/usr/bin/python,/usr/local/zabbix/scripts/docker_monitor.py,/usr/local/zabbix/scripts/docker_low_discovery.sh,/usr/local/zabbix/scripts/docker_processmonitor.sh">>/etc/sudoers

* 그리고 #Defaults requiretty 줄 을 주석 처리해야합니다.


2, 설치 디렉토리에 스크립트가 인터넷을 변경하지 않은 것입니다, 새로운 발견 고정 표시기 스크립트를 zabbix 직접 함께 인수
# cat /usr/local/zabbix/scripts/docker_low_discovery.sh
#!/bin/bash
#Fucation:docker low-level discovery
docker() {
            port=($(sudo docker ps -a|grep -v "CONTAINER ID"|awk '{print $NF}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"},\n"

                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"}\n"

                       fi
               done

                          printf '\t ]\n'
                          printf '}\n'
}
case $1 in
docker)
docker
;;
*)
echo "Usage:`basename $0` {docker}"
;;
esac
2. Docker를 모니터링하기위한 두 번째 스크립트 만들기
#!/bin/bash

#cat /usr/local/zabbix/script/docker_statsmonitor.sh
#author wusong [email protected]
#2018-5-24

unit_change(){
  tmp="$1"
  num=0
  if [ "$(echo ${tmp}|grep GB)" != "" ]; then
    tmp=${tmp%GB*}
    num=`echo "scale=2;($tmp*1024)/1" | bc`
  elif [ "$(echo ${tmp}|grep kB)" != "" ]; then
    tmp=${tmp%kB*}
    num=`echo "scale=2;$tmp/1024" | bc | awk '{printf "%.2f", $0}'`
  else
    num=${tmp%MB*}
  fi
  echo "${num}"
}
docker_info(){
       name="$1"
       info_type="$2"
       result=""
        if [ "${info_type}" = "cpu" ];then
                result=$(sudo docker stats ${name} --no-stream | grep -v "CONTAINER ID")
                result=$(echo ${result} |awk '{print $3}')
                echo "${result%\%*}"
        elif [ "${info_type}" = "mem" ];then
                result=`sudo docker stats ${name} --no-stream | grep -v "CONTAINER ID" | awk '{print $7}'`
                echo "${result%\%*}"
        elif [ "${info_type}" = "neti" ];then
                tmp=`sudo docker stats ${name} --no-stream |grep -v "CONTAINER ID" | awk '{print $8}'`
                unit_change ${tmp}
        elif [ "${info_type}" = "neto" ];then
                tem=`sudo docker stats ${name} --no-stream |grep -v "CONTAINER ID" |awk '{print $10}'`
                unit_change ${tem}
        else
                echo "Error:patameter wrong"
        fi

}

if [ $# -ne 2 ]; then
  echo "Usage:  must be have two parameter to execute 'containerName & cpu|mem|neti|neto'"
fi

case $2 in
  cpu|mem|neti|neto)
    docker_info $1 $2
  ;;
  *)
    echo "Usage:`basename $0` must be have two parameter to execute 'containerName & cpu|mem|neti|neto'"
  ;;
esac;

이 스크립트의 기능은 CPU, 메모리, 네트워크 트래픽을 확인하는 기능으로 실행시`bc : command not found` 오류가보고되면`yum install bc`로 설치하면됩니다.


3. zabbix_agentd.conf 수정

vim zabbix_agentd.conf, 내부에 두 개의 매개 변수 추가, 경로의 스크립트 경로에주의

UserParameter=docker_low_discovery[*],/bin/bash /usr/local/zabbix_agent/scripts/docker_low_discovery.sh $1
UserParameter=docker_statsmonitor[*],/bin/bash /usr/local/zabbix_agent/scripts/docker_statsmonitor.sh $1 $2

4. 마지막으로 zabbix 웹 인터페이스에서 템플릿을 가져오고 호스트를 연결하고 잠시 기다리십시오.


템플릿은 텍스트 뒤에 있습니다.


문제 디버깅 :

사진을 표시하지 않고 오랫동안 기다리거나 오류를보고하는 경우 zabbix_get을 사용하여 디버깅 할 수 있지만 zabbix_get을 사용할 때 클라이언트 수동 모드를 활성화하고 클라이언트 수신 포트가 노출되도록 요구해야합니다.

사용법 : zabbix_server 시스템에 zabbix / bin 디렉토리를 입력하고 실행합니다.

zabbix_get -s 客户端ip -p 10050 -k "docker_low_discovery[docker]"

또는

zabbix_get -s 客户端ip -p 10050 -k "docker_statsmonitor[容器name,cpu]"

템플릿 다운로드 주소 : https://download.csdn.net/download/qq_36961530/10437083


추천

출처blog.csdn.net/qq_36961530/article/details/80448301