27.05.2018

[Мониторинг] Prometheus + Grafana. Часть 1. Общая информация

Система мониторинга - неотъемлемая часть ИТ инфраструктуры. Сеть не исключение. Для мониторинга сети уже написано много различных систем на разные вкусы:

  • The Dude. Простая и быстрая в настройке и освоении система мониторинга от Mikrotik. Идеально подходит для небольших сетей или в случае, когда мониторинг нужен "вчера"
  • Zabbix. Монструозный гигант. Долгое время стандарт де факто в мониторинге (да и сейчас, пожалуй). Умеет, не побоюсь этого слова, всё. 
  • Cacti. Легковесная мониторилка на основе RRDTool

С распространением микросервисов функциональности и производительности существующих систем мониторинга стало не хватать и, что ожидаемо, начали разрабатываться и внедряться новые системы. В очередном моём проекте как раз понадобилась система мониторинга. И чтобы не отставать от цивилизованного мира, я решил попробовать что-то новое. Выбор пал на стек Prometheus + Grafana. Чтобы как-то увлечь Вас, предлагаю посмотреть на демо интерфейс по ссылке.

Grafana



Давайте рассмотрим что же из себя представляет этот стек.

В современной разработке принято разделять продукт на несколько разных по назначению частей. Так система получается более масштабируемой и универсальной. Вот и здесь система мониторинга состоит из нескольких частей:


Как написано по ссылке, это система мониторинга и time-series database. Prometheus принимает метрики из разных источников (exporters), записывает их в базу и предоставляет интерфейс для построения графиков и различных выборок.





Grafana Icon Grafana

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





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.

3 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. С Prometheus еще пока незнаком, а Grafana вообще крутая вещь. Просто красота. Использую в связке с Zabbix.

    ОтветитьУдалить
    Ответы
    1. Я сам был поражен визуализацией в grafana. А Prometheus позволяет делать очень гибкие выборки. Советую хотя бы в докере потестить для общего понимания.

      Кстати, скоро вторую часть допишу ;)

      Удалить