Логи в JSON

У докера есть возможность указать диспетчер логов. По умолчанию —  json-file, то есть, докер складывает вывод из контейнера в json-file на хосте. Если мы выбираем диспетчер логов, который будет отправлять записи куда-то по сети, то мы больше не сможем использовать команду docker logs. Если stdout/stderr контейнера был выбран единственным местом для записи логов приложения, то в случае сетевых проблем или проблем у единого хранилища, быстро извлечь записи для дебага может не получиться.

Мы можем использовать json-file докера и Filebeat. Получим и локальные логи и дальнейшую маршрутизацию. Стоит заметить здесь ещё одну особенность докера. При записи события длиной больше 16KB докер разбивает запись символом \n, что путает многие сборщики логов. Об этом есть issue. Проблему со стороны докера решить не удалось, поэтому её решили со стороны сборщиков. С некоторой версии Filebeat поддерживает такое поведение докера и корректно объединяет события.

Проверил и получилось, но не так как хотелось бы (данные не разбиваются по полям, следовательно такое не получится агрегировать потом в кибане):

Еще из минусов, логи находятся в странных директориях: /var/lib/docker/containers/*/*-json.log

Из плюсов, можно добавлять доп. информацию из env-переменных:

version: '2.1'
services:
  web:
    image: hello-world/web:latest
    container_name: api
    ports:
      - "80:8080"
    logging:
      driver: "json-file"
      options:
        max-size: 10m
        max-file: "3"
        labels: "production_status"
        env: "os"
    labels:
      production_status: "testing"
    environment:
      - os=ubuntu

Больше деталей можно узнать тут »

В итоге, у меня появилась идея, а может сделать stdout и stderr middleware, и тут надо посмотреть на logspout

Если logspout работает в самом контейнере, то вы увидите его mount /var/lib/docker/containers как том.

Источник: 1 - 2 - 3- 4


11.06.2008 10:44

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru