繁体   English   中英

使用 prometheus_client 向 Prometheus 公开包指标

[英]Expose package metrics to Prometheus with prometheus_client

我有两个文件自己运行以下代码:

sandbox1.py

from prometheus_client import Counter
import time
while True:
    my_counter1 = Counter('my_counter1', 'My counter)
    my_counter1.inc()
    time.sleep(1)

sandbox2.py

from prometheus_client import Counter
import time
while True:
    my_counter2 = Counter('my_counter2', 'My counter)
    my_counter2.inc()
    time.sleep(2)

有没有办法使用 prometheus_client 将my_counter1my_counter2暴露给我的 Prometheus 服务器?

我看过https://github.com/prometheus/client_python ,但我不太确定如何将来自sandbox1.pysandbox2.py的指标调用到实际向 Prometheus 公开指标的文件中. 指标是否总是必须是同一个文件的一部分?

Prometheus 服务器抓取提供指标的 HTTP 端点。 这与将指标推送到公制系统的其他一些公制系统不同。 因为 Prometheus 会抓取指标端点,所以您需要做两件事:

  1. 使用 HTTP 服务器|端点公开来自客户端的指标
  2. 配置 Prometheus 服务器以定位此指标服务器|端点

如果在您引用的页面上运行三步演示示例,然后浏览 http://localhost:8000,您应该看到如下内容:

# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 357.0
python_gc_objects_collected_total{generation="1"} 0.0
python_gc_objects_collected_total{generation="2"} 0.0
...
...
# HELP request_processing_seconds Time spent processing request
# TYPE request_processing_seconds summary
request_processing_seconds_count 4.0
request_processing_seconds_sum 2.0374009040533565
# HELP request_processing_seconds_created Time spent processing request
# TYPE request_processing_seconds_created gauge
request_processing_seconds_created 1.6004497426536365e+09

这是您的 Prometheus 服务器将配置为抓取的页面。 您可以看到,例如提供了python_gc_objects_collected_total计数器。 Prometheus 指标是人类可读的,这很有用。

如果你结合,你的sandbox1.py到这个例子中:

from prometheus_client import start_http_server, Counter, Summary
import random
import time

# Create a metric to track time spent and requests made.
REQUEST_TIME = Summary('request_processing_seconds',
                       'Time spent processing request')


# Decorate function with metric.
@REQUEST_TIME.time()
def process_request(t):
    """A dummy function that takes some time."""
    time.sleep(t)


if __name__ == '__main__':
    my_counter1 = Counter('my_counter1', 'My counter')
    # Start up the server to expose the metrics.
    start_http_server(8000)
    # Generate some requests.
    while True:
        my_counter1.inc()
        process_request(random.random())

再次运行代码,您现在应该看到:

# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 357.0
python_gc_objects_collected_total{generation="1"} 0.0
python_gc_objects_collected_total{generation="2"} 0.0
...
...
# HELP my_counter1_total My counter
# TYPE my_counter1_total counter
my_counter1_total 13.0
# HELP my_counter1_created My counter
# TYPE my_counter1_created gauge
my_counter1_created 1.6004498408280134e+09

注意页面底部是my_counter1_totalmy_counter1_created ,它们对应于您的my_counter1 = Counter("my_counter1","My counter")

如果您将 Prometheus 服务器指向此目标 ( localhost:8000 ),您应该能够绘制my_counter1_total计数器和my_counter1_created仪表等图表。

创建一个名为prometheus.yml的文件:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  # Self
  - job_name: "prometheus-server"
    static_configs:
      - targets:
          - "localhost:9090"

  # Python example
  - job_name: "63957470"
    static_configs:
      - targets:
          - "localhost:8000"

然后运行 ​​Prometheus:

docker run \
--interactive --tty \
--net=host \
--volume=${PWD}/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus@sha256:f3ada803723ccbc443ebea19f7ab24d3323def496e222134bf9ed54ae5b787bd

注意这里假设prometheus.yml在工作目录中

,你可以在 http://localhost:9090 上浏览 Prometheus

您可以看到您的代码配置为目标:http://localhost:9090/targets

在此处输入图片说明

您可以查询|绘制您的指标。 键入如my_counter1_同时看到,然后my_counter1_total的计数器:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM