16boke - 一路博客

监控平台的使用

一、向carbon发布度量指标

一个度量值是任何可以随时间变化的可测量的值:

  • 每秒的请求数

  • 进程请求时间

  • CPU 利用率

一个数据点是一个元组包含:

  • 一个度量值的名字

  • 一个可度量的值

  • 在一个指定时间点(通常是一个 timestamp)

客户端应用通过发送数据点到一个 Carbon 进程来发布度量值。这个应用在 Carbon 进程的端口上建立一个 TCP 连接并以一个简单的纯文本格式发送数据点。在我们的例子中,端口是 2003。TCP 连接或许依旧是打开并根据需要重复多次使用。Carbon 进程监听进入的数据但是不给客户端发送任何响应。

数据点格式被定义成:

  • 每个数据点是一个单行文本

  • 在位置 0 是一个带点的度量名称

  • 在位置 1 是一个值

  • 在位置 2 是一个 Unix Epoch 的 timestamp

  • 以空格作为位置的分隔符

比如,这里有一些有效的数据点:

  • carbon.agents.graphite-tutorial.metricsReceived 28198 1400509108

  • carbon.agents.graphite-tutorial.creates 8 1400509110

  • PRODUCTION.host.graphite-tutorial.responseTime.p95 0.10 1400509112

客户端应用有多个方式来发布度量值:

  • 使用一个纯文本协议工具比如 netcat (nc) 命令

  • 使用 pickle 协议

  • 使用高级消息队列协议(AMQP)

  • 使用 lib 包比如 Coda Hale metrics library

为了简单起见,在这个教程中我将通过 netcat 命令使用纯文本协议。为了发布以上列出的示例数据点,运行以下命令:

sudo yum install nc
echo "carbon.agents.graphite-tutorial.metricsReceived 28198 `date +%s`" | nc localhost 2003
echo "carbon.agents.graphite-tutorial.creates 8 `date +%s`" | nc localhost 2003
echo "PRODUCTION.host.graphite-tutorial.responseTime.p95 0.10 `date +%s`" | nc localhost 2003

carbon-cache 日志文件将包含关于新的被接收到的度量值的信息,信息被存储在:

# tail -f /opt/graphite/storage/log/carbon-cache/carbon-cache-a/creates.log
19/05/2014 10:42:44 :: creating database file /opt/graphite/storage/whisper/carbon/agents/graphite-tutorial/metricsReceived.wsp (archive=[(60, 129600)] xff=0.5 agg=average)
19/05/2014 10:42:53 :: creating database file /opt/graphite/storage/whisper/carbon/agents/graphite-tutorial/creates.wsp (archive=[(60, 129600)] xff=0.5 agg=average)
19/05/2014 10:42:57 :: creating database file /opt/graphite/storage/whisper/PRODUCTION/host/graphite-tutorial/responseTime/p95.wsp (archive=[(60, 1440)] xff=0.5 agg=average)

Carbon 与 Whisper 交互来存储时间序列数据到文件系统。操作文件系统来确保数据文件已经被创建:

# ls -l /opt/graphite/storage/whisper/carbon/agents/graphite-tutorial/
total 3040
-rw-r--r--. 1 root root 1555228 May 19 10:42 creates.wsp
-rw-r--r--. 1 root root 1555228 May 19 10:42 metricsReceived.wsp
# ls -l /opt/graphite/storage/whisper/PRODUCTION/host/graphite-tutorial/responseTime/
total 20
-rw-r--r--. 1 root root 17308 May 19 10:42 p95.wsp

最后,你可以检索关于 Whisper 文件的元数据信息,使用 whisper-info 脚本:

# whisper-info.py /opt/graphite/storage/whisper/PRODUCTION/host/graphite-tutorial/responseTime/p95.wsp
maxRetention: 86400
xFilesFactor: 0.5
aggregationMethod: average
fileSize: 17308

Archive 0
retention: 86400
secondsPerPoint: 60
points: 1440
size: 17280
offset: 28

whisper-dump 脚本是一个更完整的脚本,其可以输出所有存储保留时期的原始数据以及关于 Whisper 文件的元数据信息:

# whisper-dump.py /opt/graphite/storage/whisper/PRODUCTION/host/graphite-tutorial/responseTime/p95.wsp
Meta data:
 aggregation method: average
 max retention: 86400
 xFilesFactor: 0.5

Archive 0 info:
 offset: 28
 seconds per point: 60
 points: 1440
 retention: 86400
 size: 17280

Archive 0 data:
0: 1400609220, 0.1000000000000000055511151231257827
1: 0,          0
2: 0,          0
3: 0,          0
4: 0,          0
5: 0,          0
...
1437: 0,          0
1438: 0,          0
1439: 0,          0

二、实例

统计分布式项目的请求量

[root@centos]$ cat log.sh
#!/bin/bash
ipArray=(192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13)
while [ true ]
do
date=`date +"%Y%m%d"`
count=0
for cip in ${ipArray[@]}
do
let count=count+$(ssh $cip "wc -l /usr/local/server/logs/$date/XXX-$date-*|sort -nr|head -n1" | awk '{print $1}')
done
echo `date "+%Y-%m-%d %H:%M:%S"`,XXX,$count
echo "company.project.XXX.request $count `date +%s`" | nc 192.168.1.50 2003
sleep 30
done

格式:company.project.XXX.request 100 1493342400 | nc 192.168.1.50 2003

echo "company.project.XXX.request $count `date +%s`" | nc 192.168.1.50 2003

注意:

此处向carbon发布指标数据,所以使用carbon提供的端口2003,并且满足carbon的格式要求。