Filebeat многострочный скороговорка - PullRequest
0 голосов
/ 15 ноября 2018

Я хотел бы настроить многострочный шаблон для каждого развернутого контейнера докера. Я знаю, что могу настроить разные входы filebeat, но дело в том, что я не знаю, какой контейнер я использую, потому что путь к журналу контейнеров такой, как / var / lib / docker / container / {id} / [{id} .log

Есть идеи?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете использовать шаблоны 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 или что-то перед тем, как передать его в файл-контейнер-бит

...