Этот вопрос проверяет понимание, как приложение и инфраструктура отдают метрики, как Prometheus их собирает (scrape), и как всё это настраивается.
Prometheus собирает метрики по принципу pull: он сам ходит по HTTP-эндпоинтам и забирает данные в текстовом формате. Чтобы начать собирать метрики, приложение нужно “проинструментировать” — добавить библиотеку Prometheus-клиента и повесить HTTP-эндпоинт metrics. Далее в конфигурации Prometheus настраиваются scrape_configs, где указываются адреса таргетов (сервисов) и интервалы опроса. Для сторонних систем используются exporter’ы (например, node_exporter). В итоге Prometheus регулярно опрашивает все таргеты и сохраняет метрики во внутреннюю time-series базу.
Prometheus — это система мониторинга, ориентированная на сбор временных рядов (time series) метрик. Ключевая идея — не приложение “шлёт” метрики куда-то, а Prometheus сам их забирает по HTTP.
Инструментировать приложение (добавить сбор метрик).
Организовать HTTP-эндпоинт /metrics.
Настроить Prometheus на опрос этого эндпоинта.
(Опционально) добавить exporter’ы для систем, которые не умеют отдавать метрики сами.
Для разных языков есть свои Prometheus-клиенты: для Python — prometheus_client, для Go — prometheus/client_golang и т.д.
Простой пример на Python:
python
from prometheus_client import Counter, generate_latest
from prometheus_client import CONTENT_TYPE_LATEST
from flask import Flask, Response
app = Flask(__name__)
REQUESTS = Counter("app_requests_total", "Total number of requests")
@app.route("/")
def index():
REQUESTS.inc()
return "Hello"
@app.route("/metrics")
def metrics():
data = generate_latest()
return Response(data, mimetype=CONTENT_TYPE_LATEST)
Здесь:
объявляем счётчик app_requests_total;
увеличиваем его при каждом запросе;
отдаём все метрики на /metrics.
Prometheus конфигурируется через prometheus.yml. В нём указываются scrape_configs — какие сервисы он опрашивает.
yaml
scrape_configs:
- job_name: "my_app"
static_configs:
- targets: ["my-app:8000"]
Prometheus будет ходить на http://my-app:8000/metrics (по умолчанию путь /metrics) с заданным интервалом, по умолчанию каждые 15 секунд.
Если система не умеет отдавать метрики в формате Prometheus, используют экспортёры:
node_exporter — метрики хоста (CPU, RAM, диски);
blackbox_exporter — проверка доступности HTTP/TCP/ICMP;
postgres_exporter, redis_exporter и т.д.
В Kubernetes обычно:
деплоят Prometheus;
деплоят sidecar- или отдельные exporter’ы;
используют ServiceMonitor/PodMonitor (в kube-prometheus-stack) для автоматического обнаружения таргетов.
Сбор метрик в Prometheus — это:
приложение отдаёт метрики по HTTP;
Prometheus регулярно опрашивает /metrics;
все данные сохраняются как временные ряды и могут быть использованы в алертах и Grafana.
Это стандартный подход для мониторинга микросервисов и Kubernetes-кластеров.