Graphite简介

Graphite引入的前提

       以前公司的监控系统使用mysql作过物理设备cpu,内存,磁盘和网卡等资源的数据统计功能,可是效果并很差。由于这些统计数据不适合用mysql来存储,它们的量太大了,量一大,mysql数据库查询响应就变得很是缓慢。因此后来就把cpu,内存,磁盘和网卡等资源的数据统计功能去掉了。前端

         最近对监控系统又增长了一些需求,主要也是一些数据统计的功能。因此若是还按之前的路来走,使用mysql来作,那么结局必然跟cpu,内存,磁盘和网卡等资源的数据统计功能是同样的。因此咱们不能走老路,咱们必须寻找新的解决方案。mysql

        后来通过调研,咱们找到了Graphite这个工具。它天生就是用来作数据统计功能的,正好知足咱们目前的需求,因此咱们对它进行了研究。web

Graphite简介

       Graphite是一个用Python写的web应用,是一个企业级的系统监控工具,能够在廉价机硬件上运行。它由三个软件组件组成:sql

1:carbon - 一个Twisted守护进程,监听并接收时间序列数据shell

2:whisper - 一中固定大小的数据库,用来存储时间序列数据,在设计上相似于RRD数据库

3:graphite-web – 使用Django框架实现的一个webapp,它能够从whisper数据库获取时间序列数据而且进行展现。微信

Graphite的系统架构以下所示:网络

        图中的metrics就是发送给Graphite系统的数据指标,这些发送过来的数据指标,首先经过carbon模块进行收集,而后存储在whisper数据库中,最后graphite-web从whisper数据库中获取这些数据指标并进行展现。架构

如何给Graphite喂数据

         Graphite不负责收集数据,数据的收集工做是由使用Graphite的人来作的。也就是说图中metrics的发送工做是由使用Graphite的人来作的。你想使用Graphite存储什么数据,你就给Graphite发送什么数据。Graphite采用简单的文本协议,给Graphite发送数据指标时,使用它定义好的数据格式给他发送数据指标就能够。app

Graphite的指标数据的文本格式定义以下:

metric_path value timestamp\n

1:metric_path : 指标名称

2:value : 指标值

3;timestamp : 时间戳

下面是使用shell给Graphite发送指标的例子:

ORT=2003

SERVER=graphite.your.org

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


   若是要使用代码给Graphite喂数据,那么应该是使用下面几个步骤:

   1:使用Graphite所在机器的IP和端口(2003或者2004)创建一个到Graphite的网络链接

   2:收集数据指标

   3:把收集的数据指标格式化成“metric_path value timestamp\n“格式的字符串

   4:把格式化后的字符串经过以前创建的网络链接发送出去

Graphite跟现有监控系统整合

若是现有的监控系统想使用Graphite来作数据统计相关的功能,须要作如下三件事情:

1:在收集端添加给Graphite发送数据指标的代码

2:在展现端使用graphite-web提供的API接口获取whisper数据库里面的数据,并生成适合现有监控系统的API接口,供监控系统前端页面使用

3:增长各项指标的前端展现页面,展现这些指标

        固然目前对于收集端和展现端,都有不少现成的开源组件可使用,好比指标收集端的工具备Statsd等,指标展现端口的工具备grafana等。

         使用开源的工具,仍是基于graphite作二次开发,视本身的实际状况而定,应该来讲都不复杂。

-----------------------------------------------------

欢迎关注个人微信公众号 ^_^

相关文章
相关标签/搜索