前言
在豆瓣开源项目里面有个graph-index,
提供监控服务器的状态的目录索引,基于graph-explorer.
类似衍生物很多,就包括我要说的本文用到的项目.先看看我的测试环境的几个截图
一些关键词说明
- graphite-web # graphite组件之一, 提供一个django的可以高度扩展的实时画图系统
- Whisper # graphite组件之一, 实现数据库存储. 它比rrdtool要慢,因为whisper是使用python写的,而rrdtool是使用C写的。然而速度之间的差异很小
- Carbon # 数据收集的结果会传给它, 它会解析数据让它可用于实时绘图. 它默认可会提示一些类型的数据,监听2003和2004端口
- Diamond # 他是一个提供了大部分数据收集结果功能的结合,类似cpu, load, memory以及mongodb,rabbitmq,nginx等指标.这样就不需要我大量的写各种类型,因为它都已经提供,并且它提供了可扩展的自定义类型(最后我会展示一个我自己定义的类型)
- grafana # 这个面板是基于node, kibana,并且可以在线编辑. 因为是kibana,所以也用到了开元搜索框架elasticsearch
PS: 其他工具可以参考这里Tools That Work With
Graphite原理解析
我没有看实际全部代码,大概的流程是这样的: - 启动Carbon-cache等待接收数据(carbon用的是twisted)
- 启动graphite-web给grafana提供实时绘图数据api
- 启动grafana,调用graphite-web接口获取数据展示出来
- Diamond定期获取各类要监测的类型数据发给carbon(默认是5分钟,默认一小时自动重载一次配置)
实现我这个系统需要做的事情
安装graphite相关组件(我这里用的是centos)
1 |
|
安装grafana需要的组件
1 |
|
下载Diamond和grafana
1 |
|
开始修改配置
- 添加cors支持
在/usr/lib/python2.6/site-packages/graphite/app_settings.py:
INSTALLED_APPS里面添加corsheaders,
MIDDLEWARE_CLASSES里面添加’corsheaders.middleware.CorsMiddleware’ - 使用nginx使用grafana
在nginx.conf 添加类型的一段配置
1 |
|
- 修改grafana的src/config.js:
graphiteUrl: “http://“+window.location.hostname+”:8020”, # 下面会定义graphite-
web启动在8020端口 - 修改Diamond的配置conf/diamond.conf
1 |
|
主要修改监听的carbon服务器和端口,以及要监控什么类型的数据,看我的一个全文配置
1 |
|
启动相关服务
1 |
|
在每个要搜集信息的agent上面安装Diamond,并启动:
1 |
|
自定义数据搜集类型,也就是上面的TencentCollector
1 |
|
添加你要绘图的类型. 这个就是打开grafana, 添加不同的row.给每个添加panel.选择metric的类型就好了
版权声明:本文由 董伟明 原创,未经作者授权禁止任何微信公众号和向掘金(juejin.im)转载,技术博客转载采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议
python