Prometheus з графічною панеллю в Grafana на Python

Цей посібник охоплює налаштування Python-сервісу, моніторинг запитів за допомогою метрик Prometheus та візуалізацію даних за допомогою інформаційної панелі Grafana. Передбачається, що Docker вже встановлений на вашій системі.

Спочатку потрібно створити простий Python-файл і назвати його server.py. Цей файл міститиме логіку для додавання метрики, яку ми хочемо вимірювати за допомогою інформаційної панелі. Файл server.py вимагає дві бібліотеки:

  • flask
  • prometheus_client

requirements.txt

Додамо ці дві бібліотеки до нашого файлу requirements.txt. Цей файл використовується для встановлення необхідних бібліотек всередині контейнера Docker під час процесу побудови контейнера.

pic

requirements.txt

server.py

Тепер перейдемо до файлу server.py, щоб додати логіку для створення метрик, коли користувач звертається до певного URL-адреси через браузер. Це буде наш вхідний програмний код, який викликається одразу після створення контейнера.

pic

server.py

Ми імпортуємо бібліотеки flask та prometheus_client і включаємо Counter, щоб рахувати кількість запитів, що надходять на наш сервер. Ми ініціалізуємо Flask-додаток у змінній app, а request_count зберігає значення лічильника Counter('app_request_total', 'Total requests to the app'). Цей app_request_total — це наша метрика, яку ми будемо відслідковувати на інформаційній панелі.

Коли маршрут app.route('/') звертається до сервера, викликається функція home(), де ми збільшуємо лічильник за допомогою request_count.inc(). Наприкінці ми виводимо поточну дату в консолі і повертаємо її.

Коли програма запускається, ми створюємо HTTP-сервер на порту 8000, а потім запускаємо додаток на порту 9000. Коли користувач переходить на http://127.0.0.1:9000/, в браузері буде відображатися поточна дата і час.

Dockerfile

Тепер час створити Dockerfile з наступними командами.

pic

Dockerfile

Контейнер буде створено на основі базової версії python:3.9-slim-buster, яка доступна на Docker Hub — тут. Усередині контейнера ми встановлюємо /app як робочий каталог. Кілька команд, таких як RUN apt update і RUN pip3 install --upgrade pip, використовуються для підготовки контейнера до встановлення додаткових бібліотек з файлу requirements.txt. Ми копіюємо файли requirements.txt і server.py до контейнера та встановлюємо бібліотеки за допомогою RUN pip3 install --no-cache-dir requirements.txt. Наприкінці ми викликаємо програму командою CMD ["python3", "./server.py"].

prometheus.yml

pic

prometheus.yml

Створіть файл конфігурації prometheus.yml, щоб зв'язати порт додатка 8000. app — це посилання на Python-додаток, який визначений у файлі docker-compose.yml.

Налаштування scrape_interval: 5s дозволить оновлювати метрики кожні 5 секунд.

job_name: prometheus — це ім'я, яке використовується для підключення до сервера Prometheus з джерела даних на інтерфейсі Grafana.

docker-compose.yml

Також створимо файл docker-compose.yml.

pic

docker-compose.yml

У файлі Compose ми визначаємо три сервіси.

prometheus

Ми тягнемо образ prom/prometheus і відкриваємо порт 9090 для контейнера Prometheus.
Ми також зв’язуємо наш файл prometheus.yml з файлом конфігурації за замовчуванням.

grafana

Цей розділ є досить простим: ми вказуємо образ grafana/grafana, який буде завантажено для нашого екземпляра, та відкриваємо порт на 3000.

app

Тут ми вказуємо, що наш додаток залежить від prometheus і відкриваємо порти сервера 8000 та 9000 для порту додатку. Нарешті, викликаємо команду ["python3", "./server.py"].

Виконання

Запустіть команди docker-compose

docker-compose build —no-cache

docker-compose up -d

pic

Кроки, визначені у файлі docker-compose.yml, будуть використані для завантаження необхідних образів та правильного побудови контейнерів.

Перевірка

Після того, як всі сервіси будуть запущені, ми переходимо в браузер і перевіряємо наш додаток на http://127.0.0.1:9000/. Якщо все працює коректно, ми побачимо поточну дату. Коли оновимо сторінку, час зміниться.

pic

Prometheus можна перевірити за адресою 127.0.0.1:9090, додавши метрику app_request_total у запит і побачити, як змінюються метрики. Оновіть браузер кілька разів і побачите, що кількість запитів збільшується і відображається.

pic

Увійдіть в Grafana на 127.0.0.1:3000, використовуючи логін і пароль admin/admin.

Home -> Connections -> Prometheus, і додайте new data source.

У полях підключення вкажіть http://prometheus:9090 та натисніть кнопку Save & test внизу.

pic

Далі натисніть Dashboards -> Create Dashboards і Add visualizations.

Тепер виберіть джерело даних як Prometheus і оберіть app_request_total із списку метрик. Натисніть Run queries.

pic

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

Перекладено з: Prometheus with Grafana dashboard in Python

Leave a Reply

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