成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【博文推薦】Docker高級應用之資源監控

云計算
本篇博文出自51CTO博客博主dl528888。在本文中,博主將與大家分享他在開發Docker平臺時是如何監控資源與進行圖像展示的。

  本篇博文出自51CTO博客博主吟—技術交流,有任何問題請進入博主頁面互動討論!

博文地址:http://dl528888.blog.51cto.com/2382721/1635951

最近忙著開發docker平臺,所以挺久沒有更新博客了,今天給大家分享一下,我開發docker平臺里如何監控資源與進行圖像展示的。

默認docker 1.5版本有stats命令查看容器的cpu使用率、內存使用量與網絡流量,但此功能有2個必須:

1、必須是docker 1.5版本

2、必須使用默認docker0的網橋(如果你使用ovs這樣非原生的網橋無法獲取數據的)

我開發的監控里docker是1.5版本,并且通過使用ifconfig來獲取容器rx或rx量來獲取容器流量,解決了必須使用docker默認網橋才可以獲取流量數據。

下面是容器資源監控效果圖

1、平臺里資源監控界面

 

Docker高級應用之資源監控

2、查看容器yangjing-test的cpu使用率資源監控

 

Docker高級應用之資源監控

3、查看內存使用量資源監控

 

Docker高級應用之資源監控

4、查看容器網絡流量信息

 

Docker高級應用之資源監控

#p#

下面是監控數據收集腳本信息

使用python寫的,由于需要往mysql里寫入數據,所以需要安裝MySQLdb模塊以及服務端mysql開啟賬號

  1. [root@ip-10-10-29-201 code]# cat collect_docker_monitor_data_multi.py 
  2. #!/usr/bin/env python 
  3. #-*- coding: utf-8 -*- 
  4. #author:Deng Lei 
  5. #email: dl528888@gmail.com 
  6. from docker import Client 
  7. import os 
  8. import socket, struct, fcntl 
  9. import etcd 
  10. import MySQLdb 
  11. import re 
  12. import multiprocessing 
  13. import subprocess 
  14. import time 
  15. def get_local_ip(iface = 'em1'): 
  16.     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  17.     sockfd = sock.fileno() 
  18.     SIOCGIFADDR = 0x8915 
  19.     ifreq = struct.pack('16sH14s', iface, socket.AF_INET, '\x00'*14
  20.     try
  21.         res = fcntl.ioctl(sockfd, SIOCGIFADDR, ifreq) 
  22.     except
  23.         return None 
  24.     ip = struct.unpack('16sH2x4s8x', res)[2
  25.     return socket.inet_ntoa(ip) 
  26. def docker_container_all(): 
  27.     docker_container=docker_client.containers(all=True
  28.     container_name=[] 
  29.     container_stop_name=[] 
  30.     for i in docker_container: 
  31.         container_name.append(i['Names']) 
  32.     for b in container_name: 
  33.         for c in b: 
  34.             container_stop_name.append(c[1::]) 
  35.     return container_stop_name 
  36. def docker_container_run(): 
  37.     docker_container=docker_client.containers(all=True
  38.     container_name=[] 
  39.     container_stop_name=[] 
  40.     for i in docker_container: 
  41.         if re.match('Up',i['Status']): 
  42.             container_name.append(i['Names']) 
  43.     for b in container_name: 
  44.         for c in b: 
  45.             container_stop_name.append(c[1::]) 
  46.     return container_stop_name 
  47. def check_container_stats(name): 
  48.     container_collect=docker_client.stats(name) 
  49.     old_result=eval(container_collect.next()) 
  50.     new_result=eval(container_collect.next()) 
  51.     container_collect.close() 
  52.     cpu_total_usage=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage'
  53.     cpu_system_uasge=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage'
  54.     cpu_num=len(old_result['cpu_stats']['cpu_usage']['percpu_usage']) 
  55.     cpu_percent=round((float(cpu_total_usage)/float(cpu_system_uasge))*cpu_num*100.0,2
  56.     mem_usage=new_result['memory_stats']['usage'
  57.     mem_limit=new_result['memory_stats']['limit'
  58.     mem_percent=round(float(mem_usage)/float(mem_limit)*100.0,2
  59.     #network_rx_packets=new_result['network']['rx_packets'] 
  60.     #network_tx_packets=new_result['network']['tx_packets'] 
  61.     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"}"}'"""%name 
  62.     network_old_result=eval(((subprocess.Popen(network_check_command,shell=True,stdout=subprocess.PIPE)).stdout.readlines()[0]).strip('\n')) 
  63.     time.sleep(1
  64.     network_new_result=eval(((subprocess.Popen(network_check_command,shell=True,stdout=subprocess.PIPE)).stdout.readlines()[0]).strip('\n')) 
  65.     #unit KB 
  66.     network_rx_packets=(int(network_new_result['rx']) - int(network_old_result['rx']))/1024 
  67.     network_tx_packets=(int(network_new_result['tx']) - int(network_old_result['tx']))/1024 
  68.     collect_time=str(new_result['read'].split('.')[0].split('T')[0])+' '+str(new_result['read'].split('.')[0].split('T')[1]) 
  69.     msg={'Container_name':name,'Cpu_percent':cpu_percent,'Memory_usage':mem_usage,'Memory_limit':mem_limit,'Memory_percent':mem_percent,'Network_rx_packets':network_rx_packets,'Network_tx_packets':network_tx_packets,'Collect_time':collect_time} 
  70.     #write_mysql(msg) 
  71.     return msg 
  72. def write_mysql(msg): 
  73.     container_name=msg['Container_name'
  74.     search_sql="select dc.id from docker_containers dc,docker_physics dp where dc.container_name='%s' and dp.physics_internal_ip='%s';"%(container_name,local_ip) 
  75.     n=mysql_cur.execute(search_sql) 
  76.     container_id=[int(i[0]) for i in mysql_cur.fetchall()][0
  77.     insert_sql="insert into docker_monitor(container_id,cpu_percent,memory_usage,memory_limit,memory_percent,network_rx_packets,network_tx_packets,collect_time) values('%s','%s','%s','%s','%s','%s','%s','%s');"%(container_id,msg['Cpu_percent'],msg['Memory_usage'],msg['Memory_limit'],msg['Memory_percent'],msg['Network_rx_packets'],msg['Network_tx_packets'],msg['Collect_time']) 
  78.     n=mysql_cur.execute(insert_sql) 
  79. if __name__ == "__main__"
  80.     local_ip=get_local_ip('ovs1'
  81.     if local_ip is None
  82.   local_ip=get_local_ip('em1'
  83.     etcd_client=etcd.Client(host='127.0.0.1', port=4001
  84.     docker_client = Client(base_url='unix://var/run/docker.sock', version='1.17'
  85.     mysql_conn=MySQLdb.connect(host='10.10.27.10',user='ops',passwd='1FE@!#@NVE',port=3306,charset="utf8"
  86.     mysql_cur=mysql_conn.cursor() 
  87.     mysql_conn.select_db('devops'
  88.     #docker_container_all_name=docker_container_all() 
  89.     docker_container_run_name=docker_container_run() 
  90.     if len(docker_container_run_name) == 1
  91.   num=1 
  92.     elif len(docker_container_run_name) >= 4 and len(docker_container_run_name) <=8
  93.   num=4 
  94.     elif len(docker_container_run_name) >8 and len(docker_container_run_name) <=15
  95.   num=8 
  96.     elif len(docker_container_run_name) >15 and len(docker_container_run_name) <=30
  97.   num=20 
  98.     else
  99.   num=40 
  100.     pool = multiprocessing.Pool(processes=num) 
  101.     scan_result=[] 
  102.     #collect container monitor data 
  103.     for i in docker_container_run_name: 
  104.         pool.apply_async(check_container_stats, (i,)) 
  105.         scan_result.append(pool.apply_async(check_container_stats, (i,))) 
  106.     pool.close() 
  107.     pool.join() 
  108.     result=[] 
  109.     for res in scan_result: 
  110.         if res.get() is not None
  111.       write_mysql(res.get()) 
  112.   else
  113.       print 'fail is %s'%res.get() 
  114.     mysql_conn.commit() 
  115.     mysql_cur.close() 
  116.     mysql_conn.close() 

下面是把此腳本放入crontab里每分鐘收集一下

  1. */1 * * * * python /root/collect_docker_monitor_data_multi.py >>/root/docker_log/docker_monitor.log 2>&1 

另外說明一下,上面的監控數據圖形化使用highstock,使用ajax進行動態加載數據,每次獲取容器所有時間監控數據。有問題請留言。
 

 

責任編輯:Ophira 來源: 51CTO
相關推薦

2015-07-01 10:25:07

Docker開源項目容器

2015-06-17 09:43:45

云計算應用傳統企業應用云平臺

2014-11-25 11:33:35

2015-05-15 10:04:28

localhost

2011-03-29 12:45:28

Cacti

2015-04-13 11:34:56

Windows DocNano ServerPaaS

2011-03-29 13:15:10

Cacti主機模板

2011-03-29 13:06:29

Cacti作圖模板

2015-06-17 09:34:09

軟件定義存儲 云存儲

2014-12-29 12:27:43

ZabbixSNMP

2013-12-21 19:58:32

SDN應用資源管理平臺SDN

2014-12-12 10:46:55

Azure地緣組affinitygro

2015-06-15 13:06:23

項目項目經驗

2015-09-29 10:26:51

pythonlogging模塊

2015-04-22 10:28:40

2015-05-27 09:17:50

AzureDocker

2014-07-10 10:43:49

zabbix主從監控

2014-12-01 10:33:51

Python

2015-07-29 13:46:27

OpenStackIcehouse私有云實戰部署

2015-05-11 10:10:16

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区三区视频 | 久久午夜视频 | 男人天堂久久 | 国产成人精品一区二区三区四区 | 亚洲视频国产 | 日韩免费视频 | 日韩欧美在线精品 | a级片在线观看 | 天天操夜夜骑 | 日韩欧美一区二区三区免费观看 | 亚洲精品一区二区三区丝袜 | 成人一区二区三区 | 毛片一级片 | 日韩精品人成在线播放 | av一级毛片| 日韩精品 | 亚洲精品电影网在线观看 | 99九色| 国产一区二区在线播放视频 | 国产精品美女 | 精品一区二区三区中文字幕 | 国产精品一区在线播放 | www.久久99 | 久在线 | 精品九九九 | 91污在线| 国产日韩精品视频 | 日韩欧美在线视频观看 | 久久丁香 | 亚洲精品乱码久久久久久久久 | 亚洲成人高清 | 成年人在线观看视频 | 韩国久久精品 | 一级片在线观看 | 免费观看一级毛片 | 国产色网 | 亚洲成人精品一区二区 | 影音先锋中文字幕在线观看 | 午夜影晥| 欧美一级特黄aaa大片在线观看 | 国产日韩91 |