Русский
Русский
English
Статистика
Реклама

Пушим метрики Prometheus с помощью pushgateway

Всё тоже, только у pushgateway пламя голубенькое в favicon


Предисловие


Данная заметка в целом о пуше метрик в pushgateway, однако, предупрежу и признаюсь сразу, что в тексте будет пример анти-паттерна пуша метрик, так как использование pushgateway рекомендуется в случае, когда сервис работает не постоянно (или у сервиса/запускаемого задания вообще нет никакого интерфейса), а значит и prometheus'у лучше в закрытые двери постоянно не стучать и не заниматься лишней работой.


Введение


Итак, pushgateway это сервис куда можно скидывать метрики, когда стандартная pull-модель prometheus'а не применима (в предисловии, я в общем описал, как такая ситуация может возникнуть и выглядеть). После того, как метрики попали в pushgateway оттуда их уже забирает prometheus и из этого вытекает несколько ограничений, связанных с пушем метрик, например, отсутствие метрики up, так как она формируется самим prometheus для опрашиваемого инстанса, а в данном случае это только pushgateway.


p.s. Хотя, если говорить о up метрике, то она и не нужна, в случае, если вы используете pushgateway бестпрактайс-способом.


Готовим prometheus к опросу pushgateway


Допустим, у нас есть вот такой compose с prometheus и pushgateway:


# ....(тут какие-нибудь графаны и т.д.)   prometheus:      restart: always      image: bitnami/prometheus:latest      links:          - pushgateway      volumes:          - ./.prom.yml:/opt/bitnami/prometheus/conf/prometheus.yml  pushgateway:      restart: always      image: bitnami/pushgateway:latest      ports:          - 9091:9091  

В данном случае prom.yml должен выглядеть как-то так, чтобы собирать данные с pushgateway:


global: nullscrape_interval: 5sscrape_timeout: 2sevaluation_interval: 15sscrape_configs:  - job_name: pushgateway    honor_labels: true    static_configs:      - targets:          - 'pushgateway:9091'

Тут всё достаточно понятно, добавили только honor_lables, который, если вкратце разрешает конфликты имён лэйблов, то есть например, если у вашего сервиса есть метрика с лэблом "X" и у pushgateway, есть лэйбл "X", то при honor_lables=false у вас будет лэйбл "X" с pushgateway и "exported_X" с вашего сервиса, который запушил метрики в pushgateway, а при значении true будут отображаться только лэйблы вашего сервиса (опять же, если будет конфликт).


p.s. Незабываем о безопасности pushgateway дока по-умолчанию рекомендует, например, использовать basic_auth.


Пушим метрики


Я бы мог привести красивый пример, соответствующий нормальной практике, однако, я подумал и решил, что давно мне минусов не ставили, потому будет пример пуша метрик из-за того, что настройка service_discovery отсутствует (в прод, понятное дело, это низя).


Итак, допустим, у нас есть воркеры Faust их много и они не в кластере (нет ни swarm, ни куберов), так же нет consul и иных способов в которые умеет prometheus, они просто спокойно запускаются в docker compose и размножаются параметром scale.


Больший ужас и крамолу, помимо пуша метрик, можно сделать рэйджировав порты, например, так:


ports:  - "9100-9200:6066"  

И загонять в конфиг prometheus таргеты со всем множеством портов.


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


async def push_metrics():      def auth_handler(url, method, timeout, headers, data):          return basic_auth_handler(url, method, timeout, headers, data, PUSHGATEWAY_USERNAME, PUSHGATEWAY_PASSWORD)      push_to_gateway(PUSHGATEWAY_URI, job=f"{WORKERS_APP_NAME}-{ENV}", registry=registry_metrics, handler=auth_handler)  @app.timer(interval=PUSH_METRICS_INTERVAL)  async def push_metrics_cron():      await push_metrics()  

Как видите тут всё достаточно просто указываем job name (при пуле метрик это делается в конфиге prometheus'а), подставляем handler для аутентификации и указываем registry из которого будут пушиться метрики. Ну и собственно всё, запускаем и при открытии pushgateway веб-морды видим, что у нас через интервал загрузились метрики, далее оттуда их заберёт ранее настроенный prometheus.


Послесловие


Заметку я решил написать, так как столкнулся с подобным в работе, сразу скажу, что способ из примера в прод не пойдёт, однако, как применение pushgateway при отсутствии service discovery, для тестирования это сойти может.

Источник: habr.com
К списку статей
Опубликовано: 06.12.2020 04:20:10
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Devops

Prometheus

Monitoring

Faust

Pushgateway

Metrics

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru