← Назад к вопросам

Как работает мониторинг с Prometheus и Grafana?

2.0 Middle🔥 71 комментариев
#DevOps и инфраструктура#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Мониторинг с Prometheus и Grafana

Prometheus и Grafana — это классический дуэт для мониторинга приложений. Давайте разберём, как они работают вместе и почему это так эффективно.

Архитектура системы мониторинга

Процесс можно представить в виде трёх этапов:

  1. Сбор метрик (Prometheus) — периодически опрашивает эндпоинты приложений
  2. Хранение данных (TSDB в Prometheus) — сохраняет временные ряды в собственной БД
  3. Визуализация (Grafana) — запрашивает данные через PromQL и отображает на дашбордах

Как Prometheus собирает метрики

Приложение экспортирует метрики на специальном эндпоинте (обычно /metrics):

from prometheus_client import Counter, Histogram, start_http_server
import time

request_count = Counter(
    "http_requests_total",
    "Total HTTP requests",
    ["method", "endpoint", "status"]
)

request_duration = Histogram(
    "http_request_duration_seconds",
    "HTTP request duration",
    buckets=(0.1, 0.5, 1.0, 2.0, 5.0)
)

def handle_request(method, endpoint):
    start = time.time()
    try:
        request_count.labels(method=method, endpoint=endpoint, status=200).inc()
    except Exception:
        request_count.labels(method=method, endpoint=endpoint, status=500).inc()
    finally:
        duration = time.time() - start
        request_duration.observe(duration)

start_http_server(8000)

Язык запросов PromQL

Grafana использует PromQL для запроса метрик:

rate(http_requests_total[5m])
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
sum(http_requests_total) by (endpoint)

Docker Compose для локального тестирования

version: "3"
services:
  app:
    build: .
    ports:
      - "8001:8001"
      - "8000:8000"

  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus

Ключевые преимущества

  • Pull-based архитектура: Prometheus сам опрашивает эндпоинты
  • TSDB: быстрое хранилище временных рядов
  • PromQL: мощный язык запросов
  • Облегчённость: не требует агентов и доп. БД
  • Стандарт индустрии: особенно в Kubernetes
Как работает мониторинг с Prometheus и Grafana? | PrepBro