我正在研究Docker中Prometheus和python应用程序之间的网络问题。如何使Prometheus能够在docker中抓取python应用程序生成的指标,并将其显示在Prometheus端。
Docker-compose.yml
version: '3'
services:
prometheus:
image: prom/prometheus:v2.0.0
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
links:
- web
web:
image: python:3.5-alpine
build: ./test
ports:
- "5000:8002"
Dockerfile:
FROM python:3.5-alpine
ADD app1.py /
RUN pip install prometheus_client
CMD ["python", "./app1.py"]
EXPOSE 8002
prometheus.yml
# my global config
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['docker.for.mac.host.internal:9090']
- job_name: 'python_app'
metrics_path: /
static_configs:
- targets: ['docker.for.mac.host.internal:8002']
到目前为止,我可以看到Prometheus运行良好,并且其目标状态显示为UP 在'docker.for.mac.host.internal:9090'和'docker.for.mac.host.internal:8002'
Python应用程序也正在运行,我可以在端口上看到输出指标
因此,现在一切都应正常工作,Prometheus可以在指定端口上抓取指标。但是,那里没有此类指标。
答案 0 :(得分:0)
这是我正在使用的prometheus.yml文件的相对部分:
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
scrape_timeout: 10s
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
target_groups:
- targets: ['localhost:9090']
- job_name: app-server
target_groups:
- targets: ['dbserver:5000']
请注意,您还需要自己点击各个URL进行验证,以确认是否有要提取的指标。
curl "http://dbserver:5000/metrics"
适用于Mac的Docker。在dbserver:5000上运行的应用程序在Mac上运行,而不是在Docker内部运行。如果它在Docker内部,则可以通过确保它已暴露并且可以在Mac终端窗口中卷曲来使其正常工作。