APP下载

基于ELKB日志管理系统的应用

2024-02-28郭翠娟李思佳

科学技术与工程 2024年3期
关键词:分片采集器日志

郭翠娟, 李思佳

(1.天津工业大学,天津市光电检测技术与系统重点实验室, 天津 300387;2.天津工业大学电子与信息工程学院, 天津 300387)

近年来,云平台应用范围越来越广泛,连接的设备节点众多[1-2],使得平台产生的数据量呈爆发式增长。当云平台监测到异常事件时,很难及时对故障进行排查,使得云平台的运维工作面临很大的挑战。日志将平台运行的所有重要事件及时用文本的形式记录下来,充分利用日志信息,方便进行性能监控、故障诊断、系统运维等工作[3]。因此,日志成为云平台安全问题管理的重要依据。现阶段,云平台日志数据源广泛,存储结构复杂,且对日志分析实时性要求较高[4]。原始的人工查询和处理方式无法满足实时性的需求,导致日志分析效率低下。

随着实时分析技术的发展,各种日志管理工具相继出现。例如,企业级日志分析软件Splunk、Apache公司旗下的Flume系统[5],以及开源的日志管理组件ELK(数据搜索引擎Elasticsearch[6]、日志收集器Logstash以及可视化平台Kibana三个开源工具名称的缩写)。相比较其他日志管理工具,ELK具备轻部署的特点,胜任于在海量数据中高效检索数据,Logstash采集器提供数据采集过滤功能,Elasticsearch满足海量数据的存储需求,Kibana支持用户定制个性化日志分析图表。因此,ELK广泛应用于实时日志分析监控和故障监测等相关领域。

文献[7]使用ELK工具实时收集系统日志,并筛选与故障相关的日志数据在深度学习框架中进行模型训练,最后达到对系统故障实时预测的目标。文献[8]介绍了利用ELK框架、大数据Kafka技术和数据流引擎Flink技术设计并实现了一个实时的海量日志分析系统,并针对物联网平台时序日志提出一种深度学习方法来诊断平台异常事件。文献[9]通过Logstash采集器收集各个节点的日志数据,并统一进行过滤和预处理。为提高校园网平台日志数据的存储和查询性能,采用Elasticsearch分布式架构实现对日志的存储和检索,最后通过Kibana可视化平台进行日志的分析。文献[10]研究使用Elasticsearch进行数据仓库和地理传感器数据的分析,提出一种在Elasticsearch中实现和查询多维模型的方法,并通过大量实验对比其查询性能。以上应用场景中ELK系统表现出良好的分析效果,但ELK中重量级采集器Logstash在性能方面存在消耗资源较大的问题。文献[11]针对Logstash采集器在CPU和内存资源方面有较大压力的问题,提出采用轻量级采集器Beats来替代Logstash进行日志采集,并讨论了Logstash解析日志的规则与方法,实现了日志采集的分析监控系统。文献[12]为了提高智慧管廊云平台的日志管理效率,分别使用Beats中的轻量级采集器Filebeat和Metricbeat进行日志文件和服务器性能数据的收集,实现了对服务器性能的监测,降低了系统的资源占用率。Filebeat是轻量级日志采集器,但在应用部署时,由于配置不合理或是无差异化的默认配置,也会造成非预期情况下资源耗尽的问题,导致平台其他服务无法正常运行。Elasticsearch作为ELK系统的核心模块,优化Elasticsearch节点的配置,可以使其获得更优的查询和检索性能。

基于云平台应用场景,为了解决Logstash的性能消耗问题,同时为减少数据传输环节和部署复杂度,在ELK架构基础上使用轻量级采集器Filebeat取代Logstash实现日志收集功能,并提出调整采集器Filebeat基础参数的方法。日志存储过程部署Elasticsearch集群模式,并总结提出Elasticsearch节点的性能提高方法,在此基础上通过Kibana可视化平台搭建日志管理系统,以支撑云平台日志运维和性能监控的工作。

1 基于ELKB的日志管理系统

1.1 日志管理系统的整体结构

一个完整的日志管理系统主要包括日志采集模块,日志存储模块以及日志可视化模块三个部分。基础的ELK架构中,Logstash将搜集到的非结构化日志按照规则解析之后输出至Elasticsearch。作为存储和检索日志的中央系统,Elasticsearch一方面接收日志采集模块传来的日志数据,另一方面配合Kibana完成日志可视化工作。由于Logstash既负责日志采集工作,又要完成日志解析的任务,使其消耗了极大的系统CPU和内存资源。相比Logstash采集器[13],Elastic公司推出的轻量级日志采集器Beats,占用系统资源极少,在低性能的设备节点中具有很大的优势。Beats为采集不同的日志源提供了不同的采集器,比如日志文件采集器Filebeat、系统指标采集器Metricbeat。引入Beats之后的系统也被称作ELKB架构。ELKB架构的日志处理流程如图1所示。

图1 ELKB架构的日志处理流程图Fig.1 Log processing flow chart of ELKB architecture

1.2 日志文件采集模块

日志管理的第一步是进行日志采集,日志分散存储在不同的服务器中,进行统一汇总后便于后续分析。日志采集端需要作用在日志产生端的服务器上,因此,需要确保日志采集器是轻量级的,不能占用过多的系统资源从而影响云平台服务端本身的性能。基于ELKB架构基础,主要利用日志文件采集器Filebeat实现日志的收集和传送。Filebeat性能稳定,无依赖性,收集日志速度快,同时所占的系统资源极少,在低性能的设备节点中具有很大的优势。

Filebeat采集器运行过程如图2所示,首先Crawler负责管理和启动各个输入的Prospector,Prospector是探测器,负责解析输入源,找到所有读取的日志文件来源。每找到一个日志来源就会启动一个采集器Harvester,然后按行读取日志内容并输出到指定目标。Registrar管理并记录每个文件状态,包括偏移量、文件名信息等。当Filebeat的服务中断再次启动后,Registrar及时恢复文件处理状态,补传中断时期的日志变化,此方式保证了Filebeat不会丢失任何数据。Pipeline负责管理缓存消息。Output是输出源,由配置文件指定输出目标。

1.3 日志存储检索模块

日志数据采集完成后,被传输至Elasticsearch做集中处理,该模块负责对采集端发送的所有数据源进行持久化存储,并支持日志的搜索和结构化查询。Elasticsearch可以看作是非关系型数据库[14],与关系型数据库MySQL[15-16]的重要概念对比如表1所示。

表1 Elasticsearch与MySQL的概念对比Table 1 Concept comparison between Elasticsearch and MySQL

从表1可以看出,Elasticsearch可存储结构不固定的数据,比关系型数据库更加适合处理非结构化的日志数据。Elasticsearch提供Index索引[17]服务,Index在空间逻辑上可以类比关系型数据库中的Database,在物理上是一类文件的集合。Elasticsearch将每一个字段编入Index,所有查询均基于Index完成。

1.4 日志可视化分析模块

日志信息经过采集和存储后,得到了统一的结构化数据,然后通过Kibana平台对日志进行数据展示和查询分析。Kibana提供友好的数据可视化平台,支持用户定制个性化的日志分析图表,通过判断并解析Elasticsearch中定义的Index索引名称,建立直观地图表展示所需分析的日志详细信息。Kibana的效果展示图如图3所示。

图3 Kibana效果展示图Fig.3 Kibana effect display

2 Filebeat采集器基础参数优化

Filebeat是轻量级日志采集器,但是在应用部署时,由于配置不合理或是无差异化的默认配置,也会造成非预期情况下CPU强占和内存耗尽的问题,导致平台其他服务无法正常运行。因此,为降低采集器的资源占用,提高采集性能,对Filebeat扫描日志文件时的相关参数进行合理配置。通过配置文件filebeat.yml优化以下参数,Filebeat采集器参数优化信息如表2所示。

表2 Filebeat参数优化信息表Table 2 Filebeat parameter optimization information table

如表2所示,参数scan_frequency表示在指定路径下检查新文件的频率,该参数会影响Filebeat采集器的计算能力,当设置时间过短时,内存使用率会增加。设置时间在5~15 s是合理的,本系统设置为10 s。将参数tail_files设置为true,保证采集器一直读取最新的事件消息,不需要重复发送所有的内容,可以提高日志读取效率。harvester_buffer_size参数表示获取一个文件值的缓存池大小,默认值为16 384,本系统将缓存池的大小设置为163 840,即扩大为默认的十倍来应对高流量的日志写入情况。queue_mem_events参数表示内存队列的事件个数,Filebeat默认配置的缓存事件个数为4 096,缓存事件个数直接关系内存的占用量,本文将缓存事件个数降低一倍,设置为2 048,避免出现内存爆增的问题。backoff参数表示检查文件更新的时间,将该参数设置为1 s,代表实时检查文件的更新情况。

3 Elasticsearch性能优化

3.1 Elasticsearch集群配置

Elasticsearch作为日志管理系统的核心模块,具备集中存储和快速检索数据的功能。Elasticsearch支持水平扩展,集群模式可以使服务更加稳定可靠,从整体上提高扩展性和数据吞吐率。构建集群模式的成员称作节点,在Elasticsearch集群模式下,节点被划分为主节点(Master)、数据节点(Data)和协调节点(Coordinate)。每个节点负责不同分工,其中,主节点负责创建或删除索引文件、跟踪集群节点等工作;数据节点负责保存数据分片;协调节点负责请求分发和结果的汇聚。

综合考虑目前的服务器硬件配置,使用三台CentOS服务器部署了Elasticsearch集群,并在每个节点上配置集群名称(cluster.name)、节点名称(node.name)、主节点(node.master)、数据节点(node.data)以及端口号(http.port)等信息。集群节点之间通过单播或组播的方式互相访问和共享数据,当节点遵循同样的规则时,获得的信息是对等的,即配置相同集群名称的节点自动加入到该集群。Elasticsearch集群节点配置方式如表3所示。

表3 Elasticsearch集群节点配置Table 3 Elasticsearch cluster node configuration

3.2 Elasticsearch集群节点性能优化

Elasticsearch集群包含多个node节点,其中每个node节点的数据分布结构如图4所示。Elasticsearch将每个Index拆分后存储在多个node节点上。Index又可以划分为多个分片shard,其中的主分片用于存储数据。shard又包含多个segment,每个segment都是一个倒排索引[18]。segment在数据输入后创建,是不可变的,当编辑或删除数据时会创建一个新的segment,并标记旧的segment为删除状态。

图4 数据分布结构图Fig.4 Data distribution structure

基于上述节点的数据分布结构,为进一步提升Elasticsearch在实际处理数据时的检索性能,优化Elasticsearch集群的节点配置,可以使其获得更优的查询和检索性能。

(1)刷新间隔优化。每当Elasticsearch接收到新的日志文档,就将内容写入到segment文件中,默认每秒刷新一次,产生一个新的segment数据段,当索引的文档不断增多时,会导致产生大量细小的segment,查询性能随之下降。因此,可适当增大刷新时间间隔,这样可以大大降低segment文件生成的数量,同时可以保证在高并发场景下有较快的写入性能。

(2)段合并优化。由于每次查询索引都需要访问当前所有的segment文件,随着segment文件不断生成,请求的响应速度会随之下降。为解决这个问题,Elasticsearch通过归并计算定时将零散的segment分段合并成较大的分段,即做段合并。当较大的segment文件被刷新到磁盘中时,被合并的segment文件随之删除,这样索引中segment数量会大大降低,保证请求响应速度不会受到影响。在配置文件elasticsearch.yml中修改与段合并有关的参数,段合并相关参数值说明如表4所示。

表4 段合并相关参数值说明表Table 4 Merge the relevant parameter value description table

(3)分片与副本设计。当Elasticsearch集群中某个节点发生故障时,该节点中存储数据的分片将不可用,造成数据丢失的现象。为避免出现此情况,本文将每个主分片均复制一份副本分片保存在与主分片不同的集群节点上。当集群节点中的主分片不可用时,请求可以发往副本分片,副本分片检测到主分片节点出现故障后,将副本分片提升为主分片,保证查询服务正常可用。在配置文件elasticsearch.yml中设置相关分片与副本数量,如表5所示。

表5 索引分片个数说明表Table 5 The number of index fragment description table

(4)内存调优。Elasticsearch服务的运行涉及JVM堆内存,对JVM堆内存设置进行调整,可以提升Elasticsearch的运行性能。在安装目录下的jvm.option文件中进行配置,其中JVM的最大堆内存(-Xmx)和最小堆内存(-Xms)通常设置相同的值,且是总内存的一半,这样既保证系统留有足够的内存使用,又不会超过内存限制值的上限。假设容量是4 G的专用服务器,将JVM大小设置为2 G,避免了多余的性能消耗,可最大程度发挥JVM的性能。

4 系统性能测试与分析

4.1 环境搭建

按照3.1节设计的Elasticsearch集群结构,使用三台CentOS服务器进行安装部署,服务器的配置是:2核CPU,4 G内存,分别安装日志组件Filebeat、Elasticsearch、Kibana来搭建日志管理系统,测试中采用的压力测试工具是Apache Jmeter。各组件的配置版本如表6所示。

表6 组件工具配置表Table 6 Component tool configuration table

4.2 Filebeat采集器参数优化对比测试

为提高日志采集器Filebeat的性能,解决非预期情况下采集器的资源占用问题,对Filebeat扫描日志文件时的相关参数进行优化。下面记录采集日志文件逐渐增加的情况下,Filebeat参数优化前后在系统中的内存占用百分比,测试结果如图5所示。

图5 Filebeat优化前后内存占用对比图Fig.5 Comparison of memory footprint before and after Filebeat configuration

从图5可以看出,当日志处理文件数量较少时,采集器配置前后内存占用率相差不大,但随着日志数据量的不断增加,优化后的采集器内存占用率明显降低。当处理日志数量达到十万数量级时,优化后的Filebeat比之前的内存占用率降低约47%。由此可知,优化后的Filebeat采集器在处理海量日志时具备更大的优势。

4.3 Elasticsearch集群与单机吞吐率对比测试

为了测试日志存储模块的集群优化效果,在Elasticsearch数据库中进行关键字查询测试。通过测试工具ApacheBench创建多线程来模拟并发用户访问被测节点,并记录相同配置下Elasticsearch集群模式和单机服务器的吞吐率变化情况。实验进行关键字查询的测试结果如图6所示。

图6 集群和单机吞吐率性能对比图Fig.6 Comparison of throughput performance between cluster and stand-alone

从图6中可以看出,在并发数量较小的情况下,集群的吞吐率低于单机服务器吞吐率,这是由于在并发数量较小的情况下,集群模式没有发挥明显的优势。随着并发数量的增长,单机的吞吐率逐渐降低,集群吞吐率呈线性增长趋势,这代表集群服务的资源被充分利用,但受限于硬件条件,吞吐量会趋于平缓。在实验测试中,单机吞吐率最终稳定在1 000 req/s左右,集群吞吐率稳定在1 250 req/s左右。因此,在相同硬件条件下,实验结果表明Elasticsearch集群模式在进行并发数量较高的关键字查询时数据的吞吐率性能更高,部署Elasticsearch集群模式可以更好地提高数据检索效率。

4.4 Elasticsearch段合并前后索引内存对比测试

按照3.2节的段合并优化方法进行参数设置,并测试段合并优化前后日志数据索引所占用的内存情况。实验中记录了日志处理数量为5 000、10 000、15 000、20 000时的段合并前后索引内存占用情况,对比结果如图7所示。

图7 段合并前后内存占用统计图Fig.7 The memory occupancy statistics before and after merging

从图7可以看出,通过设置段合并,使日志中索引内存占用明显降低。分别统计段合并前后优化的百分比,可以得出内存优化百分比从11.9%到22.1%不等,表明段合并设置对Elasticsearch的索引内存优化效果显著。

4.5 日志可视化分析

Kibana作为日志数据流的输出端,以统计图表的方式展示存储在Elasticsearch中的索引数据。Kibana提供丰富的可视化组件,可以生成时序图、区域图、报表图等常用统计图表。首先进入Kibana主界面,点击侧面导航中的Discover进入Kibana的数据检索页面。选择查询的索引名称,即在Elasticsearch中定义的索引字段,如图8所示,设定索引检索名称为“filebeat-*”,可以检索到符合该索引模式的日志数据。此外,Kibana提供任意时间范围的日志查询,在页面右上角选择查询时间范围,如“Last 15 minutes”,即筛选最近15 min收集的日志数据,方便对系统进行实时监控和维护。

图8 日志采集结果展示图Fig.8 Kibana retrieval log data

5 结论

(1)以ELKB为基础架构,基于云平台应用对日志管理系统进行了研究及应用,并在服务器上完成采集器Filebeat、数据库Elasticsearch、可视化平台Kibana的部署工作。

(2)在日志文件采集模块,提出对采集器Filebeat基础参数进行调整的方法,包括提高缓存池容量、降低缓存文件个数等。实验结果表明:当处理日志数量达到十万数量级时,参数优化后的Filebeat在进行日志采集时,内存占用率与默认配置相比降低47%。由此可知,优化后的Filebeat采集器在处理海量日志时具备更大的优势。

(3)在日志存储检索模块,部署了Elasticsearch集群模式,提出Elasticsearch集群节点的性能提升方法,包括段合并优化策略。实验结果表明:Elasticsearch集群模式在进行关键字查询时数据的吞吐率高于单机服务器250 req/s,且段合并优化有效降低了日志的索引内存占用量,优化百分比从11.9%到22.1%不等。

(4)在日志可视化分析模块,通过Kibana平台搭建日志管理系统,用户可通过自定义的方式将检索出的日志数据通过条形图、折线图等图表形式进行分析。

综上,本文在日志采集、日志存储检索及日志可视化分析方面提供了可行的方法,有效提高了云平台的日志运维效率。

猜你喜欢

分片采集器日志
上下分片與詞的時空佈局
一名老党员的工作日志
COVID-19大便标本采集器的设计及应用
分片光滑边值问题的再生核方法
CDN存量MP4视频播放优化方法
扶贫日志
基于模糊二分查找的帧分片算法设计与实现
游学日志
基于ZigBee的大型公共建筑能耗采集器设计
基于LabVIEW的多数据采集器自动监控软件设计与开发