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