graphite学习笔记

架构组成

Graphite由三部分组成

  • Carbon: 监听时序数据的高性能服务
  • Whisper: 用于存储时序数据的简单的数据库
  • Graphite-web: 提供Graphite渲染图表及后台的用户数据及API接口

20190114154745709489510.png

如何将指标数据写入Graphite

1
echo "foo.bar 1 `date +%s`" | nc localhost 2003

指标数据将存储在Whisper数据库中,位于Graphite文件系统的<prefix>/storage/whisper/foo/bar.wsp (大多数情况下,Graphite路径前缀是/opt/graphite)。在Graphite Composer中创建新的图表后,你会发现bar以嵌套的形式存在于foo目录下

在Graphite中,指标、图、后台等使用以. 分割的命名空间结构。这对于想使用应用、服务器、数据中心、甚至是提交人等来分组和组织指标信息是极为方便的

以下推荐几种常见的写入graphite的方案

定时shell任务

有时你只是需要一个快捷的方式来记录指标,可以使用定时任务的方式来记录。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
CARBON_HOST="10.10.10.5"
CARBON_PORT="2003"
METRIC_NAME="debug.jdixon.procs.bad_java_app"
TIMESTAMP=`date +%s`
NUMBER_OF_WAYWARD_PROCS=`ps auwx | grep MY_BAD_JAVA_APP | wc -l`
echo ${METRIC_NAME} ${NUMBER_OF_WAYWARD_PROCS} ${TIMESTAMP} | nc ${CARBON_HOST} ${CARBON_PORT}

使用StstsD采集应用指标

记录应用性能信息是很有必有的。多亏了像StatsD这类工具,我们可以异步测量应用非阻塞,不必担心阻塞行为,也不必自行实现收集聚合机制

Etsy在早在2011年发布了最初的StatsD,做为一个开源的指标聚合器。到目前为止,围绕StatsD已经建立了庞大的生态系统。只需几行代码,你便可以将应用的数据以常规非阻塞的形式发往Graphite

1
2
3
4
5
6
7
8
9
gem "statsd-ruby"
# Set up a global Statsd client for a server on localhost:8125
$statsd = Statsd.new 'localhost', 8125
# Send some stats
$statsd.increment 'app.foo.my_counter'
$statsd.timing 'app.foo.my_timer', 320
$statsd.gauge 'app.foo.my_gauge', 100

使用Collectd采集主机指标

监控服务器信息是Graphite作为时间序数据库最常用的用法。Collected是一个非常流行的采集代理,性能好(使用C语言编写),配置简易,并拥有大量的读写库插件。

1
2
sudo apt-get update
sudo apt-get install -y collectd

我们编写一个发送指标数据到Graphite服务器的最小配置实现。修改配置文件(/etc/collected/collectd.conf)并重启collectd

1
2
3
4
5
6
7
8
LoadPlugin write_graphite
<Plugin write_graphite>
<Node "example">
Host "localhost"
Port "2003"
Prefix "collectd"
</Node>
</Plugin>

此时你应该可以在collectd命名空间下看到来自运行collectd的服务器的指标信息

其他可选传输方式

Carbon除了支持纯文本传输外,还支持AMQP、Python的Pickle格式。如果你对此不太了解的话,建议你读读官方文档)中的相关选项