说明

第一种方案,借助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=
DebugLevel=
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=xxxxxxx
Timeout=
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
LogSlowQueries=

zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=
DebugLevel=
EnableRemoteCommands=
Server=x.x.x.x
ServerActive=x.x.x.x:
Hostname=zn-
BufferSize=
Include=/etc/zabbix/zabbix_agentd.d/
UnsafeUserParameters= #这个必须有,是开启自定义脚本

下面开始写自动发现docker容器的脚本,以下操作是在zabbix_agent端进行的

脚本放在一般放在这里/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=,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下面。如下:

 #!/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,)
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,)
return result
if __name__ == "__main__":
docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='1.27')
container_name=sys.argv[]
collect_item=sys.argv[]
print check_container_stats(container_name,collect_item)

赋予脚本权限:

chmod   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 $ $

在server端测试:

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

成功。

现在开始在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"}]}

成功

如实没有效果,那我么需要手动去编译模块

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

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

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

https://segmentfault.com/a/1190000007568413

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

zabbix上监控docker的更多相关文章

  1. Zabbix 监控 Docker容器

    我们可以通过Python提供的模块docker来取各个docker容器的监控参数.参考文档:http://docker-py.readthedocs.io/en/stable/containers.h ...

  2. 如何在Zabbix上安装MySQL监控插件PMP

    PMP,全称是Percona Monitoring Plugins,是Percona公司为MySQL监控写的插件.支持Nagios,Cacti.从PMP 1.1开始,支持Zabbix. 下面,看看如何 ...

  3. Docker部署Zabbix+Grafana监控

    Docker部署Zabbix+Grafana监控 环境 centos 7 ; Docker 17.12.0-ce ; docker-compose version 1.20.1 2018-4-1 当前 ...

  4. zabbix上添加交换机监控记事

    ​ zabbix上添加交换机监控记事 ​ 第一次使用zabbix来添加监控华为s5720交换机,根本找不到头绪,像个无头的苍蝇一样的百度来处理,结果都没有任何效果,给自己增加了很多痛苦和心烦,增加不少 ...

  5. zabbix监控docker容器

    1.环境说明 由于最近zabbix进行过一次迁移,所以zabbix-server系列采用docker方式安装,参考zabbix官网:https://github.com/zabbix/zabbix-d ...

  6. zabbix容器化安装及监控docker应用

    一.zabbix agent2 介绍 从Zabbix 4.4之后,官方推出了Zabbix Agent 2,意味着zabbix 不在只是物理机监控的代名词,现在你可以使用Go为Zabbix编写插件,来监 ...

  7. Docker搭建zabbix+grafana监控系统

    一.准备工作 1.mysql数据库:192.168.1.5 2.nginx服务:192.168.1.10 3.docker服务器:192.168.1.20 4.zabbix客户端若干 二.docker ...

  8. cAdvisor+InfluxDB+Grafana 监控Docker

    容器的监控方案其实有很多,有docker自身的docker stats命令.有Scout.有Data Dog等等,本文主要和大家分享一下比较经典的容器开源监控方案组合:cAdvisor+InfluxD ...

  9. zabbix基本监控各指标简解

    监控项目及使用模板 监控http和https: Template App HTTP Service     Template App HTTPS Service 监控cpu,内存,网络等: Templ ...

随机推荐

  1. CVTE后台开发实习生岗位面试经验(2017.3)

    3月份我在看准网发布过这篇面经,现在转过来.原文链接:http://www.kanzhun.com/gsmsh10433357.html 投递岗位是web后台实习生 做完笔试后一天对方即发来面试通知 ...

  2. Java的三种代理模式简述

    本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...

  3. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(一)设计一套好的RESTful API

    写在前面的话 看了一下博客目录,距离上次更新这个系列的博文已经有两个多月,并不是因为不想继续写博客,由于中间这段时间更新了几篇其他系列的文章就暂时停止了,如今已经讲述的差不多,也就继续抽时间更新< ...

  4. Android 原生 Intent 分享支持的那些事

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 一.前言 对于一个 App ...

  5. SecureCRT 常用命令大全

    常用命令:一.ls 只列出文件名 (相当于dir,dir也可以使用) -A:列出所有文件,包含隐藏文件. -l:列表形式,包含文件的绝大部分属性. -R:递归显示. --help:此命令的帮助. 二. ...

  6. HDU 1176 免费馅饼:dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意: 横坐标范围为[0,10],你在第0秒站在坐标为5的地方. 在接下来的一段时间内,会有n个 ...

  7. cJSON 库的使用和优化

    部门的产品使用自己公司研发的系统,嵌入式web服务器移植的是goahead2.5的,服务器和前端使用JSON交互,移植的cJSON库,所以这段时间对JSON的使用做个简单的笔记,cJSON.h提供出来 ...

  8. Oracle安装oraInventory问题

    Oracle安装oraInventory问题-----------------------------2013/10/15 在使用安装Oracle软件或者使用dbca创建数据库时,所有的日志都会放在o ...

  9. XP oracle32位客户端安装找不到orandce11.dll.dbl

    同事在XP上装oracle客户端,遇到下面的问题,mark一下. 提示找不到:orandce11.dll.dbl 点继续还会提示这个文件:orancds11.dll.dbl 网上找到解决方法: 删除注 ...

  10. C++ Socket学习记录 -3

    WinSocket套接字之间的数据传输 在客户端和服务端建立链接后,接着就是在套接字之间传输数据. 很简单的使用 recv 接收数据,用send发送数据,单但是出现一个问题,不管接收还是发送,数据都是 ...