Encontrei métodos zabbix para monitorar docker na Internet. Existem basicamente dois métodos: um é usar zabbix_module_docker.so escrito por um deus estrangeiro para adicionar um modelo de monitoramento. Este método só pode ver se o ID do contêiner é desconfortável; o outro é escrever você mesmo Scripts para monitoramento, eu baixei scripts de outras pessoas para monitoramento na Internet e descobri que os dados são sempre intermitentes e não haverá dados por um tempo, então eu simplesmente escrevo um script simples sozinho.
Minha ideia é usar o comando docker stats que vem com docker para visualizar a CPU, memória e rede.De qualquer forma, eu não preciso de muito. . O seguinte começa oficialmente:
1. Dê ao zabbix permissões sudo sem segredo
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
* E preciso comentar a linha # Requisitos dos padrões
2, no diretório de instalação zabbix um novo script docker de descoberta, o script é a Internet não mudou diretamente com
# 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. Crie um segundo script para monitorar o 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;
A função deste script é verificar a cpu, memória e tráfego de rede.Se um erro de `bc: command not found` for reportado quando executado, apenas instale-o por` yum install bc`.
3. Modifique zabbix_agentd.conf
vim zabbix_agentd.conf, adicione dois parâmetros dentro, preste atenção ao caminho do script para o seu caminho
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. Finalmente, importe o template na interface web do zabbix, associe o host, espere um momento
O modelo está após o texto.
Depuração de problemas:
Se você esperar muito tempo sem mostrar a imagem ou relatar um erro, você pode usar zabbix_get para depuração, mas deve habilitar o modo passivo do cliente ao usar zabbix_get e exigir que a porta de escuta do cliente seja exposta.
Uso: Entre no diretório zabbix / bin na máquina zabbix_server e execute
zabbix_get -s 客户端ip -p 10050 -k "docker_low_discovery[docker]"
ou
zabbix_get -s 客户端ip -p 10050 -k "docker_statsmonitor[容器name,cpu]"
Endereço de download do modelo: https://download.csdn.net/download/qq_36961530/10437083