Обещанная вторая часть. Первая часть здесь.
Основной идеей было настроить все с минимальным количеством ручных действий для работы логирования и мониторинга.
Одно ручное действие все же потребуется — указать хост (или 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/
Добавить комментарий