Pythond采集器扩展可观测能力最佳实践
本实践介绍如何通过 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.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。

Get a tailored plan
Contact us
Join the community
Scan with WeChat
to join the community
to join the community
Try Guance
Start online and pay only for what you use.
Get startedChoose a Guance plan