这4个文章是一个系列的,关于如何配置 StatsD,Graphite以及如何使用两者来显示访问信息:
- StatsD学习:http://blog.csdn.net/puncha/article/details/9083061
- 在Ubuntu Server 12.04 x64下安装Graphite: http://blog.csdn.net/puncha/article/details/9092765
- StatsD与Graphite联合作战:http://blog.csdn.net/puncha/article/details/9112293
- Graphite实战:http://blog.csdn.net/puncha/article/details/9137001
前几天学习了StatsD和Graphite,这几天开始把他们俩挂接起来。没想象中那么容易,费了好一番功夫。
1,创建一个新目录,开始一个新的NodeJs项目,比如SG (我已经上传到Github上了:https://github.com/puncha/StatsDnGraphite.git)
2,使用“npm install statsD --save”来安装StatsD服务器
3,进入“SG\node_modules\statsD目录,拷贝一份exampleConfig.js并重名名为config.js。
4,修改config.js,改成如下内容(GraphiteHost要改成你Graphite服务器地址,端口默认识2003,前文也提到我们公司比较特殊,所以我改成了2013,backends我使用了graphite和console,这样就可以看到控制台输出了,debug设置成true,可以看到一些调试信息,legacyNamespace可以忽略掉):
{
graphitePort: 2013,
graphiteHost: "10.31.143.230",
port: 8125,
backends: [ "./backends/graphite", "./backends/console" ],
debug: true,
legacyNamespace: false
}
5,使用”node stats.js config.js“来启动statsD服务。好了,到此为止,statsD服务器就配置好了。
6,接下来就是准备写程序了。
7,回到SG\目录,使用”npm install statsD-client --save“来安装statsD-clinet库,这个库代码比较简单,是使用socket和statsD通讯的,一共也没几行代码。
8,创建app.js,写一些简单的测试代码:
var sdc_init = require('statsd-client')
var sdc = new sdc_init({ host: 'localhost' });
sdc.increment('my.test.1', 5);
sdc.close();
9,可以稍加测试,看看statsD有没有日志显示,graphite有没有生成一个叫stats.my.test.1的计数器。
10,顺利的话,你应该能看到图表了,但是还有一个重大的问题,精度问题!statsD默认是10s一个周期(可以修改config.js的flushInterval属性),而carbon的配置是60s,所以两者不同步,会导致各种问题(参见:https://github.com/etsy/statsd/issues/32),解决方法是修改/opt/graphite/conf/storage-schemas.conf(参见:http://graphite.readthedocs.org/en/0.9.10/config-carbon.html),在default_1min_for_1day前添加下面2段(每一个时间间隔必须是第一个的倍数,也就是说,第一个是10s,那么第二个不能是12s):
[statsD]
pattern = ^stats\.
retentions = 10s:1d,30s:7d,1m:21d,15m:5y
[statsD-2]
pattern = ^stats_counts\.
retentions = 10s:1d,30s:7d,1m:21d,15m:5y
修改完,重启carbon就可以了:
/opt/graphite/bin$ sudo python carbon-cache.py stop
/opt/graphite/bin$ sudo python carbon-cache.py start
稍加配置,你应该可以看到如下图表: