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台监控)
diamond收集插件的自定义的更多相关文章
- amazeui的表单开关插件的自定义事件必须添加.bootstrapSwitch 命名空间,给了我们什么启示
amazeui的表单开关插件的自定义事件必须添加.bootstrapSwitch 命名空间,给了我们什么启示 一.总结 一句话总结:详细看使用文档(说明文档说的真的是非常详细呢,不过循序渐进,不同阶段 ...
- spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingExcept ...
- 浅析MyBatis(三):聊一聊MyBatis的实用插件与自定义插件
在前面的文章中,笔者详细介绍了 MyBatis 框架的底层框架与运行流程,并且在理解运行流程的基础上手写了一个自己的 MyBatis 框架.看完前两篇文章后,相信读者对 MyBatis 的偏底层原理和 ...
- 【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架
技术推荐 自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-pl ...
- jquery.autocomplete.js 插件的自定义搜索规则
这二天开始用jquery.autocomplete这个自动完成插件.功能基本比较强大,但自己在实际需求中发现还是有一处不足!问题是这样:当我定义了一个本地数据JS文件时,格式为JSON式的数组.如下: ...
- Atom的追踪函数插件和自定义语法
atom网盘链接:http://pan.baidu.com/s/1nvt7vJz 密码:om26 追踪函数插件 直接使用最新autom版本傻瓜式安装 名字:goto-definition 地址:htt ...
- Maven-07: 插件的自定义绑定
除了内置绑定以外,用户还能够自己选择将某个插件目标绑定到生命周期的某个阶段上,这种自定义绑定方式能让Maven项目在构建过程中执行更多更富特色的任务. 一个常见的例子是创建项目的源码jar包.内置的插 ...
- Flask系列09--Flask中WTForms插件,及自定义验证器
一.概述 django中的forms组件非常的方便,在flask中有WTForms的组件实现的也是类似的功能, 安装这个插件 二.简单使用 文档地址https://wtforms.readthedoc ...
- 设置tabBar、使用第三方插件和自定义组件使用简单实例
创建小程序项目进入时填写,因需要用上第三方插件,所以要填上开发者的APPID,前往微信公众平台去注册一个账号获取APPID,在设置=>开发设置可以查看相关appid信息 简单思路 底部导航添加三 ...
随机推荐
- DFS深度优先搜索算法
Lake Counting(POJ No.2386) 有一个大小为N*M的园子,雨后积起了水.八连通的积水被认为是在一起的.请求出园子里共有多少个水洼?(八连通是指下图中相对w的*部分) * * * ...
- mac 解决安卓模拟器链接不上网络
方法1.临时方法,每次启动都要加114.114.114.114 1.进入到下面的目录 /Users/anxiaodong/Library/Android/sdk/emulator 2.执行以下命令 e ...
- C# Timer用法及实例讲解
摘自:http://www.cnblogs.com/xcsn/archive/2013/05/10/3070485.html 1.C# Timer用法及实例详解 http://developer.51 ...
- maven 项目问题集锦
问题1: 新建的maven项目,没有src/main/java 源文件夹,创建时提示已经存在,创建不了 解决方法: 右键build path -> configure build path -& ...
- 使用Volley获取验证码
时间紧张,直接上代码 public class MainActivity extends AppCompatActivity { private RequestQueue queues ; Strin ...
- hive drop和恢复partition external table
在hdfs目录:/user/xx/table/test_external 保存 test_external 表数据 先建表,使用列式存储格式 CREATE external TABLE `test_e ...
- java并发与多线程面试题与问题集合
http://www.importnew.com/12773.html https://blog.csdn.net/u011163372/article/details/73995897 ...
- uart与usart区别
uart 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分.它将要传输的资料在串 ...
- Redis---04Redis持久化
一.RDB(保存的是数据) 1.概念: 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里. 2.执行过程: Redis会单独创建(fork ...
- Dev中配置graphcis.h
下载地址:http://winbgim.codecutter.org/ 搞得自己有点奔溃 没成功 尝试了全网的所以的方法都没成功