Ответ
Для комплексного мониторинга сервиса я предпочитаю использовать стек на основе Prometheus, так как он стал де-факто стандартом для динамических сред, таких как Kubernetes.
Основной стек для метрик и алертинга:
- Prometheus:
- Собирает метрики по модели pull (или через pushgateway для кратковременных задач).
- Использую Prometheus Operator в Kubernetes, который автоматически обнаруживает сервисы и Pod'ы через ServiceMonitors и PodMonitors.
# Пример ServiceMonitor для приложения apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: my-app-monitor spec: selector: matchLabels: app: my-app endpoints: - port: web path: /metrics
- Grafana:
- Для визуализации. Создаю дашборды, которые показывают ключевые метрики: latency, error rate, traffic (принципы RED) и использование ресурсов (USE).
- Дашборды хранятся как код (json-файлы) и разворачиваются через конфигурацию.
- Alertmanager:
- Обрабатывает алерты от Prometheus, группирует их, подавляет дубли и маршрутизирует в нужные каналы (Slack, Email, PagerDuty).
Для логирования:
- Loki: В последнее время выбираю его вместо ELK для логов, так как он легковеснее и лучше интегрируется с Grafana (единый интерфейс). Агент Promtail собирает логи с нод и отправляет в Loki.
- ELK/EFK-стек (Elasticsearch, Fluentd/Fluent Bit, Kibana) — для случаев, когда нужен полнотекстовый поиск и сложный анализ логов.
Для трейсинга распределённых систем:
- Jaeger или Grafana Tempo (если уже используется Grafana Cloud/Loki). Инструментирую приложения с помощью OpenTelemetry.
Дополнительные инструменты:
- cAdvisor & node-exporter: Для сбора метрик по контейнерам и хостам.
- Blackbox Exporter: Для мониторинга доступности endpoints (HTTP, TCP, ICMP).
- В облачных средах также настраиваю интеграцию с нативными сервисами, например, AWS CloudWatch для метрик, которые сложно или неэффективно собирать Prometheus'ом (например, метрики по S3 или billing).
Цель — построить систему, которая не только показывает текущее состояние, но и помогает быстро локализовать причину инцидента, связав между собой метрики, логи и трейсы.