• 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台监控

  • 相关阅读:
    QQ机器人
    MySQL Hash索引和B-Tree索引的区别
    python format
    Python csv模块的使用
    Python 随机数函数
    关于Python Profilers性能分析器
    数据结构之排序算法Java实现(6)—— 插入类排序之折半插入排序算法
    数据结构之排序算法Java实现(5)—— 插入类排序之直接插入排序算法
    数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法
    数据结构之排序算法Java实现(3)—— 交换类排序之冒泡排序算法
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575330.html
Copyright © 2020-2023  润新知