日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zabbix企业应用之监控docker容器资源情况

發布時間:2025/3/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zabbix企业应用之监控docker容器资源情况 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于docker的監控,無論開源的CAdvisor、Data Dog還是我自己寫的監控(http://dl528888.blog.51cto.com/2382721/1635951),不是通過docker的stats?api就是使用socket來進行。

單獨看一個主機的監控項還行,比如只查看容器test的cpu、內存還是網絡,但如果想批量查看的話,比如查看容器test1-test10的所有監控項或者只是看cpu資源使用比較費勁了,現在我使用zabbix通過docker stats api監控容器資源,然后使用lld技術自動監控,使用zatree進行批量展示監控效果。

不說太多的廢話,直接看效果圖,滿足自己需求在繼續深入研究

一、效果圖

1、監控容器cpu使用率

2、監控容器內存使用量

3、監控容器網絡流量值

目前我監控docker就監控這些東西,至于其他的資源個人有需求可以自己寫。

下面是如何部署

二、部署

1、環境

我的zabbix是2.0.6,所以想使用我的模板,必須是2.0.x以上的zabbix版本;

docker使用1.6版本,如果想使用我的監控,docker必須大于1.5;

需要安裝jq,如何安裝參考http://stedolan.github.io/jq/tutorial/

監控客戶端里必須安裝docker的python 模塊

安裝的話,可以使用

easy_install?docker-py

2、客戶端部署

A.在zabbix_agentd.conf最后添加以下內容

UserParameter=zabbix_low_discovery[*],/bin/bash?/usr/local/zabbix/bin/zabbix_low_discovery.sh?$1 UserParameter=docker_stats[*],sudo?/usr/local/zabbix/bin/zabbix_monitor_docker.py?$1?$2

B.把下面的腳本放到/usr/local/zabbix/bin里,然后給與755權限,并修改用戶與組為zabbix

[root@ip-10-10-125-8?bin]#?cat?zabbix_monitor_docker.py #!/usr/bin/env?python #-*-?coding:?utf-8?-*- #author:Deng?Lei #email:?dl528888@gmail.com from?docker?import?Client import?os import?re import?sys import?subprocess import?time def?check_container_stats(container_name,collect_item):container_collect=docker_client.stats(container_name)old_result=eval(container_collect.next())new_result=eval(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_uasge':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?==?'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)#network_rx_packets=new_result['network']['rx_packets']#network_tx_packets=new_result['network']['tx_packets']elif?collect_item?==?'network_rx_bytes':network_check_command="""docker?exec?%s?ifconfig?eth1|grep?bytes|awk?-F?':'?'{print?$2,$3}'|awk?-F?'('?'{print?$1,$2}'|awk?-F?')'?'{print?$1}'|awk?'{print?"{\\"rx\\":"$1",\\"tx\\":"$2"}"}'"""%container_namenetwork_old_result=eval(((subprocess.Popen(network_check_command,shell=True,stdout=subprocess.PIPE)).stdout.readlines()[0]).strip('\n'))time.sleep(1)network_new_result=eval(((subprocess.Popen(network_check_command,shell=True,stdout=subprocess.PIPE)).stdout.readlines()[0]).strip('\n'))#unit?KBresult=int(network_new_result['rx'])?-?int(network_old_result['rx'])elif?collect_item?==?'network_tx_bytes':network_check_command="""docker?exec?%s?ifconfig?eth1|grep?bytes|awk?-F?':'?'{print?$2,$3}'|awk?-F?'('?'{print?$1,$2}'|awk?-F?')'?'{print?$1}'|awk?'{print?"{\\"rx\\":"$1",\\"tx\\":"$2"}"}'"""%container_namenetwork_old_result=eval(((subprocess.Popen(network_check_command,shell=True,stdout=subprocess.PIPE)).stdout.readlines()[0]).strip('\n'))time.sleep(1)network_new_result=eval(((subprocess.Popen(network_check_command,shell=True,stdout=subprocess.PIPE)).stdout.readlines()[0]).strip('\n'))result=int(network_new_result['tx'])?-?int(network_old_result['tx'])return?result if?__name__?==?"__main__":docker_client?=?Client(base_url='unix://var/run/docker.sock',?version='1.17')container_name=sys.argv[1]collect_item=sys.argv[2]print?check_container_stats(container_name,collect_item)

C.監控內容的json化

下面在是我的json監控docker容器的json展示

[root@ip-10-10-125-6?~]#?sh?/usr/local/zabbix/bin/zabbix_low_discovery.sh?docker {"data":[{"{#CONTAINERNAME}":"nodeA"},{"{#CONTAINERNAME}":"xiaotg-mesos.5"},{"{#CONTAINERNAME}":"xiaotg-mesos.4"},{"{#CONTAINERNAME}":"xiaotg-mesos.3"},{"{#CONTAINERNAME}":"xiaotg-mesos.2"},{"{#CONTAINERNAME}":"xiaotg-mesos.1"},{"{#CONTAINERNAME}":"xiaotg-mesos.0"},{"{#CONTAINERNAME}":"ulimit_test.1"},{"{#CONTAINERNAME}":"ulimit_test.0"}] }

腳本內容如下:

[root@ip-10-10-125-6?tmp]#?cat?zabbix_low_discovery.sh #!/bin/bash #Fucation:zabbix?low-level?discovery docker()?{port=($(sudo?docker?ps?-a|grep?-v?"CONTAINER?ID"|awk?'{print?$NF}'))printf?'{\n'printf?'\t"data":[\n'for?key?in?${!port[@]}doif?[[?"${#port[@]}"?-gt?1?&&?"${key}"?-ne?"$((${#port[@]}-1))"?]];thenprintf?'\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"fidoneprintf?'\t?]\n'printf?'}\n' } case?$1?in docker) docker ;; *) echo?"Usage:`basename?$0`?{docker}" ;; esac

把此文件存放到/usr/local/zabbix/bin里,然后給與755權限,并修改用戶與組為zabbix,同時允許zabbix用戶無密碼運行docker

echo?"zabbix?ALL=(root)?NOPASSWD:/bin/docker,?/usr/local/zabbix/bin/zabbix_monitor_docker.py">>/etc/sudoers

D.重啟zabbix服務

ps?-ef|grep?zabbix|grep?-v?grep|awk?'{print?$2}'|xargs?kill?-9 /usr/local/zabbix/sbin/zabbix_agentd?-c?/usr/local/zabbix/conf/zabbix_agentd.conf

3、服務端部署

A、模板導入

把Template Docker Auto Discovery導入到zabbix里(模板在附件),具體操作不介紹。

B.主機關聯模板

把需要監控docker容器的主機管理模板即可監控,默認是60秒后自動更新,如下圖

由于在zabbix里監控docker只是為了查看方便,所以報警就沒有做,有需求可以自己來修改。

轉載于:https://blog.51cto.com/dl528888/1660844

總結

以上是生活随笔為你收集整理的zabbix企业应用之监控docker容器资源情况的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。