Статьи

Прометей против графита: что выбрать для временных рядов или мониторинга?

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

Например, если вы хотите узнать, какое влияние новый процесс или документация сообщества оказывает на число обращений к вашему API, или как конкретное исправление программного обеспечения повлияло на задержку вашей базы данных, сравнив текущее значение с предыдущим, сделанным до изменения. было введено будет полезно. Такова ценность данных временных рядов.

Инструменты мониторинга, построенные на данных временных рядов, должны выполнять следующие операции при очень большом объеме транзакций:

  1. Собирать (или хотя бы прослушивать) события, как правило, с отметкой времени;
  2. Эффективно хранить эти события в объеме;
  3. Поддержка запросов этих событий;
  4. Предложите графический мониторинг этих возможностей, чтобы можно было отслеживать тенденции с течением времени.

Prometheus и  Graphite — это инструменты мониторинга с открытым исходным кодом, используемые для хранения и отображения данных временных рядов. Prometheus — это «СУБД и система мониторинга временных рядов», а Graphite — более простой «инструмент регистрации и построения графиков для данных временных рядов». Оба с открытым исходным кодом и в основном используются для мониторинга системы. Тем не менее, Prometheus, разработанный совсем недавно, берет на себя дополнительную задачу масштабирования и содержит многочисленные функции, включая гибкий язык запросов, push-шлюз (для сбора метрик из эфемерных или пакетных заданий), ряд экспортеров и другие инструменты.

В этой статье мы сравним Prometheus и Graphite бок о бок и предложим несколько критериев для выбора правильного варианта.

Обзор графита

В некотором смысле, Графит проще, чем Прометей, с меньшим количеством функций и простым смыслом. Согласно собственной документации , он делает две вещи:

Хотя Graphite не будет собирать данные для вас, есть компонент — Twisted Daemon под названием Carbon —  который пассивно прослушивает данные временных рядов. Данные хранятся в простой библиотеке под названием Whisper . Наконец, графики могут отображаться по запросу с помощью простого веб-приложения Django.

Источник: графитовая документация.

Стоит повторить, что в отличие от Prometheus сбор данных в Graphite является пассивным, а это означает, что приложения, отправляющие эти данные, должны быть настроены для отправки данных в углеродный компонент Graphite.

Обзор Прометея

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

Прометей активно собирает данные , сохраняет их , поддерживает запросы, графики и оповещения , а также предоставляет конечные точки другим пользователям API, таким как Grafana или даже сам Graphite. Он делает все это через следующие компоненты:

  1. Клиентские библиотеки — инструментарий кода приложения (для генерации событий);
  2. Prometheus server — очистка и сохранение этих событий при запуске как данных временных рядов;
  3. Pushgateway — поддержка краткосрочных заданий на импорт данных;
  4. Экспортеры данных — экспорт в такие сервисы, как HAProxy, StatsD, Graphite и т. Д .;

Prometheus отличается от других систем мониторинга следующими функциями в соответствии с собственной документацией :

  • Многомерная модель данных, где данные временные ряды определяются метрическим именем и ключевыми аспектами / значения;
  • Автономные одиночные серверные узлы без зависимости от распределенного хранилища;
  • Сбор данных с помощью модели pull по HTTP;
  • Данные временных рядов передаются в другие пункты назначения и сохраняются через промежуточный шлюз;
  • Цели, обнаруженные с помощью обнаружения службы или статической конфигурации ;
  • Федерация поддерживается как иерархически, так и горизонтально.

Как показано на диаграмме выше, Prometheus поддерживает несколько сторонних реализаций для обнаружения, оповещения, визуализации и экспорта услуг, что позволяет администратору использовать наиболее подходящие технологии для каждой из них. И это даже не полный выбор.

Prometheus, выпущенный через несколько лет после Graphite, возможно, можно рассматривать как его усовершенствование, сфокусированное на мониторинге, с дополнительными функциями и настройками производительности.

Сравнение высокого уровня

Характеристики

Сбор и использование данных

Графит не имеет прямой поддержки сбора данных. Carbon пассивно слушает данные, но для того, чтобы включить сбор данных, вы должны включить такие решения, как fluentd, statd, collectd или другие, в свой конвейер данных временных рядов. После сбора Graphite имеет встроенный пользовательский интерфейс для визуализации данных. Prometheus, с другой стороны, представляет собой комплексное решение для мониторинга, которое включает в себя встроенный сбор, а также хранение, визуализацию и экспорт.

Место хранения

Графит может хранить данные временных рядов. Эти данные обычно собираются из демонов сбора (например, упомянутых выше) или других решений для мониторинга, таких как Prometheus. Данные графита запрашиваются через HTTP через API Metrics или API Render. В графите Carbon хранит данные в Whisper. Существует один файл на метрику (переменная, отслеживаемая во времени), которая работает как гигантский массив, поэтому запись в файл очень точна. Существует также один файл для каждого автоматического объединения.

Прометей, с другой стороны, предлагает тегирование значения ключа по самому временному ряду, что обеспечивает лучшую организацию и более надежные возможности запросов.

Собственная документация Прометея объясняет, как обрабатывается хранилище на диске. Загруженные данные сгруппированы в двухчасовые блоки, где каждый блок представляет собой каталог, содержащий один или несколько чанков (сами данные), плюс метаданные и индексный файл следующим образом:

./data/01BKGV7JBM69T2G1BGBGM6KB12
./data/01BKGV7JBM69T2G1BGBGM6KB12/meta.json
./data/01BKGV7JBM69T2G1BGBGM6KB12/wal
./data/01BKGV7JBM69T2G1BGBGM6KB12/wal/000002
./data/01BKGV7JBM69T2G1BGBGM6KB12/wal/000001

Между тем, фоновый процесс сжимает двухчасовые блоки в более крупные.

Визуализация и информационные панели

Graphite предлагает довольно простые, но полезные опции визуализации, доступные через веб-приложение Django. Graphite также поддерживает редактирование панели.

Prometheus использует шаблоны консоли для панелей мониторинга, но будучи многофункциональным, кривая обучения их может быть довольно высокой. Конечно, будучи с открытым исходным кодом, пользовательские решения доступны любому решению с небольшим количеством кода.

Стоит отметить, что пользователи обоих решений обычно используют Grafana в качестве пользовательского интерфейса, поскольку встроенных пользовательских интерфейсов для обоих обычно недостаточно.

Плагин Архитектура и расширяемость

Графит не предоставляет плагинов. Однако уже существует множество инструментов, совместимых с графитом.

Prometheus поддерживает экосистему экспортеров, что позволяет сторонним инструментам экспортировать свои данные в Prometheus. Многие программные компоненты с открытым исходным кодом уже совместимы с Prometheus по умолчанию.

Отслеживание тревог и событий

Графит может отслеживать события, но не поддерживает сигналы тревоги напрямую.

Prometheus, с другой стороны, не поддерживает отслеживание событий, но предлагает полную поддержку аварийных сигналов и управления аварийными сигналами. Однако язык запросов Prometheus позволяет вам самостоятельно отслеживать события.

Возможность облачного мониторинга

AWS CloudWatch уже доступен для большинства функций, которые покрывает Graphite. Однако в GitHub есть некоторые компоненты, которые позволяют передавать данные AWS CloudWatch в Graphite.

Prometheus поддерживает официального экспортера AWS CloudWatch, что позволяет вам отслеживать все облачные компоненты AWS. По-видимому, пока нет поддержки для OpenStack Gnocchi , связанной базы данных временных рядов как сервиса, но некоторые проявили интерес к этому.

сообщество

Prometheus и Graphite имеют открытый исходный код и хорошо поддерживаются активными сообществами разработчиков. По состоянию на июль 2018 года основной репозиторий Prometheus на GitHub был разветвлен более 2200 раз, по сравнению с более 10000 вилками Graphite.

Оба инструмента разрабатываются в открытом доступе, и вы можете взаимодействовать с разработчиками и членами сообщества через IRC, GitHub и другие каналы связи.

IRCs:

популярность

По состоянию на 29 июня 2018 года решения были ранжированы соответственно на DB-Engines:

  • Графит —  № 84 в целом, СУБД временного ряда № 4
  • Прометей — № 107 в целом, № 6 СУБД временного ряда

За последние годы решения для временных рядов стали значительно быстрее внедряться, чем другие категории баз данных. Например, к середине 2016 года СУБД временных рядов завоевали почти 27% популярности за предыдущие 12 месяцев, что более чем в два раза больше, чем СУБД Graph.

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

сходства

Прометей и Графит оба:

  • Предложите инструменты визуализации для данных временных рядов.
  • Предоставить свои языки запросов.
  • Хранить числовые образцы для именованных временных рядов.
  • Открытым исходным кодом.
  • Совместимы с широким спектром инструментов и плагинов, включая Grafana.
  • Разработаны с учетом надежности и отказоустойчивы.
  • Включить мониторинг в реальном времени данных временных рядов.

Различия

  • Прометей обеспечивает прямую поддержку сбора данных, а Графит — нет.
  • Язык запросов и модели метаданных Prometheus являются более надежными, чем Graphite.
  • Prometheus — это полная система мониторинга и отслеживания тенденций, которая включает в себя встроенную и активную очистку, хранение, запросы, графики и оповещения. Graphite — это пассивный инструмент для записи и построения временных рядов. Другие проблемы, такие как очистка и оповещение, решаются внешними компонентами.
  • Prometheus обеспечивает встроенную поддержку сигналов тревоги, в то время как Graphite требуются дополнительные инструменты и усилия для поддержки генерации сигналов тревоги.
  • Прометей обеспечивает поддержку более широкого спектра клиентских библиотек, чем Graphite.
  • Ни один из них не является по-настоящему масштабируемым по горизонтали, но Прометей поддерживает разделение (путем разделения) и репликацию (путем объединения).
  • Прометей поддерживает импорт данных XML, а Graphite — нет.

Разработанные варианты использования, пользовательские истории и пользователи

Разработанный в SoundCloud в 2012 году, Prometheus продолжает использоваться в таких компаниях, как Outbrain, Docker, DigitalOcean, Ericsson и Percona. Эти и другие компании используют свои сильные стороны в многомерном сборе данных и запросах к приложениям, включая как статический машинно-ориентированный, так и динамический сервис-ориентированный мониторинг. Графит начал использоваться в 2006 году на Orbitz, где он доказал свои сильные стороны при обработке числовых данных временных рядов и продолжает использоваться сегодня. Другие компании, в том числе Instagram, Canonical, Oracle, Uber, GitHub и Vimeo, используют Graphite для обработки критически важных для данных временных рядов, таких как метрики приложений, метрики баз данных, мониторинг электронной торговли и многое другое. Вы можете прочитать больше тематических исследований Graphite здесь .

Призыв к действию

If you want a clustered solution that can hold historical data of any sort long term, Graphite may be a better choice due to its simplicity and a long history of doing exactly that. Graphite also has a roll-up of data built in. Similarly, Graphite may be preferred if your existing infrastructure already uses collection tools like fluentd, collectd, or statd, because Graphite supports them.

However, if you are starting from scratch and intend to use the solution for monitoring (including more dynamic and multivariate data), and data retention is short term, Prometheus may be a better choice, as everything required for monitoring is already integrated.

There is a slightly longer learning curve to most things Prometheus. However, the time invested will pay for itself in not having to maintain separate tools for collection and alerting, for example.

Always remember to review your needs and the state of your current implementation carefully. Prometheus is a complete monitoring system, with all the bells and whistles built in. Graphite is merely a storage and graphing framework. What does your system already have and what do you need it to do? You decide.