Как с помощью filebeat забирать логи/данные ИЗ контейнера, а не логи самого контейнера?

Чтобы с помощью 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 и т.д.).

Таким образом, вы сможете получать логи/данные из контейнеров, а не только логи самого контейнера.