Прометей (в контейнере Docker) не может поцарапать цель на хосте - PullRequest
3 голосов
/ 06 июля 2019

Prometheus работает внутри док-контейнера ( версия 18.09.2, сборка 6247962 , docker-compose.xml ниже), а цель очистки находится на localhost:8000, который создается скриптом Python 3.

Ошибка, полученная для неудачной цели очистки (localhost:9090/targets):

Get http://127.0.0.1:8000/metrics: dial tcp 127.0.0.1:8000: getsockopt: соединение отклонено

Вопрос: Почему Прометей в док-контейнере не может очистить цель, которая работает на главном компьютере (Mac OS X)?Как заставить Prometheus работать в док-контейнере, способном очистить цель, работающую на хосте?

Неудачная попытка: Попытка замены в docker-compose.yml

networks: 
  - back-tier
  - front-tier

на

network_mode: "host"

, но мы не можем получить доступ к странице администрирования Prometheus по адресу localhost:9090.

Невозможно найти решение по аналогичным вопросам

docker-compose.yml

version: '3.3'

networks:
  front-tier:
  back-tier:

services:

  prometheus:
    image: prom/prometheus:v2.1.0
    volumes:
      - ./prometheus/prometheus:/etc/prometheus/
      - ./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'
    ports:
      - 9090:9090
    networks:
      - back-tier
    restart: always


  grafana:
    image: grafana/grafana
    user: "104"
    depends_on:
      - prometheus
    ports:
      - 3000:3000
    volumes:
      - ./grafana/grafana_data:/var/lib/grafana
      - ./grafana/provisioning/:/etc/grafana/provisioning/
    env_file:
      - ./grafana/config.monitoring
    networks:
      - back-tier
      - front-tier
    restart: always

prometheus.yml

global:
scrape_interval:     15s 
evaluation_interval: 15s 

external_labels:
    monitor: 'my-project'

- job_name: 'prometheus'

    scrape_interval: 5s

    static_configs:
        - targets: ['localhost:9090']


- job_name: 'rigs-portal'

    scrape_interval: 5s

    static_configs:
        - targets: ['127.0.0.1:8000']

Вывод на http://localhost:8000/metrics

# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 65.0
python_gc_objects_collected_total{generation="1"} 281.0
python_gc_objects_collected_total{generation="2"} 0.0
# HELP python_gc_objects_uncollectable_total Uncollectable object found during GC
# TYPE python_gc_objects_uncollectable_total counter
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
# HELP python_gc_collections_total Number of times this generation was collected
# TYPE python_gc_collections_total counter
python_gc_collections_total{generation="0"} 37.0
python_gc_collections_total{generation="1"} 3.0
python_gc_collections_total{generation="2"} 0.0
# HELP python_info Python platform information
# TYPE python_info gauge
python_info{implementation="CPython",major="3",minor="7",patchlevel="3",version="3.7.3"} 1.0
# HELP request_processing_seconds Time spend processing request
# TYPE request_processing_seconds summary
request_processing_seconds_count 2545.0
request_processing_seconds_sum 1290.4869346540017
# TYPE request_processing_seconds_created gauge
request_processing_seconds_created 1.562364777766845e+09
# HELP my_inprorgress_requests CPU Load
# TYPE my_inprorgress_requests gauge
my_inprorgress_requests 65.0

Python3 script

from prometheus_client import start_http_server, Summary, Gauge
import random
import time

# Create a metric to track time spent and requests made
REQUEST_TIME = Summary("request_processing_seconds", 'Time spend processing request')

@REQUEST_TIME.time()
def process_request(t):
    time.sleep(t)

if __name__ == "__main__":
    start_http_server(8000)
    g = Gauge('my_inprorgress_requests', 'CPU Load')
    g.set(65)

    while True:
        process_request(random.random())

1 Ответ

3 голосов
/ 06 июля 2019

Хотя это не очень распространенный вариант использования .. вы действительно можете подключиться из своего контейнера к вашему хосту.

С https://docs.docker.com/docker-for-mac/networking/

Я хочу подключиться сконтейнер для службы на хосте

Хост имеет изменяющийся IP-адрес (или ни одного, если у вас нет доступа к сети).Начиная с 18.03, мы рекомендуем подключаться к специальному DNS-имени host.docker.internal , который разрешает внутренний IP-адрес, используемый хостом.Это для целей разработки и не будет работать в производственной среде вне Docker Desktop для Mac.

...