Когда домашний сервер начинает отвечать медленнее, Grafana с Prometheus обычно уже не запущена, а логи молчат. Sysstat закрывает эту нишу: пакет раз в десять минут складывает в бинарные файлы снимки процессора, памяти, дисков и сети, а утилита sar показывает историю за любой день. Ниже — установка, хранение, чтение отчётов и разбор реальных ситуаций без графиков.

Зачем sysstat, если есть графики

Prometheus и Netdata хороши, когда нужно смотреть на систему в реальном времени и держать алерты. Но они требуют отдельного процесса, базы и места на диске, а после перезагрузки истории может не быть. Sysstat устроен иначе: сборщик sadc запускается по расписанию, делает короткий срез и завершается. Накладные расходы измеряются долями процента, данные лежат в /var/log/sysstat, а для чтения достаточно sar и sadf. В пакете есть iostat, mpstat и pidstat.

Главное ограничение — гранулярность. По умолчанию срез делается раз в 10 минут, поэтому всплеск длиной в минуту можно не увидеть. Для точной картины sar запускают вручную с интервалом в секунду, но это уже наблюдение в реальном времени, а не история.

Установка и включение сбора

В Debian и Ubuntu пакет ставится одной командой, но после установки сбор часто остаётся выключенным. Проверьте статус и включите службу, затем убедитесь, что таймеры активны.

sudo apt update
sudo apt install sysstat
sudo systemctl enable --now sysstat
systemctl list-timers 'sysstat*' --no-pager

В RHEL, AlmaLinux и Rocky Linux используется dnf, а каталог с данными называется /var/log/sa. Если служба не стартовала, посмотрите journalctl -u sysstat и проверьте каталог /var/log/sa.

sudo dnf install sysstat
sudo systemctl enable --now sysstat
ls -l /var/log/sa
sar -V

На Debian флаг ENABLED=»true» находится в /etc/default/sysstat. Без него пакет может быть установлен, но данные не собираются. После правки конфигурации службу нужно перезапустить.

Настройка хранения и набора метрик

Основные параметры задаются в /etc/sysstat/sysstat (Debian/Ubuntu) или /etc/sysconfig/sysstat (RHEL-семейство). HISTORY определяет, сколько дней хранить файлы, COMPRESSAFTER — через сколько дней сжимать, SADC_OPTIONS — какие группы счётчиков собирать. XALL включает все группы. Для домашнего сервера разумно держать месяц истории и собирать всё: файлы всё равно занимают десятки мегабайт.

HISTORY=28
COMPRESSAFTER=10
SADC_OPTIONS="-S XALL"

Старые данные не восстановятся: новые параметры применятся со следующего среза. Свежий файл saDD обновляется после каждого среза. Старые файлы сжимаются в .gz; распакуйте копию: gzip -dc sa05.gz > /tmp/sa05.

Чтение sar: базовые отчёты

Частый вопрос — «что происходило ночью». Начните с процессора, затем добавьте память, диск и сеть. Без интервала sar читает сегодняшний файл и показывает все сохранённые срезы; с интервалом — снимает живые значения.

sar -u 1 5
sar -r
sar -b
sar -n DEV 1 5
sar -d -p 1 5
sar -q

В отчёте по процессору важны не только %user и %system, но и %iowait. Высокий iowait означает, что процессор ждёт диск, а не считает. В отчёте по дискам смотрите await (среднее время ожидания ввода-вывода) и aqu-sz (среднюю очередь). Поле %util на NVMe и SSD почти бесполезно: накопитель может обрабатывать параллельные запросы при 100% util и оставаться быстрым. Для памяти ориентируйтесь на kbmemavailable, а не на kbmemfree: свободная память без учёта кэша вводит в заблуждение.

История за прошлые дни и сравнение периодов

Файлы называются sa01…sa31. Чтобы посмотреть пятое число, укажите файл явно и при необходимости ограничьте окно времени. Если в команде участвует скрипт, выставьте LC_ALL=C — иначе разделители и десятичная точка зависят от локали.

ls /var/log/sysstat
sar -u -f /var/log/sysstat/sa05
sar -u -f /var/log/sysstat/sa05 -s 09:00:00 -e 11:00:00
LC_ALL=C sar -q -f /var/log/sysstat/sa04

Сравнение двух дней удобно делать по одинаковым окнам. Например, если сегодня в 10:00 сайт отвечал медленно, посмотрите тот же час вчера и неделю назад: это быстро отделяет разовую нагрузку от устойчивой деградации. Для недельного отчёта можно собрать несколько файлов в CSV и обработать таблицей.

sadf -d /var/log/sysstat/sa05 -- -u -r
sadf -j /var/log/sysstat/sa05 -- -u -q
sadf -g /var/log/sysstat/sa05 -- -u

Ключ -d даёт CSV с точкой с запятой, -j — JSON, -g — SVG-график. Последний вариант полезен, когда график нужен для отчёта, но поднимать Grafana ради одного дня не хочется.

Типовой разбор: сервер тормозит

Действуйте по чек-листу и привязывайтесь ко времени. Сначала очередь и загрузка, затем процессор, затем диск и память, и только потом сеть.

  • sar -q: runq-sz растёт, а ldavg заметно выше числа ядер — процессы ждут процессор.
  • sar -u: высокий %iowait при низком %user — узкое место в дисках или хранилище.
  • sar -d -p: await десятки миллисекунд на HDD и единицы на SSD — повод смотреть очередь и бэкапы.
  • sar -r: мало kbmemavailable и активный swap — не хватает памяти, а не процессора.
  • sar -n EDEV: ошибки и дропы растут — проблема на сетевом интерфейсе или в драйвере.

Частая картина: в 03:00 резко растёт iowait, диск занят на час, а днём всё нормально. По истории видно, что это резервное копирование, и решение — не покупать железо, а ограничить скорость бэкапа или перенести его. Без sar такой вывод пришлось бы делать наугад.

Автоматизация и ограничения

Для проверки достаточно небольшого скрипта в cron: он превращает вчерашний файл в CSV и ищет срезы с высоким iowait.

#!/bin/sh
# вчерашний файл
LC_ALL=C sadf -d -1 -- -u > /var/backups/sar-cpu.csv
awk -F';' 'NR > 1 && $8 + 0 > 20 {print $3, $8}' /var/backups/sar-cpu.csv

Ограничения: десятиминутный интервал не покажет секундный всплеск, часовой пояс и переход на летнее время могут сдвинуть метки, а в контейнерах sar видит хост, а не отдельный cgroup. Для коротких инцидентов используйте live-режим sar, btop или трассировку, а sysstat оставьте как долгую память системы.

Итог

Sysstat — минимальный и надёжный способ получить историю нагрузки без отдельного сервера мониторинга. Установите пакет, включите службу, задайте HISTORY и SADC_OPTIONS, проверьте таймеры. Для повседневной работы хватает sar -u, -r, -d и -q, для отчётов — sadf в CSV или JSON, для разбора — привязка к времени и сравнение с прошлыми днями. Этого достаточно, чтобы отвечать на вопрос «что случилось ночью» фактами, а не догадками.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте