ELK Stack

日期:

2017-12-11 11:00

标签:

日志记录、监控、运维

Launchpad 蓝图

日志文件分析是维护和排查 OpenStack 云的重要组成部分,但使用传统的单服务器方法来分析拥有数十、数百甚至数千个服务器的云上的日志可能会变得复杂且难以管理。通过利用 ELK(Elasticsearch [1]、Logstash [2] 和 Kibana [3])堆栈的搜索、关联和分析功能,我们可以提供所有日志文件的云级别视图。ELK 堆栈还能够关联来自各种服务的日志消息,执行详细的日志分析,并基于从日志消息中提取的指标进行趋势分析。

问题描述

对于部署者和运维人员来说,在各种 OpenStack、系统和辅助服务产生的众多日志文件中查找特定事件可能既繁琐又容易出错。使用传统工具,随着集群规模的扩大,遗漏关键日志条目的可能性也会增加。日志文件分析提供了关于 OpenStack 服务以及底层硬件状态的重要信息。目前,OpenStack-Ansible 没有提供用于详细日志分析、关联和趋势分析的工具。

提议的变更

利用日志/实用程序节点,我们在容器中安装 ELK 堆栈,日志从各个节点/容器使用 Filebeat 包发送。使用 Filebeat 执行初始日志发送,允许我们执行初始的多行解析,将负载从单个 Logstash 容器分发出去。ELK 包的版本要求将在 ELK 角色中维护,除非安全修复,否则这些包的主要版本在 Openstack 的发布周期内不应更改。ELK 角色通过 Ansible Galaxy 引用特定的 SHA 来使用。

显著变更
  • 在日志/实用程序节点上创建 3 个容器,分别为 Elasticsearch、Logstash 和 Kibana。(如果需要,可以创建额外的容器以促进高可用性。)

  • 在所有节点/容器上安装 Filebeat 包

  • ELK 和 Filebeats galaxy 角色 SHA 添加到 ansible-requirements.yml

备选方案

日志当前被发送到日志/实用程序服务器上的集中式 rsyslog-server 容器,从而可以使用命令行实用程序进行某种集中的日志解析。还有其他第三方解决方案,具有不同层级的成本、采用率和支持。

Playbook/Role 影响

所需的更改位于独立的 playbook 中。需要为 Logstash、Kibana 和 Filebeat 创建额外的角色,elastic.co 维护的 ansible-elasticsearch` [4] 提供了 Elasticsearch。配置可以是独立的,也可以集成到 user-variables.ymluser-secrets.yml 文件中。

升级影响

由于这是初始实现,因此没有升级影响。未来的版本将需要升级计划,因为升级 ELK 包、OpenJDK 包甚至 Elasticsearch 数据库本身可能是必要的。

安全影响

此软件提供基于 Web 的前端以及对其中包含的 Openstack、服务和系统日志中任何信息的 API 访问。因此,它只需要对经过身份验证的用户可见。所有访问都可以通过应用于任何标准 Web 服务的传统加固来保护,即 TLS 和身份验证机制。此外,由于 ELK 堆栈位于 VIP 后面,我们可以通过许多 ACL 限制对某些 IP 和/或网络的访问。

默认情况下,日志以明文形式发送,但是,如果需要,可以启用此传输上的 SSL 加密。

性能影响

基于测试和实际分析,最大的性能影响将出现在日志/实用程序服务器上。由于该设备的原始意图是执行日志处理,因此这是预期的且不寻常。在每个节点/容器中运行的 filebeat 服务显示出可以忽略不计的性能影响,但某些最佳实践,例如限制日志级别并在日志中消除堆栈跟踪,将有助于保持轻量级的足迹。Filebeat 不应影响 Openstack 服务的运行,因为它只是一个日志文件处理器/发送器,尽管如果繁忙服务的调试日志记录已启用,网络利用率可能会成为一个问题。

Elastic.co 是所有软件的维护者,除了 Java,它由 Oracle 公司维护。这两个实体都提供企业软件,因此遵循严格的发布计划并为其软件提供可靠的上游存储库。

最终用户影响

最终用户不应注意到此工作带来的变化。这主要面向部署者和运维人员。此更改使运维团队能够更深入地了解环境,并有望促进更高效和稳定的部署。

部署者影响

ELK 堆栈是一个可选组件,不直接与任何 Openstack 服务交互。所有 ELK 包都通过 apt/yum 存储库提供。需要为 kibana 用户创建额外的密钥。Filebeat 包将安装在所有容器和所有节点中,但它非常轻量级,配置存储在 /etc/filebeat 中。Java 是 ELK 所必需的,因此部署者选择的 openjdk(默认)或 JDK 实现需要在日志/实用程序节点上的三个容器中安装。

开发人员影响

对于开发人员来说,这应该是一个最小的更改,他们需要记住的一件事是,如果添加了额外的日志文件,则需要将它们添加到 filebeat 配置中,这可以通过使用新日志重新运行 filebeat playbook 来处理。

依赖项

没有依赖关系。

实现

负责人

主要负责人

David Wilde (d34dh0r53)

工作项

  1. 在 openstack-ansible 中创建 ELK 和 filebeats 角色,这些角色将足够通用,可以发布到 ansible-galaxy,以便 Ansible 社区可以广泛使用。

  2. 创建 playbook(s) 来安装 ELK 堆栈和 filebeats,这些 playbook 将安装 OpenStack 特定的配置和解析文件。

  3. 创建堆栈的测试程序

  4. 文档

测试

ELK 堆栈应在每次提交时进行测试,以确保服务启动并且日志正在流入系统并正确解析。可以通过将一行注入到服务的日志文件中,然后使用 curl 通过 elasticsearch API 验证该行是否已使用预期的字段正确插入到数据库中来实现。

文档影响

除了常规安装程序和配置之外,关键的文档点将是

  • Filebeats 解析规则

  • Logstash 解析规则

  • Kibana 仪表板配置

  • 默认 Kibana 仪表板

  • ELK 堆栈的性能影响和调整

参考资料