LINUX.ORG.RU
ФорумAdmin

Посоветуйте подкроватный мониторинг

 , ,


5

2

Приветствую.

Имеется типичный набор локалхостов в лице сервера-файлопомойки и нескольких роутеров (в VPN). Хочу две вещи: смотреть на графики из разнообразных чисел (начиная от мощности 3G-сигнала в одной из сетей VPN'а и aggregate traffic за день и заканчивая температурой жёстких дисков в файлопомойке и количеством тонера в принтере) и получать оповещения о заранее определённых событиях на почту (например, когда развалился туннель, перегрелись диски или отвалился их контроллер, заспамив лог ядра предупреждениями — увы, такое случается часто, потому что железо нищебродское).

Какой набор софта вы можете для этого посоветовать? Железа мало, поэтому разные там SNMP, discovery и шаблоны скорее вредны, чем полезны. В принципе, все необходимые данные со всех узлов я могу собирать с помощью самописных шелл-скриптов — от мониторилки нужна возможность запускать эти скрипты по расписанию (или в потоковом режиме), оповещать по электронной почте при наступлении указанных условий, складывать численные данные в какую-нибудь и уметь строить адекватные графики и диаграммы (включая несколько типов графиков из одних и тех же данных).

★★★★★

Последнее исправление: intelfx (всего исправлений: 2)

systemd такого не умеет? =)

Вообще для таких целей использовал munin, там и дополнительные сборщики метрик дописать не сложно, и сам по себе легковесный и простой.

alozovskoy ★★★★★
()
Ответ на: комментарий от alozovskoy

systemd такого не умеет? =)

Слишком толсто.

Вообще для таких целей использовал munin

Там кроме графиков есть что-то? Изменяемые масштабы? Поддержка булевых данных и почтовые нотификации есть? Вообще выглядит как-то слишком примитивно.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Масштабы есть, но там шаг данных 15 минут, то есть получить какое-нибудь «значение в секунду» в целом не получится. Нотификации есть, но надо донастраивать будет в конфигах. Про булевые данные не в курсе, но можно сказать что «значение 0 это ОК, значение 1 это крит».

Вообще выглядит как-то слишком примитивно.

Он действительно примитивный и для подкроватных серверов. Если надо чтоб там все прелести вебдваноли и конфиги вообще не знать где лежат то это не к нему точно.

alozovskoy ★★★★★
()
Ответ на: комментарий от alozovskoy

шаг данных 15 минут

Т. е. он тупо раз в 15 минут запускает скрипты и сохраняет то, что они говорят? А если хочется реальное среднее значение (или нельзя пропустить ни одного события, или хочется собирать aggregate за разные промежутки времени, типа суммарный трафик в час и суммарный трафик в день), то нужно обкостыливать?

Если надо чтоб там все прелести вебдваноли и конфиги вообще не знать где лежат то это не к нему точно.

Про такое я бы тоже хотел узнать, для сравнения.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от intelfx

Т. е. он тупо раз в 15 минут запускает скрипты и сохраняет то, что они говорят?

Да. Можно выставить любой интервал запуска, но это поломает графики.

А если хочется реальное среднее значение, то нужно обкостыливать?

Вообще костылить придется довольно много, но там это можно делать хоть на bash - тупо пишутся свои скипты сбора данных и погнали.

Про такое я бы тоже хотел узнать, для сравнения.

Не подскажу тут ничего, кроме zabbix. Все остальное либо проприетарщина за сотни нефти, либо не видел.

alozovskoy ★★★★★
()
Ответ на: комментарий от alozovskoy

Ладно. Подожду, пока кто-нибудь ещё что-нибудь посоветует. Не хочу руками писать логику обработки данных (уже наелся).

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

используй метрики collectd с мордой в виде graphana. Красиво и графики интерактивные.

ponch
()

Попробуй Telegraf + influx + Grafana.

Эти штуки умеют всё, что нужно. В телеграфе есть возможность подключать свои скрипты, лишь бы вывод был в нужном формате (что-то типа как в нагиосе).

PunkoIvan ★★★★
()
Ответ на: комментарий от intelfx

шаг данных 15 минут

Вроде 5 минут по умолчанию
http://munin-monitoring.org/wiki/faq#Q:CanIrunmuninatdifferenttimeintervalsth...

хотя возможно зависит от системы
И вроде можно прикрутить что бы работал чаще(там ссылка на закрытый тикет), но не пробовал

нотификации

есть
https://munin.readthedocs.io/en/latest/tutorial/alert.html

Изменяемые масштабы?

есть
потыкай демо http://demo.munin-monitoring.org/

Т. е. он тупо раз в 15 минут запускает скрипты и сохраняет то, что они говорят? А если хочется реальное среднее значение, то нужно обкостыливать?

Да, запускает скрипты через крон и сохраняет значения в RRD. В RRD можно считать среднее, максимальное и т.д. Из RRD можно вытащить отсчет за последний день(или как настроишь), дальше будут хранится уже усредненные. Т.е. всей истории наблюдений нет (нет точных значений за любой период)

Вобще смысл этого munin-а - поставил и смотришь графики, ничего особо настраивать не надо. Подключить новые достаточно просто и наклепали их уже 100500+ (https://github.com/munin-monitoring/contrib). Правда интерфейс для подключения консоль и скрипты, но может быть это и проще и удобней чем какой-нибудь gui. Плюс надо заметить что он довольно живой, последний релиз в этом году.

pru-mike ★★
()

Могу подключить твой мониторинг к своему «коллектору», причем бесплатно, как для альфа пользователя.
Что получишь:

  • Доступ онлайн по https (CDN, кэширование, availability 99,94%)
  • Административный доступ к grafana
  • Openvpn файл с подключением, чтобы не слать метрики метрики открыто
  • Возможность всегда получить контейнер со всеми твоими данными, например если захочешь хостить это сам (не моментально, по запросу вручную)
  • Оповещение на почту для созданных тобой alert'ов
  • Только базовые графики, могу подключить любой мониторинг, который сможет отдавать данные в opentsdb/graphite
  • Небольшое руководство для netdata, и для openvpn c systemd

Также могу написать как создавать какой-нибудь примитивный график, чего тебе по идеи должно быть достаточно чтобы начать добавлять графики самому. Ограничение, до 12гб метрик в год (конечно тут имеется в виду, не трафик, а место которое будут занимать метрики в БД) на пользователя, и после года либо платишь 15$ в год, либо забираешь контейнер. Заняться смогу часов через шесть-семь, если интересно.

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)

Как вариант из той же серии что munin - cacti(http://www.cacti.net/). Тоже на базе RRD-tool, cron-based сбор данных, не реалтайм (можно прикрутить но сомневаюсь что просто). Отправка оповещений через plugin-ы. У cacti красивый и очень забористый интерфейс, который позволяет подкрутить почти всё в RRD-tool.

pru-mike ★★
()
Ответ на: комментарий от anonymous_sama

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

intelfx ★★★★★
() автор топика

Если нужен self-contained мониторинг, могу посоветовать Netdata.

Там и dashboard красивый, и плагины на разных языках можно писать, легковесный. Из коробки очень много метрик собирается.

zuzzas
()
Ответ на: комментарий от PunkoIvan

Похоже на то, что нужно. Для телеграфа входы и фильтры можно на $чём_нибудь писать? Мне для суммирования трафика за произвольные периоды нужно... или это по-другому делается?

И да: в чём разница между Influx, Graphite, Prometheus и что-там-ещё-есть? У меня есть прога, которая умеет писать какие-то свои метрики в Prometheus, их тоже хотелось бы видеть.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от zuzzas

Ага, спасибо, тоже посмотрю. Он нотификации на мыло умеет слать? А собирать данные с нескольких хостов?

Точнее, так: у меня есть роутеры, с которых тоже нужно собирать какие-то метрики, но они сами не на линуксе, и метрики я планирую собирать кастомным скриптом, который стучится туда по SSH и вытаскивает нужные данные. Я смогу их потом отгрузить в netdata, так, чтобы в дашборде было понятно, что это данные с нескольких хостов?

intelfx ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

systemd такого не умеет?

5+ ! :-)

intelfx

А чем collectd не устраивает ? Если скрипты, там плагин perl есть. Вот фронт-енд к нему... Можно collection3 допилить под нужные комбинации графиков (он там в contrib в тарболе). Или kcollectd, там графики натаскиваются из источников на отображаемое поле.

AS ★★★★★
()
Ответ на: комментарий от intelfx

netdata, в основном из-за хорошей поддержки lxс/docker и очень маленьких требований, influxdb, grafana, вот. Также можешь обратить внимание на collectd (своего рода больше unix-way), prometheus и fluentd (последний как по мне очень крутой). Но в целом да, если уже есть рабочий более старый мониторинг, то его тоже можно grafana подключить. Также у grafana есть очень хороший ping плагин, который умеет и сайты и ip (хоть и там ограничение на количество), очень удобно для проверки HA.

anonymous_sama ★★★★★
()
Ответ на: комментарий от AS

perl

Ну хотя бы этим :)

Какое-то оно тоже примитивное. Я не хочу вручную писать логику обработки данных в скриптах.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от anonymous_sama

Понял, спасибо. Prometheus мне пригодится в любом случае, в него матриксовый synapse пишет свои метрики. А старый мониторинг состоит из тонны скриптолапши, самодельной обработки данных и выгрузки в plotly(!), и его я уже выкинул к чёртовой матери, потому что так делать — 5.1ный стыд.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)

дома пробовал почти все системы мониторинга и решил, что даже подкроватно лучший — это zabbix
любые данные можно превратить в разные графики, оповещения и всё такое. вот только с годами приходит осознание, что ненужно оно. у тебя нет SLA, показывать графики в случае жопы тоже не надо. любая поломка в радиусе трех комнат заметна сразу. если не заметна — то сломанное тоже ненужно, это не соседний корпус или вообще другой город где собранная информация поможет выявить проблему не вставая со стула

system-root ★★★★★
()
Ответ на: комментарий от intelfx

Для телеграфа входы и фильтры можно на $чём_нибудь писать?

Пиши хоть на С, вот тут дока https://github.com/influxdata/telegraf/tree/master/plugins/inputs/exec

плагин запускает приложенько, которое должно отдавать аутпут в одном из форматов.

И да: в чём разница между Influx, Graphite, Prometheus и что-там-ещё-есть?

Разницу не скажу, ибо мы с cacti пересели на TICK. Удобненько.

И Графана умеет в темплейты ещё. То есть, ты на одной дашборде можешь отображать все хосты, заюзав переменные.

Мне для суммирования трафика за произвольные периоды нужно... или это по-другому делается?

Если я правильно тебя понял, то это делается через Графану - там и интервалы, и суммы, и суммы за интервалы =) (путём запросов к InfluxDB)

PunkoIvan ★★★★
()

Скирпты, cron, CSV файлы и spreadsheet для графиков. :) Кстати, заметил, ни кто https://www.nagios.org не предложил. Правда, я сам не уверен, что подходит под все перечисленные требования - очень давно видел, и то мелком. Но как бэ для логов предназначается.

PHPFan
()
Ответ на: комментарий от intelfx

perl

Ну хотя бы этим :)

Может, там не только Perl (список плагинов огромен, весь - это надо пересматривать после каждого обновления :-) ). Мне, честно говоря, свои скрипты там так и не понадобились на столько, чтобы уже писать. Хотя плагин этот посмотрел.

Я не хочу вручную писать логику обработки данных в скриптах.

А какую именно обработку ?

любые данные можно превратить в разные графики

collectd, в первую очередь, собирает статистику в rrd-шки, а из них ты можешь нарисовать что и как хочешь посредством подобранного фронтенда. Слабое место только - это фронтенд этот найти, но меня устраивают kcollectd и collection3.

А, вообще, использую collectd и xymon. Друг друга дополняют вполне.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 2)

Частично monitorix подходит. По дискам точно оповещать умеет, остальное я как-то не трогал. Данные в rrd хранит. По идее не сильно сложно собственные модули дописать.

Radjah ★★★★★
()
Ответ на: комментарий от AS

А какую именно обработку ?

Элементарщина: просуммировать за период, проинтегрировать, продифференцировать.

collectd, в первую очередь, собирает статистику в rrd-шки

Вот это мне и не нравится.

Для протокола: я ещё сам в точности не знаю, что мне нужно. Как должно быть понятно из ОП, у меня не продакшен, а «поиграться и поизучать». Поэтому пытаюсь сразу подобрать инструмент помощнее, чтобы потом не пришлось его менять (как сейчас). Hope this makes sense.

Из того, что я реально хочу мониторить во что бы то ни стало — температура жёстких дисков, показатели SMART'а, уровень 3G-сигнала на даче (потому что его ухудшение означает, что направленную антенну сдвинуло ветром или кто-то случайно зацепил) и ошибки в ядерном логе сервера (как булевый триггер). Всё остальное — так, по фану.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 5)
Ответ на: комментарий от anonymous_sama

А можешь ткнуть в какую-нибудь статью (или объяснить в двух словах), в чём существенные различия между всеми упомянутыми здесь time-series базами данных (prometheus, influxdb, graphite, что ещё)?

И ещё: если есть какие-то кастомные метрики (микротиковский роутер и скрипт, который лезет туда по ssh и шлёт поток чисел, или там SMART-параметры хардов на файлопомойке), то их лучше фидить сразу в базу данных условным неткатом или как?

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

То, что важно мне:

time-series базами данных

Вообще их где-то с десяток (не считая совсем небольших проектов), где только 3-4 форка opentsdb (не факт, что сразу назову) graphite не умеет тэги и занимает больше мечта чем opentsdb, установить легко как правило есть в репозиториях
opentsdb - умеет тэги, занимает меньше места, чем graphite, масштабируется хорошо, но практически бесполезен без очень большого парка (hbase, zookeeper), адский в настройке и установки.
InfluxDB, это современное решение, которое и проще поддерживать и которое в разы превосходит opentsdb по всем параметрам, и оно имеет SQL like CLI
Prometheus, меньше места чем InfluxDB, имеет смысл связываться, только если ты изначально на него все завязываешь.

И ещё: если есть какие-то кастомные метрики (микротиковский роутер и скрипт, который лезет туда по ssh и шлёт поток чисел, или там SMART-параметры хардов на файлопомойке), то их лучше фидить сразу в базу данных условным неткатом или как?

SMART умеют многие модули для мониторингов. В крайнем случае можешь слать в opetsdb telnet-like формате прямо в туже же influxdb, например. Проще наверно придумать уже нельзя. Также можешь как примеры посмотреть вот это или 1, 2, форк opentsdb, bash скрипт применим и к opentsdb

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)

Интересно, в есть какие-то легкие решения (про collectd знаю), чтобы установить непосредственно на роутер, например под OpenWrt? Чтобы без PHP, Java, Go и прочего?

zudwa
()
Ответ на: комментарий от intelfx

Из того, что я реально хочу мониторить во что бы то ни стало — температура жёстких дисков, показатели SMART'а, уровень 3G-сигнала на даче (потому что его ухудшение означает, что направленную антенну сдвинуло ветром или кто-то случайно зацепил) и ошибки в ядерном логе сервера (как булевый триггер).

Вот температура и уровень сигнала - это просто статистика. Зачем там что-то складывать и интегрировать ? Это, как раз, для collectd задача. А триггер - Xymon. Хотя задачи collectd на Xymon тоже можно навесить, если там немного графиков (из-за того, что запись в rrd для каждого случая, которого нет в Xymon, надо доописывать).

Что касается трафика. Если Микротик, то он умеет netflow. Тут nfsen может оказаться полезен.

AS ★★★★★
()
Ответ на: комментарий от AS

Там — ничего. А всякий там трафик через роутер было бы интересно просуммировать за период.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

А всякий там трафик через роутер было бы
интересно просуммировать за период.

А вот тогда не надо смешивать плохо совместимое (привет, systemd ;-) ). Траффик надо вынести отдельно. Повторюсь: если железка умеет netflow, этим грех не пользоваться. Дальше выбирать коллектор и то, чем смотреть. nfsen я назвал уже (веб-морда к коллектору nfdump), хотя на нём свет клином не сошёлся на самом-то деле. Можно хоть тем же nfdump в консольке смотреть.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

Но мне не нужна per-connection детализация. И я по возможности не хочу разводить зоопарк из инструментов.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Но мне не нужна per-connection детализация.

А если понадобится ? Когда она есть, ты можешь делать агрегированную выборку, но вот если у тебя заранее агрегировано, per-connection ты не получишь уже. Это с одной стороны. С другой - не знаю, как в RouterOS, а ipt_netflow, кажется, умеет агрегировать до отправки на коллектор. Может и в RouterOS можно.

И я по возможности не хочу разводить зоопарк из инструментов.

Если тупо трафик с портов устроит, возвращаемся к уже названному (collectd, xymon, zabbix, разное).

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

А если понадобится ?

Хех. Не прошло и месяца, как понадобилась. Надо понять, кто и зачем жрёт трафик на даче. Чем лучше всего собирать netflow с роутера в условный influxdb, по возможности с настраиваемой агрегацией до записи на диск (например, чтобы отбрасывать src-port или src-address там, где это не нужно)?

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

в условный influxdb, по возможности с настраиваемой агрегацией до записи на диск

Это не знаю. У меня nfdump (nfcapd точнее) просто в файлы складывает, без агрегирования. Агрегировать умеет сенсор ipt_netflow.

AS ★★★★★
()
Ответ на: комментарий от intelfx

Надо понять, кто и зачем жрёт трафик на даче.

Если разово и жрет постоянно может хватить и tcpdump ( иногда даже визуально возможно заметить), на даче же у вас не 100500 устройств.
Если не постоянно, правил iptables наклепать на каждый хост, посмотреть счетчики а потом tcpdump только на виновника, позже проанализировать.

anc ★★★★★
()
Ответ на: комментарий от PunkoIvan

Есть вопрос про InfluxDB. Я сейчас пытаюсь приспособить его для хранения статистики жора трафика (netflow). Нет ли в InfluxDB возможности записывать в базу значения не в точках, а на интервалах времени? Чтобы потом с помощью одного запроса можно было выбрать сумму всех интервалов за некий больший промежуток времени (с правильным поведением на границах)? Или это не задача InfluxDB?

Пару слов о том, что я хочу получить в итоге. Входные данные выглядят так: много записей вида «за период времени от X до Y такой-то хост сожрал столько-то байт трафика», интервалы могут накладываться друг на друга, хосты могут повторяться. На выходе мне нужны два рисунка: графики скорости обмена данными для каждого хоста в каждый момент времени (с настраиваемым масштабом) и, скажем, кольцевую диаграмму сожранного трафика за день (кто сколько).

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Пока что в голову приходит следующий костыль: разбивать входные интервалы на отрезки ровно по минуте (при необходимости округлять вверх) и добавлять в InfluxDB эти отрезки как точки. Но тут тоже вопрос: если я в графане сделаю из этой серии график, то каково будет её поведение при изменении масштаба по X? Она будет усреднять? Или суммировать?

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Не уверен, что понимаю правильно

если я в графане сделаю из этой серии график, то каково будет её поведение при изменении масштаба по X?

Имеется ввиду, что если было максимальное занчение 50, а стало 250 и изменился масштаб?

PunkoIvan ★★★★
()
Ответ на: комментарий от PunkoIvan

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

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

аа, ну да.

Ещё рекомендую с темплейтами разобраться - можно на одной дашборде отображать кучу серверов, просто подставляя переменные нужные. Очень удобная хрень, у нас в инфлакс данные льют почти 6к хостов через телеграф и графана всё это дело отображает на одной дашборде - просто выбираем хостнейм по паттерну для отображения в данный момент, в том числе интервалы тоже переменной можно задать.

+ещё на grafana.net сходи, много полезного.

PunkoIvan ★★★★
()
Последнее исправление: PunkoIvan (всего исправлений: 1)
Ответ на: комментарий от PunkoIvan

Слушай. А как в графане+инфлюксе можно поделить выбранное значение на текущий интервал группировки?

Т. е. например у меня в инфлюксе каждое измерение — это количество трафика от/к хосту с момента предыдущего измерения (т. е. за последнюю минуту, т. к. измерения ежеминутные). Сейчас это рисуется так:

SELECT sum("bytes_in") + sum("bytes_out") FROM ... WHERE $timeFilter GROUP BY time($interval), "src_addr" fill(0)

А я хочу рисовать среднюю скорость этого трафика. Первая мысль — делить на $interval:

SELECT (sum("bytes_in") + sum("bytes_out")) / $interval FROM ... WHERE $timeFilter GROUP BY time($interval), "src_addr" fill(0)

Но в этой переменной лежит значение с единицами измерения (30s, 1m, 6h) и инфлюкс такое не понимает.

Как-то можно это решить?

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от intelfx

Я думаю, что тебе стоит выбрать нужное значение в SELECT => aggregations \ SELECT =>transformation.

попробуй тут: https://docs.influxdata.com/influxdb/v1.2/query_language/functions/#median

PunkoIvan ★★★★
()
Последнее исправление: PunkoIvan (всего исправлений: 1)
Ответ на: комментарий от PunkoIvan

Не понял, что ты предлагаешь сделать. Мне нужно получить не среднее, а удельное за интервал. Т. е. просуммировать и поделить на интервал группировки.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.