Ответ
Комплексный мониторинг Python-приложений строится на трёх основных столпах observability: метриках, логах и трейсах.
1. Метрики (Metrics)
Показывают состояние системы в числовом виде (CPU, RAM, RPS). Основной стек — Prometheus для сбора и хранения метрик и Grafana для их визуализации.
- Сбор метрик приложения: Используется библиотека
prometheus-client. - Ключевые метрики: Загрузка CPU/RAM, время ответа (latency), количество ошибок (error rate), глубина очередей (Celery/RQ), состояние пула соединений к БД.
# Пример кастомной метрики: счётчик HTTP-запросов
from prometheus_client import start_http_server, Counter
# Метрика 'requests_total' с описанием
REQUESTS = Counter('requests_total', 'Total number of requests received')
@app.route('/')
def index():
REQUESTS.inc() # Увеличиваем счётчик при каждом запросе
return "Hello, World!"
if __name__ == '__main__':
# Запускаем HTTP-сервер для сбора метрик Prometheus на порту 8000
start_http_server(8000)
app.run()
2. Логи (Logs)
Записи о событиях, произошедших в системе. Помогают в отладке и анализе инцидентов. Популярный стек — ELK (Elasticsearch, Logstash, Kibana) или Loki от Grafana Labs.
- Настройка: В Python используется встроенный модуль
logging. - Практика: Логи должны быть структурированными (например, в формате JSON) для удобного парсинга и поиска.
import logging
logging.basicConfig(
level=logging.INFO,
format='{"timestamp": "%(asctime)s", "level": "%(levelname)s", "message": "%(message)s"}',
datefmt='%Y-%m-%dT%H:%M:%S'
)
logging.info("User successfully authenticated.")
# Output: {"timestamp": "...", "level": "INFO", "message": "User successfully authenticated."}
3. Трейсинг (Tracing)
Отслеживание пути запроса через несколько сервисов в распределенной системе. Незаменим для поиска узких мест. Инструменты: Jaeger, Zipkin, OpenTelemetry.
Дополнительные инструменты:
- Health Checks: Специальные эндпоинты (
/health,/ready), которые проверяют работоспособность сервиса. Активно используются в Kubernetes (liveness/readiness probes). - Alerting: Настройка уведомлений о критических событиях на основе метрик и логов. Инструменты: Alertmanager (для Prometheus), PagerDuty, Opsgenie.
Ответ 18+ 🔞
Да ты посмотри, какие у нас тут три кита, на которых держится вся эта ваша обсервабельность! Прямо как у деда Мазая, только вместо зайцев — метрики, логи и трейсы. Ну, поехали разбираться, пока мозги не закипели.
Первый кит — метрики. Это, блядь, как градусник под мышку системе сунуть: температура, давление, пульс. Всё в цифрах. Главные затейники тут — Prometheus, который эти цифры собирает, и Grafana, которая из них такие красивые графики рисует, что глаз не оторвать.
Чтобы своё приложение прокачать, ставим библиотечку prometheus-client. И начинаем мерить всё: от загрузки процессора до того, как глубоко у тебя там очередь в Celery забилась.
Смотри, как просто, ёпта:
# Пример кастомной метрики: счётчик HTTP-запросов
from prometheus_client import start_http_server, Counter
# Метрика 'requests_total' с описанием
REQUESTS = Counter('requests_total', 'Total number of requests received')
@app.route('/')
def index():
REQUESTS.inc() # Увеличиваем счётчик при каждом запросе
return "Hello, World!"
if __name__ == '__main__':
# Запускаем HTTP-сервер для сбора метрик Prometheus на порту 8000
start_http_server(8000)
app.run()
Вот и всё, теперь каждый запрос — щёлк счётчиком. Красота!
Второй кит — логи. Это уже не цифры, а истории. Кто, куда, когда и, главное, что накосячил. Без них — как в темной комнате искать чёрную кошку, которой там, возможно, и нет. Стек обычно ELK (Elasticsearch, Logstash, Kibana) или, если модно, Loki от Grafana.
В Питоне всё из коробки есть, модуль logging. Только не пиши их абы как, сделай структурированными, в JSON, чтобы потом не пришлось глаза ломать.
import logging
logging.basicConfig(
level=logging.INFO,
format='{"timestamp": "%(asctime)s", "level": "%(levelname)s", "message": "%(message)s"}',
datefmt='%Y-%m-%dT%H:%M:%S'
)
logging.info("User successfully authenticated.")
# Output: {"timestamp": "...", "level": "INFO", "message": "User successfully authenticated."}
Видишь? Теперь каждая запись — как аккуратный документик. Искать — одно удовольствие.
Третий кит — трейсинг. А вот это, сука, самое интересное! Когда у тебя запрос как шарик для пинг-понга — прыгает от одного сервиса к другому, а ты должен проследить весь его путь и понять, где он застрял, как дурак в турникете. Jaeger, Zipkin или OpenTelemetry — вот твои лучшие друзья в этом деле.
А ещё, блядь, не забудь про health checks! Простые эндпоинты /health или /ready, которые кричат: «Я живой, ёба!» Особенно любят их в Kubernetes, там без них вообще никуда.
И, конечно, алертинг. Чтобы когда всё пошло по пизде, не ты первый об этом узнал по звонку от клиента в три ночи. Alertmanager для Prometheus — классика жанра. Настроил правила, и пусть он сам будит этих твоих девопсов, когда метрики зашкаливают.
Вот такая, блядь, картина маслом. Три кита, health checks и алерты. Соберёшь этот пазл — и спать будешь спокойно. Ну, почти.