Мониторинг сервера — непрерывный сбор и анализ метрик работы инфраструктуры: CPU, RAM, диск, сеть, состояние сервисов. Позволяет обнаружить проблемы до отказа и исторически анализировать производительность.
Как работает
Система мониторинга состоит из трёх компонентов: агент (собирает метрики на сервере), хранилище временных рядов (time series database), визуализация и алертинг. Агент — node_exporter (Prometheus), Telegraf (InfluxDB) или Zabbix Agent — опрашивает /proc и /sys файловую систему Linux, получая данные о загрузке CPU, использовании памяти, дисковых операциях, сетевом трафике.
Метрики сохраняются с временными метками в TSDB: Prometheus хранит 15 дней по умолчанию, Victoria Metrics — более эффективно, Graphite/Whisper — классика. Alertmanager отправляет уведомления в Telegram, Slack, PagerDuty при превышении порогов.
Ключевые метрики
- CPU: load average (1/5/15 мин), iowait (ожидание диска), steal (кража CPU гипервизором на VPS)
- RAM: available memory, swap usage, OOM killer events
- Диск: iops, throughput, latency, заполненность разделов и inodes
- Сеть: bytes in/out, packets, errors, retransmit
- Сервисы: статус Nginx, MariaDB, time to first byte, количество активных соединений
История
Мониторинг серверов начинался с простых shell-скриптов и Nagios (1999) — первой open-source системы с проверками доступности и алертами. Cacti (2001) добавил RRDtool-графики. Graphite (2008) и Grafana (2014) революционизировали визуализацию. Prometheus (2012, open-source с 2015) от SoundCloud стал стандартом для Kubernetes-экосистемы. В 2020-х Grafana Labs объединила Prometheus, Loki (логи) и Tempo (трейсинг) в единый observability-стек.
Стек Prometheus + Grafana
# docker-compose для запуска стека
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports: ["9090:9090"]
node-exporter:
image: prom/node-exporter
pid: host
ports: ["9100:9100"]
grafana:
image: grafana/grafana
ports: ["3000:3000"]
environment:
GF_SECURITY_ADMIN_PASSWORD: secret
Алертинг
Пример alert-правил Prometheus для VPS:
# Диск заполнен на 90%
- alert: DiskAlmostFull
expr: node_filesystem_free_bytes / node_filesystem_size_bytes < 0.1
for: 5m
annotations:
summary: "Disk almost full on {{ $labels.instance }}"
# Сервис недоступен
- alert: NginxDown
expr: up{job="nginx"} == 0
for: 1m
На что обращать внимание
Мониторинг самого сервера мониторинга — классическая проблема. Если Prometheus упал, нет алертов об этом. Решение: внешний Icinga или Uptimerobot проверяет доступность основного стека снаружи. Хранение метрик на том же диске, что и основные данные, создаёт конкуренцию за IOPS — выделите отдельный диск или используйте Victoria Metrics с лучшим сжатием.
Для первоначального мониторинга VPS без сложной инфраструктуры подойдёт связка Netdata + Netdata Cloud: устанавливается за 1 минуту, Real-time метрики с историей за 14 дней, бесплатный облачный дашборд для нескольких серверов. Более зрелый стек Prometheus + Grafana требует настройки, но даёт полный контроль над хранением и алертингом. Icinga дополняет оба варианта внешними проверками доступности.