使用 ELK 进行日志管理

从群集节点管理系统和应用程序日志

本文档涵盖和不涵盖的内容

本文档介绍了如何将 Filebeat 输出从每个节点发送到集中式 Elasticsearch 实例。本文档介绍如何从 Filebeat 直接传输到 Elasticsearch。此架构中没有使用 Logstash。如果您有兴趣筛选、解析和了解处于中间 Logstash 阶段的日志,请参阅 Logstash 文档 以及 中的示例。

本文档未介绍如何设置和配置 Elasticsearch 服务器。本文档未介绍如何在 Filebeat 实例和 Elasticsearch 之间建立安全的 TLS 通信。有关如何实现此操作的详细信息,请参阅 Filebeat 和 文档。

前提条件

  • 现有 Elasticsearch 装置可以消化数据用于索引
  • 所有 DC/OS 节点都必须能够连接到用于在 Elasticsearch 和 Filebeat 之间通信的端口上的 Elasticsearch 服务器(默认情况下为 9200)

对于 DC/OS 群集中的所有节点:

  1. 安装 Elastic 的 Filebeat

    1. sudo mkdir -p /var/log/dcos
  2. 填充新的 filebeat.yml 配置文件,包括文件的附加输入条目 /var/log/dcos/dcos.log。附加日志文件将用于在后续步骤中捕获 DC/OS 日志。记住用下面的变量 $ELK_HOSTNAME$ELK_PORT 替代 Elasticsearch 正在侦听的主机和端口的实际值。

    1. filebeat.prospectors:
    2. - input_type: log
    3. paths:
    4. - /var/lib/mesos/slave/slaves/*/frameworks/*/executors/*/runs/latest/stdout*
    5. - /var/lib/mesos/slave/slaves/*/frameworks/*/executors/*/runs/latest/stderr*
    6. - /var/log/mesos/*.log
    7. - /var/log/dcos/dcos.log
    8. exclude_files: ["stdout.logrotate.state", "stdout.logrotate.conf", "stderr.logrotate.state", "stderr.logrotate.conf"]
    9. output.elasticsearch:
    10. hosts: ["$ELK_HOSTNAME:$ELK_PORT"]

对于 DC/OS 群集中的所有节点:

  1. 创建脚本 /etc/systemd/system/dcos-journalctl-filebeat.service,该脚本可解析 DC/OS 管理节点 journalctl 日志的输出并将其输送到 /var/log/dcos/dcos.log

    此脚本可配合 DC/OS 和 Enterprise DC/OS 使用。不适用的日志条目将被忽略。

ELK 堆栈将接收、存储、搜索和显示有关以上为群集中所有节点配置的 Filebeat 实例所解析的日志的信息。

本文档介绍如何从 Filebeat 直接传输到 Elasticsearch。此架构中没有使用 Logstash。如果您有兴趣筛选、剖析和了解处于中间 Logstash 阶段的日志,请参阅 Logstash 。

您必须修改默认参数值才能让 Elasticsearch 准备好接收信息。例如,编辑 Elasticsearch 配置文件(通常为 /etc/elasticsearch/elasticsearch.yml):

文件中的其他参数超出本文档的范围。有关详细信息,请查看 Elasticsearch 文档

应在所有节点上配置日志轮换,以防止文件 /var/log/dcos/dcos.log 无限制地增大和装满磁盘空间。 logrotate 配置应包含 copytruncate,因为 journalctl 管道保持打开状态,即使在轮换后仍然指向同一个文件。 使用 copytruncate 时,复制文件和将其截断之间的窗口很小,因此某些记录数据可能丢失 - 应该平衡装满磁盘和丢失某些日志之间的利弊。

  1. /var/log/dcos/dcos.log {
  2. size 100M
  3. copytruncate
  4. rotate 5
  5. compress
  6. }

后续步骤

有关如何使用 ELK 筛选日志的详细信息,请参阅 。