Вы можете использовать шаблоны glob в вашей конфигурации filebeat:
настройка, подобная этой
/var/lib/docker/containers/*/*.log
Соответствует ли файл, который вы ищете?
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#input-paths
Пожалуйста, убедитесь, что файл не соответствует нескольким параметрам пути.
Изменить ниже в соответствии с дополнительными требованиями.
Так, например, у вас будут работать эти 2 контейнера:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77e87b8e772e yadayada "/hihihi" 2 weeks ago Up 19 seconds 0.0.0.0:9080->9080/tcp container1
99e87b8e772e blablabla "/hahaha" 2 weeks ago Up 19 seconds 0.0.0.0:9080->9080/tcp container2
на основании предоставленной информации предполагается, что:
container1 входит в систему /var/lib/docker/containers/77e87b8e772e/77e87b8e772e.log
вход в контейнер2 /var/lib/docker/containers/99e87b8e772e/99e87b8e772e.log
Это может быть конфиг:
filebeat.inputs:
- type: log
paths: /var/lib/docker/containers/${CONTAINERID1}/${CONTAINERID1}.log
multiline.pattern: '^=[A-Z]+|^$'
multiline.negate: true
multiline.match: after
- type: log
paths: /var/lib/docker/containers/${CONTAINERID2}/${CONTAINERID2}.log
multiline.pattern: '^=[1-9]+|^$'
multiline.negate: true
multiline.match: after
Итак, при запуске filebeat, перед тем, как запускать filebeat, вы делаете некоторые дополнительные действия:
export CONTAINERID1=$(docker ps|grep "container1$" | cut -d ' ' -f1)
export CONTAINERID2=$(docker ps|grep "container2$" | cut -d ' ' -f1)
./filebeat
Таким образом, до тех пор, пока имя контейнера не меняется, идентификатор может отличаться и будет работать. Обратите внимание, что, когда вы раскручиваете новую (версию)
контейнер, вам придется перезапустить Filebeat, чтобы выбрать новый путь.
Также обратите внимание, что если вы запустите Filebeat в самом док-контейнере, скорее всего, экспорта переменной будет недостаточно, вам придется отредактировать файл, используя
sed
или что-то перед тем, как передать его в файл-контейнер-бит