Prometheus

Материал из ALT Linux Wiki

Источник:

https://prometheus.io/

Основная информация:

Prometheus — это база данных, оптимизированная для данных временных рядов и идеальный способ хранения метрик мониторинга. Prometheus выпустила Cloud Native Computing Foundation (CNCF), что означает отличную интеграцию с другими компонентами CNCF.

Принцип работы:

Основой его работы является скрейпинг конечных точек. Прометей посылает HTTP запрос к точкам(обычно это /metrics), которые указываются в конфиг файле, и если точка может дать данные нужного формата - Прометей определит ее как объект и с определенным интервалом будет делать запросы

Структура:

Прометей состоит из трех компонентов:

Retrieval

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

- Готовые сервисы экспортеры наподобие node-exporter;

- Пользовательские сервисы обладающие способность отдавать данные нужного формата;

- Pushgateway сервис куда можно скидывать метрики, когда стандартная модель прометея не применима)

Storage

Сама база данных хранящая в себе данные объектов в виде временных рядов

HTTP Server

Представляет API к storage для визуализации в простом встроенным GUI или подключению к Grafana. Также дает возможность агрегировать и обрабатывать данные различными запросами PromQl

Alert Manager

Также к прометею можно подсоединить алерт менеджера способного отследить какое либо событие(например значение превысило заданную границу) и отправить на почту оповещение.

Структура метрик

Прометей собирает метрики человекочитаемоего типа, и они имеют два атрибута:

HELP - описание метрики, для чего и зачем…

TYPE - один из трех встроенных типов метрики:

- Counter: сколько раз что то произошло…(обязательно должен расти)
- Gauge: какое текущее значение чего то…(но он не показывает развитие метрики)
- Histogram: насколько что то большое, насколько что то длинное(можно рассчитывать среднее значение и относительные измерения значений)

Концепция хранения

База данных временных рядов Prometheus хранит данные в высокоэффективном формате на локальном хранилище.

Прометей работает с парами ключ-значение. Ключ описывает, что мы измеряем, а значение хранит фактическую величину в виде числа. Также в метрике содержатся разная мета информация(labels). И он хранит в среднем всего 1-2 байта на выборку, что позволяет прогнозировать какого объема диск нам нужен.

Образцы группируются в блоки по два часа. Каждый двухчасовой блок состоит из каталога, содержащего подкаталог chunks, содержащий все образцы временных рядов для этого временного интервала, файла метаданных и индексного файла (который индексирует имена метрик и метки временных рядов в каталоге chunks). Образцы в каталоге chunks по умолчанию сгруппированы в один или несколько сегментных файлов размером до 512 МБ каждый. Когда серии удаляются через API, записи об удалении сохраняются в отдельных файлах tombstone (вместо немедленного удаления данных из сегментов chunk). (по умолчанию хранит данные в течении 15 дней, но это можно изменить с помощью флага при запуске программы).

 !!! Ограничения в использовании файловых системы: не совместимые с POSIX системы, не поддерживаются для локального хранилища Prometheus, поскольку могут произойти необратимые повреждения. Файловые системы NFS (включая Aws EF S) не поддерживаются. NFS может быть совместима с POSIX, но большинство реализаций таковыми не являются. Для надежности настоятельно рекомендуется использовать локальную файловую систему.

Установка

Установка производится командой: apt-get update && apt-get install -y prometheus

Установка через Docker

Docker образ можно скачать с нашего реестра образов:

https://registry.altlinux.org/repository/alt/prometheus

С помощью команды:

docker pull registry.altlinux.org/alt/prometheus

Затем с помощью этой команды запустить:

docker run --name="prometheus" -p 9090:9090 -v promdata:/var/lib/prometheus registry.altlinux.org/alt/prometheus

В Docker Volume promdata будут сохранятся данные, также вы можете передавать нужные вам флаги после названия образа.

Если вы хотите чтобы докер видел сервисы запущенные на вашем хосте:

Замените флаг -p на --network="host"

Настройка

По умолчанию прометей запущен на localhost:9090

А его конфиг лежит в /etc/prometheus/

C помощью конфиг файла вы можете указать конечные точки для прометея.

Конфиг файл

Почитать подробнее про настройку конфиг файла вы можете по адресу:

https://prometheus.io/docs/prometheus/latest/configuration/configuration/

Пример конфиг файла лежит по адресу:

https://raw.githubusercontent.com/prometheus/prometheus/main/documentation/examples/prometheus.yml

В прометеи можно посмотреть конфиг перейдя в Status => Configuration

Основная информация

Конфиг файл является YML файлов и он является основной для работы Прометея рассмотрим некоторые из его множества полей.

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

scrape_interval как часто надо обходить точки

evaluation_interval как часто надо оценивать правила

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

tls_config позволяет настраивать соединения TLS.

Docker SD позволяют извлекать целевые объекты scrape с хостов Docker Engine. Эта SD-карта обнаруживает “контейнеры” и создаст цель для каждого сетевого IP-адреса и порта, на который настроен контейнер.

Настройка конфиг файла через Docker

Чтобы пробросить свой конфиг файл в контейнер используйте следующую команду:

docker cp $PWD/prometheus.yml prometheus:/etc/prometheus/prometheus.yml

$PWD/promehteus.yml должен указывать на путь до конфиг файла

Затем перезапустите контейнер: docker restart prometheus

Пример использования

С помощью команды установите node-exporter:

apt-get install prometheus-node_exporter

Далее запустите его, вы можете удостовериться в его работоспобности перейдя на localhost:9100 и увидев те самые метрики

Затем отредактируйте конфиг файл:

global:
 scrape_interval: 5s
 evaluation_interval: 5s
scrape_configs:
  - job_name: "node-exporter"
    static_configs:
      - targets: ["127.0.0.1:9100]"

Перезагрузите прометей и посмотрите в Status => Targets успешно ли подключение к node-exportert