zoukankan      html  css  js  c++  java
  • 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台监控

  • 相关阅读:
    微信小程序学习随笔
    SqlServer索引假脱机的解决
    web服务器出现大量CLOSE_WAIT连接的前因后果
    SqlServer和mysql字段拼接方法
    使用beego创建员工加班调休系统
    在c#程序中初步使用redis
    使用golang实现批量发送面试邀请邮件
    记c# rabbitmq的使用
    项目中使用mongodb的尝试
    手机集成支付宝支付功能的注意事项
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575330.html
Copyright © 2011-2022 走看看