头图

前言

本次实践主要是介绍 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。

图片


观测云
21 声望85 粉丝

云时代的系统可观测平台


引用和评论

0 条评论