簡體   English   中英

Filebeat 容器不向 Elastic 發送日志

[英]Filebeat container does not send logs to Elastic

在通過“Windows 子系統 Linux 2”在 Windows 10 上運行 Ubuntu 18.04 的本地計算機上,我正在運行 Elastic 7.3、Kibana 7.3 和 Elastic 7.3 docker 容器。

設置成功,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:spaces@7.3.1","info"],"pid":6,"state":"green","message":"Status changed from yellow to green - Ready","prevState":"yellow","prevMsg":"Waiting for Elasticsearch"}

我也可以 go 到http://localhost:5601上的 Kibana 儀表板以及http://localhost:9200上的 Elastic 兩個 function

然后我設置了 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

我然后 go 到http://localhost:5601

結果
Kibana 不顯示任何日志。 單擊“檢查新數據”也不會顯示任何內容。

文件夾 /var/lib/docker/containers 也是空的。 filebeat log返回的路徑(/var/lib/docker/containers/460cc8c215ff69ecf28685c9cf89c0e56d0b3e4f680b8bf29beb5b570ebb7a14/)好像不存在。

預期
- Kibana 顯示“hello world”docker 容器日志
- 查看 /var/lib/docker/containers 下的日志文件

我錯過了什么?

謝謝你,
奧利維爾

好吧,我花了很多小時才提出SO,當然,問了我之后才找到答案了3000萬。

訣竅是檢查日志的創建位置,因為在WSL2上運行Docker-Desktop與在Linux上運行Docker略有不同。

docker inspect filebeat | grep LogPath

收益:

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

然后在啟動filebeat時相應地更改卷映射volume =“ / var / data / docker-desktop / default / daemon-data / containers:/ var / lib / docker / containers:ro”

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"]

現在,日志已正確顯示在kibana上

就我而言:

Docker 桌面安裝在 Windows 10 + WSL2 在 docker 中啟用。

  • 我試圖使用 file beat 來收集所有 docker 個容器的日志。
  • ELK + Filebeat 也作為 docker 個容器運行。

管道: Filebeat -> logstash -> elastic search -> kibana

問題:Filebeat 沒有找到來自 docker 的日志。但是它從本地安裝的文件夾向 ELK 發送日志並顯示在 kibana 中。

解決方案:我從 wsl bash shell 運行 docker-compose。相反,我從 windows powershell 或 cmd 運行相同的日志,並且來自 884065722228588 容器的日志開始出現在 kanaib 容器中

docker-compose文件中:

filebeat:
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - /var/lib/docker:/var/lib/docker
        - ./MYLOG_TEST:/usr/share/filebeat/mylog
        - ./MY_filebeat.yml:/usr/share/filebeat/filebeat.yml

MY_filebeat.yml中:

filebeat.inputs:
  #for docker logs
  - type: container # for older filestream version use docker as type
    enabled: true
    paths:
       - /var/lib/docker/containers/**/*.log

  #for my test log files
  - type: log # for filebeat latest versions8.1+, use filestream as type
    enabled: true
    paths:
      - /usr/share/filebeat/mylog/*.log

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM