Prometheus — це відкрите програмне забезпечення для моніторингу та оповіщення, яке збирає та зберігає метрики у вигляді часових рядів. Це означає, що всі зібрані дані мають позначку часу та можуть бути відображені на графіку. Крім того, всі зібрані метрики мають мітки у форматі ключ/значення, і ці мітки разом з назвою метрики утворюють унікальний часовий ряд даних. Будь-яке значення, яке вимірюється числово протягом часу, може бути відстежене за допомогою Prometheus. Ось кілька прикладів, але не обмежуючись ними:
- Використання процесора
- Використання пам'яті
- Місце на диску
- Дисковий ввід/вивід
- Кількість HTTP запитів
- Продуктивність SQL запитів
- Час безвідмовної роботи
Тестове середовище
Цей репозиторій на Github налаштовує тестове середовище на віртуальній машині LXC.
Топологія домашньої лабораторії
Зверніть увагу, що br0
було створено вручну на сервері Ubuntu і підключено до мережі домашньої лабораторії. Це дозволяє будь-якій підключеній віртуальній машині бути доступною в тій самій мережі та отримувати DHCP. Існують способи запустити віртуальну машину, підключену до інтерфейсу lxdbr0
, та налаштувати підключення через порт хоста на сервері Ubuntu до віртуальної машини LXC, де працює Prometheus. Це складніша конфігурація, але вона працює. В justfile є закоментовані цілі для цієї конфігурації, і для підключення віртуальної машини до інтерфейсу lxdbr0
потрібно створити окремий профіль LXC. Решта цього поста виходить з тієї топології, що зображена вище.
Вимоги
Щоб налаштувати це середовище, необхідно спочатку виконати наступні вимоги:
- Машина-хост на базі Ubuntu 22.04
- LXC (перевірено на версії 5.21.2)
- Використання
just
командного запуску (перевірено на версії 1.36.0)
Налаштування середовища
Щоб налаштувати середовище, клонуйте репозиторій на Ubuntu машину, що працює з LXC:
git clone [email protected]:TheFutonEng/learning-prometheus.git && cd learning-prometheus
Далі виконайте команду:
just setup
Ця команда виконає наступне:
- Видалить середовище, якщо воно було розгорнуте.
- Створить новий профіль LXC для віртуальної машини.
- Створить нові SSH ключі.
- Розгорне віртуальну машину LXC.
- Встановить Prometheus на віртуальну машину LXC.
- Налаштує Prometheus на віртуальній машині LXC.
Нижче наведено приклад виводу команди just setup
:
$ just setup
Deleting VM prometheus.
Deleting profile prometheus-net.
Profile prometheus-net deleted
Setting up SSH keys for Prometheus project...
SSH keys already exist in .ssh/prometheus_ed25519
cloud-init/user-data created with new SSH key
Creating network profile on br0
Profile prometheus-net created
Device root added to prometheus-net
Device eth0 added to prometheus-net
Deploying Prometheus VM
Creating prometheus
Starting prometheus
Waiting for VM to get IP address...
VM IP address: 192.168.1.112
Waiting for SSH to be available on 192.168.1.112
SSH is now available on 192.168.1.112
Prometheus installed in /opt/prometheus
Creating systemd service.
Creating systemd service.
Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /etc/systemd/system/prometheus.service.
Prometheus started and enabled
Prometheus setup complete!
Access the web interface at:
- http://localhost:9090
- http://192.168.1.112:9090 (direct VM access)
Waiting for Prometheus to become available...
✓ Prometheus is up and running
Ми можемо підтвердити, що веб-інтерфейс Prometheus працює за посиланням, яке наведено в попередньому виводі:
Нарешті, ми можемо отримати доступ до Prometheus.
Якщо ви хочете попрацювати у віртуальній машині, запустіть команду just ssh
, щоб отримати доступ до ВМ.
Prometheus
Цей розділ розгляне кілька базових вправ, щоб ознайомитися з Prometheus. Команда just setup
встановила Prometheus і налаштувала його для моніторингу самого себе. Щоб побачити всі метрики, які Prometheus збирає про себе, перейдіть за адресою http://:9090/metrics
.
Розуміння основ
Для розваги, давайте подивимося, як було використано пам'ять на ВМ Prometheus. Є кілька метрик, що стосуються пам'яті, які збираються. Використаємо для цього метрику go_memstats_alloc_bytes
. Введіть цей рядок у поле вводу Expression
і натисніть кнопку виконання.
Хмм... не так цікаво. Число 23206832
зліва вказує на поточне значення метрики go_memstats_alloc_bytes
(23.2MB). Тепер натискаємо вкладку Graph
, що поруч з Table
, щоб побачити графік.
Тепер трохи цікавіше. За замовчуванням цей вигляд показує дані часових рядів для метрики go_memstats_alloc_bytes
за останню годину. Не зовсім зрозуміло, що це за сплеск у використанні пам'яті, але саме для цього і потрібен Prometheus! Ці дані, у поєднанні з логами, можуть бути безцінними для вирішення проблеми або допомогти у визначенні кореня причини.
Додавання Exporter
Exporters — це сторонні бібліотеки, які відкривають метрики для Prometheus, щоб той міг їх отримувати. Існує безліч експортерів, але в цьому розділі ми працюватимемо з node_exporter
(джерело тут).
Зверніть увагу, що
node_exporter
відкриває дані про саму віртуальну машину, що відрізняється від налаштування Prometheus для моніторингу самого себе. Останнє збирає статистику про процес Prometheus, але не про сервер в цілому.
Щоб швидко розгорнути node_exporter
на ВМ Prometheus, виконайте команду just configure-node-exporter
. Це встановить двійковий файл node_exporter
, оновить конфігурацію Prometheus додатковою точкою доступу для node_exporter
(http://localhost:9100
), і перезавантажить сервіс Prometheus. Перейшовши за адресою http://:9090/targets
, ви повинні побачити два таргети:
Натискання кнопки show more
на вищезазначеному екрані відображає додаткові дані, зокрема точку доступу для метрик кожного таргета. Експортер node_exporter
відкриває безліч метрик. Ми використаємо метрику node_cpu_seconds_total
для наступного розділу. Введіть її в поле вводу Expression
, як і раніше:
Наводимо скріншот, що показує, як детально можуть бути представлені дані експортерів. Зверніть увагу, що верхня частина метрик відноситься до CPU0
, а нижня — до CPU1
. Кожен процесор має свої метрики, які фіксуються для восьми різних "режимів". Зверніть увагу, що cpu
, instance
, job
і mode
у наведеному скріншоті — це мітки (labels) в Prometheus. Перехід до вкладки Graph
, як ми робили раніше, показує графік, який не такий цікавий:
Цей графік показує всі 16 метрик часового ряду для node_cpu_seconds_total
на одному графіку, але дані, зібрані разом, роблять графік нечітким. Як ми можемо відобразити загальне використання процесора для віртуальної машини на графіку?
Основи PromQL
Щоб зробити це, потрібно змінити рядок, який ми вводимо в поле Expression. Prometheus має власну мову запитів під назвою PromQL, яка дозволяє детально налаштовувати дані для відображення.
Введіть наступний рядок у поле вводу Expression
:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
Тут багато чого відбувається, але давайте подивимося, що це дає:
Ось тільки одна метрика. Тепер графік:
Тепер ми можемо краще інтерпретувати це. Давайте розберемо цей рядок:
node_cpu_seconds_total{mode=”idle”}[1m]
- Беремо сирий лічильник
idle
секунд процесора за 1-хвилинний інтервал
- Беремо сирий лічильник
rate()
- Обчислює швидкість зміни лічильника за цей 1-хвилинний інтервал і повертає зміну за секунду
avg by (instance)
- Обчислює середнє значення для CPU0 та CPU1
* 100
- Перетворює значення на відсотки
100 -
- Віднімає відсоток часу простою (який вимірюється цією метрикою) від 100, щоб отримати метрику використання процесора.
Цей запит виглядає складно для такої базової метрики, як використання процесора. Але ця складність є також сильною стороною Prometheus. Ви можете отримати такі деталі, як це необхідно, коли аналізуєте захоплену метрику.
Налаштування сповіщень
Тепер давайте візьмемо цю середню метрику процесора і створимо на її основі сповіщення. Виконайте команду just setup-alerts
. Це додасть файл rules.yml
, як показано нижче, і перезавантажить Prometheus:
# Структура прикладу правила сповіщення
groups:
- name: example
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 20
for: 5m
labels:
severity: warning
annotations:
summary: High CPU usage on {{ $labels.instance }}
Зверніть увагу, що той самий запит PromQL використовується в дефініції сповіщення, що й у попередньому розділі. Ми можемо підтвердити, що правило сповіщення встановлено, перейшовши за адресою http://:9090/alerts
Хоча це сповіщення і встановлено, воно наразі неактивне, тобто умова для спрацьовування правила ще не виконана. Виконайте команду just stress-cpu
, щоб активувати сповіщення. Сповіщення перемкнеться в стан Pending
незабаром після виконання команди:
Стан Pending
означає, що умова правила була досягнута, але ще не вичерпано визначену в правилі тривалість. Через 5 хвилин сповіщення перейде в стан "fire", що означає, що всі умови виконано.
Зазвичай сповіщення не переглядаються в Prometheus безпосередньо таким чином, а перенаправляються на іншу платформу для обробки, наприклад, для усунення дублювання, групування подібних сповіщень, затишування сповіщень тощо. Alertmanager є стандартним інструментом для цієї мети.
Підсумки
Ось і все! Сподіваюся, цей пост був корисним.
Перекладено з: Learning Prometheus