gpt4 book ai didi

使用 Filebeat 和 Logstash 记录 Docker 应用程序

转载 作者:IT老高 更新时间:2023-10-28 12:38:26 25 4
gpt4 key购买 nike

我有一组分散在多个服务器上的 dockerized 应用程序,并尝试使用 ELK 设置生产级集中日志记录。我对 ELK 部分本身没意见,但我对如何将日志转发到我的日志存储区有点困惑。我正在尝试使用 Filebeat,因为它具有负载平衡功能。我还想避免将 Filebeat(或其他任何东西)打包到我所有的 docker 中,并保持分开,不管是否 docker 化。

我该如何继续?

我一直在尝试以下方法。我的 Docker 登录标准输出,因此我使用配置为从标准输入读取的非 dockerized Filebeat:

docker logs -f mycontainer | ./filebeat -e -c filebeat.yml

这似乎在一开始就有效。第一个日志被转发到我的logstash。我猜是缓存的。但在某些时候它会卡住并继续发送相同的事件

这只是一个错误还是我走错了方向?你设置了什么解决方案?

最佳答案

这是将 docker 日志 转发到 ELK 堆栈的一种方法(gelf 日志驱动程序需要 docker >= 1.8):

  1. 使用 gelf input plugin 启动 Logstash 容器从 gelf 读取并输出到 Elasticsearch 主机 (ES_HOST:port):

    docker run --rm -p 12201:12201/udp logstash \
    logstash -e 'input { gelf { } } output { elasticsearch { hosts => ["ES_HOST:PORT"] } }'
  2. 现在启动一个 Docker 容器并使用 gelf Docker logging driver .这是一个愚蠢的例子:

    docker run --log-driver=gelf --log-opt gelf-address=udp://localhost:12201 busybox \
    /bin/sh -c 'while true; do echo "Hello $(date)"; sleep 1; done'
  3. 加载 Kibana,本应登陆 docker logs 的内容现在可见。 gelf source code显示为您生成了一些方便的字段(帽子提示:Christophe Labouisse):_container_id_container_name_image_id_image_name _command_tag_created

如果您使用 docker-compose(确保使用 docker-compose >= 1.5)并在启动 logstash 容器后在 docker-compose.yml 中添加适当的设置:

log_driver: "gelf"
log_opt:
gelf-address: "udp://localhost:12201"

关于使用 Filebeat 和 Logstash 记录 Docker 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33432983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com