← Назад к вопросам
Как работает мониторинг с Prometheus и Grafana?
2.0 Middle🔥 71 комментариев
#DevOps и инфраструктура#Архитектура и паттерны
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Мониторинг с Prometheus и Grafana
Prometheus и Grafana — это классический дуэт для мониторинга приложений. Давайте разберём, как они работают вместе и почему это так эффективно.
Архитектура системы мониторинга
Процесс можно представить в виде трёх этапов:
- Сбор метрик (Prometheus) — периодически опрашивает эндпоинты приложений
- Хранение данных (TSDB в Prometheus) — сохраняет временные ряды в собственной БД
- Визуализация (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