Как понять видит ли filebeat логи docker

Пытаюсь запустить связку filebeat - logstash - elasticsearch -kibana в докер-контейнерах через docker-compose. Само по себе вроде все запускается и работает, но логи не доходят. Такое ощущение, что уже на первом этапе filebeat их не видит, в контейнере filebeat логи вот такого вида:

2020-05-08T11:11:21.244Z	INFO	[monitoring]	log/log.go:145	Non-zero metrics in the last 30s	{"monitoring": {"metrics": {"beat":{"cpu":{"system":{"ticks":60},"total":{"ticks":680,"time":{"ms":8},"value":680},"user":{"ticks":620,"time":{"ms":8}}},"handles":{"limit":{"hard":1048576,"soft":1048576},"open":6},"info":{"ephemeral_id":"cf33b524-d2ca-46b4-9792-d03c07a71c67","uptime":{"ms":60173}},"memstats":{"gc_next":9001344,"memory_alloc":4867160,"memory_total":13301720},"runtime":{"goroutines":15}},"filebeat":{"harvester":{"open_files":0,"running":0}},"libbeat":{"config":{"module":{"running":0}},"pipeline":{"clients":0,"events":{"active":0}}},"registrar":{"states":{"current":0}},"system":{"load":{"1":5.84,"15":1.17,"5":2.54,"norm":{"1":0.73,"15":0.1463,"5":0.3175}}}}}}

Как мне вообще узнать видит ли filebeat логи и в этом ли проблема?

Конфиг тоже приложу сразу:

filebeat.inputs:
- type: docker
  containers:
    path: "/usr/share/dockerlogs/data"
    ids:
      - "*"

output.logstash:
  hosts: ["logstash:5044"]

Путь /usr/share/dockerlogs/data пробрасывается в docker-compose c /var/lib/docker/containers

А пользователь filebeat имеет доступ к этим путям?

Как мне вообще узнать видит ли filebeat логи и в этом ли проблема?

А вы не пробовали запустить ssh в контейнере и посмотерть, что там происходит, что видно, откуда и с какими правами доступа?

Прав действительно не было. Я поменял права и теперь от пользователя filebeat могу видеть все внутри директории data. Но в логах по-прежнему {"open_files":0,"running":0}

Я поменял права и теперь от пользователя filebeat могу видеть все внутри директории data .

Изнутри контейнера или снаружи? Если изнутри, то как выглядит путь?

Права поменял вне контейнера. В docker-compose директории связаны вот так:

  filebeat:
    hostname: filebeat
    container_name: filebeat
    build:
      context: .
      dockerfile: filebeat.Dockerfile
    image: docker.elastic.co/beats/filebeat:7.6.2
    restart: always
    volumes:
      - "/var/lib/docker/containers:/usr/share/dockerlogs/data"
    links:
       - logstash

После того как я раздал права на чтение папки /var/lib/docker/containers для всех, я смог видеть /usr/share/dockerlogs/data внутри контейнера.

Обнаружил, что при перезапуске docker-compose, к новым директориям с логами доступа уже нет. Как это решать - не знаю.

А если добавить user: root в compose, работает?

Да, это помогло. Вот только в логах filebeat все равно {"open_files":0,"running":0}. Хотя в контейнерах на хосте логи обновляются.

А в логах filebeat что-нибудь еще есть?

Выложил пример лога

А можно тоже самое только на уровне debug?

А как сделать такое логгирование в контейнере? Просто доаваить в конфиг logging.level: debug не помогает

А вы где конфиг меняете? У вас с ним volume правильно подцеплин в контейнере? Из контейнера ваши изменения видны?

Конфиг копируется внутрь контейнера через Dockerfile:

FROM docker.elastic.co/beats/filebeat:7.6.2
COPY filebeat.yml /usr/share/filebeat/filebeat.yml

Но я сейчас заглянул внутрь контейнера, по пути /usr/share/filebeat/filebeat.yml лежит не тот конфиг. Не совсем понимаю как так может быть

Ну тут много чего может происходить. Не видя полной картины сложно что-то сказать. Вы docker-compose build запускали после изменения конфигов?

Большое спасибо. Я пробросил конфиг без докерфайла через volume и логи стали читаться и даже попадать в logstash. Теперь проблема в том, что они не попадают в elasticsearch :slight_smile:

Надо смотреть на конфиг и логи logstash :slight_smile:

Конфиг такой

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch { hosts => ["localhost:9200"] }
}

А в логи приходит много сообщений, поэтому, я думаю что проблема не в приеме логов, а в их передаче в elasticsearch

А вам logstash тогда нужен? Может вы начнете с прямой передачи из beats в elasticsearch?

поменял конфиг beats:

filebeat.inputs:
- type: docker
  combine_partial: true
  containers:
    path: "/usr/share/dockerlogs/data"
    ids:
      - "*"

output.elasticsearch:
  hosts: ["localhost:9200"]

Ничего не изменилось. В логах elasticsearch не видно, чтобы что-то приходило.