清一下草稿箱库存


译自:Docker Logging with the ELK Stack - Part One
译者:临书
注:有删改

这篇文章是《使用 ELK 技术栈进行 Docker 日志处理》系列文章第 1 部分。(共两部分)

在本部分中,我将介绍如何配置从 Docker 容器到 ELK 技术栈(Elasticsearch,Logstash 和 Kibana)日志管道的基本步骤。

第 2 部分将描述使用 ELK 记录 Docker 日志后的下一步 - 分析和可视化日志。


了解管道

一个典型的 Docker 化服务的 ELK 管道大概是下面这样:

Logstash 从各种 Docker 容器和主机中提取日志,它是 ELK 技术栈的主力,它应用过滤器来更好地解析日志。Logstash 将日志转发到 Elasticsearch 进行索引,Kibana 分析并可视化数据。

当然,这条管道并不一成不变。例如,您可以使用其他日志收集器(如 Fluentd 或 Filebeat)将日志发送到 Elasticsearch。或者,您可以添加一个由 Kafka 或 Redis 容器组成的附加层,以充当 Logstash 和 Elasticsearch 之间的缓冲区。

那么,如何建立这条管道呢?

安装 ELK Stack

有很多种方法可以将 ELK 与 Docker 环境集成起来。您可以在本地或远程计算机上安装 ELK Stack - 或直接 Docker 化不同的组件。

关于在 Docker 上部署 ELK 是否是生产环境的可行解决方案(资源消耗和网络是主要问题)仍然存在很多争议,但它绝对是一种饱含成本效益的方法。

ELK Docker 镜像建议用这个:docker-elk,它具有丰富的运行选项(所以您可以使用标签来组合不同的版本),还有优秀的文档,并且它的版本和 Elasticsearch,Logstash 和 Kibana 保持同步。

在安装前,确保一下端口打开:

  • 5601(Kibana)
  • 9200(Elasticsearch)
  • 5044(Logstash)

还有,确保 vm_maxmap_count 内核配置至少为 262144:

1
sudo sysctl -w vm.max_map_count=262144

启动 ELK Stack:

1
git clone https://github.com/deviantony/docker-elk.git cd docker-elk docker-compose up

默认会启动所有 ELK 服务(Elasticsearch,Logstash,Kibana)

1
sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 73aedc3939ad dockerelk_kibana "/bin/sh -c /usr/l..." 7 minutes ago Up 6 minutes 0.0.0.0:5601->5601/tcp dockerelk_kibana_1 b684045be3d6 dockerelk_logstash "logstash -f /usr/..." 7 minutes ago Up 6 minutes 0.0.0.0:5000->5000/tcp dockerelk_logstash_1 a5778b8e4e6a dockerelk_elasticsearch "/bin/bash bin/es-..." 7 minutes ago Up 7 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp dockerelk_elasticsearch_1

验证安装

为了确保一切都按预期工作,请执行以下操作:

你应该看到如下返回:

1
{ "name" : "KTKkcZ5", "cluster_name" : "docker-cluster", "cluster_uuid" : "hRdf38FrR7C3yflqCp0D9A", "version" : { "number" : "6.4.0", "build_flavor" : "oss", "build_type" : "tar", "build_hash" : "595516e", "build_date" : "2018-08-17T23:18:47.308994Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }

打开 Kibana(http://[serverIP]:5601)

如您所见,需要输入索引模式,只有在索引某些日志后才能进行索引模式。 我们稍后会谈到这个。

安装 ELK Stack 很简单。将 Docker 日志送入 ELK 就有点复杂了,您使用的方法在很大程度上取决于您输出日志的方式。

如果没有显式指定,特定容器的 stdout 和 stderr (称为docker logs)将输出到JSON文件。 因此,如果您设置了一个小的 Docker 环境,那么使用Filebeat来收集日志是可行的方法。 但是,如果您使用的是其他日志驱动,则可能需要考虑其他方法。

以下是将日志导入 ELK 的三种不同方法。

使用 Filebeat

Filebeat 属于 Elastic 的 Beats 日志转运插件系列。Filebeat 是 Go 写的,它是一个轻量级转运插件,可以跟踪特定文件,支持加密,并且可以配置为导出到 Logstash 容器或直接导出到 Elasticsearch。

如上所述,如果您使用默认的 JSON 文件日志记录驱动程序,Filebeat 是一种相对简单的方式发送到 ELK。 Filebeat 可以部署在您的主机上,或者您当然可以将其作为容器与 ELK 容器一起运行(在这种情况下,您需要添加到ELK容器的链接)。 还有各种 Filebeat Docker 映像可用,其中一些包括运行 Filebeat 并将其连接到 Logstash 的配置。

至少,您的 Filebeat 配置需要指定 JSON 日志文件的路径(位于:/ var/lib/docker/containers /...)和目标的详细信息(通常是 Logstash 容器)

示例配置:

1
prospectors: - paths: - /var/lib/docker/containers/*/*.log document_type: syslog output: logstash: enabled: true hosts: - elk:5044