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

pip install docker     #安装docker模块

通过脚本获取各个监控项的值:

#!coding=utf-
#python2..12测试通过 #监控docker状态脚本,包括内存、cpu和网速 #UserParameter=docker_monitor[*],/usr/bin/python /usr/local/zabbix/scripts/docker_monitor.py $ $
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, ), 暂不确定
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, ),
   '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[])
docker_stat = docker.stats(stream=False,decode=True)
try:
    get_value(sys.argv[])
except KeyError:
    print

docker自动发现脚本:

#!/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中添加:

zabbix  ALL=(root)  NOPASSWD: /usr/bin/docker

然后在监控页添加自动发现、监控项即可。

.

.

.

.
.

另可用简单的Load Modules的方式监控Docker(感谢万能的先行者....)

Git地址:https://github.com/monitoringartist/Zabbix-Docker-Monitoring

步骤如下:

1、在Git上下载相应版本的加载模块zabbix_module_docker.so和相应监控方式(主动和被动)监控模板Zabbix-Template-App-Docker.xml

2、将zabbix_module_docker.so放在${libdir}/modules下并修改配置文件:

LoadModulePath=/usr/local/zabbix/lib/modules

LoadModule=zabbix_module_docker.so

3、重启zabbix_agentd,并将Zabbix-Template-App-Docker.xml导入模板中,自动发现10分钟后取得数据

4、如果监控项报错:Cannot open memory.stat file,将zabbix agent中的用户改成root即可

Zabbix 监控 Docker容器的更多相关文章

  1. zabbix监控docker容器状态

    前言:前段时间在部署zabbix,有个需求就是需要监控容器的状态 也就是cpu 内存 io的占用,于是就自己写了一个脚本,以及模板,在这里分享一下 嘿嘿 : ) 废话我也就不多说,直接开始 首选,za ...

  2. zabbix监控docker容器

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

  3. Zabbix-(五)监控Docker容器与自定义jvm监控项

    Zabbix-(五)监控Docker容器与自定义jvm监控项 一.前言 前文中讲述了Zabbix对服务器硬件方面的监控功能,本文将讲述利用Zabbix监控Docker容器中的Java Web服务,并通 ...

  4. Prometheus入门到放弃(4)之cadvisor监控docker容器

    Prometheus监控docker容器运行状态,我们用到cadvisor服务,cadvisor我们这里也采用docker方式直接运行. 1.下载镜像 [root@prometheus-server ...

  5. 6. 使用cadvisor监控docker容器

    Prometheus监控docker容器运行状态,我们用到cadvisor服务,cadvisor我们这里也采用docker方式直接运行.这里我们可以服务端和客户端都使用cadvisor 客户端 1.下 ...

  6. docker-compose 快速部署Prometheus,监控docker 容器, 宿主机,ceph -- cluster集群

    话不多说上菜: 现在环境是这样: ceph 4台: 192.168.100.21  ceph-node1 192.168.100.22  ceph-node2 192.168.100.23  ceph ...

  7. zabbix监控docker

    [toc] 1.下载模版 然后把模版放到/usr/local/lib/zabbix/agent下 github地址内含监控模版 2.修改 zabbix-agentd 配置文件 vim /usr/loc ...

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

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

  9. Zabbix在Docker中的应用和监控

    目录 Zabbix在Docker中的应用和监控 一.如何使Zabbix跑在Docker里 1.Docker基础环境配置 2.Docker-compose安装配置 3.启动zabbix server 4 ...

随机推荐

  1. 使用Nginx实现灰度发布

    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式.AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B ...

  2. 奥酷流媒体服务系统AMS5.0

      2016年6月29日,北极星通对外发布AMS5.0版本,AMS是北极星通公司独立研发的高性能流媒体服务系统软件,可广泛应用于视频直播,视频点播,视频转码,视频录播等场合. AMS5.0增加功能: ...

  3. Python自动化测试、性能测试成长路线图

    Python自动化测试成长路线图 性能测试成长路线图

  4. ECharts 高度宽度自适应(转载)

    最近在写一个地图类的应用,用的是echarts的图表,然而一上来就一脸懵逼,如果父级容器的height/width属性设置为百分比的形式,那么echarts就会warning,且不能正常的生成图表.所 ...

  5. mysql3 - 常规数据检索、常见操作与函数

    一.常规数据检索 二.常见操作与函数

  6. Redis的两种持久化方式-快照持久化和AOF持久化

    Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边,数据保存到硬盘的过程就称为"持久化"效 ...

  7. 聚类-K均值

    数据来源:http://archive.ics.uci.edu/ml/datasets/seeds 15.26 14.84 0.871 5.763 3.312 2.221 5.22 Kama 14.8 ...

  8. scrapy 中日志的使用

    我在后台调试 在后台调试scrapy spider的时候,总是觉得后台命令窗口 打印的东西太多了不便于观察日志,因此需要一个日志文件记录信息,这样以后会 方便查找问题. 分两种方法吧. 1.简单粗暴. ...

  9. 我的Java设计模式-原型模式

    "不好意思,我是卧底!哇哈哈哈~"额......自从写了上一篇的观察者模式,就一直沉浸在这个角色当中,无法自拨.昨晚在看<使徒行者2>,有一集说到啊炮仗哥印钞票,我去, ...

  10. vxworks下文件读写示例

    dev 1.create file on floopy disk and write contents: -> pdev=fdDevCreate(0,0,0,0)     /* A:,1.44M ...