mysurik.ru

Мониторинг сервера с 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 — лучший вариант для домашнего сервера, если ты не хочешь тратить недели на настройку. Ставится за минуту, даёт космическое количество метрик, уведомляет о проблемах. Я уже два года с ней живу и ни разу не пожалел. А когда диск сдох — она предупредила заранее. Так что теперь я сплю спокойно. И тебе советую.

Добавлю ещё практических деталей, которые я узнал за время пользования Netdata. В первой части я пробежался по основному, а тут — то, что пригодится именно при настройке под себя.

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

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

Теперь про то, как я пользуюсь дашбордом. Самое полезное для меня — не сами графики, а быстрый переход «проблема → причина». Когда приходит алерт о загрузке диска, я открываю Netdata и смотрю, какой именно раздел заполнен и какие файлы растут. Встроенный вьювер логов очень помогает — не нужно лезть на сервер и grep-ить вручную, всё видно в одном месте.

Отдельная история — мониторинг сети. Netdata показывает скорость по каждому интерфейсу, а также ошибки и коллизии. У меня был случай, когда домашний сервер начал «глотать» трафик — оказалось, один из контейнеров стучался наружу каждые пару секунд из-за кривой настройки cron. По графикам сети я это увидел сразу, а без мониторинга гадал бы долго.

Ещё мне пригодился мониторинг потребления CPU по процессам. Когда какой-то процесс неожиданно съедал ядро на 100%, Netdata показывала, что именно это за процесс. Пару раз это были забытые фоновые задачи, которые я запускал в терминале и оставлял жить. Теперь такие вещи ловятся за минуту, а не за день разбирательств.

Про сравнение с другими инструментами. Я пробовал и Prometheus + Grafana, и Zabbix, и просто скрипты, которые шлют письма. Prometheus + Grafana — невероятно гибко, но требует времени на настройку. Zabbix — мощен, но тяжёл и сложен в установке для дома. Скрипты — быстро, но нет картинки и истории. Netdata — золотая середина: ставится за минуту, метрик больше чем достаточно, алерты из коробки. Если у тебя дом, а не продакшн с сотней серверов — это лучший старт.

Про ресурсы ещё раз, потому что это часто пугает. Netdata ест очень мало, но на совсем слабых машинках (1 ГБ RAM и меньше) стоит ограничить объём истории метрик в конфиге. Я держу историю на пару часов в оперативе — этого достаточно, чтобы увидеть, что было до инцидента. Если нужно больше — лучше вести данные в Prometheus. Но для дома и так хватает.

Ещё один момент — безопасность дашборда. Я упоминал, что повесил Netdata на localhost. На всякий случай повторю: никогда не открывай мониторинг наружу без аутентификации. Если очень нужен удалённый доступ — используй VPN или хотя бы пароль на дашборде. Внутренние метрики — это не то, что стоит показывать всем подряд.

Что я бы сделал иначе. Если бы начинал заново, сразу бы настроил уведомления в Telegram и мониторинг Docker-контейнеров, не откладывая. Именно эти две вещи принесли мне 90% пользы. А разглядывание графиков в первый вечер — приятно, но вторично. И ещё — я бы сразу приучил себя отвечать на алерты сразу, а не «потом разберусь». «Потом» иногда превращается в неделю, и мелкая проблема успевает раздуться.

Итоговый вердикт. Netdata — это тот инструмент, который я ставлю на любой новый сервер первым делом, ещё до reverse proxy и бэкапов. Потому что без мониторинга ты узнаёшь о проблеме, когда уже стало поздно. С Netdata — в момент, когда ещё можно всё починить за пять минут. Именно за это её люблю: она тихо живёт в фоне и говорит только когда что-то действительно не так.

Напоследок про один полезный приём, который я случайно открыл. В Netdata есть страница «health checks» — там видно все активные алерты и их состояние одним списком. Когда на сервере много контейнеров, эта страница — первое, что я открываю после крупного обновления или перезагрузки. За минуту видно, всё ли в порядке или что-то тихо сломалось, не дожидаясь, пока проблема станет критической. Это стало моим ежеутренним ритуалом на пару минут.

И маленький совет по обновлениям. Обновляй Netdata регулярно, но после обновления всегда проверяй, что алерты снова в работе. У меня однажды после апдейта отвалились уведомления — тихо, без ошибок. Если бы я не проверил, узнал бы о проблеме только когда что-то упало бы. Пять минут проверки после обновления экономят потом часы.

Вот так у меня выстроена работа с Netdata: тихая, в фоне, без суеты. Она следит, я занимаюсь своими делами, а в нужный момент — предупреждает. Для домашнего сервера это именно то, что нужно.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *