Мониторинг сервера: CPU, память, диски

Мониторинг сервера в Наблюдателе показывает машину целиком: загрузку процессора по ядрам и самые прожорливые процессы, память и swap, давление на память, место и inode на дисках с прогнозом, когда оно закончится, сеть и TCP-соединения. Данные собирает агент сервера — он ставится прямо в систему одной командой, установка описана в статье Мониторинг сервера Linux.

Здесь — как пользоваться разделом «Серверы» и страницей сервера, что означают показатели и как связать сервер со стеками и проектами, чтобы на него действовали уведомления.

Раздел «Серверы»

Раздел «Серверы» в боковом меню — список всех ваших машин. Наверху сводка: сколько серверов «онлайн», «внимание», «недоступно» и «без агента» (метрик от таких нет). Список можно отфильтровать по проекту или показать серверы «Без проекта».

В карточке сервера — имя, IP, загрузка CPU, память, диск, открытые файлы (FD), проекты, к которым он подключён.

Новый сервер добавляется кнопкой «Добавить сервер»: название и основной IP. Метрики появятся после установки агента — кнопка «Агент» на странице сервера покажет команду установки. Сервер принадлежит тому, кто его создал.

Дашборд сервера

Страница сервера разбита на вкладки «Дашборд», «CPU», «Память», «Диск», «Сеть» и «Инциденты». Выбранная вкладка сохраняется в адресе — ссылку можно отправить коллеге.

Наверху выбирается период: «Сейчас» — живой поток от агента раз в секунду, или «1 ч», «6 ч», «24 ч», «7 д» и свои даты — средние значения по отрезкам. История метрик хранится 30 дней. Кнопки «Стоп» и «Запустить» замораживают и возобновляют живой поток.

На «Дашборде» собрано главное:

  • Процессор (CPU) — общая загрузка и load average за 1, 5 и 15 минут;
  • Оперативная память — «Занято», «Доступно (MemAvailable)», «Всего» и «Swap занято»;
  • Дисковое пространство — основной раздел: занято, «Доступно для записи», резерв ФС для root и сколько разделов в отчёте;
  • Сетевая нагрузка — входящий и исходящий трафик;
  • Лимит FD процесса — процесс, ближе всех подошедший к своему лимиту открытых файлов;
  • Проекты и Стеки на сервере — см. ниже;
  • События сервера и Информация о системе: хостнейм, ОС, ядро, IP, аптайм, версия агента, интервал сбора (30 секунд) и время последних данных.

Если что-то на исходе, сверху появляется предупреждение:

Предупреждение Когда
«Мало места на диске» основной раздел занят на 90% и больше или свободно меньше 5 ГБ
«Мало оперативной памяти» занято 90% и больше или доступно меньше 1 ГБ
«Исчерпан лимит открытых файлов» процесс открыл 90% и больше от своего лимита — скоро будет «Too many open files»

«Доступно» для диска считается как колонка Avail в df -h — без резерва root, а для памяти — как MemAvailable в free -h, с учётом кэша, который ядро может отдать.

CPU: загрузка по ядрам и топ процессов

Вкладка «CPU» показывает загрузку «По ядрам» и цветную полосу, на что уходит активное время процессора:

Категория Что значит
«Программы» ваши приложения и сервисы: база, веб-сервер, контейнеры
«Ядро ОС» системные вызовы, драйверы, сеть ядра
«Ожидание диска» процессор простаивает, пока ждёт диск. Высокое значение — узкое место в дисках, а не в CPU
«Потери на VPS» гипервизор отдал ваши ядра соседним машинам. На выделенном железе обычно 0%

Отдельный график «Ожидание диска во времени» помогает отличить нехватку CPU от медленного диска. Ниже — «Топ процессов (CPU / RAM)». Load average сравнивайте с числом ядер: «Load / ядро» до 1 — норма, выше 1 — есть очередь.

Память, swap и PSI

Вкладка «Память»:

  • «Занято», «Доступно», «Кэш», «Буферы» и график доступной памяти. Главный показатель нехватки — «Доступно», а не «Занято»: кэш ядро отдаёт приложениям по первому требованию;
  • «Давление на память» (PSI): «Частичное (some)» — доля времени, когда хотя бы один процесс ждал память; от 1% стоит присмотреться, от 10% — серьёзное давление. «Полное (full)» — все процессы ждали одновременно; любое заметное значение значит, что работа реально встаёт. Нужно ядро Linux 4.20+;
  • swap — объём и скорость «Загрузка в swap» / «Выгрузка в swap». Постоянная выгрузка — память заканчивается;
  • OOM — процессы, которые ядро убило из-за нехватки памяти за последние 24 часа.

Диски, inode и история заполнения

Вкладка «Диск» начинается с блока «Прогноз заполнения» для /, /var и /var/lib/docker: через сколько дней кончится место при нынешнем темпе. Прогноз строится по истории свободного места за 7 суток.

По каждому разделу:

  • процент занятого, «Занято», «Доступно для записи», «Резерв ФС (root)»;
  • операции чтения и записи в секунду (IOPS), скорость и задержка;
  • Inode — занятые и всего. Если inode кончились, писать на диск нельзя, даже когда место есть: так бывает с миллионами мелких файлов (кэши, сессии, письма в очереди);
  • график свободного места.

Проценты подсвечиваются жёлтым от 75% и красным от 90%.

Сеть и TCP-соединения

Вкладка «Сеть»:

  • «Трафик (сумма интерфейсов)» — входящий и исходящий;
  • TCP-соединения по состояниям: «Активные» (ESTABLISHED), «Ожидают подключений» (LISTEN), TIME_WAIT, CLOSE_WAIT и другие. Сотни и тысячи TIME_WAIT — норма для веб-сервера с короткими запросами. Растущий CLOSE_WAIT — приложение не закрывает сокеты, типичная утечка;
  • «Интерфейсы» — топ по трафику. Простаивающие veth и docker агент не передаёт.

События и инциденты сервера

Вкладка «Инциденты» — журнал «Инциденты хоста» с фильтрами «OOM», «Перезагрузка», «Агент» и «Пороги»:

Инцидент Что случилось
OOM ядро убило процесс из-за нехватки памяти
Перезагрузка сервер перезагрузился
Агент сбой агента
Порог сработало правило уведомлений проекта: диск, CPU, память, открытые файлы

Отдельно над журналом — «Live: OOM в kernel log (24 ч)»: свежие OOM прямо из журнала ядра.

Блок «События сервера» на дашборде — лента событий с уровнями «Success», «Info», «Warning», «Error». OOM сервера приходит с уровнем ошибки, перезагрузка — с предупреждением; оба пишутся без всяких правил и уходят в каналы уведомлений. Подробнее — в статье Лента событий и инциденты.

Как подключить сервер к проекту

Правила уведомлений и каналы задаются в проекте. На сервер они действуют, только когда он подключён к проекту. Один сервер можно подключить к нескольким проектам — например, общую машину, на которой работают два продукта.

Подключить можно двумя способами:

  • на странице сервера, в карточке «Проекты» — выберите проект и нажмите «Привязать»;
  • в настройках проекта, вкладка «Серверы».

Подключать и отключать серверы может только владелец проекта. Если отключить сервер от проекта, стеки этого проекта перестанут числиться на нём, а правила проекта, нацеленные на этот сервер, выключатся.

В новом проекте уже есть правила для серверов, но выключенные: «диск больше 90%», «CPU больше 90% 10 минут», «свободной памяти меньше 10% 10 минут», «открытых файлов больше 85%». Пороги зависят от машины — включите их и подберите значения по истории в правилах уведомлений.

Связь стека с сервером

У стека можно указать, на каких серверах он работает: compose-стек обычно на одном сервере, стек Kubernetes — на нодах кластера. Тогда:

  • серверы видны в шапке стека, а на странице сервера — в карточке «Стеки на сервере»;
  • у томов контейнеров виден раздел сервера, на котором лежат их данные, и сколько там свободно — см. Контейнеры и поды;
  • сбои стека легко сопоставить с машиной: контейнеры падают с OOM — смотрите память и swap сервера, ошибки записи — его диски;
  • сервер сам подключается к проекту стека, и на него начинают действовать правила проекта.

Обычно связь появляется сама. Агент стека (0.12+) сообщает имя машины, на которой работают контейнеры или поды, и если оно однозначно совпало с именем одного из ваших серверов, Наблюдатель связывает их без вашего участия: сервер подключается к проекту стека, в ленте стека появляется событие «Стек связан с сервером», а в шапке стека у сервера стоит пометка «авто». Если отвязать такой сервер в настройках стека, сам он больше не вернётся.

Когда совпадение неоднозначное (похожее имя у нескольких серверов), Наблюдатель только предлагает в шапке стека: «Контейнеры стека работают на сервере … — свяжите их со стеком» — достаточно нажать «Связать». То же предложение вы увидите, если в проекте есть редакторы, а сервер ещё не подключён к проекту: новый сервер подключает только владелец проекта.

Вручную связь задаётся в «Настройках стека», раздел «Серверы», или на странице сервера в карточке «Стеки на сервере» кнопкой «Добавить».

Агент стека и агент сервера дополняют друг друга: первый видит контейнеры, но не диски и процессы машины, второй — машину, но не знает, какой контейнер к какому приложению относится. На одной машине их можно поставить оба. Вместе они дают больше: агент сервера 0.14 видит сетевые соединения контейнеров своей машины, и на карте сервисов появляются связи с базами, очередями и сервисами без трассировки (нужен и агент стека 0.14). Содержимое трафика агент не читает — только адреса, порты и число соединений.

Через ИИ-ассистента

ИИ-ассистент видит то же самое: текущий снимок CPU по ядрам, топ процессов, PSI, диски и TCP, историю свободного места по разделам за неделю. С правами на редактирование он может подключить сервер к проекту, отключить или удалить его (удаление — только после вашего подтверждения), а серверу без агента — выпустить агента с инструкцией установки. Спросите «когда кончится диск на prod-1» или «почему тормозит сервер» — и попросите подобрать пороги для правил по реальной нагрузке.

Что дальше

Попробуйте Наблюдатель

Первый сервер или стек подключается за пару минут. Бесплатно в раннем доступе.

Создать аккаунт

Нашли неточность или не хватает ответа? Напишите на hello@nablserver.ru