Graphite
Graphite 是一款开源的监控绘图工具。
Graphite 可以实时收集、存储、显示时间序列类型的数据(time series data)。它主要有三个部分构成:

  • carbon —— 基于 Twisted 的进程,用来接收数据;
  • whisper —— 专门存储时间序列类型数据的小型数据库;
  • graphite webapp —— 基于 Django 的网页应用程序。
<ignore_js_op>

向 Graphite 发送数据
Graphite 的使用非常简单。我们可以定义一个被观测量(Metric)。Metric 使用键/值的数据类型。只要不断发送 观测量 : 观测值 这一键值组合,就可以得到以时间为 X 轴,观测值为 Y 轴的图。
当我们使用诸如 collectd、Sensu 之类的工具收集到数据之后,只需要向 Graphite 的服务器发送以下格式的 TCP 报文即可:

  1. <metric name> <metric value> <metric timestamp>

复制代码

例如,有一个 Metric 叫作 local.metric.random,可以用下面的 Bash 命令发送当前时刻的值 4。

  1. PORT=2003
  2. SERVER=graphite.your.org
  3. echo “local.metric.random 4 `date +%s`” | nc -q0 ${SERVER} ${PORT}

复制代码

类似地,使用其它编程语言时,可以使用 Socket 发送数据。
另外,Graphite 的 Metric 名称支持以 . 作为分隔符的多级嵌套。例如我可以定义下面三个 Metric。

  • webserver.system.cpu_usage
  • webserver.system.mem_load
  • webserver.network.input

Graphite 将以树型结构展示这三个 Metric。因此,使用 Graphite 的第一步就是给 Metric 选取一个合适的名称。关于如何组织 Metric 的名称,可以参阅文章 Practical Guide to StatsD/Graphite Monitoring。

Graphite Event
除了支持简单的键/值数据类型,Graphite 还可以通过 Events 来存储更复杂的数据。简而言之,Graphite Events 使用了 tag 和 data 两个键来存储更多的信息。
我们可以使用 HTTP POST 向 Graphite 发送一个 Event。

  1. curl -X POST “http://graphite.your.org/events” -d \'{“what”: “Deployment”, “tags”: “webserver”, “data”: “Deploy webserver”}\’

复制代码

下文将会通过一个具体的实例来介绍 Events 的使用场景。
Grafana
鉴于 Graphite 的界面过于简单,功能比较单一,可以使用 Grafana 作为 Graphite 的控制台。 Grafana 是一款开源的图形控制台,有很多 不错的特性 ,还可以访问官网提供的 Live Demo 来体验 Grafana。

设置 Grafana,只需编辑 config.js 设置数据来源 1。

  1. datasources: {
  2.   graphite: {
  3.     type: \’graphite\’,
  4.     url: “http://my.graphite.server.com:8080”,
  5.   }
  6. },

复制代码

具体的配置教程可以参见 官方文档 。

实例
我实习所在公司使用 Jenkins 部署代码。在部署完成之后,我添加了一段 post-build script 执行下面的脚本。

  1. #!/bin/bash
  2. HOST=http://graphite.your.org/events
  3. echo \’Posting a deployment event to Graphite\’
  4. curl -X POST $HOST -d \'{“what”: “Deployment”, “tags”: “webserver,prd”, “data”: \”$BUILD_URL\”}\’

复制代码

这样,每次部署完成之后都会发送一个 Deployment Event 到 Graphite。接着,可以在 Graphite 里添加 drawAsInfinite(events(\’prd\’)) 或者在 Grafana 里使用 Annotations Page 来绘制一幅图显示代码部署的 Events。

利用 Graphite Events 和 Metrics,我们可以将代码部署和其他指征叠加在一幅图里,从而分析每次代码部署和其它指征的关系。

比如,在 Tracking Every Release 一文中,作者使用了该方法将 PHP Warning 和 Code deploy 叠加在一幅图里。

<ignore_js_op>

从图中,我们可以发现第一次代码部署之后导致了大量的警告信息,经过随后的两次 Hotfix 之后,警告信息基本消除。

总结
本文非常简要地介绍了 Graphite 的 Grafana 的一些特性和使用场景。我也是在实习当中第一次接触到这两个工具,很多具体的细节还在摸索之中。
总之,Graphite 是一个易扩展,使用简便的监控绘图工具,在这里推荐给大家使用。
参考文献
Graphite Tip – A Better Way to Store Events
Tracking Every Release
Making Annotations in Graphana
Grafana 最新的 2.0 较 1.9 有较大的变化,不再使用 config.js 来进行配置,需要将配置保存到数据库中。相应章节暂未更新,俟后补。 ↩

版权声明:本文为princessd8251原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/princessd8251/articles/6249380.html