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

Расскажи про опыт работы с Prometheus

2.0 Middle🔥 211 комментариев
#Мониторинг и логирование

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

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

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

# Prometheus: Практический опыт и применение

Что такое Prometheus

Prometheus — это open-source система мониторинга и алертинга, основанная на pull-модели метрик. За 10+ лет работы я внедрил Prometheus в различных инфраструктурных сценариях, от малых стартапов до крупных enterprise систем.

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

В своей практике я часто развёртываю следующую архитектуру:

version: "3.9"
services:
  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
      - "--storage.tsdb.path=/prometheus"
      - "--storage.tsdb.retention.time=30d"
  
  alertmanager:
    image: prom/alertmanager:latest
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
  
  node-exporter:
    image: prom/node-exporter:latest
    ports:
      - "9100:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - "--path.procfs=/host/proc"
      - "--path.sysfs=/host/sys"
      - "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)"

Конфигурация Prometheus

Типичная конфигурация, которую я использую:

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: "prod"
    environment: "production"

alerting:
  alertmanagers:
    - static_configs:
        - targets:
            - localhost:9093

rule_files:
  - "rules/*.yml"

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "node"
    static_configs:
      - targets: ["localhost:9100"]

  - job_name: "kubernetes"
    kubernetes_sd_configs:
      - role: node

Написание правил алертинга

Применяю PromQL для создания предупреждений:

groups:
  - name: System
    interval: 30s
    rules:
      - alert: HighMemoryUsage
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Высокое использование памяти"

      - alert: DiskSpaceLow
        expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.1
        for: 10m
        labels:
          severity: critical

Экспортеры и интеграции

В своей работе интегрировал следующие экспортеры:

  • Node Exporter — метрики ОС (CPU, память, диск, сеть)
  • cAdvisor — метрики контейнеров Docker
  • KubeStateMetrics — состояние K8s объектов
  • Custom Exporter — пользовательские метрики приложений

Kubernetes и Prometheus

В K8s окружении использую Prometheus Operator для управления scrape конфигурациями:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: app-metrics
spec:
  selector:
    matchLabels:
      app: my-app
  endpoints:
    - port: metrics
      interval: 30s
      path: /metrics

Лучшие практики

  1. Retention Policy — храню метрики 30 дней, для долгосрочного анализа использую Thanos
  2. Labeling Strategy — правильная схема меток (job, instance, service)
  3. Recording Rules — pre-compute сложные запросы для оптимизации
  4. HA Setup — федерация для распределённых систем
  5. Resourcing — Prometheus требует 4GB+ RAM для миллионов метрик

Prometheus — мощный инструмент, и правильная архитектура мониторинга критична для production систем.