使用zabbix低级自动发现监控docker容器
1:在docker宿主机上编写扫描docker容器名称的使用脚本
[root@node1 zabbix_agentd.d]# cat /etc/zabbix/script/docker_discovery.sh
#!/bin/bash
port=($(/usr/bin/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
#脚本效果如下:
[root@node1 zabbix_agentd.d]# sh /etc/zabbix/script/docker_discovery.sh
{
"data":[
{
"{#CONTAINERNAME}":"k8s_install-cni_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_0"},
{
"{#CONTAINERNAME}":"k8s_nginx_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0"},
{
"{#CONTAINERNAME}":"k8s_POD_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0"},
{
"{#CONTAINERNAME}":"k8s_kube-flannel_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_3"},
{
"{#CONTAINERNAME}":"k8s_kube-proxy_kube-proxy-sqhs4_kube-system_1c7fac8f-5263-4cd8-b008-485f1dd44ad1_3"},
{
"{#CONTAINERNAME}":"k8s_POD_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_3"},
{
"{#CONTAINERNAME}":"k8s_POD_kube-proxy-sqhs4_kube-system_1c7fac8f-5263-4cd8-b008-485f1dd44ad1_3"}
]
}
#注意事项!!!
zabbix-agent在取值的时候使用的是zabbix用户,免费源码下载在执行docker ps -a会没有权限执行
解决方法有两种
1:添加sudo授权
2:给docker命令加suid权限
chmod u+s /usr/bin/docker
推荐使用第二种,低级比较简单
2:在docker宿主机上编写docker容器的自动取值脚本
#取值来源/usr/bin/docker stats --no-stream
[root@node1 zabbix_agentd.d]# cat /etc/zabbix/script/docker_monitor.sh
#!/bin/bash
CACHEFILE="/tmp/docker_monitor_cache.txt"
CMD="/usr/bin/docker stats --no-stream"
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE
fi
# Check and run the script
TIMEFLM=`stat -c %Y $CACHEFILE`
TIMENOW=`date +%s`
if [ `expr $TIMENOW - $TIMEFLM` -gt 60 ]; then
rm -f $CACHEFILE
fi
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE
fi
container_live() {
grep "$1" $CACHEFILE &>/dev/null
if [ $? -eq 1 ];then
echo 0
else
echo 1
fi
exit 0
}
container_id() {
grep "$1" $CACHEFILE|awk {print $1}
exit 0
}
container_cpu() {
grep "$1" $CACHEFILE|awk {print $3}|tr -d %
exit 0
}
container_mem_used() {
grep "$1" $CACHEFILE|awk {print $4}|tr -d MiB
exit 0
}
container_mem_pused() {
grep "$1" $CACHEFILE|awk {print $7}|tr -d %
exit 0
}
container_net_in() {
grep "$1" $CACHEFILE|awk {print $8}|tr -d %
exit 0
}
container_net_out() {
grep "$1" $CACHEFILE|awk {print $10}|tr -d %
exit 0
}
container_disk_in() {
grep "$1" $CACHEFILE|awk {print $11}
exit 0
}
container_disk_out() {
grep "$1" $CACHEFILE|awk {print $13}
exit 0
}
case $1 in
live)
container_live $2;
;;
id)
container_id $2;
;;
cpu)
container_cpu $2;
;;
mem_used)
container_mem_used $2;
;;
mem_pused)
container_mem_pused $2;
;;
net_in)
container_net_in $2;
;;
net_out)
container_net_out $2;
;;
disk_in)
container_disk_in $2;
;;
disk_out)
container_disk_out $2;
;;
*)
echo 无效的参数;
exit 2;
esac
3:修改zabbix-agent配置文件
[root@node1 zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.d/zbx_docker.conf
UserParameter=docker.discovery,/bin/bash /etc/zabbix/script/docker_discovery.sh
UserParameter=docker_monitor[*],/bin/bash /etc/zabbix/script/docker_monitor.sh $1 $2
systemctl restart docker
4:使用zabbix-get测试取值
#测试1
[root@oldboy ~]# zabbix_get -s 10.0.0.12 -k docker.discovery
{
"data":[
{
"{#CONTAINERNAME}":"k8s_install-cni_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_0"},
{
"{#CONTAINERNAME}":"k8s_nginx_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0"},
{
"{#CONTAINERNAME}":"k8s_POD_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0"},
{
"{#CONTAINERNAME}":"k8s_kube-flannel_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_3"},
{
"{#CONTAINERNAME}":"k8s_kube-proxy_kube-proxy-sqhs4_kube-system_1c7fac8f-5263-4cd8-b008-485f1dd44ad1_3"},
{
"{#CONTAINERNAME}":"k8s_POD_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_3"},
{
"{#CONTAINERNAME}":"k8s_POD_kube-proxy-sqhs4_kube-system_1c7fac8f-5263-4cd8-b008-485f1dd44ad1_3"}
]
}
#测试2
[root@oldboy ~]# zabbix_get -s 10.0.0.12 -k docker_monitor[mem_used,k8s_nginx_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0]
3.102
5:导入模板
模板下载地址http://oldqiang.com/zbx_docker_templates.xml

模板中,IT技术网我只定义了一个低级自动发现规则,发现关于其他的监控监控,后期在完善!
容器6:为docker宿主机链接模板
容器
7:效果展示
容器
文章转载:https://oldqiang.com/archives/607.html
容器b2b供应网(责任编辑:IT科技)