Я управляю несколькими веб-сайтами и отслеживаю с помощью 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.
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
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,как я могу сделать это с любого другого хоста.