Prometheus: мониторинг «на максималках»

У системы мониторинга Prometheus довольно интересная история – сервис был впервые создан на SoundCloud, а в 2016 присоединился к Cloud Native Computing Foundation. Это прояснило структуру платформы, а Prometheus monitoring стал вторым размещенным проектом после Kubernetes. Prometheus поддерживается сообществом, у него открытый исходных код, и с момента появления в 2012 году проект признан многими организациями как надежная система мониторинга. Большая часть компонентов сервиса написана на языке Go. Такое решение упрощает сборку и развертывание в виде бинарных файлов.

Особенности Prometheus мониторинга

У Prometheus есть необычная особенность: система самостоятельно затягивает метрики с многочисленных заданных сервисов. Благодаря этому ряд данных всегда свободен, а пользователь может быть уверенным в надежности Prometheus и мониторинге сети. Метрики заходят с точек http в Prometheus для настроенных целей сбора данных.

А вот базовые характеристики сервиса:

  • Prometheus monitoring основан на многомерной модели данных. Включена информация о временных рядах, которые определяются по названию метрики и парам key-value.
  • Используется гибкий язык запросов PromQL.
  • Отсутствует зависимость от распределенного хранилища данных – серверные узлы работают автономно.
  • Сбор временных рядов осуществляется через модель pull по HTTP, а передача – через промежуточный шлюз.
  • Цели Prometheus мониторинга задаются с помощью статической конфигурации или определением служб.
  • Система поддерживает несколько режимов дашбордов и построения графиков Prometheus metrics.

Компоненты Prometheus

Чтобы разобраться с Prometheus настройкой, начнем с основных компонентов сервиса. 

  • Основной (главный) сервер собирает и хранит данные временных рядов
  • Клиентские библиотеки (для инструментального кода)
  • Шлюз push gateway для поддержки краткосрочных заданий
  • Exporters для сервисов типа StatsD, HAProxy, Graphite
  • Диспетчер предупреждений (Prometheus alert manager) 
  • Другие инструменты поддержки.

Не все части экосистемы Prometheus обязательны к установке и использованию.

zone3000_blog_ Prometheus-02

Данные Prometheus metrics извлекаются из инструментальных заданий (instrumented jobs). Происходит это либо напрямую, или через push gateway для краткосрочных заданий. Шлюз собирает и хранит все образцы локально, запуская правила конкретно для этих данных. Это нужно, чтобы агрегировать и фиксировать новые временные ряды из имеющихся данных Prometheus metrics. Второй вариант – для создания предупреждений (Prometheus alert).

Для визуализации данных можно использовать Prometheus с Grafana или другими потребителями API. У Prometheus есть и свой веб-интерфейс, но довольно минималистичный. Поэтому сами разработчики проекта советуют использовать связку Prometheus и Grafana для более приятной визуализации.

Prometheus: настройка и запуск

Вкратце разберем, как происходит Prometheus настройка и запуск сервиса. Если у вас еще не стоит Prometheus, скачать его для вашей платформы можно на официальном ресурсе сервиса. Сервер Prometheus представлен в виде отдельного бинарного файла (prometheus или prometheus.exe для Prometheus на Windows). Запускаем файл и видим флажок –help, который поможет нам выбрать нужные опции.

После запуска файла настраиваем конфигурацию Prometheus config через YAML-файл. По умолчанию при загрузке Prometheus включен пример конфигурации в файле prometheus.yml. В примере есть три блока конфигурации: global, rule_files и scrape_configs.

Блок global управляет общей конфигурацией сервера Prometheus через две опции. Первая, scrape_interval, отвечает за то, как программа проверяет цели – условия можно настроить отдельно для каждой из них. Опция evaluation_interval управляет частотой оценки правил, которые используются для создания временных рядов и создания уведомлений.

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

И, наконец, чтобы запустить сервис, внесите изменения в директорию, где лежит бинарный файл Prometheus, и сделайте старт: ./prometheus –config.file=prometheus.yml. Статус процесса можно проверить на хосте http://localhost:9090.

Prometheus курсы

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

Сейчас доступны обучающие программы по работе с Prometheus – в большинстве случаев их можно пройти онлайн, получив сертификат. Программы курсов включают не только работу непосредственно с Prometheus, но и интеграцию с другими инструментами DevOps. Например, Prometheus и Docker (для сбора метрик через Prometheus с Docker контейнеров) или Prometheus и Azure Monitor для адаптации сбора метрик для контейнеров. Еще удачный пример – Kubernetes Prometheus Operator. Эта утилита облегчает запуск Prometheus в Kubernetes для мониторинга сервисов K8s. Также есть вариант использования Prometheus с Zabbix – еще одной популярной системой мониторинга.

Также научиться работе с сервисом и получить сертификат можно и на курсах DevOps, программы которых часто включают этот девопс-инструмент. На подобных курсах вы сможете получить практические навыки работы с Prometheus в микросервисной архитектуре.

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

Чтобы использовать Grafana в Prometheus, нужно установить этот сервис. Grafana устанавливается отдельно от коробочной версии Prometheus. Grafana устанавливается на http://localhost:3000, пароль – «admin» / «admin». Для начала работы создаем Prometheus data source в Grafana:

  • Выбираем «cogwheel» на боковой панели Configuration menu
  • Нажимаем «Data Sources»
  • Нажимаем «Add data source»
  • Выбираем тип «Prometheus»
  • Задаем URL сервера Prometheus
  • По желанию добавляем дополнительные источники
  • Кликаем «Save & Test».

Теперь можно отслеживать мониторинг Prometheus через Grafana.

Чтобы настроить Prometheus, скачайте binary file (prometheus или prometheus.exe) и запустите файл. Теперь можно перейти к настройке конфигурации, которая выполняется через prometheus.yml. В примере конфигурации есть три блока конфигурации: global, rule_files и scrape_configs. После выбора нужных опций в настройке конфигурации запустите программу. Для этого внесите изменения в директорию с бинарным файлом Prometheus и сделайте запуск (./prometheus –config.file=prometheus.yml). На хосте http://localhost:9090 можно проверить статус запуска.
Чтобы открыть пользовательский интерфейс в Prometheus, используйте expression browser. Для использования expression browser по умолчанию перейдите по http://localhost:9090/graph и выберите вид Console в табе Graph. Примеры консолей можно создавать на Go, связь будет с сервером Prometheus. В коробочной версии в сервисе есть набор примеров консолей по адресу /consoles/index.html.example (когда Prometheus работает).
Чтобы посмотреть показатели Prometheus, можно использовать визуализацию программы по умолчанию или сторонний компонент, например, Grafana. Метрики хранятся в базе данных временных рядов. Графический дашборд Grafana можно использовать для забора метрик с Prometheus server и их отображения на панели Grafana. Это делается вместо того, чтобы посылать запросы PromQL на сервер Prometheus. Grafana – довольно удобный способ визуализации метрик, который выигрывает по сравнению с дефолтным дашбордом Prometheus. Его рекомендуют сами разработчики проекта Prometheus.
Разница между Grafana и Prometheus в отношении визуализации очевидна даже для самого комьюнити Prometheus, который рекомендует Grafana. Это лучший из вариантов для создания и настройки дашборда мониторинга и визуализации. Кроме этого, инструмент довольно простой в использовании, многофункциональный и гибкий. В Prometheus сложно редактировать графики и панель приборов. Для этого система использует консольные шаблоны, работать с которыми непросто. Поэтому начало работы в Prometheus лучше начать с Grafana, и далее осваивать консоли Prometheus.
Prometheus использует разные базы данных, целевые объекты которых мониторит с помощью экспортеров. Баз данных порядка тридцати, например, Aerospike, ClickHouse, MongoDB, PgBouncer, ProxySQL, RavenDB, Couchbase, CouchDB, KDB+, Druid, IoTDB, Oracle DB, Memcached, OpenTSDB. Экспортер – это готовый набор метрик и зачастую готовые дашборды мониторинга. Экспортеры часто представлены в виде Docker Images и довольно легко настраиваются. Большая часть баз временных рядов данных поддерживает взаимную совместимость систем.
Чтобы проверить, установлен ли Prometheus, откройте браузер и перейдите по ссылке http://localhost:9090. Если система установлена, у вас отобразится интерфейс Prometheus. Нажмите на Status и далее Targets. Под Status должен отобразиться список устройств (UP).
Prometheus – один из лидирующих сервисов мониторинга комплексных сетевых инфраструктур. Программа часто используется для работы с микросервисной архитектурой. У Prometheus открытый исходный код, мощная поддержка сообщества разработчиков и множественное количество интеграций. Число экспортеров (наборы метрик), через которые система взаимодействует с базами данных, постоянно растет. Это расширяет функционал Prometheus и его возможности работы с разными базами данных. Prometheus поддерживает PromQL – сильный язык запросов для обработки метрик мониторинга.
Метрики в Prometheus – это данные временных рядов. Клиентские библиотеки ответственны за сбор метрик. Есть четыре типа метрик в клиентских библиотеках (для API-интерфейсов, которые адаптированы к определенному типу метрик) и проводном протоколе. Вот эти четыре типа: Counter, Gauge, Histogram, Summary. Пока сервер Prometheus не использует данные о типе метрик, и объединяет их в нетипизированные временные ряды. Для сбора метрик используется протокол HTTP или push-gateway (для краткосрочных сервисов).
error: Контент защищен.