Почему клиент драйвера Docker от Loki перестает входить в систему через некоторое время?

Я хочу отправлять журналы своих контейнеров Docker в Grafana Loki. Поэтому я установил клиент драйвера Docker Локи и запустил свои контейнеры с Это. Сначала я вижу журналы, но через некоторое время я больше не вижу журналов.

Установка

Я установил клиент драйвера Docker от Loki как подключаемый модуль Docker на свой механизм Docker ( версия 20.10.2):

$ docker plugin install grafana/loki-docker-driver:master-54d1d3b --alias loki --grant-all-permissions

Я не использовал тег lastest из-за ошибки Невозможно подключиться к плагину ведения журнала в Swarm < / а>

Конфигурация

Я запустил свои контейнеры Docker с клиентом драйвера Docker от Loki в качестве драйвера журнала:

$ docker container run
  --log-driver=loki
  --log-opt loki-url="$LOKI_URL"
  --log-opt loki-retries=5
  --log-opt loki-batch-size=400
  --log-opt max-size="10m"
  --log-opt max-file=5
  --detach
  --name $CONTAINER_NAME
  --restart unless-stopped
  $IMAGE:$TAG

Я также добавил драйверы json-log max-size и max-file для ограничения дискового пространства, см. Настройка драйвера Docker.

Проблема

Сначала я мог видеть журналы в Grafana и в командной строке с _ 6_, но через некоторое время журналы больше не отображались. Если бы я попытался заглянуть в журналы на хосте Docker и увидел бы ошибку:

$ docker container logs 75d4b13eb3e8
error from daemon in stream: Error grabbing logs: error getting log reader: LogDriver.ReadLogs: logger does not exist for 75d4b13eb3e8203b9247ecdeb41fdf495cc8fea7dcfc4775fd8261263b1dcd32

Исследования

Я заглянул в каталоги контейнеров (см. Где файл журнала с журналами из контейнера?), но я не видел файлов журнала:

$ sudo ls /var/lib/docker/containers/75d4b13eb3e8203b9247ecdeb41fdf495cc8fea7dcfc4775fd8261263b1dcd32
checkpoints  config.v2.json  hostconfig.json  hostname  hosts  mounts  resolv.conf  resolv.conf.hash

Я также проверил путь к журналу (см. Get путь к журналу экземпляра), но он был пустым:

$ docker inspect --format='{{.LogPath}}' 75d4b13eb3e8

Я нашел журналы контейнера в каталоге плагина (см. Драйвер журнала Loki не сохраняет журналы в виде файлов на диске, даже если keep-file: true), но файлы журнала больше не меняются:

$ sudo ls -la /var/lib/docker/plugins/eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288/rootfs/var/log/docker/75d4b13eb3e8203b9247ecdeb41fdf495cc8fea7dcfc4775fd8261263b1dcd32
total 912
drwxr-xr-x  2 root root   4096 Jan 22 12:59 .
drwxr-xr-x 17 root root   4096 Jan 22 15:46 ..
-rw-r-----  1 root root 923177 Jan 22 13:34 json.log

Я просмотрел журналы демона Docker (см. Прочтите журналы) и обнаружены ошибки и предупреждение (при этом ведение журнала остановлено):

$ sudo journalctl -u docker.service | grep eac33cc9913c
[...]
[...]level=error msg="panic: send on closed channel" plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=error plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=error msg="goroutine 153 [running]:" plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=error msg="main.(*loki).Log(0xc0000c5e00, 0xc0001d81c0, 0xc0000c5e80, 0x0)" plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=error msg="\t/src/loki/cmd/docker-driver/loki.go:69 +0x2fb" plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=error msg="main.consumeLog(0xc0002c0480)" plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=error msg="\t/src/loki/cmd/docker-driver/driver.go:165 +0x4c2" plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=error msg="created by main.(*driver).StartLogging" plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=error msg="\t/src/loki/cmd/docker-driver/driver.go:116 +0xa75" plugin=eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288
[...]level=warning msg="Unable to connect to plugin: /run/docker/plugins/eac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288/loki.sock/LogDriver.StopLogging: Post http://%2Frun%2Fdocker%2Fplugins%2Feac33cc9913ca962a189904392e516dd495d6fd52391fb5af4a34af46b281288%2Floki.sock/LogDriver.StopLogging: EOF, retrying in 1s"
[...]

Что я сделал не так?


person dur    schedule 23.01.2021    source источник


Ответы (1)


У меня была такая же проблема.

Единственные отличия в конфигурации заключаются в том, что я тестирую последнюю версию Enterprise Edition (19.03), поскольку она содержит возможность двойного ведения журнала, хотя это также поддерживается в последних версиях CE, и теперь я использую последнюю версию клиента драйвера Loki Docker, так как ранее упомянутая проблема Github была решена.

В итоге я установил журнал- выбирает свойства no-file и keep-file в docker-compose.yml:

logging:
  driver: "loki"
  options:
    loki-url: "http://${LOKI_URL}:3100/loki/api/v1/push"
    loki-batch-size: "400"
    no-file: "false"
    keep-file: "true"
    max-size: "5m"
    max-file: "3"

После внесения этого изменения я получаю журналы в Loki и все еще могу использовать журналы контейнеров докеров и журналы сервисов докеров на своих хостах Docker.

no-file: "false" указывает драйверу продолжить создание журналов на диске, а keep-file: "true" сообщает драйверу, что он должен вести журналы json, если контейнер остановлен (по умолчанию файлы удаляются).

Примечание. Первоначально я добавлял эти настройки в /etc/docker/daemon.json на хосте, но по-прежнему видел проблему error getting log reader, мне пришлось переключиться на указание драйвера журнала для каждой службы контейнера / роя.

person Patrick    schedule 11.03.2021
comment
no-file: "false" - значение по умолчанию, поэтому я тоже его использую. Я не устанавливал keep-file: "true". Я попробую. Но тогда мне также нужно использовать max-file для очистки файлов журналов. - person dur; 11.03.2021