URL-адрес недоступен из контейнера Prometheus, указывающего на тот же IP-адрес узла - PullRequest
0 голосов
/ 23 мая 2019

Я управляю несколькими веб-сайтами и отслеживаю с помощью docker-compose в одной системе, используя traefik в качестве обратного прокси-сервера.Каждый веб-сайт доступен снаружи и с самого хост-компьютера, но сам Прометей не может собрать метрики с веб-сайта на том же хосте.

Таким образом, соединение через telnet с моего локального компьютера или из командной строки нахост-машина возвращает 200:

$ telnet api.dev.inowas.com 80
Trying 142.93.175.226...
Connected to api.dev.inowas.com.
...

Эта же команда из контейнера Prometheus не подключается

$ /prometheus $ telnet api.dev.inowas.com 80
...

Аналогичные результаты с другими инструментами, такими как curl, nc.

Я запускаю для этой настройки три конфигурации docker-compose.

  • Traefik
version: '3.4'

services:
  traefik:
    image: traefik
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    networks:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik/acme.json:/acme.json
      - ./traefik/traefik.toml:/traefik.toml
      - ./traefik/logs:/logs

networks:
  web:
    external: true
  • Мониторинг
version: '3.1'
services:

  prometheus:
    image: prom/prometheus:v2.1.0
    volumes:
      - ./prometheus/:/etc/prometheus/
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
    expose:
      - "9090"
    labels:
      - "traefik.docker.network=web"
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:prometheus.inowas.com"
      - "traefik.port=9090"
      - "traefik.protocol=http"
    links:
      - cadvisor:cadvisor
      - alertmanager:alertmanager
    depends_on:
      - cadvisor
    networks:
      - web
    restart: always

  grafana:
    image: grafana/grafana
    user: "104"
    depends_on:
      - prometheus
    expose:
      - "3000"
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning/:/etc/grafana/provisioning/
    env_file:
      - ./grafana/config.monitoring
    networks:
      - web
    restart: always
    labels:
      - "traefik.docker.network=web"
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:monitoring.inowas.com"
      - "traefik.port=3000"
      - "traefik.protocol=http"

volumes:
    prometheus_data: {}
    grafana_data: {}

networks:
  web:
    external:
      name: web
  • API-Backend
version: '3.4'

services:
  php:
    image: ${CONTAINER_REGISTRY_BASE}/php
    build:
      context: ./api
      target: api_platform_php
      <<: *cache
    depends_on:
      - db
    # Comment out these volumes in production
    volumes:
      - ./api:/srv/api:rw,cached
      # If you develop on Linux, uncomment the following line to use a bind-mounted host directory instead
      # - ./api/var:/srv/api/var:rw

  api:
    image: ${CONTAINER_REGISTRY_BASE}/nginx
    build:
      context: ./api
      target: api_platform_nginx
      <<: *cache
    depends_on:
      - php
    volumes:
      - ./api/public:/srv/api/public:ro
    labels:
      - "traefik.docker.network=web"
      - "traefik.enable=true"
      - "traefik.basic.frontend.rule=Host:${HOST_URL}"
      - "traefik.basic.port=80"
      - "traefik.basic.protocol=http"
    networks:
      - web
      - default
  db:
    image: postgres:10-alpine
    environment:
      - POSTGRES_DB=api
      - POSTGRES_USER=api-platform
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - ./docker/db/data:/var/lib/postgresql/data:rw

volumes:
  db-data: {}

networks:
  web:
    external: true

Я ожидаю получить метрики, вызывающие URL:

https://api.dev.inowas.com/metrics из контейнера Prometheus,как я могу сделать это с любого другого хоста.

...