目录
1.10.添加其他流行资源(Adding Other Popular Sources)
1.16.弹性和恢复(Resiliency and Recovery)
1.部署和扩展Logstash(Deploying and Scaling Logstash)
从操作日志和指标分析到企业和应用程序搜索,Elastic Stack可用于大量用例。能够确保将数据可扩展的,持久的和安全的传输到Elasticsearch是至关重要,尤其是对于关键任务环境。
本文档的目的是重点介绍Logstash的最常见体系结构模式,以及如何随着部署的增长而有效地扩展。重点将放在操作日志,指标和安全性分析用例上,因为它们往往需要更大规模的部署。根据您自己的要求,此处提供的部署和扩展建议可能会有所不同
1.1.入门指南
对于初次使用的用户,如果您只是想尾随日志文件以掌握Elastic Stack的功能,我们建议您尝试使用Filebeat Modules。Filebeat模块使您能够在几分钟内快速收集,解析和索引常用日志类型,并查看预建的Kibana仪表板(dashboards )。Metricbeat模块提供类似的体验,但带有度量标准数据。 在这种情况下,Beats会将数据直接传送到Elasticsearch,在其中摄取节点(Ingest Nodes)将处理和索引您的数据。
1.2.介绍Logstash
将Logstash集成到您的体系结构中的主要好处是什么?
- 通过摄取高峰扩展-Logstash具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻背压
- 从其他数据源(例如数据库,S3或消息传递队列)中提取数据
- 将数据发送到多个目的地,例如S3,HDFS或写入文件
- 使用条件数据流逻辑组成更复杂的处理管道
1.3.缩放摄取(Scaling Ingest)
Beats和Logstash使摄取变得很棒。 它们共同提供了可扩展且具有弹性的全面解决方案。 您能期待什么?
- 水平可扩展性,高可用性和可变负载处理
- 消息持久性与至少一次交付保证
- 具有身份验证和有线加密的端到端安全传输
1.4.Beats与Logstash
Beats运行在数千台边缘主机服务器上,将日志收集,拖尾和运送到Logstash。Logstash用作集中式流引擎,用于数据统一和扩充。Beats输入插件(Beats input plugin)为Beats公开了一个基于确认的安全终结点,以将数据发送到Logstash。
强烈建议启用持久队列,并且这些体系结构特征假定已启用它们。 我们建议您查看Persistent Queues文档,以了解功能优势以及弹性的更多详细信息。
1.5.可扩展性(Scalability)
Logstash是水平可伸缩的,可以形成运行同一管道的节点组。Logstash的自适应缓冲功能即使在吞吐量变化不定的情况下,也可以促进流畅的流传输。如果Logstash层成为摄取瓶颈,则只需添加更多节点即可进行横向扩展。
以下是一些一般性建议:
- Beats应该在一组Logstash节点之间实现负载平衡。
- 建议至少使用两个Logstash节点以实现高可用性。
- 通常每个Logstash节点仅部署一个Beats输入,但是也可以为每个Logstash节点部署多个Beats输入,以公开用于不同数据源的独立端点。
1.6.弹性(Resiliency)
在此摄取流中使用Filebeat或Winlogbeat进行日志收集时,可以保证至少一次交付。 从Filebeat或Winlogbeat到Logstash以及从Logstash到Elasticsearch的两种通信协议都是同步的,并且支持确认。 其他Beats尚不支持确认。
Logstash持久队列提供跨节点故障的保护。 对于Logstash中的磁盘级弹性,确保磁盘冗余很重要。 对于本地部署,建议您配置RAID。 在云端或容器化环境中运行时,建议您使用具有可反映数据SLA的复制策略的永久磁盘。
确保queue.checkpoint.writes: 1设置至少保证一次。 有关更多详细信息,请参阅持久性队列持久性文档(persistent queue durability)。
1.7.处理(Processing)
Logstash通常将提取带有grok 或 dissect的字段,增强地理信息( geographical),并可以使用文件,数据库或Elasticsearch(file, database, , Elasticsearch)查找数据集进一步丰富事件。 请注意,处理复杂性会影响整体吞吐量和CPU利用率。 确保检查其他可用的过滤器插件(available filter plugins.)。
1.8.安全传输(Secure Transport)
在整个交付链中都可以使用企业级安全性。
Beats to Logstash以及Logstash to Elasticsearch的传输都建议使用有线加密。
与Elasticsearch进行通讯时,有很多安全选项,包括基本身份验证,TLS,PKI,LDAP,AD和其他自定义领域。 要启用Elasticsearch安全性,请参阅Securing the Elastic Stack.
1.9.监控方式(Monitoring)
在运行Logstash 5.2或更高版本时,Monitoring UI可以深入了解您的部署指标,帮助您观察性能并在扩展时缓解瓶颈。 监视是基本许可证下的X-Pack功能,因此可以免费使用。 首先,请参阅Monitoring Logstash。
如果首选外部监视,则有些 Monitoring APIs会返回时间点指标快照。
1.10.添加其他流行资源(Adding Other Popular Sources)
用户可能还有其他收集日志数据的机制,可以很容易地将它们集成并集中到Elastic Stack中。 让我们看一下几种情况:
1.11.TCP,UDP和HTTP协议
TCP,UDP和HTTP协议是将数据输入Logstash的常用方法。 Logstash可以使用相应的TCP,UDP和HTTP输入插件公开端点侦听器。 下面列举的数据源通常是通过这三种协议之一来提取的。
TCP协议不支持应用程序级别的确认,因此连接问题可能会导致数据丢失。
对于高可用性方案,应添加第三方硬件或软件负载平衡器(例如HAProxy),以将流量散发到一组Logstash节点。
1.12.网络和安全数据
尽管Beats可能已经满足了您的数据提取用例,但网络和安全性数据集却以多种形式出现。 让我们来谈谈其他一些摄取要点。
- 网络线路数据-使用 Packetbeat收集和分析网络流量。
- Netflow v5 / v9 / v10-Logstash可以使用Netflow codec理解来自Netflow / IPFIX导出程序的数据。
- Nmap-Logstash使用Nmap codec接受并解析Nmap XML数据。
- SNMP陷阱-Logstash具有本机SNMP陷阱输入。
- CEF-Logstash使用 CEF codec从Arcsight SmartConnectors等系统接收并解析CEF数据。 有关更多详细信息,请参阅此博客系列(blog series)。
1.13.集中式系统日志服务器
现有的syslog服务器技术(例如rsyslog和syslog-ng)通常将syslog发送到Logstash TCP或UDP端点,以进行提取,处理和持久化。 如果数据格式符合RFC3164,则可以将其直接输入到Logstash syslog input中。
1.14.基础设施与应用数据和物联网
可以使用Metricbeat收集基础结构和应用程序指标,但是应用程序还可以将Webhooks发送到Logstash HTTP输入,或者使用HTTP poller input plugin从HTTP端点轮询指标。
对于使用log4j2登录的应用程序,建议使用SocketAppender将JSON发送到Logstash TCP输入。 另外,log4j2也可以登录到文件以通过FIlebeat进行收集。 不建议使用log4j1 SocketAppender。
诸如Raspberry Pi,智能手机和联网车辆之类的IoT设备通常通过以下协议之一发送遥测数据。
1.15.集成消息传递队列
如果您将消息队列技术用作现有基础架构的一部分,那么将数据放入弹性堆栈很容易。 对于使用Redis或RabbitMQ等外部排队层仅通过Logstash进行数据缓冲的现有用户,建议使用Logstash持久队列而不是外部排队层。 通过消除摄取架构中不必要的复杂性,这将有助于总体上简化管理。
对于想要从现有Kafka部署中集成数据或需要临时使用基础存储的用户,Kafka可以充当Beats可以持久存在且Logstash节点可以使用的数据中心。
其他TCP,UDP和HTTP源可以使用Logstash作为管道来持久存在Kafka,以代替负载平衡器来实现高可用性。 然后,一组Logstash节点可以使用 Kafka input 从主题中进行消费,以进一步转换和丰富正在传输的数据。
1.16.弹性和恢复(Resiliency and Recovery)
当Logstash从Kafka消耗时,应启用持久队列,并将添加传输弹性,以减轻Logstash节点故障期间进行重新处理的需要。 在这种情况下,建议使用默认的持久队列磁盘分配大小 queue.max_bytes: 1GB。
如果将Kafka配置为保留较长时间的数据,则在灾难恢复和调和的情况下,可以从Kafka重新处理数据。
1.17.其他消息队列集成
尽管不需要额外的排队层,但Logstash可以使用无数其他消息排队技术,例如RabbitMQ和Redis。 它还支持从诸如 Pub/Sub, Kinesis和 SQS的托管排队服务中提取。