$ sysadstemi.xyz

Prometheus + Grafana для маленького проекта

2024-12-08 · monitoringprometheusgrafana

Ставим минимальный, но работающий мониторинг за один вечер. Без Kubernetes, без 20 helm chart'ов, без боли.

Каждый раз, когда я прихожу в проект «а тут нет мониторинга вообще», у меня одна и та же мысль: давайте сначала поставим минимум, а потом усложним. Минимум — это Prometheus, Grafana, node-exporter и один простой dashboard. Этого хватит на полгода-год, пока не упрёмся в потолок.

docker-compose.yml

version: "3.9"
services:
  prometheus:
    image: prom/prometheus:v2.54.1
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prom-data:/prometheus
    ports: ["9090:9090"]
  grafana:
    image: grafana/grafana:11.2.2
    volumes:
      - grafana-data:/var/lib/grafana
    ports: ["3000:3000"]
  node-exporter:
    image: prom/node-exporter:v1.8.2
    pid: host
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.rootfs=/rootfs'
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
volumes:
  prom-data:
  grafana-data:

Файл prometheus.yml — стандартный, со scrape-секцией на localhost:9100.

Что в Grafana сразу подключить

  1. Data source — Prometheus на http://prometheus:9090.
  2. Импортировать готовый dashboard для node-exporter (id 1860) — там есть всё: CPU, память, диск, сеть, load average.
  3. Через 10 минут у вас на экране графики, по которым видно, что происходит с машиной.

Минимальные алерты

В prometheus.yml добавляем rule files:

groups:
- name: basic
  rules:
  - alert: HighCpuLoad
    expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
    for: 10m
    labels: { severity: warning }
    annotations: { summary: "High CPU on {{ $labels.instance }}" }
  - alert: DiskWillFillIn24h
    expr: predict_linear(node_filesystem_avail_bytes[6h], 24*3600) < 0
    for: 1h
    labels: { severity: warning }

Алерты пока никому не шлём — пусть копятся в Alertmanager, посмотрим завтра.

Когда это перестанет хватать

Когда у вас появится 5+ сервисов с разными endpoint'ами, когда захочется trace'ов, когда понадобятся разные retention'ы — тогда стоит смотреть в сторону managed Prometheus (Grafana Cloud, VictoriaMetrics) или полноценного стека с Loki, Tempo, Thanos. Но это потом.

Сейчас — три контейнера, 20 минут, и вы знаете, что происходит с вашим сервером. Лучшее, что можно сделать в начале.


К списку заметок · на главную