Продвинутый

Мониторинг серверов на Linux: полное руководство

Алексей Кузнецов
Алексей Кузнецов
Системный администратор11 июня 2026 г.11 мин чтения

Как настроить мониторинг домашних серверов с помощью Prometheus, Node Exporter и Alertmanager. Пошаговая инструкция с примерами конфигураций и интеграцией в...

Мониторинг серверов на Linux: полное руководство

Как настроить мониторинг домашних серверов с помощью Prometheus, Node Exporter и Alertmanager. Пошаговая инструкция с примерами конфигураций и интеграцией в Grafana.

Почему мониторинг важен для домашних серверов

Риски без мониторинга

Без мониторинга домашние серверы могут плавно перейти в состояние кризиса, пока пользователь не заметит сбоя. Например, если сервер начинает перегреваться из-за неисправного вентилятора, но в логах нет явных ошибок — это тихая катастрофа. В статье Основы мониторинга в Linux - Veesp подчеркивается, что администратор должен следить за системными метриками, чтобы избежать "тихих" сбоев.

Практический пример: сервер с высоким использованием CPU (например, 90% на длительный срок) может начать замедлять процессы, но без алертов это будет незаметно. Команда top или sar может показать аномалии:

bash
top  
# Или  
sar -u 1 5  

Если метрики не отслеживаются, проблема может перерасти в полный сбой сервисов. Как отмечают в Простом мониторинге множества серверов, даже базовые проверки (например, доступность портов) помогают предотвратить катастрофы.


Преимущества автоматизации

Автоматизация мониторинга превращает рутинные задачи в предсказуемую систему. Например, Prometheus + Alertmanager позволяет настраивать алерты по метрикам, как CPU usage или дисковое пространство. В статье Мониторинг сервера: лучшие инструменты для Linux в 2025 году описывается, как конфигурация Prometheus может автоматически отправлять уведомления в Slack или email.

Пример конфига Prometheus для мониторинга CPU:

yaml
scrape_configs:  
  - job_name: 'node'  
    static_configs:  
      - targets: ['192.168.1.10:9100']  
    metrics_path: /metrics  

Здесь Node Exporter (на порту 9100) собирает данные, а Alertmanager отправляет алерт при превышении порога:

yaml
groups:  
  - name: 'cpu-alerts'  
    rules:  
      - alert: 'HighCPU'  
        expr: 'node_cpu_seconds_total{job="node"} > 80'  
        for: '5m'  
        labels:  
          severity: 'critical'  

Интеграция с Grafana позволяет визуализировать метрики в реальном времени. Как отмечают в Обзоре систем мониторинга серверов. Заменяем munin на… / Хабр, автоматизация снижает риск человеческой ошибки и позволяет быстро реагировать на инциденты.

Автоматизация также упрощает управление несколькими серверами. Например, с помощью Docker Compose можно централизованно настроить мониторинг для всех контейнеров:

yaml
version: '3'  
services:  
  prometheus:  
    image: prom/prometheus  
    volumes:  
      - ./prometheus.yml:/etc/prometheus/prometheus.yml  

Таким образом, мониторинг становится не просто "проверкой", а частью инфраструктуры, которая предсказуемо работает.

Основные инструменты для мониторинга

Prometheus: архитектураи особенности

Prometheus — это система мониторинга и алертинга, которая работает по принципу "запроса метрик" (pull). В отличие от традиционных систем, где серверы отсылают данные (push), Prometheus сам запрашивает метрики у целевых объектов. Это делает его гибким, но требует тщательной настройки, особенно в домашних серверах, где ресурсы ограничены.

Почему Prometheus подходит для домашнего сервера?

  • Легковесность: сам по себе Prometheus не требует сложного оборудования.
  • Поддержка плагинов: можно собирать метрики из любых приложений через веб-скреперы или специальные экспортеры.
  • Интеграция с Grafana: визуализация данных в интуитивно понятном интерфейсе.

Пример конфигурации Prometheus (prometheus.yml):

yaml
scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['192.168.1.10:9100']  # IP Node Exporter
  - job_name: 'custom-app'
    metrics_path: '/metrics'
    scheme: 'http'
    static_configs:
      - targets: ['192.168.1.11']  # IP вашего сервера

Важно: Проверьте, что порт метрик (например, 9100) не занят. Если есть конфликт — измените порт в конфиге Node Exporter или Prometheus.

Ссылки для углубления:


Node Exporter: сбор метрик

Node Exporter — это легковесный агент от Prometheus, который собирает системные метрики (CPU, память, диск и т.д.). Он не требует настройки, просто запускается и начинает экспортировать данные.

Установка через Docker:

bash
docker run -d --name node-exporter \
  -p 9100:9100 \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /:/rootfs:ro \
  prom/node-exporter

Совет: Если вы используете Alpine Linux, замените prom/node-exporter на prometheus/node-exporter для более компактного образа.

Пример метрик, которые собирает Node Exporter:

  • node_cpu_seconds_total — время CPU в секундах.
  • node_memory_MemTotal_bytes — общий объем памяти.
  • node_disk_io_time_seconds_total — время ввода-вывода на диске.

Как интегрировать в Prometheus:
Добавьте в scrape_configs Prometheus строку с IP Node Exporter и портом 9100.

Практический пример:
Если у вас несколько серверов, запустите Node Exporter на каждом и настройте Prometheus, чтобы он сканил все из них. Это позволит видеть метрики в одном месте.


Alertmanager: управление алертами

Alertmanager — это компонент Prometheus, который группирует уведомления и предотвращает спам. Например, если несколько серверов срабатывают по одной и той же метрике, Alertmanager отправит один алерт, а не по одному на сервер.

Пример конфигурации alertmanager.yml:

yaml
route:
  group_by: ['job']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'email-notifications'
receivers:
  - name: 'email-notifications'
    email_configs:
      - to: 'alex@example.com'
        from: 'monitoring@example.com'

Как это работает:

  • group_by — группирует алерты по job (например, "node-exporter").
  • group_wait — время ожидания, пока не придет новый алерт в группу.
  • receiver — указывает, куда отправлять уведомления (email, Slack, Telegram).

Пример алерта:

yaml
- alert: HighCpuUsage
  expr: node_cpu_seconds_total{job="node-exporter"} > 80
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: "CPU usage on {{ $labels.instance }} is high"
    description: "Current CPU usage is {{ $value }}%. If it remains above 80% for 5 minutes, check the server."

Практический совет: Начните с простых алертов. Например, уведомление при переполнении диска или высокой нагрузке на CPU. Это поможет избежать "шумных" алертов.

Интеграция с Slack (через вебхуки):

  1. Создайте вебхук в Slack.
  2. В receivers добавьте:
yaml
- name: 'slack-notifications'
  slack_configs:
    - api_url: 'https://hooks.slack.com/services/...'

Ссылки для углубления:


Итог:
Prometheus, Node Exporter и Alertmanager образуют мощную цепочку для мониторинга домашних серверов. Начните с простого: настройте Node Exporter на вашем сервере, подключите его к Prometheus, добавьте один алерт. Со временем расширяйте функционал, добавляя больше метрик и интеграций. Как говорил Алексей — "системно, а не на коленке".

Пошаговая настройка мониторинга

Установка Node Exporter на Debian/Ubuntu

Node Exporter — это легковесный инструмент для сбора метрик о состоянии ОС и процессов. Для его установки на Debian/Ubuntu следует использовать репозиторий GitHub.

Пример установки:

bash
# Установка Go (если не установлен)  
sudo apt update && sudo apt install -y golang  

# Клонируем репозиторий  
git clone https://github.com/prometheus/node_exporter.git  
cd node_exporter  

# Собираем бинарник  
GOOS=linux GOARCH=amd64 go build -o node_exporter  

# Перемещаем в директорию /usr/local/bin  
sudo mv node_exporter /usr/local/bin/  

После установки нужно создать сервис systemd для автоматического запуска:

bash
# Создаем файл /etc/systemd/system/node_exporter.service  
sudo nano /etc/systemd/system/node_exporter.service  

Содержимое файла:

ini
[Unit]  
Description=Node Exporter  

[Service]  
User=prometheus  
ExecStart=/usr/local/bin/node_exporter  
Restart=always  

[Install]  
WantedBy=multi-user.target  

Запускаем и включаем сервис:

bash
sudo systemctl daemon-reload  
sudo systemctl start node_exporter  
sudo systemctl enable node_exporter  

Проверка:
Откройте браузер и перейдите по адресу http://<IP-адрес>:9100/metrics. Должны отобразиться сырые метрики Prometheus.

Пример из практики:
На моих Proxmox-серверах Node Exporter собирал метрики о использовании CPU и памяти в виртуальных машинах. Это помогло выявить узкие места при масштабировании кластера.


Настройка Prometheus: конфигурационный файл

Prometheus должен быть настроен для сбора данных от Node Exporter. Основной файл конфигурации — /etc/prometheus/prometheus.yml.

Пример конфигурации:

yaml
scrape_configs:  
  - job_name: 'node'  
    static_configs:  
      - targets: ['<IP-адрес-Node-Exporter>:9100']  

Важно:

  • Замените <IP-адрес-Node-Exporter> на реальный IP сервера, где запущен Node Exporter.
  • Если Node Exporter запущен на том же сервере, где Prometheus, можно использовать localhost:9100.

Пример расширенной конфигурации (фильтрация метрик):

yaml
scrape_configs:  
  - job_name: 'node'  
    static_configs:  
      - targets: ['localhost:9100']  
    metric_relabel_configs:  
      - source_labels: [__address__]  
        target_label: __param_target  
        regex: ([^:]+):(?::\d+)?  
      - source_labels: [__param_target]  
        target_label: instance  
        regex: (.+)  

Проверка конфигурации:

bash
promtool config check /etc/prometheus/prometheus.yml  

Совет:
На моих серверах я добавлял в конфигурацию метрики, специфичные для моего оборудования (например, метрики Proxmox). Это требовало написания собственных скриптов, но повысило точность мониторинга.


Интеграция с Grafana: дашборды

Grafana — это визуальный инструмент для отображения метрик. Для интеграции с Prometheus нужно импортировать дашборд или создать его вручную.

Импорт дашборда через API:

bash
# Пример запроса к API Grafana  
curl -X POST -H "Content-Type: application/json" -d @dash.json http://<Grafana-IP>:3000/api/dashboards/db  

Пример конфигурации дашборда (JSON):

json
{  
  "dashboard": {  
    "title": "Серверы мониторинг",  
    "rows": [  
      {  
        "type": "graph",  
        "targets": [  
          {  
            "type": "query",  
            "query": "node_cpu_seconds_total{instance=~'.*'}"  
          }  
        ]  
      }  
    ]  
  }  
}  

Настройка алертов в Alertmanager:
Если вы используете Alertmanager, добавьте правила в его конфигурацию для уведомлений о критических метриках:

yaml
route:  
  group_by: ['job']  
  group_wait: 30s  
  group_interval: 5m  
  repeat_interval: 1h  
  receiver: 'email'  

receivers:  
  - name: 'email'  
    email_configs:  
      - to: 'admin@example.com'  

Пример из практики:
Я создал дашборд в Grafana, где отображались метрики CPU, памяти и дисков для всех серверов в кластере. Это позволило быстро визуализировать состояние инфраструктуры без переключения между инструментами.


Ссылки для дополнительной информации:

Оптимизация и продвинутые настройки

Мониторинг CPU

Сначала давай разберемся с процессором. Если сервер начинает тормозить, первый вопрос — CPU. Проверьте, не загружен ли процессор более 80% в течение 5 минут. Для сбора данных о CPU используйте Node Exporter — он предоставляет метрики вроде node_cpu_seconds_total, node_cpu_user_seconds_total и другие.

Установка Node Exporter

bash
# Скачиваем и распаковываем  
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.60.0/node_exporter-1.60.0.linux-amd64.tar.gz  
tar -xvf node_exporter-1.60.0.linux-amd64.tar.gz -C /opt/  

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

В файле /etc/prometheus/prometheus.yml добавьте секцию для Node Exporter:

yaml
scrape_configs:  
  - job_name: 'node'  
    static_configs:  
      - targets: ['<IP-адрес-вашего-сервера:9100>']  

Визуализация в Grafana

Создайте панель в Grafana с графиком node_cpu_seconds_total — он покажет общую загрузку. Если хотите разобрать по ядрам, используйте node_cpu_seconds_total{job="node", instance="<имя-ядра>"}.

Мониторинг сервера: лучшие инструменты для Linux в 2025 году рекомендует Node Exporter как один из самых простых в настройке.


Мониторинг памяти

Память — это следующая вещь. Node Exporter собирает метрики node_memory_MemTotal_bytes, node_memory_MemFree_bytes и другие. Это позволяет отслеживать, не заполняется ли RAM.

Проверка в реальном времени

bash
free -h  # Покажет общее, доступное и использованное пространство  
top       # Откроет интерфейс для просмотра процессов, загружающих память  

Пример алерта (для будущего подраздела)

Если память превышает 90%, можно настроить алерт в Alertmanager:

yaml
- name: 'HighMemoryUsage'  
  rules:  
    - alert: 'MemoryOver90'  
      expr: 'node_memory_MemFree_bytes / node_memory_MemTotal_bytes < 0.1'  
      for: '5m'  

Мониторинг диска

Диск — это не только место, но и скорость доступа. Node Exporter предоставляет метрики вроде node_disk_io_time_seconds_total и node_disk_usage_bytes.

Примеры команд

bash
df -h  # Покажет загрузку дисков  
iostat -x 1  # Покажет IO-операции в реальном времени  

Настройка Prometheus

В конфиге Prometheus добавьте:

yaml
scrape_configs:  
  - job_name: 'disk'  
    static_configs:  
      - targets: ['<IP-адрес:9100>']  

Визуализация

Создайте график node_disk_usage_bytes в Grafana. Если видите резкие скачки на определенном диске, проверьте его SMART-статус через smartctl.

Основы мониторинга в Linux - Veesp советует отслеживать не только объем, но и IO-операции, чтобы предотвратить "зависающие" процессы.


Такой подход даст предсказуемость: вы всегда сможете понять, что происходит с сервером, и заранее отреагировать на критические события.

Часто задаваемые вопросы

Каквыбрать между Prometheus и Zabbix для мониторинга домашнего сервера?

Prometheus и Zabbix имеют разные подходы: Prometheus ориентирован на метрики в реальном времени и интеграцию с Grafana, что делает его гибким для автоматизации алертов. Zabbix же предлагает более широкий набор предварительно настроенных проверок и GUI-интерфейс, что может быть удобнее для новичков. Если вы уже используете экосистему Grafana, Prometheus будет логичным выбором. Для простого мониторинга без сложных настроек Zabbix может сэкономить время.

Какие метрики обязательно нужно отслеживать на сервере?

Минимальный набор: использование CPU, памяти, дисковое пространство, сетевой трафик и статус сервисов. Например, если сервер начинает перегреваться, метрики температуры (если доступны) или нагрузка на вентилятор помогут предотвратить сбой. Также стоит отслеживать логи на наличие ошибок, даже если они не критичны. В статье Основы мониторинга в Linux - Veesp рекомендуется добавлять проверки доступности портов и времени отклика.

Как настроить алерты в Alertmanager для критических событий?

Начните с определения пороговых значений для ключевых метрик. Например, алерт при CPU usage > 90% в течение 5 минут. В конфиге Alertmanager используйте шаблоны уведомлений (например, email или Slack) и группируйте алерты по серверам или сервисам. Важно тестировать алерты вручную, чтобы избежать ложных срабатываний. В Простом мониторинге множества серверов советуют использовать uchiwa для визуализации алертов и быстрого анализа.

Почему Node Exporter важен в конфигурации Prometheus?

Node Exporter собирает низкоуровневые метрики из ОС, такие как использование CPU, памяти и дисков, которые Prometheus не может получить напрямую. Без него вы не сможете отслеживать системные ресурсы, только приложения. Например, если сервер начинает тормозить из-за высокой нагрузки на диск, Node Exporter предоставит данные для анализа. Его настройка проста: достаточно запустить сервис и добавить его в scrape_configs в Prometheus.

Как интегрировать Grafana с Prometheus для визуализации данных?

Создайте экземпляр Grafana и добавьте данные Prometheus как источник. В настройках Grafana настройте подключение через API Prometheus (обычно по порту 9090). Используйте встроенные панели или импортируйте готовые шаблоны для метрик сервера. Например, можно визуализировать графики CPU usage или хранилище. В Мониторинг сервера: лучшие инструменты для Linux в 2025 году упоминается, что Grafana позволяет настраивать уведомления при срабатывании алертов, что упрощает реагирование.

Поделиться:TelegramX / TwitterVK