Цей посібник охоплює налаштування Python-сервісу, моніторинг запитів за допомогою метрик Prometheus та візуалізацію даних за допомогою інформаційної панелі Grafana. Передбачається, що Docker вже встановлений на вашій системі.
Спочатку потрібно створити простий Python-файл і назвати його server.py
. Цей файл міститиме логіку для додавання метрики, яку ми хочемо вимірювати за допомогою інформаційної панелі. Файл server.py
вимагає дві бібліотеки:
flask
prometheus_client
requirements.txt
Додамо ці дві бібліотеки до нашого файлу requirements.txt. Цей файл використовується для встановлення необхідних бібліотек всередині контейнера Docker під час процесу побудови контейнера.
requirements.txt
server.py
Тепер перейдемо до файлу server.py
, щоб додати логіку для створення метрик, коли користувач звертається до певного URL-адреси через браузер. Це буде наш вхідний програмний код, який викликається одразу після створення контейнера.
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
з наступними командами.
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
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
.
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
Кроки, визначені у файлі docker-compose.yml
, будуть використані для завантаження необхідних образів та правильного побудови контейнерів.
Перевірка
Після того, як всі сервіси будуть запущені, ми переходимо в браузер і перевіряємо наш додаток на http://127.0.0.1:9000/
. Якщо все працює коректно, ми побачимо поточну дату. Коли оновимо сторінку, час зміниться.
Prometheus можна перевірити за адресою 127.0.0.1:9090
, додавши метрику app_request_total
у запит і побачити, як змінюються метрики. Оновіть браузер кілька разів і побачите, що кількість запитів збільшується і відображається.
Увійдіть в Grafana на 127.0.0.1:3000
, використовуючи логін і пароль admin/admin
.
Home -> Connections -> Prometheus, і додайте new data source.
У полях підключення вкажіть http://prometheus:9090
та натисніть кнопку Save & test внизу.
Далі натисніть Dashboards -> Create Dashboards і Add visualizations.
Тепер виберіть джерело даних як Prometheus і оберіть app_request_total
із списку метрик. Натисніть Run queries.
Це лише приклад того, як сервіс можна налаштувати легко, оскільки, як ми знаємо, існує безліч варіантів для подальшого дослідження. Я залишаю це на розсуд читачів.
Перекладено з: Prometheus with Grafana dashboard in Python