部署和扩展 Logstash

编辑

部署和扩展 Logstash

编辑

Elastic Stack 用于大量的用例,从操作日志和指标分析,到企业和应用程序搜索。确保您的数据能够可扩展、持久且安全地传输到 Elasticsearch 至关重要,尤其是在关键任务环境中。

本文档的目标是重点介绍 Logstash 最常见的架构模式,以及如何随着部署规模的增长有效地进行扩展。重点将围绕操作日志、指标和安全分析用例,因为它们往往需要更大规模的部署。此处提供的部署和扩展建议可能因您自己的要求而异。

入门指南

编辑

对于首次使用的用户,如果您只是想跟踪日志文件以掌握 Elastic Stack 的强大功能,我们建议尝试 Filebeat 模块。Filebeat 模块使您能够在几分钟内快速收集、解析和索引流行的日志类型,并查看预构建的 Kibana 仪表板。Metricbeat 模块提供了类似的体验,但使用的是指标数据。在这种情况下,Beats 会将数据直接发送到 Elasticsearch,其中 Ingest 节点将处理和索引您的数据。

deploy1

Logstash 简介

编辑

将 Logstash 集成到您的架构中的主要好处是什么?

  • 通过摄取峰值进行扩展 - Logstash 具有自适应的基于磁盘的缓冲系统,可以吸收传入的吞吐量,从而缓解反压
  • 从数据库、S3 或消息队列等其他数据源摄取
  • 将数据发送到 S3、HDFS 等多个目标位置,或写入文件
  • 使用条件数据流逻辑组成更复杂的处理管道

扩展摄取

编辑

Beats 和 Logstash 使摄取变得非常出色。它们共同提供了一个可扩展且有弹性的全面解决方案。您可以期待什么?

  • 水平可扩展性、高可用性和可变负载处理
  • 具有至少一次交付保证的消息持久性
  • 具有身份验证和线路加密的端到端安全传输

Beats 和 Logstash

编辑

Beats 在数千个边缘主机服务器上运行,收集、跟踪和将日志发送到 Logstash。Logstash 用作数据统一和丰富化的集中式流式引擎。Beats 输入插件公开了一个安全的、基于确认的端点,供 Beats 将数据发送到 Logstash。

deploy2

强烈建议启用持久队列,并且这些架构特性假设已启用它们。我们鼓励您查看 持久队列 (PQ) 文档,了解功能优势和有关弹性的更多详细信息。

可扩展性

编辑

Logstash 是水平可扩展的,可以形成运行相同管道的节点组。Logstash 的自适应缓冲功能即使在可变的吞吐量负载下也能促进平稳的流式传输。如果 Logstash 层成为摄取瓶颈,只需添加更多节点即可横向扩展。以下是一些一般建议

  • Beats 应该在 Logstash 节点组之间负载均衡
  • 建议至少使用两个 Logstash 节点以实现高可用性。
  • 通常每个 Logstash 节点只部署一个 Beats 输入,但是也可以在每个 Logstash 节点上部署多个 Beats 输入,以便为不同的数据源公开独立的端点。

弹性

编辑

当在此摄取流程中使用 FilebeatWinlogbeat 进行日志收集时,保证 至少一次交付。从 Filebeat 或 Winlogbeat 到 Logstash,以及从 Logstash 到 Elasticsearch 的通信协议都是同步的,并支持确认。其他 Beats 尚不支持确认。

Logstash 持久队列提供对节点故障的保护。对于 Logstash 中的磁盘级弹性,确保磁盘冗余非常重要。对于本地部署,建议您配置 RAID。在云端或容器化环境中运行时,建议您使用持久磁盘和反映您的数据 SLA 的复制策略。

确保将 queue.checkpoint.writes: 1 设置为至少一次保证。有关更多详细信息,请参阅 持久队列持久性 文档。

处理

编辑

Logstash 通常会使用 grokdissect 提取字段,增强地理信息,并可以使用 文件数据库Elasticsearch 查找数据集进一步丰富事件。请注意,处理复杂性会影响整体吞吐量和 CPU 利用率。请务必查看其他可用的过滤器插件

安全传输

编辑

企业级安全性在整个交付链中都可用。

  • 建议对从 Beats 到 Logstash 以及从 Logstash 到 Elasticsearch 的传输进行线路加密。
  • 与 Elasticsearch 通信时,有很多安全选项,包括基本身份验证、TLS、PKI、LDAP、AD 和其他自定义领域。要启用 Elasticsearch 安全性,请参阅保护集群

监控

编辑

当运行 Logstash 5.2 或更高版本时,监控 UI 提供对您的部署指标的深入可见性,帮助您观察性能并在扩展时缓解瓶颈。监控是基本许可证下的 X-Pack 功能,因此可以 免费使用。要开始使用,请参阅 监控 Logstash

如果首选外部监控,则可以使用 监控 API 返回时间点指标快照。

添加其他常用来源

编辑

用户可能拥有其他收集日志数据的方法,并且可以轻松地将其集成并集中到 Elastic Stack 中。让我们来看几个场景

deploy3

TCP、UDP 和 HTTP 协议

编辑

TCP、UDP 和 HTTP 协议是将数据馈送到 Logstash 的常用方法。Logstash 可以使用相应的 TCPUDPHTTP 输入插件公开端点侦听器。下面列出的数据源通常通过这三种协议之一进行摄取。

TCP 和 UDP 协议不支持应用程序级别的确认,因此连接问题可能会导致数据丢失。

对于高可用性场景,应添加第三方硬件或软件负载均衡器(如 HAProxy)以将流量分散到一组 Logstash 节点。

网络和安全数据

编辑

尽管 Beats 可能已经满足您的数据摄取用例,但网络和安全数据集有多种形式。让我们探讨其他几个摄取点。

  • 网络线路数据 - 使用 Packetbeat 收集和分析网络流量。
  • Netflow v5/v9/v10 - Logstash 使用 Netflow 编解码器 理解来自 Netflow/IPFIX 导出器的数据。
  • Nmap - Logstash 使用 Nmap 编解码器 接受并解析 Nmap XML 数据。
  • SNMP 陷阱 - Logstash 具有原生的 SNMP 陷阱输入
  • CEF - Logstash 使用 CEF 编解码器 接受和解析来自 Arcsight SmartConnectors 等系统的 CEF 数据。有关更多详细信息,请参阅此 博客系列

集中式 Syslog 服务器

编辑

现有的 syslog 服务器技术(如 rsyslog 和 syslog-ng)通常通过 Logstash TCP 或 UDP 端点发送 syslog,以进行提取、处理和持久化。如果数据格式符合 RFC3164,则可以将其直接馈送到 Logstash syslog 输入

基础设施和应用程序数据以及 IoT

编辑

可以使用 Metricbeat 收集基础设施和应用程序指标,但是应用程序也可以将 Webhook 发送到 Logstash HTTP 输入,或者使用 HTTP poller 输入插件 从 HTTP 端点轮询指标。

对于使用 log4j2 记录日志的应用程序,建议使用 SocketAppender 将 JSON 发送到 Logstash TCP 输入。或者,log4j2 也可以记录到文件中以供 FIlebeat 收集。不建议使用 log4j1 SocketAppender。

Raspberry Pis、智能手机和联网车辆等 IoT 设备通常通过这些协议之一发送遥测数据。

与消息队列集成

编辑

如果您正在利用消息队列技术作为现有基础设施的一部分,那么将这些数据导入 Elastic Stack 非常容易。对于仅将 Redis 或 RabbitMQ 等外部队列层用于 Logstash 数据缓冲的现有用户,建议使用 Logstash 持久队列而不是外部队列层。这将通过删除摄取架构中不必要的复杂性层来帮助提高整体管理便利性。

对于想要集成来自现有 Kafka 部署的数据或需要使用临时存储的用户,Kafka 可以充当数据中心,Beats 可以将数据持久化到其中,而 Logstash 节点可以从中进行消费。

deploy4

其他 TCP、UDP 和 HTTP 源可以使用 Logstash 作为管道持久化到 Kafka,以便在没有负载均衡器的情况下实现高可用性。一组 Logstash 节点可以使用 Kafka 输入 从主题中进行消费,以进一步转换和丰富传输中的数据。

弹性和恢复

编辑

当 Logstash 从 Kafka 消费时,应启用持久队列,这将增加传输弹性,以缓解 Logstash 节点故障期间重新处理的需要。在这种情况下,建议使用默认的持久队列磁盘分配大小 queue.max_bytes: 1GB

如果 Kafka 配置为长时间保留数据,则可以在发生灾难恢复和数据对账的情况下,从 Kafka 重新处理数据。

其他消息队列集成

编辑

虽然不需要额外的队列层,但 Logstash 可以从各种其他消息队列技术(如RabbitMQRedis)中消费数据。它还支持从托管队列服务(如Pub/SubKinesisSQS)中摄取数据。