zabbix上監控docker


說明

第一種方案,借助docker的python版的api,然后通過自己封裝自定義腳本來做,稍微麻煩點,但是可以達到個人自定義的效果。

第二種借助國外的一位大神已經封裝好的模板來做,簡單省事情,不過功能有限,更多功能還是需要自己開寫腳本開發。

 開始配置

廢話不多說,搭建部分可以直接略過了,不知道的童鞋,可以參考我寫的其他文章,有docker安裝的,也有宿主機安裝的,不過我建議宿主機安裝吧,靈活,或者你自己寫好dockerfile來做定制也不錯。主要講解配置。

安裝模塊docker.py

pip  install docker

具體用法參見:https://docker-py.readthedocs.io/en/stable/

我這里貼一下我自己的zabbix-server.conf .zabbix-agent.conf的配置文件

zabbix-server.conf

LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
DebugLevel=1
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=xxxxxxx
Timeout=10
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
LogSlowQueries=3000

zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=0
DebugLevel=2
EnableRemoteCommands=1
Server=x.x.x.x
ServerActive=x.x.x.x:10051
Hostname=zn-46
BufferSize=1024
Include=/etc/zabbix/zabbix_agentd.d/
UnsafeUserParameters=1    #這個必須有,是開啟自定義腳本

 下面開始寫自動發現docker容器的腳本,以下操作是在zabbix_agent端進行的

腳本放在一般放在這里/etc/zabbix/script  (新建了一個script的目錄)

docker_discovery.py

1 #!/usr/bin/env python 
2 import os
3 import simplejson as json
4 t=os.popen("""sudo docker ps |grep -v 'CONTAINER ID'|awk {'print $NF'} """)
5 container_name = []
6 for container in  t.readlines():
7         r = os.path.basename(container.strip())
8         container_name += [{'{#CONTAINERNAME}':r}]
9 print json.dumps({'data':container_name},sort_keys=True,indent=4,separators=(',',':'))

執行上面的腳本是需要先安裝模塊,賦予執行權限

pip  install  simplejson
chmod 757 docker_discovery.py
chown zabbix:zabbix /etx/zabbix/script -R

賦予zabbix權限,編輯/etc/sudoers,添加如下內容

zabbix  ALL=(root)    NOPASSWD: ALL  #可能權限比較大

或者
zabbix  ALL=(root)    NOPASSWD:/usr/bin/docker,/usr/bin/python,/etc/zabbix/script/docker_discovery.py    #這種寫法比較具體

添加配置文件,配置文件放在/etc/zabbix/zabbix_agentd.d/里面,如下

cat docker_discovery.conf 

UserParameter=docker_discovery,python /etc/zabbix/script/docker_discovery.py

以上完成之后可以測試了,在sever端測試如下。默認情況下ubuntu是沒有在server端安裝zabbix_get的。可以使用apt-get來安裝,在server端執行

apt-get  install  -y zabbix-get

測試:

[root@ubuntu ~]# zabbix_get -s 192.168.72.131 -k docker_discovery 
{
    "data":[
        {
            "{#CONTAINERNAME}":"happy_banach"
        }
    ]
}

成功即可。

另外一個腳本,監控容器內的各個狀態,參考別人的腳本,修正了一下。腳本還是放在/etc/zabbix/script下面。如下:

 1 #!/usr/bin/env python
 2 import docker
 3 import sys
 4 import subprocess
 5 import os
 6 import json 
 7 def check_container_stats(container_name,collect_item):
 8     #docker_client = docker_client.containers.get(container_name)
 9     container_collect=docker_client.containers.get(container_name).stats(stream=True)
10     old_result=json.loads(container_collect.next())
11     new_result=json.loads(container_collect.next())
12     container_collect.close()
13     if collect_item == 'cpu_total_usage':
14         result=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage']
15     elif collect_item == 'cpu_system_usage':
16         result=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage']
17     elif collect_item == 'cpu_percent':
18         cpu_total_usage=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage']
19         cpu_system_uasge=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage']
20         cpu_num=len(old_result['cpu_stats']['cpu_usage']['percpu_usage'])
21         result=round((float(cpu_total_usage)/float(cpu_system_uasge))*cpu_num*100.0,2)
22     elif collect_item == 'mem_usage':
23         result=new_result['memory_stats']['usage']
24     elif collect_item == 'mem_limit':
25         result=new_result['memory_stats']['limit']
26     elif collect_item == 'network_rx_bytes':
27         result=new_result['networks']['eth0']['rx_bytes']
28     elif collect_item == 'network_tx_bytes':
29         result=new_result['networks']['eth0']['tx_bytes']
30     elif collect_item == 'mem_percent':
31         mem_usage=new_result['memory_stats']['usage']
32         mem_limit=new_result['memory_stats']['limit']
33         result=round(float(mem_usage)/float(mem_limit)*100.0,2)
34     return result
35 if __name__ == "__main__":
36     docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='1.27')
37     container_name=sys.argv[1]
38     collect_item=sys.argv[2]
39     print check_container_stats(container_name,collect_item)

賦予腳本權限:

chmod 757  docker_discovery.py

添加配置文件,配置文件放在/etc/zabbix/zabbix_agentd.d/里面,如下

cat docker_status.conf 
UserParameter=docker_status[*],sudo /usr/bin/python /etc/zabbix/script/docker_monitor.py $1 $2

在server端測試:

zabbix_get -s 10.6.28.28 -k docker_status[mscrm-jenkins,cpu_total_usage]

1004562

成功。

現在開始在web端配置,制作自己的模板

簡要說下:

Configuration------》Templates--------》create  template

 

 找到創建的模板點擊discovery

 點擊進來之后

點擊創建發現規則,填寫如下

filter部分

保存即可,這樣自動發現就完成了。

現在添加item

返回剛才頁面,點解item

 

 點擊創建

以其中一個來說,其他相同

 

 完成之后,最后添加graph即可。不在描述。

下面貼出幾張出的圖

 

 

 總體來說效果還不錯。

 第二種方法,借助國外大神的模板,無需寫腳本,腳本已經封裝到模塊

需要在zabbix-agent端安裝擴展模塊zabbix_module_docker.so,安裝方法很簡單,如下,在zabbix_agent.conf文件里面加上即可

首先下載模塊 不同版本在這里https://github.com/monitoringartist/zabbix-docker-monitoring

wget  xxxxx

加入配置文件即可

LoadModulePath=/etc/zabbix/modules    #自定義
LoadModule=zabbix_module_docker.so

重啟agent服務

然后模板在web端導入,然后將模板加入監控主機

在server端測試

在web端看看導入模板的key是什么

 

 測試:

[root@ubuntu ~]# zabbix_get -s 192.168.72.131 -k docker.discovery
{"data":[{"{#FCONTAINERID}":"ef5937dd46c5a27f23bbca2e9b773219df66ef33db9a5618618c4f64eeadf17d","{#SCONTAINERID}":"ef5937dd46c5","{#SYSTEM.HOSTNAME}":"ubuntu","{#HCONTAINERID}":"happy_banach"}]}

成功

如實沒有效果,那我么需要手動去編譯模塊

 1 # Required CentOS/RHEL apps:   yum install -y wget autoconf automake gcc svn pcre-devel
 2 # Required Debian/Ubuntu apps: apt-get install -y wget autoconf automake gcc subversion make pkg-config libpcre3-dev
 3 # Required Fedora apps:        dnf install -y wget autoconf automake gcc subversion make pcre-devel
 4 # Required openSUSE apps:      zypper install -y wget autoconf automake gcc subversion make pkg-config pcre-devel
 5 # Required Gentoo apps 1:      emerge net-misc/wget sys-devel/autoconf sys-devel/automake sys-devel/gcc
 6 # Required Gentoo apps 2:      emerge dev-vcs/subversion sys-devel/make dev-util/pkgconfig dev-libs/libpcre
 7 # Source, use your version:    svn export svn://svn.zabbix.com/tags/3.2.7 /usr/src/zabbix
 8 cd /usr/src/zabbix
 9 ./bootstrap.sh
10 ./configure --enable-agent
11 mkdir src/modules/zabbix_module_docker
12 cd src/modules/zabbix_module_docker
13 wget https://raw.githubusercontent.com/monitoringartist/zabbix-docker-monitoring/master/src/modules/zabbix_module_docker/zabbix_module_docker.c
14 wget https://raw.githubusercontent.com/monitoringartist/zabbix-docker-monitoring/master/src/modules/zabbix_module_docker/Makefile
15 make
View Code

如果順利的話,很快就出圖了

具體參考:https://github.com/monitoringartist/zabbix-docker-monitoring   (大神的)

https://segmentfault.com/a/1190000007568413

http://xianglinhu.blog.51cto.com/5787032/1697427

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM