diamond是与graphite配合使用的一个数据收集的软件,关于这个配置的资料很多,使用起来也比较简单,详细的安装和配置会在后面的关于整套监控系统的文章里面写到,本篇是专门讲解怎么自定义这个数据收集的插件

diamond的结构比较简单:

  • Collector 数据采集的模块
  • handlers 数据发送的模块

这里主要讲解的是Collector部分的插件的编写,diamond自身带了非常丰富的插件,可以很方便的使用自带的插件进行监控,包括ceph和cephstats这两个可以用来监控ceph的插件,弄清楚怎么去写插件会方便很多,并且能扩展原来插件所没有的数据,calamari里面的数据的收集就是通过的diamond的

本例将讲解怎么写一个监控ceph的健康状态的插件

1、diamond软件的安装

通过github上下载代码然后安装在服务器上即可

2、收集数据的py的编写

收集数据的collect的路径:

/usr/share/diamond/collectors/

2.1 创建一个目录

mkdir /usr/share/diamond/collectors/cephhealth/

2.2 创建采集的py文件

vim /usr/share/diamond/collectors/cephhealth/cephhealth.py

添加下面的内容:

# coding=utf-8
"""
本插件用于采集ceph的健康状态
"""
import diamond.collector
import json
import os
class cephhealthCollector(diamond.collector.Collector): def get_default_config_help(self):
config_help = super(cephhealthCollector, self).get_default_config_help()
config_help.update({
})
return config_help def get_default_config(self):
"""
Returns the default collector settings
"""
config = super(cephhealth, self).get_default_config()
config.update({
'path': 'ceph'
})
return config def collect(self):
"""
Overrides the Collector.collect method
""" # Set Metric Name
metric_name = "my.cephhealth.metric"
data = os.popen('ceph health -f json').read()
ddata = json.loads(data)
status = ddata['overall_status']
if status == 'HEALTH_ERR':
statuscode = 10
else:
statuscode = 0 # Set Metric Value
metric_value = statuscode # Publish Metric
self.publish(metric_name, metric_value)

以上插件注意:

cephhealthCollector 为这个插件的名称,也是diamond.conf里面设置的时候设置的值

'path': 'ceph' 这个是在最后输出结果中会显示这个名称

其他部分就是注意输出一个名称 metric_name,和最后的 metric_value 即可

中间的部分可以自己去用python去获取数值即可

3、修改diamond配置文件

vim /etc/diamond/diamond.conf

在[collectors]下面插件配置的区域添加

[[cephhealthCollector]]
enabled = true

4、重启diamond进程

/etc/init.d/diamond restart

5、检查输出的数值

可以把其他插件全部关闭,然后查看文件

/var/log/diamond/archive.log的内容

上面的插件的输出为:

servers.grafana.ceph.my.cephhealth.metric 10 1456057146

这个结果的格式为:

  • path_prefix = servers (diamond.conf中配置)
  • hostname = grafana (diamond.conf中配置)
  • get_default_config(self): path = ceph (插件py中配置)
  • metric_name = "my.cephhealth.metric" (插件py中配置)

到这来插件就完成了,写起来还是比较简单方便的,上面的地方因为ceph里面的输出的是字符串,而grafana里面的显示状态的地方使用的是数字的,所以在这里可以通过字符串转数字,然后在web界面上使用数字字符的匹配来显示这个状态

diamond的性能是很牛的,1000 台服务器每分钟总共300万个监控数值的压力也能扛下来,对于我们普通级别的使用时绰绰有余的,关于这个规模的有人写了文章,优化的时候可以参考(1000台监控

最新文章

  1. 网页前端开发:微博CSS3适用细节初探
  2. 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)
  3. java对xml文件的读取
  4. [翻译]MapReduce: Simplified Data Processing on Large Clusters
  5. 项目名 的在JSP或JAVA中的另类写法
  6. php实现自动运行文件
  7. Eclipse用法和技巧二十四:当git遇上eclipse
  8. php学习之路
  9. phpcms二次开发步骤
  10. 常用网站--前端开发类+网页设计类+平面素材类+flash类
  11. Spring 上下文
  12. HQL练习
  13. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
  14. iOS开发-继承特征详解
  15. Xilinx FPGA 移位寄存器IP延时问题
  16. Canvas 渲染模式
  17. 域scope 介绍,及查找数据
  18. 27、 jq 拖拽
  19. sublime 安装插件出现问题
  20. cnzz 模拟请求登录(传入url get data ) demo

热门文章

  1. vbox挂载共享文件夹
  2. faker使用
  3. Eclipse JSP +Tomcat 环境搭建 错误记录
  4. sqlserver安装失败,此计算机上安装了 Microsoft Visual Studio 2008 的早期版本解决方法
  5. Halcon软件介绍与图像基本知识
  6. Activiti的流程实例【ProcessInstance】与执行实例【Execution】
  7. 《3D打印与工业制造》个人总结 —— 周吉瑞
  8. 010_Java历史及特性
  9. Bitmap缩放(一)
  10. Java编程思想 笔记