[英]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_counter1
和my_counter2
暴露给我的 Prometheus 服务器?
我看过https://github.com/prometheus/client_python ,但我不太确定如何将来自sandbox1.py
和sandbox2.py
的指标调用到实际向 Prometheus 公开指标的文件中. 指标是否总是必须是同一个文件的一部分?
Prometheus 服务器抓取提供指标的 HTTP 端点。 这与将指标推送到公制系统的其他一些公制系统不同。 因为 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_total
和my_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.