10

ELK日志迁移技术分享 | strongant的个人博客

 3 years ago
source link: https://baiwenhui.com/2020/09/14/ELK%E6%97%A5%E5%BF%97%E8%BF%81%E7%A7%BB%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

日志处理方案演进

1.1 什么是日志

日志是带时间戳的基于时间序列的机器数据,包括IT系统信息(服务器、网络设备、操作系统、应 用软件)、物联网各种传感器信息。日志反映用户行为,是事实数据,也是系统运维、故障诊断、性能分析的重要来源。对于任何系统,日志都是极其重要的组成部分。

1.2 日志处理的背景

随着大数据时代的来临,系统日志量也呈指数级增加。随着日志格式复杂度的增加、日志规模的扩大以及应用节点的增多,传统的日志量过大分析耗时耗力、效率低下、无法胜任复杂的统计分析等。并且传统的日志分析无法满足实时化分析的业务需求,实时化分析也是当今大数据技术的发展趋势之一。

1.3 日志处理方案演进

业界一般对日志的处理方案演进如下:

  • 日志处理古老版

    日志没有集中式处理,一般情况下手动到服务器上使用 Linux 命令排查日志;日志的唯一作用就是做故障之后的排查;使用数据库存储日志,无法胜任复杂的实时统计分析需求。

  • 日志处理离线版

    一般使用 Hadoop 平台实现日志的离线批量处理,缺点便是实时性太差;

    也有使用 Storm 流处理框架、Spark 内存计算框架处理日志, Hadoop/Storm/Spark 都是编程框架,并不是拿来就可以使用的平台。

  • 日志处理实时版

    一般使用日志实时搜索引擎分析日志,其作为代表的解决方案主要有 Splunk(Splunk是一个分析计算机系统产生的机器数据,并在广泛的场景中提供数据收集、分析、可视化分布式的数据计算平台。)、ELK、EFK(EFK由ElasticSearch、Fluentd和Kiabana三个开源工具组成。Fluentd也是一个实时开源的数据收集器,)。

优点有什么?

  1. 快速,日志从产生到搜索分析出结果只有数秒延时;
  2. 可以处理大量数据,每天可以处理 TB 级日志量;
  3. 很灵活,可以分析任何的实时日志。

其中,ELK 在业界最受欢迎,目前我们也使用的是ELK日志处理方案。ELK 是 Elastic 公司出品的开源实时日志处理与分析的解决方案,ELK 分别代表分布式搜索引擎 Elasticsearch、日志采集与解析工具 Logstash、日志可视化分析工具 Kibana,ELK日志处理方案具有配置灵活、集群可线性扩展、日志实时导入、检索性能高效、可视化分析方便等优点,已经成为业界日志处理方案的不二选择。

ELK 架构解读

2.1 架构选择

完整的日志分析系统主要包括日志采集系统、日志解析系统、日志存储系统和可视化分析系统四部分组成。典型的 ELK 架构图如下所示:

ELK 架构中,由于 Logstash 既作为日志搜集器又作为日志解析器,本身会消耗服务器较多的CPU 和 内存,如果服务器计算资源不够丰富,则会造成服务器性能下降无法正常工作。为了解决Logstash 占用系统资源高的问题,Elastic 公司推出了轻量级的日志采集器 Beats,在数据收集方面取代 Logstash,引入 Beats 后的系统架构如如下:

Beats 是一系列采集器的总称,对于不同的日志源和日志格式可以使用不同的Beats,截止目前为止,Beats 家族包括以下 7 个成员:

  • Filebeat:轻量级的日志采集器,可用于收集文件数据。
  • Metricbeat:5.0版本之前名为Topbeat,收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据。
  • Packetbeat:收集网络流数据,可以实时监控系统应用和服务,可以将延迟时间、错误、响应时间、SLA性能等信息发送到Logstash或Elasticsearch。
  • Winlogbeat:Windows 事件日志
  • Heartbeat:运行时间监控。
  • Auditbeat: 审计日志数据采集。
  • Functionbeat:无需服务器的采集器。

目前对于日志规模较大的场景,还需要引入消息队列,Logstash 支持常用的消息队列有 Kafka、RabbitMQ、Redis等。引入消息队列后的架构如下:

2.2 日志采集模块分析

日志采集是对日志进行分析的基础,我们对于不同的日志类型可以选择不同类型的 beats。在我们的日常使用中,基本大多数情况以文件类型的日志居多,这里我们就以filebeat 采集文件类型的日志进行探索日志采集的原理。

FileBeat 是采用Go 语言由 Elastic 官方开发的轻量级日志采集器,在应用服务器上以代理的形式安装。当这个 FileBeat 进行启动时,它会启动一个 prospector 监控日志路径或者日志文件,每一个日志文件都会有一个对应的 harvester, harvester 按行读取日志内容并转发至后台程序。FileBeat 维护了一个记录文件读取信息的注册文件,记录每个 harvester 最后读取位置的偏移量。日志按行读取以后,转发至 logstash 做解析。

2.3 日志解析模块分析

Logstash是分布式数据收集引擎,在日志处理中担任搬运工的角色,它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、统一格式等操作,然后输出到用户指定的位置。事件流通过Logstash中的Input、Filter和Output插件处理和转换,Input用于配置日志的输入源,Filter用来解析日志,Output指定日志的输出去向。

Grok是Logstash的一个正则解析插件,它能对日志流进行解析,内置了120多种的正则表达式库,对日志解析时需要针对日志格式定义相应的正则表达式。结合Grok提供的便利,总结出按行读取文件格式日志的解析步骤:

(1)首先对日志进行分析,明确每一个字段的含义,确定日志的切分规则,也就是一条日志切分成哪几个字段,这些字段是以后做日志分析的关键,对原始日志的解读和分析是非常关键的一步。

(2)根据步骤(1)的切分原则确定提取每一个字段的正则表达式,如果Grok中的正则库满足需求直接使用即可,否则采用自定义模式,两者可以组合使用。

(3)在Grok Debugger调试工具中调试、验证解析日志的正则表达式是否正确。

举一个例子,下面是一条半结构化日志:

2017-12-16 00:00:01,570 133382978 [  HandleConsumer.java:445:INFO ]  车辆号牌为空

对应的Grok表达式如下:

%{TIMESTAMP_ISO8601:time}\s*%{NUMBER:bytes}\s*\[\s*%{JAVAFILE:class}\:%{NUMBER:lineNumber}\s*\:%{LOGLEVEL:level}\s*\]\s*(?<info>([\s\S]*))

格式化后的日志如下:

{
"time": "2017-12-16 00:00:01,570",
"bytes":"133382978",
"class": "HandleConsumer.java",
"lineNumber": "445",
"level": "INFO",
"info":"车辆号牌为空。"
}

Grok Debugger调试正则表达式如图4所示:

enter image description here

2.4 日志存储模块分析

Elasticsearch是存储日志的中央系统,实际项目中,根据需求搭建Elasticsearch集群即可。

2.5 日志可视化模块分析

Kibana是一个开源日志分析及可视化平台,使用它可以对存储在Elasticsearch索引中的数据进行高效的搜索、可视化、分析等各种操作。Kibana的愿景是让海量数据更容易理解,通过浏览器的用户界面可以创建各种高级图表进行数据分析和展示,它的仪表盘功能可以汇总多个单操作图表,并且可以实时显示查询动态。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK