Контейнер Filebeat не отправляет журналы в Elastic

На моем локальном компьютере под управлением Ubuntu 18.04 через «Подсистему Windows Linux 2» в Windows 10 я использую контейнеры докеров Elastic 7.3, Kibana 7.3 и Elastic 7.3.

Настройка прошла успешно, и Filebeat, похоже, правильно отслеживает контейнеры. Однако Kibana не показывает никаких журналов.

Настройка

Для настройки Elastic и Kibana я использую следующие команды


    docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.1
    docker run --network=lognetwork --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.3.1

    docker pull docker.elastic.co/kibana/kibana:7.3.1
    docker run --name=kibana --network=lognetwork -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 -p 5601:5601 docker.elastic.co/kibana/kibana:7.3.1

После этих двух команд журналы контейнера Kibana показывают, что он успешно подключается к Elastic:


    {"type":"log","@timestamp":"2019-09-01T13:22:18Z","tags":["status","plugin:[email protected]","info"],"pid":6,"state":"green","message":"Status changed from yellow to green - Ready","prevState":"yellow","prevMsg":"Waiting for Elasticsearch"}

Я также могу перейти на панель управления Kibana на http://localhost:5601, а также на Elastic на http://localhost:9200 оба работают правильно

Затем я настроил filebeat:


    docker run --network=lognetwork docker.elastic.co/beats/filebeat:7.3.1 setup -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"]

Я вижу журналы контейнеров Elastic и Kibana и возвращаю 200. Журналы контейнера Filebeat показывают:


    Index setup finished.
    Loading dashboards (Kibana must be running and reachable)
    Loaded dashboards
    Loaded machine learning job configurations
    Loaded Ingest pipelines

Наконец, я беру конфигурацию по умолчанию с сайта Elastic, запускаю Filebeat и присоединяюсь к контейнеру.


    curl -L -O https://raw.githubusercontent.com/elastic/beats/7.3/deploy/docker/filebeat.docker.yml

    docker run -d --network=lognetwork  --name=filebeat   --user=root   --volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"   --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro"   --volume="/var/run/docker.sock:/var/run/docker.sock:ro"   docker.elastic.co/beats/filebeat:7.3.1 filebeat -e -strict.perms=false   -E output.elasticsearch.hosts=["elasticsearch:9200"]
    docker attach filebeat

Я вижу, как Filebeat отправляет импульс мониторинга, но когда это происходит, эластичные журналы не показывают ничего нового.

Для тестирования я запускаю Docker "hello-world", который генерирует несколько строк логов.


    docker run hello-world

Filebeat показывает следующий журнал


    2019-09-01T13:30:40.624Z        INFO    log/input.go:148        Configured paths: [/var/lib/docker/containers/460cc8c215ff69ecf28685c9cf89c0e56d0b3e4f680b8bf29beb5b570ebb7a14/*-json.log]
    2019-09-01T13:30:40.624Z        INFO    input/input.go:114      Starting input of type: container; ID: 16402101064670842079

Затем я перехожу к http://localhost:5601

Результаты:
Kibana не показывает журналов. Нажатие на «проверить новые данные» тоже ничего не показывает.

Папка / var / lib / docker / container также пуста. Путь, возвращаемый журналом filebeat (/ var / lib / docker / container / 460cc8c215ff69ecf28685c9cf89c0e56d0b3e4f680b8bf29beb5b570ebb7a14 /), похоже, не существует.

Ожидается:
- Kibana покажет журналы контейнера докеров "hello world"
- Чтобы просмотреть файл журнала в / var / lib / docker / container

Что мне не хватает?

Спасибо,
Оливье


person Olivierwa    schedule 01.09.2019    source источник


Ответы (1)


Что ж, мне потребовалось много часов, прежде чем я спросил о SO, и, конечно же, через 30 минут после того, как спросил, я нашел ответ.

Уловка заключалась в том, чтобы проверить, где были созданы журналы, поскольку запуск Docker-Desktop на WSL2 немного отличается от запуска Docker в Linux.

docker inspect filebeat | grep LogPath

возвращает:

"LogPath": "/var/data/docker-desktop/default/daemon-data/containers/fd56c5e43c9206baaadd33d3a711e523107622450d0deafb498e7940d809f779/fd56c5e43c9206baaadd33d3a711e523107622450d0deafb498e7940d809f779-json.log

Затем измените карту тома соответствующим образом volume = "/ var / data / docker-desktop / default / daemon-data / container: / var / lib / docker / container: ro" при запуске filebeat выполнило свою работу :

docker run -d --network=lognetwork  --name=filebeat   --user=root   --volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"   --volume="/var/data/docker-desktop/default/daemon-data/containers:/var/lib/docker/containers:ro"   --volume="/var/run/docker.sock:/var/run/docker.sock:ro"   docker.elastic.co/beats/filebeat:7.3.1 filebeat -e -strict.perms=false   -E output.elasticsearch.hosts=["elasticsearch:9200"]

Журналы теперь правильно отображаются на кибане.

person Olivierwa    schedule 01.09.2019