· 18 мин чтения

Prometheus + Grafana + Alertmanager: полный стек мониторинга для корпоративного парка

Я Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15+ лет обслуживания корпоративных инфраструктур я поставил Prometheus минимум на 40 клиентских проектах — от мониторинга одного сервера 1С до парков в 200+ узлов. И каждый раз убеждаюсь: нет ничего лучше связки Prometheus + Grafana + Alertmanager для среднего бизнеса. Бесплатно, production-grade, сообщество огромное, экспортёров под всё. В этой статье — пошаговая установка на Linux, подключение Windows и Linux узлов, первые дашборды, алерты в Telegram и чек-лист, чтобы всё не развалилось через месяц.

Архитектура решения

Под небольшой парк (до 100 узлов) — одна виртуалка 4 vCPU, 16 ГБ RAM, 200 ГБ SSD. Под 500+ узлов или длинный retention — кластер VictoriaMetrics или Thanos.

Установка Prometheus на Ubuntu 22.04

sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus

cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz
tar xf prometheus-2.54.1.linux-amd64.tar.gz
sudo cp prometheus-2.54.1.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.54.1.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
sudo cp -r prometheus-2.54.1.linux-amd64/consoles prometheus-2.54.1.linux-amd64/console_libraries /etc/prometheus/

Создаём systemd-unit /etc/systemd/system/prometheus.service:

[Unit]
Description=Prometheus
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/ \
  --storage.tsdb.retention.time=30d \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries
Restart=always

[Install]
WantedBy=multi-user.target

Базовый prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: 'corp-main'

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']

rule_files:
  - '/etc/prometheus/alert.rules.yml'

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

  - job_name: 'linux-nodes'
    file_sd_configs:
      - files: ['/etc/prometheus/targets/linux.yml']

  - job_name: 'windows-nodes'
    file_sd_configs:
      - files: ['/etc/prometheus/targets/windows.yml']

  - job_name: 'blackbox-http'
    metrics_path: /probe
    params: { module: [http_2xx] }
    static_configs:
      - targets:
          - https://portal.itfresh.local
          - https://mail.itfresh.local/owa
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox:9115

Файлы таргетов (/etc/prometheus/targets/linux.yml) лежат отдельно, управляются скриптом-генератором или через Ansible. Prometheus перечитывает их без рестарта.

node_exporter на Linux-узлах

# На каждом Linux-сервере
useradd --no-create-home --shell /bin/false node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xf node_exporter-1.8.2.linux-amd64.tar.gz
cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
chown node_exporter:node_exporter /usr/local/bin/node_exporter

# systemd unit (упрощённо)
cat > /etc/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=Node Exporter
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfile
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now node_exporter

windows_exporter на Windows-серверах

# На Windows Server через PowerShell
$msi = 'https://github.com/prometheus-community/windows_exporter/releases/download/v0.28.1/windows_exporter-0.28.1-amd64.msi'
Invoke-WebRequest -Uri $msi -OutFile C:\Install\windows_exporter.msi
msiexec /i C:\Install\windows_exporter.msi /quiet `
    ENABLED_COLLECTORS=cpu,cs,logical_disk,net,os,service,system,tcp,memory,process,iis `
    LISTEN_PORT=9182

New-NetFirewallRule -DisplayName 'Prometheus windows_exporter' `
    -Direction Inbound -LocalPort 9182 -Protocol TCP -Action Allow

Test-NetConnection -Port 9182

Обратите внимание на включённые коллекторы. Не включайте всё подряд — это замедлит сбор и даст кардинальный взрыв метрик (process collector — 50 тыс. серий на одном сервере).

Grafana и первые дашборды

sudo apt install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install -y grafana
sudo systemctl enable --now grafana-server

Открываем http://localhost:3000 (admin/admin при первом входе), добавляем Prometheus data source, импортируем готовые дашборды по ID:

ИсточникID дашбордаЧто покажет
node_exporter1860 (Node Exporter Full)CPU/RAM/Disk/Net для Linux
windows_exporter14694 (Windows Exporter)CPU/RAM/Disk/Services для Windows
blackbox7587Status-страница сайтов и портов
alertmanager9578Активные алерты
postgres_exporter9628Метрики PostgreSQL

Первые alert-правила

groups:
  - name: baseline
    interval: 30s
    rules:
      - alert: HostDown
        expr: up{job=~"linux-nodes|windows-nodes"} == 0
        for: 3m
        labels: { severity: critical }
        annotations:
          summary: "{{ $labels.instance }} недоступен"
          description: "Экспортёр не отвечает более 3 минут"

      - alert: HighDiskUsage
        expr: (1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes) * 100 > 90
        for: 10m
        labels: { severity: warning }
        annotations:
          summary: "{{ $labels.instance }} {{ $labels.mountpoint }} занят > 90%"

      - alert: HighMemory
        expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 92
        for: 10m
        labels: { severity: warning }

      - alert: WindowsDiskLow
        expr: (windows_logical_disk_free_bytes / windows_logical_disk_size_bytes) * 100 < 10
        for: 10m
        labels: { severity: warning }

      - alert: WindowsServiceStopped
        expr: windows_service_state{state="stopped",name=~"(mssql.*|w3svc|exchange.*|w32time)"} == 1
        for: 2m
        labels: { severity: critical }

Alertmanager и Telegram

global:
  resolve_timeout: 5m

route:
  receiver: telegram
  group_by: ['alertname','instance']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  routes:
    - match: { severity: critical }
      receiver: telegram-critical

receivers:
  - name: telegram
    webhook_configs:
      - url: http://alertmanager-bot:8080/webhook
  - name: telegram-critical
    webhook_configs:
      - url: http://alertmanager-bot:8080/webhook-critical

Мы у себя используем metalmatze/alertmanager-bot — маленький сервис, который принимает webhook и шлёт красивое сообщение в чат. Настроили фильтр: все warning в один чат, все critical — в дежурный канал с упоминанием on-call инженера.

Мини-кейс: мониторинг на холдинге

В сентябре 2025 внедрили мониторинг холдингу — торговый оператор, 6 филиалов, 78 Windows-серверов + 22 Linux + коммутаторы и UPS через SNMP. До нас мониторинга не было вообще — узнавали о проблемах от звонков пользователей.

За 10 рабочих дней:

В первый месяц поймали 14 инцидентов до того, как пользователи заметили: диск на 98% на файл-сервере, истёкший SSL на портале, остановленный IIS AppPool, утечка памяти в 1C:УТ, физическая авария двух дисков в RAID. Стоимость внедрения — 165 тыс. руб. За год SLA поднялся с «когда увидим» до 99.6% по критичным сервисам.

Обслуживание и масштабирование

Best practices по алертам

Развернём полноценный мониторинг под ключ

Ставлю связку Prometheus + Grafana + Alertmanager на ваш парк за 7–14 рабочих дней. Экспортёры под Windows, Linux, SNMP, PostgreSQL, MSSQL, Docker. 15+ лет опыта с корпоративным мониторингом. Выделенное плечо — Dell Xeon Platinum 8280 в дата-центре МТС на 40G аплинке Mellanox, с резервированием и бэкапами TSDB.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы по Prometheus

Сколько ресурсов нужно для Prometheus?
Для 50–100 узлов хватает 2 vCPU, 8 ГБ RAM, 100 ГБ SSD. Для парка 500+ узлов — 4–8 vCPU, 32 ГБ RAM, 500 ГБ NVMe. Retention по умолчанию 15 дней, можно продлить до 90 дней без боли.
Zabbix или Prometheus?
Zabbix — классика с push-моделью, проще для непрограммистов, хорош для сетевого оборудования SNMP. Prometheus — pull-модель, гибче для сервисных метрик, лучшая интеграция с Docker/Kubernetes и современным стеком.
Нужен ли VictoriaMetrics?
Если retention больше месяца-двух или кардинальность метрик огромна — да. VictoriaMetrics сжимает лучше в 3–10 раз и быстрее на запросах. Для 50 серверов и 30 дней retention — обычный Prometheus справляется.
Как отправлять алерты в Telegram?
Через Alertmanager с webhook на bot-ретранслятор (например, alertmanager-bot от metalmatze) или напрямую через generic webhook на свой микросервис, который пушит в Bot API. Конфиг в alertmanager.yml в секции receivers.
Как мониторить сервисы без экспортёра?
Через blackbox_exporter для HTTP/TCP/ICMP-пробов, через textfile collector у node_exporter для статистики из скриптов, или через Pushgateway для задач, которые сами пушат метрики.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.