Ответ
Prometheus — это open-source система мониторинга и алертинга, построенная на основе pull-модели (сама опрашивает цели) и хранения данных в виде временных рядов (time series) с ключ-значение метками (labels). Это стандарт де-факто для мониторинга динамических сред, таких как Kubernetes.
Ключевые компоненты, которые я настраивал:
- Prometheus Server: Основной компонент, который собирает и хранит метрики, выполняет запросы PromQL.
- Экспортеры (Exporters): Агенты, которые преобразуют метрики сторонних систем в формат Prometheus. Например:
node_exporter— метрики хоста (CPU, память, диск).blackbox_exporter— проверки доступности по HTTP, TCP, ICMP.kube-state-metrics— метрики о состоянии объектов Kubernetes.
- Alertmanager: Отдельный сервис для обработки, группировки и отправки алертов (в Slack, Email, PagerDuty).
- Client Libraries: Для инструментирования собственного кода (например, на Go, Python, Java).
Пример PromQL-запроса для мониторинга в Kubernetes:
# Средняя загрузка CPU по всем подам приложения за 5 минут
rate(container_cpu_usage_seconds_total{container="myapp"}[5m])
# Доступная память на нодах в процентах
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
Конфигурация из практики (scrape config):
scrape_configs:
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
# Берем метрики только с подов, у которых есть аннотация prometheus.io/scrape: "true"
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
В нашем стеке Prometheus интегрирован с Grafana для дашбордов и с VictoriaMetrics для долгосрочного хранения метрик.