Ответ
Для сбора метрик с продакшн-кластера Kubernetes я развертываю стек Prometheus + Grafana с дополнительными экспортерами. Вот как это выглядит на практике:
1. Развертывание Prometheus Stack с помощью Helm:
# Добавление репозитория и установка kube-prometheus-stack
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
--namespace monitoring
--create-namespace
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
--set grafana.adminPassword="$GRAFANA_PASSWORD"
Этот чарт автоматически устанавливает:
- Prometheus Server с настроенным
scrape_configsдля Kubernetes SD. - Node Exporter на каждой ноде для сбора системных метрик (CPU, memory, disk I/O).
- kube-state-metrics для метрик состояния объектов Kubernetes (количество подов, статусы деплойментов).
- Grafana с предустановленными дашбордами (например,
Kubernetes / Compute Resources / Cluster).
2. Конфигурация сбора метрик с кастомных приложений:
Для сбора метрик с Java-микросервиса (Spring Boot Actuator) создаю ServiceMonitor:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: myapp-metrics
namespace: default
spec:
selector:
matchLabels:
app: myapp
endpoints:
- port: http-metrics
path: /actuator/prometheus
interval: 15s
3. Визуализация и алертинг:
- В Grafana импортирую дашборды по ID (например,
315для детального мониторинга нод). - Настраиваю алерты в Prometheus через
PrometheusRule:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: node-alerts
spec:
groups:
- name: node.rules
rules:
- alert: HighNodeCPU
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 10m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
Альтернативы и дополнения:
- VictoriaMetrics: Использовал для долгосрочного хранения метрик (более эффективное сжатие, чем у Prometheus).
- Loki + Promtail: Для связки логов и метрик в одном запросе в Grafana.
- Интеграция с PagerDuty/Slack: Алерты из Alertmanager перенаправлял в инцидент-каналы.