咱們能夠經過Python提供的模塊docker來取各個docker容器的監控參數。參考文檔:http://docker-py.readthedocs.io/en/stable/containers.htmlhtml
pip install docker #安裝docker模塊
經過腳本獲取各個監控項的值:python
#!coding=utf-8 #python2.7.12測試經過 #監控docker狀態腳本,包括內存、cpu和網速 #UserParameter=docker_monitor[*],/usr/bin/python /usr/local/zabbix/scripts/docker_monitor.py $1 $2 import docker import sys def get_value(item): mem_rss_usage = docker_stat['memory_stats']['stats']['total_rss'] mem_cache_usage = docker_stat['memory_stats']['stats']['total_cache'] mem_limit = docker_stat['memory_stats']['limit'] cpu_total_usage = docker_stat['cpu_stats']['cpu_usage']['total_usage'] cpu_usermode_usage = docker_stat['cpu_stats']['cpu_usage']['usage_in_usermode'] cpu_kernelmode_usage = docker_stat['cpu_stats']['cpu_usage']['usage_in_kernelmode'] cpu_system_usage = docker_stat['cpu_stats']['system_cpu_usage'] percpu_usage = docker_stat['cpu_stats']['cpu_usage']['percpu_usage'] # 'cpu_percent': round(((float(cpu_total_usage)+float(cpu_usermode_usage)+float(cpu_kernelmode_usage))/float(cpu_system_usage)) * len(percpu_usage) * 1000.0, 2), 暫不肯定 items = { 'mem_rss_usage': mem_rss_usage, 'mem_cache_usage': mem_cache_usage, 'mem_limit': mem_limit, 'cpu_total_usage': cpu_total_usage, 'cpu_system_usage': cpu_system_usage, 'mem_percent': round((float(mem_rss_usage)/float(mem_limit)) * 100.0, 2), 'net_in': docker_stat['networks']['eth0']['rx_bytes'], 'net_out': docker_stat['networks']['eth0']['tx_bytes'], 'status': int( docker.status == 'running') } print items.get(item) if __name__ == '__main__': conn = docker.from_env() docker = conn.containers.get(sys.argv[1]) docker_stat = docker.stats(stream=False,decode=True) try: get_value(sys.argv[2]) except KeyError: print 0
docker自動發現腳本:git
#!/bin/bash
docker_amount() { 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_amount ;; *) echo "Usage:`basename $0` {docker}" ;; esac
UserParameter=auto_discovery[*],/bin/bash /usr/local/zabbix/scripts/auto_discovery.sh $1
若是在服務端執行zabbix_get時報權限錯誤,在/etc/sudoers中添加:github
zabbix ALL=(root) NOPASSWD: /usr/bin/docker
而後在監控頁添加自動發現、監控項便可。docker
.bash
.測試
.spa
.
.code
另可用簡單的Load Modules的方式監控Docker(感謝萬能的先行者....)xml
Git地址:https://github.com/monitoringartist/Zabbix-Docker-Monitoring
步驟以下:
一、在Git上下載相應版本的加載模塊zabbix_module_docker.so和相應監控方式(主動和被動)監控模板Zabbix-Template-App-Docker.xml
二、將zabbix_module_docker.so放在${libdir}/modules下並修改配置文件:
LoadModulePath=/usr/local/zabbix/lib/modules
LoadModule=zabbix_module_docker.so
三、重啓zabbix_agentd,並將Zabbix-Template-App-Docker.xml導入模板中,自動發現10分鐘後取得數據
四、若是監控項報錯:Cannot open memory.stat file,將zabbix agent中的用戶改爲root便可