Представьте: вы арендовали белорусский VPS-сервер под сайт или бота, и внезапно он начинает тормозить без видимых причин. Загрузка процессора скачет, страницы еле открываются, а в логах всё чисто. Знакомая ситуация? На виртуальных серверах с ограниченными ресурсами такое бывает часто, особенно если на одном VPS крутится несколько сервисов. В такие моменты администратор словно врач без рентгена — проблема есть, а где искать непонятно. Нужно срочно увидеть, кто и что грузит систему прямо сейчас.
В материале рассказали, как решить задачу с помощью Netdata: как установить инструмент мониторинга на белорусский VPS и настроить умные оповещения в Telegram, чтобы сразу узнавать о проблемах.
Зачем нужен мониторинг и что такое Netdata
Когда сервер начинает чудить под нагрузкой, важно не гадать на кофейной гуще, а точно знать, что происходит. Мониторинг ресурсов позволяет заглянуть под капот системы в режиме реального времени. Netdata как раз из таких инструментов — легковесная система мониторинга с открытым исходным кодом, которая буквально оживляет сервер на экране. Установили, открыли веб-интерфейс и сразу видите, как ведёт себя система каждую секунду.
Netdata показывает десятки метрик без дополнительной настройки: загрузка CPU по ядрам, объём использованной памяти и свапа, сетевой трафик, скорость дисков, количество процессов и многое другое. Причём графики не усредняются за большие интервалы, вы наблюдаете актуальные цифры с обновлением каждую секунду. Это как монитор сердца у пациента, где малейшие скачки сразу видны. Если какое-то приложение потребляет всю память или, скажем, база данных перестала отвечать, Netdata тут же отразит это на графиках. В отличие от более громоздких систем мониторинга, которые требуют настройки базы данных и полдня на развёртывание, Netdata ставится за пару минут и работает прямо из коробки. Никаких долгих конфигураций, по умолчанию сервис сразу собирает всё, что может, и рисует понятные дашборды.
Зачем всё это нужно в практике? Допустим, интернет-магазин на вашем VPS внезапно начал тормозить во время распродажи. Без мониторинга вы бы заметили проблему лишь по жалобам клиентов и потеряли бы за час сотни тысяч рублей выручки. Но с Netdata вы заранее увидите, что, например, процессор загружен на 100% каким-то скриптом или кончилась свободная память и система начала лихорадочно использовать swap. Зная это, вы примете меры до того, как сайт упадёт полностью. Мониторинг позволяет работать на опережение: вместо того чтобы тушить пожар, вы предотвращаете его появление.
Подготовка VPS и установка Netdata
Итак, вы решили установить Netdata на свой сервер. Для начала нужно чуть-чуть подготовить систему, чтобы всё прошло гладко. Если ваш VPS только что развёрнут, убедитесь, что сделаны базовые вещи безопасности. Создайте отдельного пользователя с правами sudo и запретите вход по root-паролю. Простое действие, которое может спасти ваш продакшен от взлома, ведь злоумышленники часто пытаются угадать пароль администратора, а отключённый root-доступ сведёт эти попытки на нет.
Далее нужно обновить пакеты до актуальных версий. Это не пустая формальность, а полезная привычка перед установкой любого софта. На устаревших системах установочный скрипт Netdata может столкнуться с конфликтами и выдать сбой. Для Debian/Ubuntu выполните в консоли команду:
sudo apt update && sudo apt upgrade
А для CentOS, AlmaLinux или Rocky Linux аналогично обновите пакеты через dnf:
sudo dnf update
Когда система обновлена, проверьте, установлен ли в ней curl. Эта утилита нужна, чтобы скачать установочный скрипт Netdata. Если curl нет, то и установка Netdata просто не стартует. На Debian/Ubuntu установка curl делается командой:
sudo apt install curl
На CentOS/AlmaLinux/Rocky Linux — через dnf:
sudo dnf install curl
Теперь всё готово для установки Netdata. Разработчики предоставляют удобный скрипт, который сам определяет вашу ОС, подтягивает все зависимости и разворачивает сервис. Запустите установку одной командой, она подходит для большинства современных дистрибутивов Linux:
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
Скрипт спросит, что именно ставить — полную версию Netdata со всеми возможностями или минимальный агент. Смело выбирайте полный вариант по умолчанию, он не такой уж тяжёлый и пригодится в большинстве случаев. Установка займёт пару минут, скрипт скачает исходники, скомпилирует всё нужное и запустит демона Netdata.
Когда установка завершится, Netdata запустится автоматически. Как понять, что всё получилось? Откройте браузер на своём компьютере и введите адрес вида http://<IP-адрес вашего VPS>:19999. Вместо <IP-адрес вашего VPS> подставьте реальный публичный IP вашего сервера. Если всё окей, вы увидите живую панель мониторинга Netdata. Прямо перед вами будут бегать графики загрузки процессора, использования памяти, активности дисков, сетевых интерфейсов и прочих служб. Каждая цифра обновляется ежесекундно, завораживающее зрелище для любого админа.
На этом этапе система уже собирает и показывает данные в реальном времени. Можно выдохнуть, ведь мониторинг запущен. Но радоваться пока рано, по умолчанию веб-интерфейс Netdata открыт для всех в Интернете. Любой, зная ваш IP и порт 19999, может зайти и посмотреть информацию о сервере. А в худшем случае увидеть конфигурацию и найти уязвимости. Поэтому сразу перейдём к защите доступа.
Совет: Если на вашем VPS включён firewall, например, UFW, не забудьте открыть порт 19999 для входящих подключений, чтобы вы сами могли попасть на панель Netdata. Команда для UFW:
sudo ufw allow 19999
Как защитить доступ к интерфейсу Netdata
Итак, вы наблюдаете красочные графики Netdata и начинаете разбираться, что к чему. Но помните, сейчас эта панель доступна всем, кто узнает адрес. Даже если вы никому его не говорили, поисковые боты могут случайно набрести на нестандартный порт. Поэтому задача минимум — закрыть доступ к Netdata от посторонних.
Самый простой вариант ограничить просмотр панели только вам. Для этого можно настроить проброс через Nginx с паролем. Схема такая: Netdata будет слушать только локальный адрес 127.0.0.1, а внешние запросы пускать через Nginx, где настроена базовая HTTP-авторизация (логин/пароль) и, по желанию, HTTPS. Это чуть сложнее, чем ничего не делать, но зато вы спокойно мониторите сервер, не опасаясь, что кто-то чужой подсмотрит ваши метрики.
Как реализовать эту защиту? Шаг первый — сказать Netdata, чтобы он не показывал веб-интерфейс всем подряд. Откройте файл конфигурации /etc/netdata/netdata.conf под вашим пользователем с sudo:
sudo nano /etc/netdata/netdata.conf
Найдите строку с параметром bind to, она находится в разделе [web]. По умолчанию там стоит bind to = 0.0.0.0, что значит слушать на всех интерфейсах. Замените значение на 127.0.0.1:
bind to = 127.0.0.1
Сохраните изменения и перезапустите службу Netdata:
sudo systemctl restart netdata
Теперь веб-интерфейс Netdata не доступен извне, он работает только на локальном интерфейсе сервера. Если вы попробуете снова открыть http://<IP вашего VPS>:19999 в браузере, ничего не выйдет. Панель открывается только из самого VPS. Чтобы вернуть себе доступ, нужно настроить Nginx как прокси.
Установите Nginx, если ещё не установлен, и заодно пакет apache2-utils для утилиты htpasswd:
sudo apt install nginx apache2-utils
Далее создайте файл с паролем для доступа. Выполните команду:
sudo htpasswd -c /etc/nginx/.htpasswd admin
Она создаст файл авторизации и добавит пользователя с именем admin. По запросу введите пароль и подтвердите. Придумайте сложный, но запоминающийся пароль, как минимум 8 символов, цифры и буквы. Файл .htpasswd теперь хранит хеш пароля для пользователя admin.
Теперь пора настроить сам прокси. Создайте новый конфиг сайта для Nginx, например:
sudo nano /etc/nginx/sites-available/netdata
Вставьте туда настройки прокси для Netdata. Замените your_domain на ваш домен или оставьте _ для любого хоста:
server {
listen 80;
server_name your_domain;
location / {
proxy_pass http://127.0.0.1:19999/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Сохраните файл. Теперь активируйте этот конфиг, создав символическую ссылку в sites-enabled:
sudo ln -s /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/
И перезагрузите Nginx, чтобы он прочитал новые настройки:
sudo systemctl reload nginx
Готово! Теперь, заходя на адрес вашего VPS или домена без указания порта, вы попадаете на дашборд Netdata, но перед этим Nginx попросит ввести логин и пароль. Введите admin и заданный пароль, чтобы получить доступ к мониторингу. Посторонним же путь закрыт, без пары логин/пароль никто не пройдёт. К тому же, можно подключить HTTPS, чтобы данные шли в зашифрованном виде, но это тема для отдельной статьи.
Вы обезопасили панель Netdata. Теперь можете спокойно изучать графики, где бы вы ни находились, зная, что любопытные глаза туда не доберутся.
Настройка оповещений в Telegram
Постоянно сидеть и пялиться в графики, конечно, необязательно. Хороший мониторинг не только собирает метрики, но и поднимает тревогу, если параметры выходят за пределы нормы. Netdata умеет отправлять уведомления о таких ситуациях (алерты) по разным каналам: на email, в Discord, Slack и т.д. Мы настроим самый удобный способ для оперативных сообщений — через Telegram.
Представьте, что вы получаете сообщение в Telegram, как только сервер начинает задыхаться под нагрузкой или, например, пропал доступ к базе данных. Вы тут же узнаете о проблеме на телефоне и сможете принять меры, даже если находитесь вне рабочего места. Давайте реализуем эту возможность.
Нужно создать бота и получить токен. Для начала нужен собственный бот в Telegram, от имени которого Netdata будет отправлять вам сообщения. Если у вас уже есть бот и токен API, можно пропустить этот пункт. Если нет, откройте в Telegram диалог с официальным сервисом @BotFather. Это отец всех ботов, через него создаются новые. Отправьте команду /newbot и следуйте инструкциям. Придумайте имя бота, как он будет отображаться в списке, и уникальный логин, заканчивающийся на bot. BotFather проверит логин на уникальность и в итоге пришлёт вам сообщение с токеном API вашего нового бота. Это длинная строка символов вида 123456789:ABCDEF…. Скопируйте этот токен и сохраните в надёжном месте, по сути, это пароль от вашего бота.
Нужно выяснить Chat ID получателя. Telegram-оповещения нужно же кому-то отправлять, то есть, вам. Система должна знать, куда слать сообщения, в личный чат или в группу. Для простоты настройте личные уведомления, напрямую вам. Чтобы Netdata отправляла сообщения лично вам, ей нужен ваш чат ID. Узнать свой ID в Telegram проще всего через специального бота @userinfobot. Найдите его в поиске Telegram, нажмите Start или просто отправьте любую фразу. В ответ он пришлёт информацию о вашем аккаунте, где будет строка ID: 123456789. Число может быть до 10 цифр. Запишите это число, это и есть ваш персональный идентификатор чата. Если захотите отправлять алерты в группу, придётся сначала добавить созданного бота в эту группу и узнать её ID, например, с помощью @myidbot команды /getgroupid — group ID будет начинаться на -100. Но в рамках нашей статьи будем считать, что уведомления идут вам лично, поэтому достаточно вашего ID.
Время прописать настройки в Netdata. Теперь нужно сообщить Netdata параметры Telegram-бота: токен, ваш Chat ID и включить этот канал оповещений. В конфигурации Netdata за уведомления отвечает файл /etc/netdata/health_alarm_notify.conf. Откройте его с помощью любимого редактора от root или с sudo:
sudo nano /etc/netdata/health_alarm_notify.conf
Файл большой, но нас интересует блок настроек для Telegram. Найдите в тексте секцию, начинающуюся с комментария # telegram. В ней перечислены переменные, отвечающие за оповещения через Telegram. Нужно отредактировать следующие строки, убрав символ # в начале, если он есть, чтобы раскомментировать:
SEND_TELEGRAM="YES"
TELEGRAM_BOT_TOKEN="123456789:ABCDEF_your_bot_token_here"
DEFAULT_RECIPIENT_TELEGRAM="your_id"
Что здесь нужно сделать:
- Установить SEND_TELEGRAM=”YES” — этим вы включите отправку оповещений в Telegram-канал. По умолчанию эта опция могла быть выключена.
- Вставить свой токен вместо 123456789:ABCDEF_your_bot_token_here после TELEGRAM_BOT_TOKEN=. Будьте внимательны, кавычки оставляем, а токен берём точно, без лишних пробелов. И никому этот токен не показывайте, как пароль от сервера.
- Указать получателя по умолчанию в DEFAULT_RECIPIENT_TELEGRAM — туда вставьте свой числовой Chat ID, который получили от userinfobot. Если бы отправляли в группу, сюда бы записали ID группы с минусом в начале.
Сохраните изменения в файле и закройте редактор. Затем перезапустите Netdata, чтобы новые настройки применились:
sudo systemctl restart netdata
Активируйте диалог с ботом. Последний нюанс: ваш бот не сможет вам написать, пока вы сами ему не напишете первым, такая политика безопасности Telegram. Поэтому откройте Telegram, найдите своего новосозданного бота по юзернейму и нажмите Start или просто пришлите ему любое сообщение, даже слово «Привет». Как только бот получит от вас хотя бы одно сообщение, он пометит чат как открытый и будет иметь право слать вам уведомления.
На этом всё. Netdata теперь будет отправлять вам сообщения в Telegram, когда сработает любой из предустановленных алертов. Формат у них примерно такой: Netdata [WARNING] myserver — CPU utilization = 92% за 1 мин. В тексте обычно указывается уровень проблемы (WARNING или CRITICAL), имя хоста (имя вашего сервера в Netdata), какая метрика тревожит и текущее значение. Например, если CPU будет загружен больше 90% в течение минуты, прилетит CRITICAL оповещение, что процессор перегружен. По памяти обычно предупреждение срабатывает, когда свободно меньше ~10%, а критический алерт, когда память почти на нуле. Таких правил много, все они прописаны в файлах в директории /etc/netdata/health.d/. Настройки по умолчанию довольно разумные и консервативные, система не будет зря спамить, но о реально серьёзных проблемах сообщит сразу. При желании вы сами можете тонко настроить эти пороги под особенности своего проекта, но это уже шаг для продвинутых пользователей.
Кстати, если когда-нибудь надоест получать оповещения, например, вы знаете, что ведутся работы на сервере и показатели будут зашкаливать какое-то время, можно временно приглушить алерты. В веб-интерфейсе Netdata для этого служит кнопка с колокольчиком — нажимаете и выбираете, на какой срок включить тихий режим. По истечении выбранного периода уведомления автоматически возобновятся.
Заключение
Теперь ваш сервер больше не спрячется со своими проблемами, вы держите руку на пульсе системы 24/7. В любой момент можно зайти и посмотреть, чем дышит CPU, сколько памяти свободно, не заполняется ли диск до отказа. Если что-то пойдёт не так, вы узнаете об этом одним из первых, ещё до того как пользователи заметят сбои.
Такой подход кардинально меняет стиль работы. Вместо того чтобы в панике искать причину падения сайта постфактум, вы заранее видите симптомы перегрузки и устраняете их. Мониторинг ресурсов превращает администрирование из реагирования на аварии в предотвращение этих аварий. А ещё вы значительно прокачали свой профессиональный навык, ведь умение настроить толковый мониторинг ценится на рынке, ведь простои сервера могут стоить бизнесу сотни тысяч рублей.
За стабильность — с бонусом
Долгосрочные клиенты получают больше: +1 месяц в подарок по промокоду