Django приложение в докере. Логирование и мониторинг (тоже в докере)

от автора

Обещанная вторая часть. Первая часть здесь.

Основной идеей было настроить все с минимальным количеством ручных действий для работы логирования и мониторинга.

Одно ручное действие все же потребуется — указать хост (или ip), по которому Prometheus будет собирать метрики в файле https://github.com/famer/loki/blob/main/prometheus.yml. В остальном все заработает просто по docker-compose up.

Полный код здесь

Разберем основные моменты.

Схема следующая:

Promtail собирает логи с докер контейнеров через докер сокет. Логи приложений соответственно пишутся в stdout stderr. То есть в лог самого контейнера. Как настроено логирование для Django приложения можно посмотреть здесь (из первой части):

LOGGING = {     'version': 1,     'disable_existing_loggers': False,     'handlers': {         'console': {             'class': 'logging.StreamHandler',         },     },     'root': {         'handlers': ['console'],         'level': 'INFO',     },     'loggers': {         'django': {             'handlers': ['console'],             'level': 'INFO',             'propagate': True,         },         'django.request': {             'handlers': ['console'],             'level': 'INFO',             'propagate': False,         },     }, }

Promtail передает логи в Loki, который их хранит.

Prometheus собирает метрики по указанному в файле https://github.com/famer/loki/blob/main/prometheus.yml хосту (кстати обратите внимание на https://github.com/famer/django/blob/main/nginx.conf там доступ к метрикам запрещен со всех ip адресов, кроме указанных в целях безопасности, вообще /metrics не рекомендуется светить наружу).

Ну собственно и все, добавляете, как источники данных Loki и Prometheus в графану и дальше визуализируете как хотите.

Пример в графине для запроса и форматирования логов из nginx:

{container="/itjobs-nginx-1"} | json request_method, request_uri, status | __error__=`` | line_format `{{.request_method}} {{.request_uri}} with HTTP status: {{.status}} ` 

На этом все.


ссылка на оригинал статьи https://habr.com/ru/articles/844706/