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收集插件的自定义的更多相关文章

  1. amazeui的表单开关插件的自定义事件必须添加.bootstrapSwitch 命名空间,给了我们什么启示

    amazeui的表单开关插件的自定义事件必须添加.bootstrapSwitch 命名空间,给了我们什么启示 一.总结 一句话总结:详细看使用文档(说明文档说的真的是非常详细呢,不过循序渐进,不同阶段 ...

  2. 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 ...

  3. 浅析MyBatis(三):聊一聊MyBatis的实用插件与自定义插件

    在前面的文章中,笔者详细介绍了 MyBatis 框架的底层框架与运行流程,并且在理解运行流程的基础上手写了一个自己的 MyBatis 框架.看完前两篇文章后,相信读者对 MyBatis 的偏底层原理和 ...

  4. 【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架

    技术推荐 自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-pl ...

  5. jquery.autocomplete.js 插件的自定义搜索规则

    这二天开始用jquery.autocomplete这个自动完成插件.功能基本比较强大,但自己在实际需求中发现还是有一处不足!问题是这样:当我定义了一个本地数据JS文件时,格式为JSON式的数组.如下: ...

  6. Atom的追踪函数插件和自定义语法

    atom网盘链接:http://pan.baidu.com/s/1nvt7vJz 密码:om26 追踪函数插件 直接使用最新autom版本傻瓜式安装 名字:goto-definition 地址:htt ...

  7. Maven-07: 插件的自定义绑定

    除了内置绑定以外,用户还能够自己选择将某个插件目标绑定到生命周期的某个阶段上,这种自定义绑定方式能让Maven项目在构建过程中执行更多更富特色的任务. 一个常见的例子是创建项目的源码jar包.内置的插 ...

  8. Flask系列09--Flask中WTForms插件,及自定义验证器

    一.概述 django中的forms组件非常的方便,在flask中有WTForms的组件实现的也是类似的功能, 安装这个插件 二.简单使用 文档地址https://wtforms.readthedoc ...

  9. 设置tabBar、使用第三方插件和自定义组件使用简单实例

    创建小程序项目进入时填写,因需要用上第三方插件,所以要填上开发者的APPID,前往微信公众平台去注册一个账号获取APPID,在设置=>开发设置可以查看相关appid信息 简单思路 底部导航添加三 ...

随机推荐

  1. Windows快捷键与Dos命令学习

    部分Windows常用快捷键 复制:Ctrl + C 粘贴:Ctrl + V 全选:Ctrl + A 剪切:Ctrl + X 撤销:Ctrl + Z 保存:Ctrl + S 关闭窗口:Alt + F4 ...

  2. Java进阶专题(十五) 从电商系统角度研究多线程(下)

    前言 ​ 本章节继上章节继续梳理:线程相关的基础理论和工具.多线程程序下的性能调优和电商场景下多线程的使用. 多线程J·U·C ThreadLocal 概念 ​ ThreadLocal类并不是用来解决 ...

  3. Python入门基础教程-准备工作

    作为一名Python的忠实爱好者,在Python的学习过程中趟过了很多坑.不论是在基础语法.爬虫.可视化的学习,亦或是在数据挖掘的项目开展中,整个过程有痛苦也有收获,有捶胸顿足也有仰天长笑.所以在以后 ...

  4. 对于72种常用css3的使用经验

    对于72种常用css3的使用经验 保存网站源码 目的 保证有足够的css和js文件源码 拿到当前网页的整体布局 本地化 创建web项目 将web项目创建出来 在项目中创建一个文件夹 将所有的js和cs ...

  5. BootStrapValidator表单验证插件的学习和使用

    BootStrapValidator表单验证插件的学习和使用 引入标签 <script type="text/javascript" src="https://cd ...

  6. 【6】TensorFlow光速入门-python模型转换为tfjs模型并使用

    本文地址:https://www.cnblogs.com/tujia/p/13862365.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  7. viewpager欢迎页面底部点的滑动效果

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo ...

  8. Luogu P6815 [PA2009]Cakes

    题意 给定一个 \(n\) 个点 \(m\) 条边的图,点 \(i\) 有权值 \(a_i\),一个三元环 \((i,j,k)\) 的贡献为 \(\max(a_i,a_j,a_k)\),求所有三元环的 ...

  9. python数据类型之String(字符串)

    String(字符串) 1.概述 ​ 字符串是以单引号或双引号括起来的任意文本,比如"abc",'xy'等等,请注意''或者""本身只是一种表示方式,并不是字符 ...

  10. Win10 Terminal + WSL 2 安装配置指南,精致开发体验

    自从 Windows Terminal 正式发布后就再没有用过 Windows 系统自带的终端了.主要是 Terminal 简洁且灵活,更重要的是支持特殊字体,通过一些简单的配置可以使得终端看起来更舒 ...