Система мониторинга - неотъемлемая часть ИТ инфраструктуры. Сеть не исключение. Для мониторинга сети уже написано много различных систем на разные вкусы:
The Dude. Простая и быстрая в настройке и освоении система мониторинга от Mikrotik. Идеально подходит для небольших сетей или в случае, когда мониторинг нужен “вчера”
Zabbix. Монструозный гигант. Долгое время стандарт де факто в мониторинге (да и сейчас, пожалуй). Умеет, не побоюсь этого слова, всё.
Cacti. Легковесная мониторилка на основе RRDTool
С распространением микросервисов функциональности и производительности существующих систем мониторинга стало не хватать и, что ожидаемо, начали разрабатываться и внедряться новые системы. В очередном моём проекте как раз понадобилась система мониторинга. И чтобы не отставать от цивилизованного мира, я решил попробовать что-то новое. Выбор пал на стек Prometheus + Grafana. Чтобы как-то увлечь Вас, предлагаю посмотреть на демо интерфейс по ссылке.
Grafana
Давайте рассмотрим что же из себя представляет этот стек.
В современной разработке принято разделять продукт на несколько разных по назначению частей. Так система получается более масштабируемой и универсальной. Вот и здесь система мониторинга состоит из нескольких частей:
Как написано по ссылке, это система мониторинга и time-series database. Prometheus принимает метрики из разных источников (exporters), записывает их в базу и предоставляет интерфейс для построения графиков и различных выборок.
Если предыдущая часть собирает и хранит данные, то эта - отображает их в удобной для пользователя форме. Посмотрите ещё раз на интерфейс - ну разве не волшебство?
Prometheus получает данные от экспортеров в виде простого текста. Вроде этого:
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile=“0”} 6.5914e-05
go_gc_duration_seconds{quantile=“0.25”} 0.000120385
go_gc_duration_seconds{quantile=“0.5”} 0.000150536
go_gc_duration_seconds{quantile=“0.75”} 0.000208313
go_gc_duration_seconds{quantile=“1”} 0.001072873
go_gc_duration_seconds_sum 0.333397658
go_gc_duration_seconds_count 1648
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 58
Но эти данные ему ещё нужно доставить. Сами ведь они к нему не придут. Для этого существуют специальные модули, называемые exporters, которые позволяют отсылать данные Prometheus’у. Со списком можно ознакомиться по ссылке. Это что-то вроде Zabbix agent’ов. Есть экспортеры для Linux и Windows, MS SQL, MySQL, Nginx и других систем.
Так как нас в первую очередь интересует сеть, то и экспортировать нам надо SNMP. В этом нам поможет SNMP_exporter.
Таким образом, мы определились, что наш стек мониторинга будет работать на Prometheus, Grafana и snmp_exporter для Prometheus. Все эти модули можно менять на любые другие такого же назначения. Интерфейс Grafana можно заменить на Kibana (но не стоит этого делать - kibana совсем для других целей), а БД в виде Prometheus можно заменить на InfluxDB, Graphite или что-то ещё. Я выбрал именно Grafana + Prometheus + snmp_exporter за гибкий язык запросов prometheus и гибкость и красоту grafana.
Чтобы ещё больше погрузиться в модные технологии, весь стек было решено поднимать в docker контейнерах. Вам совсем необязательно повторять этот трюк, но познакомиться с контейнерезацией в XXI веке тоже было бы неплохо.
На этом пока всё. В следующей части установим и настроим сборку метрик с помощью prometheus и snmp_exporter.
comments powered by Disqus