如何编写 python 脚本将指标数据发送到 pushgateway

Posted

技术标签:

【中文标题】如何编写 python 脚本将指标数据发送到 pushgateway【英文标题】:How write a python script to send metrics data to pushgateway 【发布时间】:2021-11-09 11:30:08 【问题描述】:

我想将指标数据发送到 Prometheus 推送网关以监控 CPU 和内存。 我想要的是将$ps aux$htop 信息传输到推送网关。 我用 bash 脚本尝试了这个(但我没有成功),这就是为什么我想尝试用 python 脚本。 对我来说最大的问题是将$ps aux$htop 信息转换为指标数据,我真的不知道如何管理它。 我尝试了一个简单的代码,它可以正常工作:

import requests
job_name='metrics'
instance_name='10.0.0.1:9090'
team_name='cpu'
provider='Rpi'
payload_key='cpu_utilization'
payload_value='33'

response = requests.post('http://localhost:9091/metrics/job/j/instance/i/team/t'.format(j=job_name, i=instance_name, t=team_name), data='k v\n'.format(k=payload_key, v=payload_value))
print(response.status_code)

我现在想要的是将payload_key='cpu_utilization'payload_value='33' 修改为$ps aux$htop 命令的进程列表。

有没有人有想法。非常感谢。

【问题讨论】:

您可以尝试通过os.system(<command string here>)执行命令并解析命令的输出。 【参考方案1】:

我要测试这个命令:

$ps –eo pid,user,%mem,cmd --sort=-%mem

并改变:

payload_key='cpu_utilization'
payload_value='33'

通过“$ps”命令:

os.system('ps –eo pid,user,%mem,cmd --sort=-%mem')

也许这会运行......或者不会!

【讨论】:

【参考方案2】:

python命令运行完美:

os.system('ps –eo pid,user,%mem,cmd --sort=-%mem')

但是如何将其插入到前面的代码中呢?

我测试过:

import requests, os
job_name='metrics'
instance_name='10.0.0.1:9090'
team_name='cpu'
provider='Rpi'
payload_key=os.system('ps –eo pid')
payload_value=os.system('ps –eo %cpu')

response = requests.post('http://localhost:9091/metrics/job/j/instance/i/team/t'.format(j=job_name, i=instance_name, t=team_name), data='k v\n'.format(k=payload_key, v=payload_value))
print(response.status_code)

但是(并不惊讶),这并没有运行。 如何使用 %cpu 将 PID 1 影响到指标 n# 1 ?并将所有 cpu 数据添加到指标列表中?

至少将os.system('ps –eo pid,user,%mem,cmd --sort=-%mem') 响应转换为列表,然后为 request.post 做一段时间,它会获取所有列表元素。

谢谢。

【讨论】:

以上是关于如何编写 python 脚本将指标数据发送到 pushgateway的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 Perl 发送到 Python

如何在 libreoffice writer 中编写 python 宏来发送接收数据

如何在 python 中为 xgboost 编写自定义评估指标?

如何将 JSON 对象从 Python 脚本发送到 jQuery?

python能编辑同花顺指标广场指标吗?

如何将 Python 脚本的部分输出发送到文本文件?