如何运行多个python脚本到prometheus

Posted

技术标签:

【中文标题】如何运行多个python脚本到prometheus【英文标题】:How to run multiple python scripts to prometheus 【发布时间】:2021-08-28 06:02:21 【问题描述】:

我一直在研究 prometheus 和 Python,我希望能够拥有多个写入 Prometheus 的脚本。

目前我已经完成了 2 个脚本: sydsvenskan.py

import time

import requests
from prometheus_client import Counter

REQUEST_COUNT = Counter(
    namespace="scraper",
    name="request_count",
    documentation="Count the total requests",
    labelnames=['http_status']
)


def monitor_feed():
    while True:
        with requests.get("https://sydsvenskan.se") as rep:
            print("Request made!")
            REQUEST_COUNT.labels(http_status=rep.status_code).inc()

        time.sleep(10)


if __name__ == '__main__':
    monitor_feed()

BBC.py

import time

import requests
from prometheus_client import Counter

REQUEST_COUNT = Counter(
    namespace="scraper",
    name="request_count",
    documentation="Count the total requests",
    labelnames=['http_status']
)


def monitor_feed():
    while True:
        with requests.get("https://bbc.com") as rep:
            print("Request made!")
            REQUEST_COUNT.labels(http_status=rep.status_code).inc()

        time.sleep(10)


if __name__ == '__main__':
    monitor_feed()

然后我有另一个脚本启动 promethethus http_server:

from prometheus_client import start_http_server

if __name__ == '__main__':
    start_http_server(8000)

但是问题是似乎没有任何东西通过 sydsvenskan.py 和 bbc.py 的 promethethus,我想知道我做错了什么?同时运行 sydsvenskan 和 bbc 时,我没有看到任何统计数据增长

【问题讨论】:

【参考方案1】:

您需要将start_http_server 函数与monitor_feed 函数结合起来。

您可以将所有内容组合在一个 HTTP 服务器下。

或者,正如我认为你想要的那样,你需要运行 2 个 HTTP 服务器,每个 monitor_feed 一个:

import time
import requests

from prometheus_client import Counter
from prometheus_client import start_http_server


REQUEST_COUNT = Counter(
    namespace="scraper",
    name="request_count",
    documentation="Count the total requests",
    labelnames=['http_status']
)


def monitor_feed():
    while True:
        with requests.get("https://bbc.com") as rep:
            print("Request made!")
            REQUEST_COUNT.labels(http_status=rep.status_code).inc()

        time.sleep(10)


if __name__ == '__main__':
    start_http_server(8000)
    monitor_feed()

在后一种情况下,如果您在同一台主机上运行两台服务器,则需要使用 2 个不同的端口(不能同时使用 8000)。

【讨论】:

哦,我明白了。因此,如果我想使用更多的 python 实例,那么我需要添加更多的端口,以便为每个 python 实例提供自己的端口?如果我正确? 知道了!我希望拥有 30 个端口不会太多使用!; 您始终可以将脚本组合在一个进程下并从一个端口提供它们。这完全是您的选择,取决于您希望如何构建导出器。

以上是关于如何运行多个python脚本到prometheus的主要内容,如果未能解决你的问题,请参考以下文章

运行多个 python 脚本,一个要求输入,不允许输入脚本运行。另外,我如何同时运行脚本(Python)

如何从一个脚本运行多个 Python/Shell 脚本

如何使用 QProcess 同时运行多个 python 脚本

python脚本如何同时运行多个

如何将多个图像作为输入传递给python脚本

如何在 Prometheus 中一次调用执行多个查询