Мониторинг сервера с Netdata
Долгое время я жил без мониторинга. Ну, в смысле, если сервер работает — зачем за ним следить? Я захожу раз в день, гляну htop, убеждаюсь что load average в норме и свободная память есть — и живу спокойно. Пока однажды не случилось то, что случается со всеми: диск забился под завязку, а я заметил только когда сайты перестали открываться. С того дня я решил — пора ставить мониторинг.
Перепробовал несколько решений. Prometheus + Grafana — это мощно, но для домашнего сервера это как из пушки по воробьям. Настраивать экспортёры, писать запросы на PromQL, рисовать дашборды… Я хотел что-то, что работает «из коробки» и не требует танцев с бубном. Так я наткнулся на Netdata.
Netdata — это мониторинг в реальном времени. Не раз в минуту, а каждую секунду. Ты видишь графики CPU, RAM, диска, сети — все сразу и с детализацией до миллисекунды. Первое, что меня поразило — страница с дашбордом грузится и сразу показывает сотни графиков. Без настроек. Просто поставил и забыл. На официальном сайте говорят, что Netdata собирает больше метрик, чем любая другая система мониторинга. Я проверил — не врут.
Установка плёвая. На Ubuntu — curl-скрипт одной командой. Он сам определяет версию ОС, ставит зависимости и запускает сервис. Через минуту у тебя уже веб-морда на порту 19999. Но я же reverse proxy поставил — сразу завернул на netdata.example.com. Тут важный момент: Netdata по умолчанию слушает на всех интерфейсах. Я сразу поправил конфиг, чтобы висела только на localhost. Потому что открывать мониторинг наружу без пароля — плохая идея. Любой желающий будет видеть твои метрики, а там и до атаки недалеко.
Базовая установка — это хорошо, но для дома нужно больше. Первое, что я добавил — Telegram-уведомления. Netdata умеет отправлять алерты куда угодно: Telegram, Slack, почта, даже PagerDuty. Я настроил Telegram-бота через webhook. Теперь если CPU подскакивает выше 90%, или диск заполняется больше 80%, или оперативка кончается — мне приходит сообщение в Telegram. Я однажды был в магазине, приходит алерт «disk space / 85%». Я с телефона зашёл на сервер, глянул — и правда, логи Docker-контейнера сожрали полдиска. Почистил — и забыл. Без алерта я бы заметил только когда сайт упал.
Второе — я подключил мониторинг Docker-контейнеров. Netdata видит Docker-демон и показывает метрики каждого контейнера отдельно. Очень удобно, когда один контейран начинает жрать всю память. У меня был случай с MongoDB в контейнере — она тихо росла и сожрала 4 ГБ. Я бы не заметил, пока сервер не лёг бы. А Netdata показала график — плавный рост день за днём. Оказывается, там не была настроена ротация логов. Пофиксил — и память стабилизировалась.
Из интересного — Netdata умеет мониторить Nginx. Я завернул статусную страницу nginx (stub_status) и Netdata сама подхватила метрики: количество запросов, активные соединения, пропускная способность. Красивые графики, сразу видно, когда на сайт приходит бот-атака или просто всплеск трафика.
Ещё я настроил мониторинг SMART — состояния дисков. Знаю, что диски живут не вечно, и когда один из моих SSD начал сыпать reallocated sectors, Netdata показала это на графике. Я успел купить новый диск и перенести данные до того, как старый рассыпался окончательно. Сэкономил себе кучу нервов и времени.
Про производительность Netdata — это отдельная песня. Когда я впервые увидел сотню графиков на дашборде, подумал «блин, он же сам всё сожрёт». Нет. Netdata написана на C, использует memory-mapped файлы и занимает смешные 1-2% CPU. Оперативки — около 200 МБ на хранение метрик за последние пару часов. Для исторических данных есть архив — они сжимаются и хранятся в базе на диске. Я не заметил разницы в нагрузке на сервер после установки.
Исторические данные — вот где боль. По умолчанию Netdata хранит метрики за последние пару часов в оперативке, и за пару дней на диске. Для прода это мало, но для дома — норм. Если хочешь больше, есть интеграция с Prometheus или InfluxDB, но я пока не заморачиваюсь. Для расследования инцидента пары дней хватает. А если что-то серьёзное — я и так в Telegram сразу узнаю.
Что мне нравится в Netdata — она не мешает. Она есть, но её не видно. Все алерты приходят тихо в Telegram, дашборд я открываю раз в несколько дней, просто глянуть общую картину. Но когда случается проблема — она первая об этом сообщает. Идеальный баланс.
Из недостатков: дашборд на телефоне не очень удобный. Графики мелкие, тыкать пальцами неудобно. Но для мобильного можно поставить Prometheus + Grafana с отдельной темой. Или просто терпеть — я терплю. Второй недостаток — обновления. Netdata выходит часто, раз в неделю примерно. Обновляется просто, но порой ломаются кастомные настройки. После одного обновления у меня перестали работать алерты — пришлось переписывать конфиг. Но это мелочи.
В итоге: Netdata — лучший вариант для домашнего сервера, если ты не хочешь тратить недели на настройку. Ставится за минуту, даёт космическое количество метрик, уведомляет о проблемах. Я уже два года с ней живу и ни разу не пожалел. А когда диск сдох — она предупредила заранее. Так что теперь я сплю спокойно. И тебе советую.