zabbix监控docker

zabbix服务端和客户端安装略,zabbix版本3.2 

docker 安装略,版本2.4

准备安装pip
wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate
tar zxvf pip-1.3.1.tar.gz
cd pip-1.3.1/
python setup.py install

如果下面安装没有提示setuptools报错,可以忽略setuptools升级

升级setuptools,即可;命令如下:

 pip install --upgrade setuptools -i http://pypi.mirrors.ustc.edu.cn/simple

安装python脚本需要的模块

pip  install docker
pip  install  simplejson

脚本放在一般放在这里/etc/zabbix/script  (新建了一个script的目录)
docker_discovery.py
#!/usr/bin/env python
import os
import simplejson as json
t=os.popen("""sudo docker ps |grep -v 'CONTAINER ID'|awk {'print $NF'} """)
container_name = []
for container in  t.readlines():
        r = os.path.basename(container.strip())
        container_name += [{'{#CONTAINERNAME}':r}]
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/script/docker__monitor.py #这种写法比较具体
===================================================
使用不同账户,执行执行脚本时候sudo经常会碰到 sudo: sorry, you must have a tty to run sudo这个情况,其实修改一下sudo的配置就好了
vi /etc/sudoers (最好用visudo命令)
注释掉 Default requiretty 一行
#Default requiretty
意思就是sudo默认需要tty终端。注释掉就可以在后台执行了。
====================================================

添加配置文件,配置文件放在/etc/zabbix/zabbix_agentd.d/里面,如下
cat docker_discovery.conf
UserParameter=docker_discovery,python /etc/zabbix/script/docker_discovery.py

另外一个脚本,监控容器内的各个状态,参考别人的脚本,修正了一下。脚本还是放在/etc/zabbix/script下面。如下:
#!/usr/bin/env python
import docker
import sys
import subprocess
import os
import json
def check_container_stats(container_name,collect_item):
    #docker_client = docker_client.containers.get(container_name)
    container_collect=docker_client.containers.get(container_name).stats(stream=True)
    old_result=json.loads(container_collect.next())
    new_result=json.loads(container_collect.next())
    container_collect.close()
    if collect_item == 'cpu_total_usage':
        result=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage']
    elif collect_item == 'cpu_system_usage':
        result=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage']
    elif collect_item == 'cpu_percent':
        cpu_total_usage=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage']
        cpu_system_uasge=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage']
        cpu_num=len(old_result['cpu_stats']['cpu_usage']['percpu_usage'])
        result=round((float(cpu_total_usage)/float(cpu_system_uasge))*cpu_num*100.0,2)
    elif collect_item == 'mem_usage':
        result=new_result['memory_stats']['usage']
    elif collect_item == 'mem_limit':
        result=new_result['memory_stats']['limit']
    elif collect_item == 'network_rx_bytes':
        result=new_result['networks']['eth0']['rx_bytes']
    elif collect_item == 'network_tx_bytes':
        result=new_result['networks']['eth0']['tx_bytes']
    elif collect_item == 'mem_percent':
        mem_usage=new_result['memory_stats']['usage']
        mem_limit=new_result['memory_stats']['limit']
        result=round(float(mem_usage)/float(mem_limit)*100.0,2)
    return result
if __name__ == "__main__":
    docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='1.27')
    container_name=sys.argv[1]
    collect_item=sys.argv[2]
    print check_container_stats(container_name,collect_item)
赋予脚本权限:
chmod 757 docker_monitor.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[容器名字,cpu_total_usage]
1004562
成功。

注:测试脚本的时候提示docker.errors.APIError: 400 Client Error: Bad Request ("client is newer than server (client API version: 1.27, server API version: 1.24)")
修改docker_monitor.py脚本当中docker使用API版本号。
然后在zabbix里面创建模板添加监控就可以了。

第二种方法,借助国外大神的模板,无需写脚本,脚本已经封装到模块

需要在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

如果顺利的话,很快就出图了

注:国外大神的只能做为参考,我按照大神搭建监控docker,但是模板有问题,会出现一些问题,需要手动去修改模板,比如大神写的是docker.mem[/{#HCONTAINERID},total_cache]  但是实际上没有收到数据,需要修改为docker.mem[{#FCONTAINERID},total_cache]

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

https://segmentfault.com/a/1190000007568413

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值