Какая роль параметра scrape interval в конфигурации prometheus

LaurVas

Prometheus server настраивается через два места: жопу и голову аргументы запуска и конфигурационный файл. Настройку через переменные окружения в Prometheus не завезли и не планируют.

Как долго Prometheus должен хранить метрики

Это зависит от того, как вы будете их использовать. В идеале надо иметь два набора метрик: краткосрочные на пару недель и долгосрочные на несколько месяцев. Первые нужны, чтобы оперативно отслеживать ситуацию, вторые — чтобы видеть тенденцию на больших промежутках времени. Но это большая тема, заслуживающая отдельной статьи, а пока сделаем по-простому. Длительность хранения метрик указывается в аргументах запуска Prometheus. Есть две опции:

–storage.tsdb.retention.time=. определяет как долго Prometheus будет хранить собранные метрики. Длительность указывается так же, как и в PromQL для диапазонного вектора: 30d — это 30 дней. По умолчанию метрики хранятся 15 дней, потом исчезают. К сожалению нельзя одни метрики хранить долго, а другие коротко, как, например, в Graphite. В Prometheus лимит общий для всех.

–storage.tsdb.retention.size=. определяет сколько дискового пространства Prometheus может использовать под метрики. По-моему эта опция удобнее предыдущей: можно указать всё свободное место на диске и получить настолько долгие метрики, насколько это возможно при любом их количестве. На практике однако нельзя указывать свободное место впритык. Дело в том, что у БД метрик есть журнал упреждающей записи (WAL), который в этом лимите не учитывается. Я не понял от чего зависит максимальный размер WAL, поэтому какие-то рекомендации по запасу не могу дать. У меня максимальный размер WAL был 8 ГБ.

Если же Prometheus работает в докере, то надо внести изменения в docker-compose.yml и переподнять контейнер.

Интервал опроса экспортеров и job name

Давайте взглянем на минимальный конфиг из предыдущей статьи, чтобы вы понимали о чём идёт речь:

scrape_interval — периодичность опроса экспортеров (scrape дословно с английского — это соскабливать, соскребать). В отличие от длительности хранения метрик, может быть разной для разных метрик. Во всех мануалах я встречал цифру в 15 секунд, но почему-то никто не объяснял эту магическую константу. Почему не 2, 5 или 10? В целом так: чем меньше интервал, тем выше будет разрешение графиков и тем больше места потребуется для хранения метрик. Видимо 15 секунд — это золотая середина, найденная опытным путём.

job_name — имя (для Prometheus’а) для данной группы метрик. job_name будет светиться в интерфейсе Prometheus’а на вкладке Targets, а также попадёт в метку job для группы метрик c этих машин:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

После редактирования конфига надо попросить Prometheus’а перечитать свой конфиг. Для этого надо послать ему сигнал SIGHUP одним из способов:

Как навесить дополнительных меток хостам

Результат в интерфейсе Prometheus:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

В запросах будет выглядеть так:

Как убрать номер порта из таргетов

Порт скроется не везде. На вкладке Targets он останется:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

А в запросах исчезнет:

Service discovery

Service discovery — это автоматическое обнаружение целей. Суть в том, что Prometheus будет получать список целей из какого-то внешнего источника: consul, openstack или что-то ещё. Service discovery — удобная штука, особенно если у вас инфраструктура развёрнута в облаке и машины регулярно рождаются и умирают.

Самый простой service discovery работает на файликах. В конфиге пишем так:

Пример файла с таргетами:

Удобно держать таргеты разных проектов в разных файлах. В моём примере лишь один проект с названием “boo”, остальные делаются по аналогии. Думаю разберётесь.

Источник

Сервер Prometheus и TLS

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Prometheus теперь поддерживает TLS и базовую аутентификацию для HTTP эндпоинтов.

Скрейпинг таргетов через HTTPS вместо HTTP поддерживается уже давно. Метрики можно собирать с поддержкой HTTPS, аутентификации по клиентским сертификатам и базовой аутентификации.

В прошлом году Node Exporter стал первым официальным экспортером, который нативно предоставляет метрики по HTTPS. Все подробности в предыдущем посте. На этой неделе (прим. переводчика: статья вышла 6 января 2021 года) мы встречаем Prometheus 2.24.0. В последнее время Prometheus радует нас крутыми новшествами — это и TLS, и backfilling (обратное заполнение, тоже в версии 2.24) и даже переход на современный пользовательский интерфейс на React.

В этом посте мы расскажем о TLS и базовой аутентификации.

Здесь можно узнать больше о модели безопасности Prometheus и о том, как пожаловаться на уязвимости.

Если вы обнаружили в Prometheus, официальном экспортере или библиотеке какую-нибудь критическую уязвимость, не рассказывайте об этом публично, а сообщите нам, чтобы мы все исправили.

API для администрирования и управления жизненным циклом

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

При этом нужно будет защитить порт Prometheus, например, с помощью аутентификации.

Защита доступа к Prometheus

Раньше между клиентами и сервером Prometheus для защиты обычно ставили обратный прокси:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

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

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

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Как настроить TLS

Посмотрим, как это работает на практике, на примере Prometheus на Linux.

Настройка рабочего каталога

Мы будем работать в отдельном каталоге:

Создание TLS-сертификатов

Для начала создадим самоподписанный TLS-сертификат.

Здесь localhost — это имя хоста для сервера Prometheus.

Создается два файла: prometheus.crt и prometheus.key.

Веб-конфигурация Prometheus

Скачиваем Prometheus v2.24.0, распаковываем, переносим сертификаты, которые создали выше:

Сейчас нужно создать новый файл конфигурации. Мы не будем настраивать TLS и аутентификацию в основном файле конфигурации prometheus.yml. Это позволит нам перечитывать отдельный файл конфигурации при каждом запросе, чтобы на лету подхватывать новые учетки и сертификаты.

Создадим файл web.yml с конфигурацией TLS:

Если мы видим это сообщение, сервер Prometheus запущен с поддержкой TLS.

Примечание: Все параметры TLS можно менять динамически, но если уж мы включили TLS, то без перезапуска Prometheus его не отключишь.

Подробности об этом дополнительном файле конфигурации смотрите в документации.

Проверка конфигурации TLS вручную

В curl проверим конфигурацию TLS. В новом терминале запустим пару команд для теста:

Конфигурация скрейпа

Настроить TLS выборочно не получится — если он включен, он распространяется на все эндпоинты. Это значит, что собственные метрики Prometheus тоже будет извлекать через TLS, поэтому настроим использование HTTPS.

Изменим задание prometheus в файле prometheus.yml:

Перечитаем конфигурацию Prometheus:

Таргет имеет статус UP? Ура! Мы настроили TLS для сервера Prometheus и теперь собираем метрики с шифрованием.

Как настроить базовую аутентификацию

Давайте пойдем еще дальше и затребуем имя пользователя и пароль. TLS здесь не обязателен, но крайне рекомендуется (настраивать его мы уже умеем).

Веб-конфигурация

Для начала создадим хэш паролей (с помощью bcrypt). Для этого используем команду htpasswd (пакет apache2-utils или httpd-tools есть в дистрибутиве; если это не продакшен, можно найти генераторы bcrypt онлайн).

Для примера возьмем пароль inuitsdemo.

Добавим пользователя в файл веб-конфигурации Prometheus web.yml:

Примечание: В этом файле prometheus — это имя пользователя.

Если Prometheus еще запущен, введите пароль для доступа к веб-интерфейсу по адресу https://127.0.0.1:9090, иначе на странице targets для таргета будет отображаться ошибка 401 Unauthorized.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Конфигурация Prometheus

Внесём изменения в prometheus.yml, чтобы скрейпинг шёл с использованием логина и пароля.

Перезагрузим конфигурацию Prometheus сигналом SIGHUP:

Если все работает, Prometheus снова откроет страницу targets.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Promtool

У Prometheus есть свой инструмент командной строки — promtool, которым теперь можно проверять и файлы веб-конфигурации:

Используйте любой инструмент автоматизации для удобного обновления файлов web.yml.

Grafana

Grafana поддерживает все необходимые функции для подключения к серверу Prometheus. Можно указать CA (наш prometheus.crt) или пропустить проверку сертификатов.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Заключение

Это только общий обзор. В продакшене нужно будет использовать подходящий CA и продумать еще много деталей. Можно настроить клиентские сертификаты, но из соображений безопасности эта функция считается экспериментальной. Со временем поддерживаемая версия TLS может меняться, а с ней и поведение функций.

В следующие несколько месяцев мы планируем развернуть эту поддержку HTTPS по всем официальным экспортерам Prometheus и другим проектам, например, Alertmanager, Pushgateway.

Мы за безопасный мониторинг.

От редакции: Подробнее о работе с Prometheus можно узнать на курсе Слёрма «Мониторинг и логирование инфраструктуры в Kubernetes». Сейчас курс находится в разработке и его можно купить по цене предзаказа.

Источник

Мониторинг сервисов с Prometheus

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

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

Prometheus — инструмент совсем новый (первый публичный релиз состоялся в начале 2015 года), и на русском языке публикаций о нём пока почти что нет (несколько месяцев назад была опубликована статья в журнале «Хакер», но она доступна только подписчикам).

Разработчики SoundCloud отмечают (см. подробный доклад здесь), что новый инструмент мониторинга понадобился им в связи с переходом к микросервисной архитектуре. Рост интереса к микросервисам — одна из характерных тенденций последних нескольких лет.
С точки зрения микросервисного подхода приложение пониматеся не как монолит, а как набор сервисов. Каждый из этих сервисов работает в своём процессе и взаимодействует с окружением при помощи простого механизма (как правило, через протокол HTTP).

Мониторинг микросервисов — задача непростая: в режиме реального времени нужно отслеживать как состояние отдельных компонентов, так и состояние системы в целом. Задача усложняется, если помимо технических нужно проверять ещё и бизнес-значимые показатели. Как отмечают сами разработчики Prometheus в многочисленных статьях и докладах, с помощью имеющихся систем мониторинга её решить проблематично. Поэтому они создали собственный инструмент.

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

Архитектура Prometheus

В состав Prometheus входят следующие компоненты:

Большинство из них написаны на Go, а совсем небольшая часть — на Ruby и Java.
Все компоненты Prometheus взаимодействуют между собой по протоколу HTTP:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Главный компонент всей системы — сервер Prometheus. Он работает автономно и сохраняет все данные в локальной базе данных. Обнаружение сервисов происходит автоматически. Это упрощает процедуру развёртывания: для наблюдения за одним сервисом не нужно разворачивать распределённую систему мониторинга; достаточно установить только сервер и необходимые компоненты для сбора и экспорта метрик. Таких компонентов, «заточенных» под конкретные сервисы, уже создано довольно много: для Haproxy, MySQL, PostrgreSQL и другие (полный список см. здесь, а также на GitHub).

Сбор метрик в Prometheus осуществляется с помощью механизма pull. Имеется также возможность сбора метрик с помощью механизма push (для этого используется специальный компонент pushgateway, который устанавливается отдельно). Это может понадобиться в ситуациях, когда сбор метрики с помощью pull по тем или иным причинам невозможен: например, при наблюдении за сервисами, защищёнными фаерволлом. Также механизм push может оказаться полезным при наблюдении за сервисами, подключающихся к сети периодически и на непродолжительное время.

Prometheus хорошо подходит для сбора и анализа данных, представленных в виде временных рядов (time series). Все метрики он хранит в собственной темпоральной БД (её сравнение с OpenTSDB и InfluxDB см. здесь); для хранения индексов используется LevelDB.

Модель данных

Prometheus хранит данные в виде временных рядов — наборов значений, соотнесённых с временной меткой (timestamp).

Элемент временного ряда (измерение) состоит из имени метрики, временной метки и пары «ключ — значение». Временные метки имеют точность до миллисекунд, значения представлены с 64-битной точностью.

Имя метрики указывает на параметр системы, о котором собираются данные. Например, у метрики с информацией о количестве HTTP-запросов к некоему API имя может выглядеть так: api_http_requests_total. Временной ряд в такой метрике может хранить информацию о обо всех GET-запросах на адрес /api/tracks, на которые был отдан ответ с кодом 200. Этот временной ряд можно представить в виде следующей нотации:

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

Установка

Рассмотрим теперь практические аспекты использования Prometheus. Начнём с описания процедуры установки.
Совсем недавно Prometheus был включён в официальные репозитории Debian 8 и Ubuntu 15.10.
В Ubuntu 14.04 его тоже можно установить при помощи стандартного менеджера пакетов. Естественно, для этого понадобится подключить соответствующий репозиторий:

С помощью приведённых команд мы установили сервер Prometheus, а также дополнительные компоненты — node_exporter и alertmanager. Node_exporter собирает данные о состоянии сервера, а alertmanager (о нём мы более подробно поговорим ниже) — рассылает уведомления в случае выполнения или невыполнения заданных условий.

Установка завершена, но остался ещё один маленький штрих: нужно сделать так, чтобы node_exporter постоянно собирал метрики в фоновом режиме. Для этого сначала создадим символическую ссылку в /usr/bin:

Затем создадим файл /etc/init/node_exporter.conf и добавим в него следующие строки:

Сохраним внесённые изменения и выполним команду:

В дистрибутивах, перешедших на systemd (например, в Ubuntu 15.10), для запуска node_exporter в фоновом режиме нужно создать файл /etc/systemd/system/node_exporter.service и добавить в него следующие строки:

Сохранив внесённые изменения, нужно выполнить команды:

Конфигурирование

Настроек Prometheus по умолчанию вполне достаточно, чтобы следить за всем происходящим на локальной машине. Дополнительные настройки в случае необходимости всегда можно прописать в конфигурационном файле /etc/prometheus/prometheus.yml. Рассмотрим его структуру более подробно. Начинается он с секции globals:

Она включает следующие параметры:

Далее следует секция scrape_configs с базовыми настройками сбора метрик на сервере:

В этой же секции можно прописать дополнительные настройки:

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

В общем виде синтаксис правил можно представить так:

Приведём более конкретные и понятные примеры:

Prometheus сверяется с правилами с определённой периодичностью, указанной в конфигурационном файле в параметре evaluation_interval). После каждой сверки Prometheus пересчитывает значение параметра и сохраняет его под новым именем с текущей временной меткой.
Итак, структуру и синтаксис конфигурационного файла мы в общих чертах рассмотрели. Чтобы прописанные настройки вступили в силу, нужно выполнить следующую команду (вместо path/to/prometheus.yml указываем путь к конфигурационному файлу):

Веб-интерфейс

Веб-интерфейс Prometheus будет доступен в браузере по адресу: http://[IP-адрес сервера]:9090:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

В поле Expression можно выбрать метрику, для которой будет отображаться график. Попробуем отследить, например, объём активной памяти на сервере. Выбираем метрику node_memory_active и нажимаем на кнопку Execute:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus
Над графиком расположены кнопки, с помощью которых можно выбирать период для отображения статистики.

Шаблоны консолей

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Если вам не подходит ни одна из имеющихся консолей, вы можете создать собственную консоль, которая будет отображать нужную вам статистику. Для написания консолей в Prometheus используется HTML-шаблонизатор Go. Подробные инструкции по созданию кастомных консолей приведены в официальной документации.
А если вас по тем или иным причинам не устраивают имеющиеся консоли, вы можете интегрировать Prometheus с популярным инструментом Grafana.

Разработчики Prometheus создали и собственный инструмент для создания дашбордов под названием Promdash (см. также репозиторий на GitHub), по интерфейсу напоминающий Grafana. На наш взгляд, он ещё находится в несколько «сыром» состоянии, и рекомендовать его к использованию пока что рано.

Alertmanager: настройка уведомлений

Ни один инструмент мониторинга немыслим без компонента для рассылки уведомлений. В Prometheus для этой цели используется alertmanager. Настройки уведомлений хранятся в конфигурационном файле alertmanager.conf.
Рассмотрим следующий фрагмент:

Его синтаксис вполне понятен: мы указали, что уведомления при наступлении определённого условия нужно отправлять по электронной почте на адрес test@example.org.

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

В общем виде синтаксис правила выглядит так:

Рассмотрим функции правил на более конкретных примерах.
Пример1:

Это правило указывает, что уведомление нужно отправлять в случае, если некоторый инстанс недоступен в течение 5 минут и более.

Согласно этому правилу, уведомления нужно посылать, как только среднее время ответа на запросы к API превысит 1 мс.

Чтобы прописанные в конфигурационном файле настройки вступили в силу, нужно сохранить его и выполнить команду:

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

Уведомления Prometheus отправляет в формате JSON. Выглядят они примерно так:

Отправка уведомлений осуществляется по электронной почте, через веб-хук, а также с помощью специализированных сервисов: PagerDuty, HipChat и других.
Разработчики Prometheus отмечают, что пока что alertmanager находится в «сыром» состоянии и предупреждают о возможных ошибках. Впрочем, мы никаких аномалий в работе этого компонента не заметили.

Заключение

Prometheus — инструмент достаточно интересный и перспективный, и на него стоит обратить внимание. В числе его преимуществ нужно в первую очередь выделить:

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

Для желающих узнать больше приводим несколько полезных ссылок:

Если вы по тем или иным причинам не можете оставлять комментарии здесь — приглашаем в наш блог.

Источник

Устройство и механизм работы Prometheus Operator в Kubernetes

В основу этой статьи легла наша внутренняя документация для DevOps-инженеров, объясняющая, как работает Prometheus под управлением Prometheus Operator в разворачиваемых и обслуживаемых кластерах Kubernetes.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

С первого взгляда Prometheus может показаться достаточно сложным продуктом, но, как и любая хорошо спроектированная система, она состоит из явно выраженных функциональных компонентов и по сути делает всего три вещи: а) собирает метрики, б) выполняет правила, в) сохраняет результат в базу данных временных рядов (time series). Статья посвящена не столько самому Prometheus, сколько интеграции этой системы с Kubernetes, для чего мы активно используем вспомогательный инструмент под названием Prometheus Operator. Но начать всё же необходимо с самого Prometheus…

Prometheus: что он делает?

Итак, если подробнее остановиться на двух первых функциях Prometheus, то они работают следующим образом:

Prometheus: как он настраивается?

У сервера Prometheus есть config и rule files (файлы с правилами).

В config имеются следующие секции:

Prometheus: откуда берётся список целей?

Общий алгоритм работы Prometheus выглядит следующим образом:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Таким образом, Prometheus сам отслеживает:

Prometheus Operator: что он делает?

Для пресловутого «упрощения», во-первых, в Prometheus Operator с помощью механизма CRD (Custom Resource Definitions) заданы три ресурса:

Что в поде с Prometheus?

Под состоит из двух контейнеров:

Под использует три тома (volumes):

Как обрабатываются Service Monitors?

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Как обрабатываются ConfigMaps с правилами?

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Вот и всё!

Подробнее о том, как мы используем Prometheus (и не только) для мониторинга в Kubernetes, я планирую рассказать на конференции RootConf 2018, что будет проходить 28 и 29 мая в Москве, — приходите послушать и пообщаться.

Источник

Полное руководство по Prometheus в 2019 году

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

DevOps- и SRE-инженеры уже, наверное, не раз слышали о Prometheus.

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

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

Что такое Prometheus?
Зачем он нужен?
Чем он отличается от других систем?

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

Мы разделили это руководство на 3 части, как поступили с InfluxDB.

Часть I. Что такое Prometheus?

Prometheus — это база данных временных рядов. Если вы не в курсе, что такое база данных временных рядов, почитайте первую часть руководства по InfluxDB.

Но Prometheus — не просто база данных временных рядов.

К нему можно присоединить целую экосистему инструментов, чтобы расширить функционал.

Prometheus мониторит самые разные системы: серверы, базы данных, отдельные виртуальные машины, да почти что угодно.

Для этого Prometheus периодически скрейпит свои целевые объекты.

Что такое скрейпинг?

Prometheus извлекает метрики через HTTP-вызовы к определенным конечным точкам, указанным в конфигурации Prometheus.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Возьмем, например, веб-приложение, расположенное по адресу http://localhost:3000. Приложение передает метрики в текстовом формате на некоторый URL. Допустим, http://localhost:3000/metrics.

По этому адресу Prometheus с определенными интервалами извлекает данные из целевого объекта.

1. Как работает Prometheus?

Как мы уже сказали, Prometheus состоит из самых разных компонентов.

Во-первых, вам нужно, чтобы он извлекал метрики из ваших систем. Тут есть разные способы:

Как вы уже поняли, Prometheus сам собирает данные (исключая редкие случаи, когда мы используем Pushgateway).

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Что это значит?
Зачем это нужно?

2. Сбор vs. отправка

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

InfluxDB, например, работает иначе: вы сами напрямую отправляете ему данные.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Оба подхода имеют свои плюсы и минусы. На основе доступной документации мы составили список причин, по которым создатели Prometheus выбрали такую архитектуру:

Prometheus сам решает, где и как часто проводить скрейпинг.

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

Это дополнение к первой части, где мы обсуждали роль Prometheus.

Prometheus не основан на событиях и этим сильно отличается от других баз данных временных рядов. Он не перехватывает отдельные события с привязкой ко времени (например, перебои с сервисом), а собирает предварительно агрегированные метрики о ваших сервисах.

Если конкретно, веб-сервис не отправляет сообщение об ошибке 404 и сообщение с причиной ошибки. Отправляется сообщение о факте, что сервис получил сообщение об ошибке 404 за последние пять минут.

Это главное различие между базами данных временных рядов, которые собирают агрегированные метрики, и теми, что собирают необработанные метрики.

3. Развитая экосистема Prometheus

По сути Prometheus — база данных временных рядов.

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

Prometheus поддерживает следующие инструменты, расширяющие его функционал:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Часть II. Концепции Prometheus

Как и в руководстве по InfluxDB, мы подробно разъясним технические термины, связанные с Prometheus.

1. Модель данных «ключ-значение»

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

Prometheus работает с парами «ключ-значение». Ключ описывает, что мы измеряем, а значение хранит фактическую величину в виде числа.

Помните: Prometheus не создан для хранения необработанной информации, вроде обычного текста. Он хранит метрики, агрегированные за период времени.

Ключом в данном случае называется метрика. Это, например, скорость процессора или занятый объем памяти.

Но что если нужно больше деталей о метрике?
Например, у процессора 4 ядра, и нам нужно 4 отдельных метрики?

И здесь на помощь приходят ярлыки. Ярлыки дают больше сведений о метриках, добавляя дополнительные поля. Например, вы описываете не просто скорость процессора, а скорость одного ядра по определенному IP.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Потом вы сможете фильтровать метрики по ярлыкам и просматривать только нужную информацию.

2. Типы метрик

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

Счетчик

Это, наверное, самый простой тип метрик. Счетчик, как понятно из названия, считает элементы за период времени.

Если вы хотите посчитать, например, ошибки HTTP на серверах или посещения веб-сайта, используйте счетчик.

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

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

А если нужно измерить, допустим, используемую память за определенный период?
Эта величина может уменьшаться. Как посчитать ее с Prometheus?

Измерители

Знакомьтесь — измерители!

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

Но если измерители могут увеличиваться и уменьшаться и принимать положительные и отрицательные значения, то выходит, они лучше счетчиков?
Значит, счетчики — бесполезны?

Поначалу и я так думал. Раз они могут все, давайте использовать их везде. Логично?

А вот и нет.

Измерители идеально подходят для измерения текущего значения метрики, которое со временем может уменьшиться.

Вот тут-то и кроются те самые подводные камни: измеритель не показывает развитие метрики за период времени. Используя измерители, можно упустить нерегулярные изменения метрики со временем.

Почему? Вот что говорит /u/justinDavidow:

«Измеритель показывает среднее значение дельты счетчика для единицы за период времени.

Счетчик учитывает каждую использованную единицу (если это процессор, то операции, циклы или такты), а потом вы можете выбрать, показатели за какой период вам нужны.

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

Если система отправляет метрики каждые 5 секунд, а Prometheus скрейпит целевой объект каждые 15, в процессе можно потерять некоторые метрики. Если выполнять дополнительные вычисления с этими метриками, точность результатов окажется еще ниже.

У счетчика каждое значение агрегировано. Когда Prometheus собирает его, он понимает, что значение было отправлено в определенный интервал.

Теперь не запутаетесь.

Гистограмма

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

Значения собираются в области с настраиваемой верхней границей. Поэтому гистограмма может:

В реальном мире я бы хотел получать оповещение, если у 20% моих серверов отклик больше 300 мс или отклик серверов больше 300 мс более 20% времени.

Если вы имеете дело с пропорциями, вам нужны гистограммы.

Сводки

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

Квантили, если что, — это деление плотности вероятности на отрезки равной вероятности.

Итак: гистограммы или сводки?

Все зависит от намерения.

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

Сводки, с другой стороны, показывают квантили за скользящий период (т. е. непрерывное развитие во времени).

Это особенно удобно, если вам нужно узнать значение, которое представляет 95% значений, записанных за период.

3. Задания и экземпляры

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

Серверы реплицируются и распределяются по всему миру.

Чтобы это проиллюстрировать, давайте рассмотрим классическую архитектуру из двух серверов HAProxy, которые перераспределяют нагрузку по девяти бэкенд-веб-серверам (Нет-нет, никаких стеков Stackoverflow.)

В этом примере из реальной жизни мы отследим число ошибок HTTP, возвращенных веб-серверами.

На языке Prometheus один веб-сервер называется экземпляром. Заданием будет тот факт, что вы измеряете число ошибок HTTP на всех экземплярах.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

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

Удобно же?

4. PromQL

Если вы используете базы данных на основе InfluxDB, вы, наверное, уже знакомы с InfluxQL. Или используете SQL в TimescaleDB.

У Prometheus тоже есть свой язык для запросов и извлечения данных с серверов: PromQL.

Как мы уже знаем, данные представлены в виде пар «ключ-значение». PromQL использует тот же синтаксис и возвращает результаты в виде векторов.

В Prometheus и PromQL есть два вида векторов:

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

PromQL API предоставляет набор функций для операций с данными в запросах.

Вы можете сортировать значения, применять к ним математические функции (например, рассчитывать производные или экспоненты) и даже строить прогнозы (например, по модели Хольта-Уинтерса).

5. Инструментирование

Инструментирование — это еще одна важная часть Prometheus. Вы инструментируете приложения, прежде чем извлекать из них данные.

На языке Prometheus инструментирование означает добавление клиентских библиотек в приложение, чтобы они предоставляли метрики Prometheus.

Инструментирование доступно для большинства распространенных языков программирования: например, Python, Java, Ruby, Go и даже Node или C#.

По сути, вы создаете объекты памяти (например, измерители или счетчики), которые будут динамически увеличивать или уменьшать значение.

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

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

6. Экспортеры

В написанных вами приложениях очень удобно настраивать предоставляемые метрики и их изменение со временем с помощью инструментирования.

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

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

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Пара слов о взаимной совместимости

Большинство баз данных временных рядов поддерживают взаимную совместимость для своих систем.

Prometheus не единственная система мониторинга со своими требованиями к предоставлению метрик. Например, у InfluxDB (через Telegraf), CollectD, StatsD и Nagios тоже есть свои стандарты.

Поэтому для взаимодействия разных систем создаются экспортеры. Даже если Telegraf отправляет метрики не в том формате, который принимает Prometheus, Telegraf может послать эти метрики в экспортер InfluxDB, откуда их потом заберет Prometheus.

7. Оповещения

При работе с базами данных временных рядов вам нужна обратная связь от данных, и за это отвечают менеджеры оповещений.

В Grafana оповещения обычное дело, но они доступны и в Prometheus через менеджер оповещений.

Менеджер оповещений — это отдельный инструмент, который присоединяется к Prometheus и запускает кастомные оповещатели.

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

Как и в Grafana, в качестве получателя можно указать электронный адрес, вебхук Slack, PagerDuty и кастомные HTTP-объекты.

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Часть III. Примеры использования Prometheus

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

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

Об этом и поговорим.

1. DevOps

Со всеми этими экспортерами для разных систем, баз данных и серверов очевидно, что Prometheus предназначен, в основном, для сферы DevOps.

Мы знаем, что в этой сфере множество конкурирующих поставщиков и персонализированных решений.

Prometheus идеально подходит для DevOps.

Для настройки и запуска экземпляров почти не требуется усилий, и можно легко активировать и настроить любой вспомогательный инструмент.

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

В среде, где экземпляры то и дело создаются и удаляются, ни один стек DevOps не обойдется без обнаружения сервисов.

2. Здравоохранение

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

Спрос растет, и ИТ-архитектуры обязаны ему соответствовать. Если у вас нет надежного инструмента для мониторинга всей инфраструктуры, вы рискуете столкнуться с серьезными перебоями в обслуживании. Уж в сфере здравоохранения такую опасность точно надо свести к минимуму.

3. Финансовые услуги

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

Джейми Кристиан (Jamie Christian) и Алан Стрейдер (Alan Strader) показывали, как они используют Prometheus для мониторинга своей инфраструктуры в Northern Trust. Очень содержательно, советую посмотреть.

Часть X. Что дальше?

Какая роль параметра scrape interval в конфигурации prometheus. Смотреть фото Какая роль параметра scrape interval в конфигурации prometheus. Смотреть картинку Какая роль параметра scrape interval в конфигурации prometheus. Картинка про Какая роль параметра scrape interval в конфигурации prometheus. Фото Какая роль параметра scrape interval в конфигурации prometheus

Пора переходить от теории к практике.

Сегодня вы познакомились с основами Prometheus, узнали, какие функции он выполняет, с какими инструментами и системами работает и какие термины использует.

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

Чтобы приступить к работе с Prometheus, изучите все доступные экспортеры.

Потом установите нужные инструменты, создайте свою первую панель мониторинга — и вперед!

Если вам нужно вдохновение, почитайте мою статью о том, как мониторить машину Linux с Prometheus и Grafana. Там есть инструкции по настройке инструментов и первой панели мониторинга.

Надеюсь, вы узнали что-то новое.

Если у вас есть тема для моей следующей статьи, поделитесь.

Источник

Leave a Reply

Your email address will not be published. Required fields are marked *