如何将Prometheus配置为以容器运行,以将其他应用程序生成的指标作为容器抓取

时间:2019-02-07 04:26:51

标签: python docker containers prometheus

我正在研究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可以在指定端口上抓取指标。但是,那里没有此类指标。

1 个答案:

答案 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终端窗口中卷曲来使其正常工作。