说明
第一种方案,借助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
如果顺利的话,很快就出图了
具体参考:https://github.com/monitoringartist/zabbix-docker-monitoring (大神的)