Навчання Prometheus

pic

Prometheus — це відкрите програмне забезпечення для моніторингу та оповіщення, яке збирає та зберігає метрики у вигляді часових рядів. Це означає, що всі зібрані дані мають позначку часу та можуть бути відображені на графіку. Крім того, всі зібрані метрики мають мітки у форматі ключ/значення, і ці мітки разом з назвою метрики утворюють унікальний часовий ряд даних. Будь-яке значення, яке вимірюється числово протягом часу, може бути відстежене за допомогою Prometheus. Ось кілька прикладів, але не обмежуючись ними:

  • Використання процесора
  • Використання пам'яті
  • Місце на диску
  • Дисковий ввід/вивід
  • Кількість HTTP запитів
  • Продуктивність SQL запитів
  • Час безвідмовної роботи

Тестове середовище

Цей репозиторій на Github налаштовує тестове середовище на віртуальній машині LXC.

pic

Топологія домашньої лабораторії

Зверніть увагу, що 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 працює за посиланням, яке наведено в попередньому виводі:

pic

Нарешті, ми можемо отримати доступ до Prometheus.
Якщо ви хочете попрацювати у віртуальній машині, запустіть команду just ssh, щоб отримати доступ до ВМ.

Prometheus

Цей розділ розгляне кілька базових вправ, щоб ознайомитися з Prometheus. Команда just setup встановила Prometheus і налаштувала його для моніторингу самого себе. Щоб побачити всі метрики, які Prometheus збирає про себе, перейдіть за адресою http://:9090/metrics.

Розуміння основ

Для розваги, давайте подивимося, як було використано пам'ять на ВМ Prometheus. Є кілька метрик, що стосуються пам'яті, які збираються. Використаємо для цього метрику go_memstats_alloc_bytes. Введіть цей рядок у поле вводу Expression і натисніть кнопку виконання.

pic

Хмм... не так цікаво. Число 23206832 зліва вказує на поточне значення метрики go_memstats_alloc_bytes (23.2MB). Тепер натискаємо вкладку Graph, що поруч з Table, щоб побачити графік.

pic

Тепер трохи цікавіше. За замовчуванням цей вигляд показує дані часових рядів для метрики 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, ви повинні побачити два таргети:

pic

Натискання кнопки show more на вищезазначеному екрані відображає додаткові дані, зокрема точку доступу для метрик кожного таргета. Експортер node_exporter відкриває безліч метрик. Ми використаємо метрику node_cpu_seconds_total для наступного розділу. Введіть її в поле вводу Expression, як і раніше:

pic

Наводимо скріншот, що показує, як детально можуть бути представлені дані експортерів. Зверніть увагу, що верхня частина метрик відноситься до CPU0, а нижня — до CPU1. Кожен процесор має свої метрики, які фіксуються для восьми різних "режимів". Зверніть увагу, що cpu, instance, job і mode у наведеному скріншоті — це мітки (labels) в Prometheus. Перехід до вкладки Graph, як ми робили раніше, показує графік, який не такий цікавий:

pic

Цей графік показує всі 16 метрик часового ряду для node_cpu_seconds_total на одному графіку, але дані, зібрані разом, роблять графік нечітким. Як ми можемо відобразити загальне використання процесора для віртуальної машини на графіку?

Основи PromQL

Щоб зробити це, потрібно змінити рядок, який ми вводимо в поле Expression. Prometheus має власну мову запитів під назвою PromQL, яка дозволяє детально налаштовувати дані для відображення.
Введіть наступний рядок у поле вводу Expression:

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)

Тут багато чого відбувається, але давайте подивимося, що це дає:

pic

Ось тільки одна метрика. Тепер графік:

pic

Тепер ми можемо краще інтерпретувати це. Давайте розберемо цей рядок:

  • 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

pic

Хоча це сповіщення і встановлено, воно наразі неактивне, тобто умова для спрацьовування правила ще не виконана. Виконайте команду just stress-cpu, щоб активувати сповіщення. Сповіщення перемкнеться в стан Pending незабаром після виконання команди:

pic

Стан Pending означає, що умова правила була досягнута, але ще не вичерпано визначену в правилі тривалість. Через 5 хвилин сповіщення перейде в стан "fire", що означає, що всі умови виконано.

pic

Зазвичай сповіщення не переглядаються в Prometheus безпосередньо таким чином, а перенаправляються на іншу платформу для обробки, наприклад, для усунення дублювання, групування подібних сповіщень, затишування сповіщень тощо. Alertmanager є стандартним інструментом для цієї мети.

Підсумки

Ось і все! Сподіваюся, цей пост був корисним.

Перекладено з: Learning Prometheus

Leave a Reply

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