Чтобы с помощью Filebeat забирать логи/данные ИЗ контейнера, а не логи самого контейнера, следует использовать функциональность Docker logging drivers в сочетании с Filebeat Docker module.
Docker logging drivers - это механизм в Docker, который позволяет перенаправлять вывод из контейнеров во внешние источники, такие как syslog, journald, fluentd и др. Один из поддерживаемых драйверов - это fluentd
.
Для начала вам нужно настроить Filebeat для работы с Docker. Вам понадобится файл конфигурации filebeat.yml
. В нем укажите следующие настройки:
filebeat.modules: - module: docker enabled: true containers.ids: - "*" processors: - add_docker_metadata: ~ - module: system syslog: enabled: true var.paths: ["/var/log/syslog"] output.logstash: hosts: ["your_logstash_hostname:your_logstash_port"]
Здесь мы настроили Filebeat для работы с модулем Docker и с модулем системного журнала (syslog). Обратите внимание, что мы указали хост и порт вашего Logstash сервера в настройках вывода Logstash.
После настройки Filebeat, вам необходимо настроить Docker для использования fluentd драйвера логирования. Создайте или отредактируйте файл /etc/docker/daemon.json
и добавьте следующую конфигурацию:
{ "log-driver": "fluentd", "log-opts": { "fluentd-address": "your_fluentd_hostname:your_fluentd_port" } }
Укажите хост и порт вашего Fluentd сервера.
Теперь, когда вы запускаете контейнеры, Docker будет перенаправлять логи контейнеров на Fluentd сервер. Fluentd выступает в качестве посредника между Docker и Filebeat.
Filebeat будет принимать логи от контейнеров, отправленные на Fluentd сервер, и затем передавать их в Logstash, который может обрабатывать, фильтровать и отправлять логи в выбранный вами назначение (например, Elasticsearch, Kafka и т.д.).
Таким образом, вы сможете получать логи/данные из контейнеров, а не только логи самого контейнера.