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

【博文推薦】Docker高級應(yīng)用之資源監(jiān)控

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

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

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

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

默認docker 1.5版本有stats命令查看容器的cpu使用率、內(nèi)存使用量與網(wǎng)絡(luò)流量,但此功能有2個必須:

1、必須是docker 1.5版本

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

我開發(fā)的監(jiān)控里docker是1.5版本,并且通過使用ifconfig來獲取容器rx或rx量來獲取容器流量,解決了必須使用docker默認網(wǎng)橋才可以獲取流量數(shù)據(jù)。

下面是容器資源監(jiān)控效果圖

1、平臺里資源監(jiān)控界面

 

Docker高級應(yīng)用之資源監(jiān)控

2、查看容器yangjing-test的cpu使用率資源監(jiān)控

 

Docker高級應(yīng)用之資源監(jiān)控

3、查看內(nèi)存使用量資源監(jiān)控

 

Docker高級應(yīng)用之資源監(jiān)控

4、查看容器網(wǎng)絡(luò)流量信息

 

Docker高級應(yīng)用之資源監(jiān)控

#p#

下面是監(jiān)控數(shù)據(jù)收集腳本信息

使用python寫的,由于需要往mysql里寫入數(shù)據(jù),所以需要安裝MySQLdb模塊以及服務(wù)端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 

另外說明一下,上面的監(jiān)控數(shù)據(jù)圖形化使用highstock,使用ajax進行動態(tài)加載數(shù)據(jù),每次獲取容器所有時間監(jiān)控數(shù)據(jù)。有問題請留言。
 

 

責(zé)任編輯:Ophira 來源: 51CTO
相關(guān)推薦

2015-07-01 10:25:07

Docker開源項目容器

2015-06-17 09:43:45

云計算應(yīng)用傳統(tǒng)企業(yè)應(yīng)用云平臺

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應(yīng)用資源管理平臺SDN

2014-12-12 10:46:55

Azure地緣組affinitygro

2015-06-15 13:06:23

項目項目經(jīng)驗

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主從監(jiān)控

2014-12-01 10:33:51

Python

2015-07-29 13:46:27

OpenStackIcehouse私有云實戰(zhàn)部署

2015-05-11 10:10:16

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国产精品日韩在线 | 欧美黄色精品 | 欧美视频精品 | www.欧美.com | 免费在线观看av片 | 久久一区 | 成人免费小视频 | 成人国产精品免费观看视频 | 欧美成人a∨高清免费观看 91伊人 | 成人精品一区 | 老司机久久| 国产精品一区二区三区在线 | 亚洲精品视频播放 | 国产在线一区二区三区 | 午夜视频在线免费观看 | 精品亚洲永久免费精品 | 国产高清精品一区二区三区 | 久久y| 亚洲国产激情 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 久草精品视频 | 羞羞的视频免费观看 | 欧美激情综合 | 亚洲国产成人精品女人 | 99精品99 | 午夜影院在线免费观看视频 | 久久久久久久久久久91 | 99热国产精品 | 99免费在线观看视频 | 国产激情视频网站 | 久久福利电影 | 极品国产视频 | 武道仙尊动漫在线观看 | 在线视频一区二区三区 | 操久久 | 亚洲一区二区三区视频在线 | 婷婷色网 | 中文在线视频 | 性网址| 一级毛片视频在线 |