Драйвер журналирования Fluentd

Драйвер ведения журнала fluentd отправляет журналы контейнера сборщику свободно в виде структурированных данных журнала. Затем пользователи могут использовать любой из различные плагины вывода Fluentd для записи данных журналов в различные места назначения.

В дополнение к самому сообщению журнала драйвер журнала fluentd отправляет следующие метаданные в структурированном сообщении журнала:

Поле

Описание

container_id

Полный 64-символьный идентификатор контейнера.

container_name

Имя контейнера во время его запуска. Если вы используете docker rename для переименования контейнера, новое имя не отражается в записях журнала.

source

stdout или stderr

log

Журнал контейнера

Команда docker logs недоступна для этого драйвера ведения журнала.

Применение

Некоторые параметры поддерживаются указанием --log-opt столько раз, сколько необходимо:

  • fluentd-address: указывает адрес сокета для подключения к демону Fluentd, например, fluentdhost:24224 или unix:///path/to/fluentd.sock

  • tag: указывает тег для сообщения fluentd, который интерпретирует некоторую разметку, например {{.ID}}, {{.FullID}} или {{.Name}} docker.{{.ID}}

Чтобы использовать драйвер fluentd в качестве драйвера ведения журнала по умолчанию, задаёт для ключей log-driver и log-opt соответствующие значения в файле daemon.json, который находится в /etc/docker/ на хостах Linux или C:\ProgramData\docker\config\daemon.json на Windows Server. Дополнительные сведения о +настройке Docker с помощью daemon.json см. в разделе +daemon.json.

В следующем примере для драйвера журнала задается значение fluentd и задается параметр fluentd-address.

{    "log-driver": "fluentd",    "log-opts": {      "fluentd-address": "fluentdhost:24224"    }  }

Перезапустите Docker, чтобы изменения вступили в силу.

Примечание

Параметры конфигурации log-opts в файле конфигурации daemon.json должны быть указаны в виде строк. Поэтому логические и числовые значения (например, значение для fluentd-async или fluentd-max-retries) должны быть заключены в кавычки (").

Чтобы установить драйвер ведения журнала для определённого контейнера, передать параметр --log-driver в docker run:

docker run --log-driver=fluentd ...

Прежде чем использовать данный драйвер ведения журнала, запускает демон Fluentd. Драйвер ведения журнала по умолчанию подключается к этому демону через localhost:24224. Используйте параметр fluentd-address для подключения к другому адресу.

docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224

Если контейнер не может подключиться к демону Fluentd, контейнер немедленно останавливается, если не используется параметр fluentd-async.

Параметры

Пользователи могут использовать флаг --log-opt NAME=VALUE, чтобы указывает дополнительные параметры драйвера ведения журнала Fluentd.

fluentd-address

По умолчанию драйвер ведения журнала подключается к localhost:24224. Указывает опцию fluentd-address, чтобы подключиться к другому адресу. Поддерживаются сокеты tcp(по умолчанию) и unix.

docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224
docker run --log-driver=fluentd --log-opt fluentd-address=tcp://fluentdhost:24224
docker run --log-driver=fluentd --log-opt fluentd-address=unix:///path/to/fluentd.sock

В двух из приведенных выше указан один и тот же адрес, поскольку по умолчанию используется tcp.

ярлык

По умолчанию Docker использует первые 12 символов идентификатора контейнера для маркировки сообщений журнала. См. log tag документация по опциям для настройки формата тега журнала.

labels, labels-regex, env и env-regex

Каждый параметр labels и env принимает список ключей, разделенных запятыми. В случае коллизии между ключами label и env приоритет имеет значение env. Оба варианта добавляют дополнительные поля к дополнительным атрибутам сообщения журнала.

Варианты env-regex и labels-regex аналогичны и совместимы с env и labels соответственно. Их значения представляют собой регулярные выражения, соответствующие переменным среды и меткам, связанным с ведением журнала. Он используется для продвинутого log tag options.

fluentd-async

Docker подключается к Fluentd в фоновом режиме. Сообщения буферизуются до тех пор, пока соединение не будет установлено. По умолчанию false.

fluted-buffer-limit

Устанавливает количество событий, буферизуемых в памяти. Записи будут храниться в памяти до этого номера. Если буфер заполнен, вызов записи журналов завершится ошибкой. По умолчанию 8192. (https://github.com/fluent/fluent-logger-golang/tree/master#bufferlimit)

fluentd-retry-wait

Как долго ждать между повторными попытками. По умолчанию 1 секунда.

fluentd-max-retries

Максимальное количество повторных попыток. По умолчанию 4294967295 (2**32 - 1).

fluentd-sub-second-precision

Генерирует журналы событий с разрешением в наносекунды. По умолчанию false.

Управление демоном Fluentd с помощью Docker

О самом Fluentd см. веб-страница проекта и его документы.

Чтобы использовать данный драйвер ведения журнала, запускает демон fluentd на узле. Мы рекомендуем вам использовать образ Docker Fluentd. Данный образ особенно полезен, если вы хотите агрегировать несколько журналов контейнеров на каждом хосте, а затем перенести журналы на другой узел Fluentd для создания сводного хранилища.

Логгеры тестовых контейнеров

  1. Напишите файл конфигурации (test.conf) для дампа журналов ввода:

    <source>
      @type forward
    </source>
    
    <match *>
      @type stdout
    </match>
    
  2. Запускает контейнер Fluentd с этим файлом конфигурации:

    $ docker run -it -p 24224:24224 -v /path/to/conf/test.conf:/fluentd/etc/test.conf -e FLUENTD_CONF=test.conf fluent/fluentd:latest
    
  3. Запускает один или несколько контейнеров с драйвером ведения журнала fluentd:

    $ docker run --log-driver=fluentd your/application