Мониторинг сервера: 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