前言
本次实践主要是介绍 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。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。