我有一个服务,目前在8000端口向prometheus客户端公开度量
我想将此进程更改为控制父进程,它为每个“事物”生成一个(独立)子进程,即子进程由thing_id
参数化,父进程调用systemctl start child@thing_id
公开的度量是独立于每个“事物”的,因此我仍然希望在每个进程中公开这些度量,使用标签thing
进行相应的识别和分析
然而,似乎我必须在每个服务中运行start_http_server(8000)
,这将由于“端口已在使用”而出错。我只尝试在父进程中启动服务器,但没有观察到来自子进程的任何指标
我可以定义一些端口范围,每个进程有一个http服务器,并相应地增加目标数量,但这似乎相当笨拙
我已经研究了https://github.com/prometheus/client_python/blob/master/prometheus_client/multiprocess.py,我相信这可能是一个解决方案,但我认为可能有一个更简单的方法,只使用子流程和systemctl
最后,我使用普罗米修斯的“推送网关”实现了这一点——在每个子服务中创建一个
GatewayClient
根据作业id推送。当父服务使用delete_from_gateway
停止子进程时,父服务会进行清理在https://sysadmins.co.za/install-pushgateway-to-expose-metrics-to-prometheus/的帮助下安装了推送网关
基本客户端代码如下
相关问题 更多 >
编程相关推荐