博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用graphite把收集到的数据渲染成图片
阅读量:6176 次
发布时间:2019-06-21

本文共 2347 字,大约阅读时间需要 7 分钟。

在这里我先讲解下他和cacti nagios的区别~  还有我们为什么要用他~

cacti 是通过snmp来进行抓数据,当然后期可以通过snmp进行exec调取脚本中的数据

nagios是用来监控服务器的各种的状态,当然通过pnp也可以实现画图

但是我为什么要用graphite,其实他就一个功能,把收到的数据展现到页面上~  

就这一个功能,我感觉就够用了~  

需求:

脚本的执行的效率

系统某个日志的分析得到的数值

在线人数

到各个网络节点的质量,延迟

公司的开发人员想看看api的调用次数

某个程序的调用的次数

每个进程延迟的时间统计

这些都可以很好的画图,比自己用rrdtool画图要方便的多~

一、 Graphite 项目简介

Graphite是一个企业级的监控工具,可以在廉价机硬件上运行。

二、 Graphite 功能

Graphite是一个画图工具,将数据以图形的方式展现出来。它主要做两件事:

  1. 存储时间序列数据

  2. 根据需要呈现数据的图形

Graphite不收集数据,有一些工具知道如何发送数据给Graphite。虽然需要一点代码,但是非常简单。

三、 简单架构

Graphite由三个软件组件组成:

  1. carbon - 一个守护进程,监听时间序列数据

  2. whisper - 一个简单的数据库库,用来存储时间序列数据,在设计上类似于

  3. graphite webapp - webapp,使用 来根据需要呈现图形

架构图如下:

Graphite High Level

在这个图中我们可以看到Carbon先将数据写入到Whisper数据库文件中,然后Graphite Webapp去读取这个数据,然后显示出图形。但是实际上这个体系采用了缓存,数据可能先到缓存中,然后Webapp读取,显示出图形。这也是为什么在主机I/O反应不过来时Webapp的图形仍能以接近实时的方式显示。

相当简单,通常大部分的精力花在最开始收集数据时。当你发送数据点给Carbon, 他们马上可以在webapp中画图。webapp 提供几种方式创建和显示图形,包括简单的 ,这种呈现的方式可以很方便地将图形嵌入到其它Web页面。

四、 使用效果

下图是在浏览器中的效果:

shell的例子

 
  1. ORT=2003

  2. SERVER=graphite.your.org

  3. echo "local.random.diceroll 4 `date +%s`" | nc ${SERVER} ${PORT};

python的例子

 
  1. #!/usr/bin/python

  2. import sys

  3. import time

  4. import os

  5. import platform

  6. import subprocess

  7. from socket import socket

  8. CARBON_SERVER = '127.0.0.1'

  9. CARBON_PORT = 2003

  10. delay = 60

  11. if len(sys.argv) > 1:

  12. delay = int( sys.argv[1] )

  13. def get_loadavg():

  14.  # For more details, "man proc" and "man uptime"

  15.  if platform.system() == "Linux":

  16.    return open('/proc/loadavg').read().strip().split()[:3]

  17.  else:

  18. command = "uptime"

  19. process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)

  20.    os.waitpid(process.pid, 0)

  21. output = process.stdout.read().replace(',', ' ').strip().split()

  22. lenlength = len(output)

  23.    return output[length - 3:length]

  24. sock = socket()

  25. try:

  26.  sock.connect( (CARBON_SERVER,CARBON_PORT) )

  27. except:

  28.  print "Couldn't connect to %(server)s on port %(port)d, is carbon-agent.py running?" % { 'server':CARBON_SERVER, 'port':CARBON_PORT }

  29.  sys.exit(1)

  30. while True:

  31. now = int( time.time() )

  32. lines = []

  33.  #We're gonna report all three loadavg values

  34. loadavg = get_loadavg()

  35.  lines.append("system.loadavg_1min %s %d" % (loadavg[0],now))

  36.  lines.append("system.loadavg_5min %s %d" % (loadavg[1],now))

  37.  lines.append("system.loadavg_15min %s %d" % (loadavg[2],now))

  38. message = '\n'.join(lines) + '\n' #all lines must end in a newline

  39.  print "sending message\n"

  40.  print '-' * 80

  41.  print message

  42.  print

  43.  sock.sendall(message)

  44.  time.sleep(delay)

转载地址:http://efwda.baihongyu.com/

你可能感兴趣的文章
判断 SQLServer 触发器类型,支持多行
查看>>
SQL表连接查询(inner join、full join、left join、right join)
查看>>
阿里云OTS(开放结构化数据服务)可视化管理工具的设计和功能介绍
查看>>
Github创建分支
查看>>
转换PHP脚本成为windows的执行程序
查看>>
Python组织文件 实践:将带有美国风格日期的文件改名为欧洲风格日期
查看>>
实现iOS7上tableView的切割线像iOS6中的效果
查看>>
使用阿里云接口进行银行卡四要素实名认证
查看>>
聊聊excel生成图片的几种方式
查看>>
20 万网络节点背后的数据创新应用
查看>>
理论 | 朴素贝叶斯模型算法研究与实例分析
查看>>
docker安装gitlab只需要3分钟
查看>>
Android菜鸟学习js笔记 一
查看>>
Java基础之SPI机制
查看>>
使用js控制滚动条的位置
查看>>
【Tornado源码阅读笔记】tornado.web.Application
查看>>
lsyncd搭建测试
查看>>
移动web开发之像素和DPR
查看>>
nginx+tomcat+redis实现session共享
查看>>
UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(二)
查看>>