Что такое «временной ряд» и как он используется в современном мониторинге?
Временные ряды используются в современном мониторинге как способ представления метрических данных, собранных по времени. Таким образом, современные показатели производительности могут быть сохранены и отображены разумным и полезным способом, помогая нам контролировать наши серверы и сервисы.
Многие решения (как с открытым исходным кодом, так и проприетарные) уже используют временные ряды как в хранилище метрических данных, так и в его механизмах визуализации.
Последнее изображение было взято из Zabbix, который хранит все данные временных рядов в общей базе данных, а затем отображает их в виде метрических графиков.
Другие примеры включают в себя старые добрые MRTG и Cacti. Но в более современных инфраструктурах, особенно в облачных, таких как AWS или OpenStack, используются более надежные и настраиваемые решения.
В этой статье мы сравним три наиболее широко используемых альтернативы (Prometheus, Grafana и Graphite), чтобы определить их сильные и слабые стороны. Мы будем использовать следующие параметры в качестве общих точек сравнения между всеми тремя вариантами:
- Визуализация и редактирование панели
- Место хранения
- Сбор информации
- Плагин, архитектура и расширяемость
- Тревога и отслеживание событий
- Совместимость облачного мониторинга
- Open Source против коммерческих предложения
Визуализация и редактирование панели инструментов:
Это та часть, где вы проектируете и строите графики метрик / временных рядов и упорядочиваете их на инструментальных панелях. Обзор преимуществ систем мониторинга.
- Grafana: с точки зрения визуализации, создания и настройки панели мониторинга, Grafana — лучший из всех вариантов. Он многофункциональный, простой в использовании и очень гибкий.
- Graphite : Хорошие параметры визуализации, но в его основные функции не входит редактирование приборной панели. В реальном мире Graphite используется в сочетании с Grafana; Graphite хранит данные, а Grafana — визуализацию.
- Prometheus : Отлично, но в целом сложно использовать функции редактирования графиков и приборной панели. Prometheus использует консольные шаблоны для визуализации и редактирования панели, но поначалу обучение этим консольным шаблонам может оказаться трудным. В реальном мире я рекомендую начать с использования Grafana для редактирования графиков и панелей, а затем (когда достигнут уровень) перейти к шаблонам консоли Prometheus.
Победитель: Grafana побеждает здесь с большим отрывом, в то время как Prometheus занимает второе место.
Место хранения:
Визуализация — это часть задачи, но мы не можем визуализировать временные ряды из воздуха. Нам нужно получить их из источника, и этот источник должен каким-то образом хранить все временные ряды и предоставлять возможность их запроса:
- Grafana: Нет поддержки хранения временных рядов. Grafana — это только решение для визуализации. Хранение временных рядов не является частью его основной функциональности.
- Graphite: на этот раз Graphite побеждает Grafana. Graphite может хранить временные ряды, полученные из других источников (обычно это инструменты прямого мониторинга), и предоставлять язык запросов для получения хранимых данных. Опять же, Grafana может использоваться с Graphite для визуализации данных, хранящихся на его внутренней стороне хранилища.
- Prometheus: Царь горы. Способ, которым Prometheus хранит временные ряды, является лучшим на сегодняшний день (благодаря своей многомерной модели, которая использует теги ключ-значение вдоль временных рядов для лучшей организации данных и предоставления мощных возможностей запросов). Как упоминалось ранее, Grafana может использоваться с языком запросов Prometheus для создания графиков и информационных панелей.
Победитель: Prometheus выделяется здесь с Graphite, занимающим тут второе место, и Grafana как абсолютный неудачник.
Сбор информации:
Хорошо, у вас есть и хранилище, и визуализация, но вам необходимо получить данные из ваших служб. И вот тут, прямой мониторинг выходит на сцену. Используя старые методы (SNMP) или новые (агенты), вам нужен способ получения метрик, которые в конечном итоге будут храниться в виде временных рядов:
- Grafana: Нет поддержки сбора данных. Опять же, Grafana — это всего лишь решение для визуализации. Ни хранение временных рядов, ни сбор временных рядов не являются частью его основной функциональности.
- Graphite: сбор данных также не поддерживается, по крайней мере, напрямую. Вам необходимо включить такие решения, как statd, collectd и другие, чтобы сделать часть сбора данных функциональной. Graphite получит все данные из этих источников и сохранит эти данные в виде временных рядов в своей внутренней памяти.
- Prometheus : король вернулся из своих битв сбора данных. Да, Прометей может выполнять сбор данных вместе с хранением и визуализацией. Это очень полное решение, как и другие актеры на улице (Cacti, Nagios и Zabbix).
Победитель: Прометей снова побеждает, а Графит и Графана оба проигрывают в этой гонке.
Архитектура и расширяемость плагинами:
Одним из сильных сторон всех современных программных решений является возможность расширения за счет использования плагинов или других подобных средств. Таким образом, вы можете расширить уже имеющиеся основные функции и включить в свое решение набор совершенно новых функций:
- Grafana: Да, поддерживается и с большим набором плагинов, применяемых к источникам данных, приложениям и редактированию панели мониторинга. Больше информации доступно здесь: https://grafana.com/plugins
- Graphite: Да, определенным образом. Graphite на самом деле не предоставляет и не имеет подключаемой библиотеки. Вместо этого есть много инструментов, которые уже совместимы с
Graphite. Больше информации доступно по следующей ссылке:
http://graphite.readthedocs.io/en/latest/tools.html - Прометей: Опять да, определенным образом. Прометей называет их экспортерами. Экспортеры позволяют сторонним инструментам экспортировать свои данные в Prometheus. Кроме того, некоторые программные компоненты в мире с открытым исходным кодом уже совместимы с Prometheus. Больше информации по следующей ссылке: https://prometheus.io/docs/instrumenting/exporters/
Победитель: Все они.Правда у Grafana есть настоящие плагины, которые расширяют его основные функциональные возможности, но есть много инструментов, которые так или иначе совместимы как с Graphite, так и с Prometheus.
Тревога и отслеживание событий:
Решение по мониторингу не является полным, если только вы не включите способ генерировать сигналы тревоги, когда какой-либо показатель начинает действовать забавно. Кроме того, отслеживание событий — это хороший способ связать повторяющиеся события, которые могут помочь вам лучше диагностировать проблемы в вашей инфраструктуре:
- Grafana: Нет, или, по крайней мере, не напрямую. Grafana может только визуализировать временные ряды, и в этой задаче она превосходит все остальные, но ни управление тревогами, ни отслеживание событий не являются частью его основных функций. Косвенным образом существуют способы преобразования журналов вхождений в числа, что позволяет отслеживать события.
- Graphite: он может выполнять отслеживание событий, но не может напрямую выполнять сигнализацию.
- Prometheus : полностью поддерживает сигнализацию. Несмотря на то, что прямое отслеживание событий не включено, очень мощный язык запросов Prometheus позволяет вам выполнять некоторые действия, чтобы косвенно выполнять часть отслеживания событий.
Победитель: Беспорный победитель Prometheus. Graphite финиширует на втором месте, а Grafana даже не доходит до финиша.
Совместимость облачного мониторинга:
Некоторые облачные сервисы, такие как AWS и OpenStack, включают свою собственную инфраструктуру мониторинга, которая собирает и хранит временные ряды, а в некоторых случаях также предоставляет базовые возможности редактирования графиков и инструментальных панелей. Мы не хотим вдаваться в подробности в этой части статьи, поэтому мы просто поговорим об общедоступных облаках с использованием AWS и частных облаках с использованием OpenStack.
Сервис мониторинга AWS называется Cloudwatch, который включает в себя не только хранилище данных для всех его метрик, основанных на временных рядах, но также включает в себя базовое редактирование графиков и приборной панели.
OpenStack (особенно в его последних выпусках) включает Gnocchi, который представляет собой решение «Временные ряды как услуга», в котором пока нет прямого графика и компонента редактирования. Давайте посмотрим, как наши три соперника могут интегрироваться как с AWS, так и с OpenStack.
- Grafana: Лучшее решение на данный момент. В связи с тем, что оба облачных решения (AWS и OpenStack) уже осуществляют сбор данных, хранение данных и даже управление аварийными сигналами, единственное, что вам действительно нужно, — это визуализация и создание панели мониторинга. Grafana включает поддержку (через плагин) для AWS Cloudwatch и OpenStack Gnocchi. Если ваше развертывание полностью основано на облаке, и в него включено решение для мониторинга (Cloudwatch или Gnocchi), не используйте ничего, кроме Grafana.
- Graphite: в GitHub уже доступны некоторые компоненты, которые можно использовать для передачи данных AWS Cloudwatch в Graphite, но, опять же, в этом нет необходимости, и трату времени, учитывая, что Cloudwatch уже доступен для функций, которые будет охватывать Graphite. Для OpenStack сообщество рекомендует использовать Gnocchi только с Grafana. Я бы порекомендовал вам не тратить свое время и придерживаться уже доступных параметров мониторинга в облаке.
- Prometheus: есть официальный экспортер AWS Cloudwatch, так что вы можете контролировать все свои облачные компоненты AWS с помощью Prometheus, но пока нет поддержки (пока) для OpenStack Gnocchi. Важно отметить, что, хотя Gnocchi поддерживает как collectd, так и statsd (опции с экспортерами в Prometheus), поддержка является однонаправленной, то есть вы можете отправлять метрики collectd / statsd в Gnocchi, но не наоборот.
Победитель: Графана — единственный победитель, а остальные претенденты на второе место. В идеале, вы должны придерживаться предложения по мониторингу, уже доступного в облаке, и дополнять только там, где это необходимо. Вот почему Графана является лучшим вариантом здесь. Сбор и хранение временных рядов уже охвачены как Cloudwatch, так и Gnocchi.
Открытый исходный код против Enterprise:
Во многих проектах с открытым исходным кодом общепринятая практика заключается в том, чтобы включать какое-то корпоративное/коммерческое предложение с дополнительными опциями. Давайте рассмотрим, что могут предложить в качестве дополнения наши три претендента:
- Grafana: Модель с открытым исходным кодом полностью функциональна и готова к работе. Специальной коммерческой версии не существует, но есть хостинговое решение, предоставляемое Grafana и управляемое ими. Подробнее об этом по следующей ссылке: https://grafana.com/cloud/grafana
- Graphite: модель с открытым исходным кодом полностью функциональна и готова для предприятий.
- Prometheus: Как и две другие, модель с открытым исходным кодом полностью функциональна и готова для предприятий.
Победитель: Grafana может быть объявлен как победитель, потому что он предлагает вариант размещения. Но, если учесть, что все варианты полнофункциональны в предложениях с открытым исходным кодом, то все они получают первое место.
Окончательные выводы: все это нормально, но сейчас я очень растерялся. Какое решение для меня?
Вы, вероятно, испытываете сильную головную боль после прочтения этой статьи. Не беспокойтесь; мы облегчим вашу жизнь прямо сейчас.
Единственное что вам нужно сделать, это подумать о вашем реальном сценарии:
Облачные сервисы, такие как AWS и OpenStack: если ваша инфраструктура полностью основана на облаке, и у вас уже есть доступные метрики из таких вариантов, как Cloudwatch или Gnocchi, не думайте слишком много: выберите Grafana. Вам не нужно хранить временные ряды (это уже часть облака) или определять аварийные сигналы (опять же, это еще одна функция, доступная как в AWS, так и в OpenStack). Все, что вам нужно, это преодолеть графические ограничения, унаследованные от Cloudwatch и Gnocchi, и отобразить ваши метрики в умном, удобном и многофункциональном виде. Именно здесь Графана превосходит все остальные варианты.
Классическая инфраструктура с базовыми решениями для сбора данных: если ваша инфраструктура использует такие вещи, как collectd, statd или другие подобные инструменты только для сбора данных, и при условии, что они могут использоваться Graphite, то используйте Graphite для выполнения части хранения временных рядов на централизованном сервере и добавьте Grafana в ваш микс, чтобы правильно отобразить эти показатели. Обратите внимание, что Graphite может отслеживать события, но это не то же самое, что генерация аварийных сигналов, поэтому для выполнения этой задачи вам понадобится что-то еще.
Любая инфраструктура без какого-либо мониторинга: Если вы начинаете с нуля и у вас нет других доступных вариантов мониторинга (или вы не хотите использовать облачные системы, такие как Cloudwatch или Gnocchi), то выбирайте Prometheus. Изначально вы можете добавить Grafana, чтобы упростить редактирование графиков и информационных панелей, пока вы не овладеете навыками использования шаблонов консоли Prometheus.
Наша последняя рекомендация для вас проста: адаптируйте правильный инструмент для правильного сценария. Четко расставьте приоритеты и сопоставьте их с тем, что у вас уже есть. Не пытайтесь добраться до центра галактики, если вам действительно нужно приземлиться на Луну, но будьте готовы идти дальше, если ваш текущий сценарий развивается, и вам нужно развивать свой стек мониторинга наряду с потребностями мониторинга инфраструктуры.