分布式监控系统开发【day38】:监控数据如何画图(九)
生活随笔
收集整理的這篇文章主要介紹了
分布式监控系统开发【day38】:监控数据如何画图(九)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、畫圖代碼
1、收集處理數據
class GraphGenerator(object):'''generate graphs'''def __init__(self,request,redis_obj):self.request = requestself.host_id = self.request.GET.get('host_id')self.service_name = self.request.GET.get('service_key')self.index_key = self.request.GET.get('index_key')self.time_range = self.request.GET.get('time_range')self.sub_service_name = self.request.GET.get('sub_service_key')self.redis = redis_objprint("sub service key:", self.sub_service_name)def get_graph_data(self):#data_store_key = "StatusData_%s_%s_latest" %(self.host_id,self.service_name)data_store_key = "StatusData_%s_%s_%s" %(self.host_id,self.service_name,self.time_range)data_set = self.redis.lrange(data_store_key,0,-1)print("data store key:", data_store_key)print("data point nums:", len(data_set))#print("data points:", data_set)service_obj = models.Service.objects.get(name=self.service_name)data_dic = {} #store graph data laterfor item in service_obj.items.select_related():data_dic[item.key] = []if data_set: #make sure data set not emptyprint("service data for graph:", data_dic)if self.sub_service_name == None or self.sub_service_name == 'undefined':for data_point in data_set:#data_point sample data:('-->', {u'status': 0, u'iowait': u'0.00', u'system': u'1.01', u'idle': u'96.98', u'user': u'2.01', u'steal': u'0.00', u'nice': u'0.00'}, 1461840915.038072)val,timestamp = json.loads(data_point)if val:for k,v in val.items():if k in data_dic:'''if len(data_dic[k]) > 0: #不是第一次存值last_point_save_time = data_dic[k][-1][0] #microsecondsdata_point_interval =settings.STATUS_DATA_OPTIMIZATION[self.time_range][0]if timestamp*1000 - last_point_save_time > data_point_interval:#這里出現中斷了data_dic[k].append([last_point_save_time + data_point_interval,0])else:#沒有中斷過,什么都 不用做哈哈pass'''if type(v) is not list:data_dic[k].append([timestamp*1000,float(v)])else: #v = [avg,max,min,mid]data_dic[k].append([timestamp*1000,float(v[0])]) #暫時只往前臺 返回 average數據else: #has sub serviceprint("\033[44;1m------------subservice key: %s, %s\033[0m" %(self.sub_service_name,self.service_name))for data_point in data_set:#data_point sample data:('-->', {u'status': 0, u'iowait': u'0.00', u'system': u'1.01', u'idle': u'96.98', u'user': u'2.01', u'steal': u'0.00', u'nice': u'0.00'}, 1461840915.038072)val,timestamp = json.loads(data_point)if val:if val.get('data'):for sub_service_key,v_dic in val['data'].items():for k,v in v_dic.items():if k in data_dic:if type(v) is not list:data_dic[k].append([timestamp*1000,float(v)])else: #v = [avg,max,min,mid]data_dic[k].append([timestamp*1000,float(v[0])]) #暫時只往前臺 返回 average數據for k,v in data_dic.items():print(k,v)return data_dic2、生成流量圖
from monitor import models import json from CrazyMonitor import settingsclass GraphGenerator2(object):'''產生流量圖'''def __init__(self,request,redis_obj):self.request = requestself.redis = redis_objself.host_id = self.request.GET.get('host_id')self.time_range = self.request.GET.get('time_range')def get_host_graph(self):'''生成此主機關聯的所有圖:return:'''host_obj = models.Host.objects.get(id=self.host_id)service_data_dic = {}template_list = list(host_obj.templates.select_related())for g in host_obj.host_groups.select_related():template_list.extend(list(g.templates.select_related()))template_list = set(template_list)for template in template_list:for service in template.services.select_related():service_data_dic[service.id] = {'name':service.name,'index_data':{},'has_sub_service': service.has_sub_service,'raw_data':[],'items': [item.key for item in service.items.select_related() ]}'''if not service.has_sub_service:for index in service.items.select_related():service_data_dic[service.id]['index_data'][index.key] = {'id': index.id,'name':index.name,'data':[]}#else: #like nic service'''print(service_data_dic)#service_data_dic#開始取數據for service_id,val_dic in service_data_dic.items():#if val_dic['has_sub_service'] == False:service_redis_key = "StatusData_%s_%s_%s" %(self.host_id,val_dic['name'],self.time_range)print('service_redis_key',service_redis_key)service_raw_data = self.redis.lrange(service_redis_key,0,-1)service_raw_data = [item.decode() for item in service_raw_data]service_data_dic[service_id]['raw_data'] = service_raw_datareturn service_data_dic3、畫圖展示
二、國外畫圖軟件hcharts
1、官方網址
www.hcharts.cn2、靜態圖講解
3、動態圖片講解
動態看紅框
4、API使用
1、數據格式
?2、api文檔
https://api.hcharts.cn/6/highcharts/index.html截圖
3、文檔教程
https://www.hcharts.cn/docs?截圖
三、國內百度echarts
1、官方網址
http://echarts.baidu.com/index.html2、地圖展示
3、3D圖展示
4、文檔
1、地址
http://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts2、截圖
?
轉載于:https://www.cnblogs.com/luoahong/p/9618028.html
總結
以上是生活随笔為你收集整理的分布式监控系统开发【day38】:监控数据如何画图(九)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作业一(高见老师收)
- 下一篇: joomla建站-双语CMS系统开发的实