通过配置日志驱动程序将 Docker 容器日志发送到 ELK Stack - 简单方法

Posted

技术标签:

【中文标题】通过配置日志驱动程序将 Docker 容器日志发送到 ELK Stack - 简单方法【英文标题】:Sending Docker container logs to ELK Stack by configuring the logging drivers - Easy Method 【发布时间】:2017-06-10 08:40:47 【问题描述】:

我通常将应用程序作为 docker 容器运行,因为它具有很高的灵活性和可用性。有没有办法让容器登录到我的 logstash 服务器。

【问题讨论】:

【参考方案1】:

Docker 包含多种日志记录机制,可帮助您通过日志记录驱动程序从正在运行的容器和服务中获取信息。

每个 Docker 守护程序都有一个默认的日志记录驱动程序,每个容器都会使用该驱动程序,除非您将其配置为使用不同的日志记录驱动程序。

您可以通过如下配置 Logstash 并通过将其默认日志驱动程序更改为 syslog 来运行要查看其日志的容器来简单地获取容器日志。

#logstash.conf

input 
  tcp 
    port => 5000
  


output 
  stdout 

下面两个命令会在logstash中显示hello-world容器的日志。

docker run -it --rm --name=logstash -p 5000:5000 -v /path/to/logstash.conf:/usr/share/logstash/config/logstash.yml docker.elastic.co/logstash/logstash:7.14.0

docker run --log-driver=syslog --log-opt syslog-address=tcp://<logstash-system-ip>:5000 hello-world

通过简单地将输出部分配置为,Logstash 的输出甚至可以发送到 elasticsearch,

  elasticsearch 

    hosts => ["<elastic-system-ip>:9200"]

  

访问https://docs.docker.com/engine/admin/logging/overview/

【讨论】:

运行logstash的命令不太好用。应该是这样的:docker run -it --rm --name logstash -p 5000:5000 -v /path/to/logstash.conf:/usr/share/logstash/pipeline/logstash.conf docker.elastic.co/logstash/logstash:7.14.0

以上是关于通过配置日志驱动程序将 Docker 容器日志发送到 ELK Stack - 简单方法的主要内容,如果未能解决你的问题,请参考以下文章

Docker 日志最佳实践

将日志输出到Docker容器外

对docker容器产生的日志做轮转

从 Docker 容器发送日志到 ELK 容器(没有 Filebeat)

Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)

Docker容器日志管理实践