写点什么

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

作者:观测云
  • 2025-01-02
    上海
  • 本文字数:1794 字

    阅读完需:约 6 分钟

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

前言

本次实践主要是介绍 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.confvim 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=mem_used,test_val=$test_val


from datakit_framework import DataKitFrameworkimport 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。



用户头像

观测云

关注

还未添加个人签名 2021-02-08 加入

云时代的系统可观测平台

评论

发布
暂无评论
Pythond采集器扩展可观测能力最佳实践_数据采集_观测云_InfoQ写作社区