Pythond采集器扩展可观测能力最佳实践

    banner.jpg

    前言

    本次实践主要是介绍 pythond 自定义采集器采集数据接入观测云进行非标数据的可观测。

    前提条件

    • 系统环境:Linux 主机环境
    • 开发语言:Python 3.6.8(Python3+ 版本均可)
    • 依赖库:requests(安装命令:python3 -m pip install requests)

    接入方案

    安装 DataKit

    主机安装 DataKit。

    # 需要把token 改成观测云空间的实际token值(可在「观测云控制台」-「集成」-「Datakit」 上面获取)
    DK_DATAWAY="https://openway.guance.com?token=tkn_xxxxxx" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)" 
    

    开启采集器

    开启 pythond 采集器。

    cd /usr/local/datakit/conf.d/pythond && cp pythond.conf.sample pythond.conf
    vim pythond.conf
    
    # {"version": "1.65.0", "desc": "do NOT edit this line"}
    
    [[inputs.pythond]]
       # Python 采集器名称
      name = 'pythonscript'  # required
    
      # 运行 Python 采集器所需的环境变量
      #envs = ['LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH',]
    
      # Python 采集器可执行程序路径(尽可能写绝对路径)
      cmd = "python3" # required. python3 is recommended.
    
       # 用户脚本的相对路径(填写文件夹,填好后该文件夹下一级目录的模块和 py 文件都将得到应用)
      dirs = ["mytest"]
    

    编写自定义脚本

    /usr/local/datakit/python.d 目录下创建文件夹 mytest ,自定义脚本放在 mytest 的 py 文件中。

    cd /usr/local/datakit/python.d && mkdir mytest && cd mytest
    

    自定义脚本(本示例通过 Shell 命令获取内存总量、内存使用量和自定义静态数据,其他协议也是可以的,如 SNMP、IPMI、Redfish、HTTP 等等,凡 Linux 操作系统可以执行的命令,均可以通过该方式进行观测)。

    Tips:上报指标数据,对应的value不可以是String类型
    以下示例是上报数据转换行协议如下:
    pythonscript,t1=b,t2=d mem_total=$memtotal,mem_used=$mem_used,test_val=$test_val

    from datakit_framework import DataKitFramework
    import subprocess
    
    class MyTest(DataKitFramework):
        name = 'MyTest'
        interval = 10 # triggered interval seconds.
    
        # if your datakit ip is 127.0.0.1 and port is 9529, you won't need use this,
        # just comment it.
        # def __init__(self, **kwargs):
        #     super().__init__(ip = '127.0.0.1', port = 9529)
    
        def run(self):
            print("MyTest")
    
            MemTotal = 'free | awk \'NR==2{print $2}\''
            MemUsed='free | awk \'NR==2{print $3}\''
            testval='cat /root/script/val.txt'
    
            mem_total_result=subprocess.run(MemTotal, stdout=subprocess.PIPE,shell=True, universal_newlines=True)
            mem_used_result=subprocess.run(MemUsed, stdout=subprocess.PIPE,shell=True, universal_newlines=True)
            test_val_result=subprocess.run(testval, stdout=subprocess.PIPE,shell=True, universal_newlines=True)
            memtotal=int(mem_total_result.stdout)
            memused=int(mem_used_result.stdout)
            testval=float(test_val_result.stdout)
    
            data = [
                    {
                        "measurement": "pythonscript",
                        "tags": {
                          "t1": "b",
                          "t2": "d"
                        },
                        "fields": {
                          "mem_total": memtotal,
                          "mem_used": memused,
                          "test_val": testval
                        },
                        # "time": 1624550216 # you don't need this
                    }
                ]
            in_data = {
                'M':data,
                #采集器名称,对应Inputs Info 下 Input列
                'input': "pythonscript"
            }
    
            return self.report(in_data) # you must call self.report here
    

    重启 DataKit。

    # 在主机终端输入命令
    datakit service -R
    

    验证数据采集

    Tips:如果结果不及预期,可以查看以下日志文件:

    • ~/_datakit_pythond_cli.log
    • ~/datakit_pythond_framework_[pythond name]_.log

    效果实践

    Tips:host 是观测云默认追加的 tag

    在观测云控制台,通过「场景」-「新建仪表板」,可以根据上报的数据绘制 dashboard。

    联系我们

    加入社区

    微信扫码
    加入官方交流群

    立即体验

    在线开通,按量计费,真正的云服务!

    立即开始

    选择观测云版本

    代码托管平台