iLogtail社区版使用入门 - iLogtail日志处理实战

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文将会详细介绍使用iLogtail社区版进行日志采集时,对于常见日志格式的处理实战。为了便于调测,以下样例默认将采集到的日志,经过处理后,输出到标准输出,开发者可以根据实际需求进行适当的调整。

iLogtail是阿里云日志服务(SLS)团队自研的可观测数据采集Agent,拥有的轻量级、高性能、自动化配置等诸多生产级别特性,可以署于物理机、虚拟机、Kubernetes等多种环境中来采集遥测数据。iLogtail在阿里云上服务了数万家客户主机和容器的可观测性采集工作,在阿里巴巴集团的核心产品线,如淘宝、天猫、支付宝、菜鸟、高德地图等也是默认的日志、监控、Trace等多种可观测数据的采集工具。目前iLogtail已有千万级的安装量,每天采集数十PB的可观测数据,广泛应用于线上监控、问题分析/定位、运营分析、安全分析等多种场景,在实战中验证了其强大的性能和稳定性。

在当今云原生的时代,我们坚信开源才是iLogtail最优的发展策略,也是释放其最大价值的方法。因此,我们决定将iLogtail开源,期望同众多开发者一起将iLogtail打造成世界一流的可观测数据采集器。

背景

日志作为可观测性建设中的重要一环,可以记录详细的访问请求以及错误信息,在业务分析、问题定位等方面往往会发挥很大的作用。一般开发场景下,当需要进行日志分析时,往往是直接在日志文件中进行grep搜索对应的关键字;但在大规模分布式生产环境下,此方法效率低下,常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集、管理、分析。

目前行业上主流的开源方案,分成了5个部分。

  • 采集端:承载可观测数据采集及一部分前置的数据处理功能。随着云原生的发展,采集端也需要适应时代潮流,提供对K8s采集的友好支持。常见的采集端有FilebeatFluentD/Fluent-bIt,以及我们开源的iLogtail
  • 消息队列:采集Agent往往不会直接将采集到的数据发送到存储系统,而是写入消息队列,起到削峰填谷的作用,避免流量洪峰导致存储系统宕机。常见消息队列为KafkaRabbitMQ等。
  • 计算:用于消费消息队列中的数据,经过处理、聚合后输出到存储系统。比较常见的为Flink、Logstash等。
  • 存储分析引擎:提供采集数据持久化存储能力,并提供查询分析能力。常见的存储分析引擎为ElasticsearchClickHouseLoki
  • 可视化:借助KibanaGrafana提供采集数据的可视化能力。

iLogtail作为可观测数据采集器,致力于打造统一的数据采集层。提供了数十种数据源的采集能力,及丰富的处理能力,具有高性能、高可靠的特点。iLogtail社区版源自企业版iLogtail,核心采集处理能力完全对标企业版,完全可以应对大规模线上使用的场景。完整对比详见 社区版和企业版的对比说明

注:日志服务SLS作为云原生的可观测平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务。同时一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,具备上图中2、3、4、5所有的能力iLogtail企业版作为SLS官方标配的可观测数据采集器,可以无缝集成,提供一站式便捷的采集能力。

原理介绍

iLogtail采用PipeLine的设计,数据处理有较强的扩展性。当文本文件采集后,会经过采集配置中设定的Processor处理,之后经过Aggregator插件打包,最终通过Flusher发送到日志存储系统。

此外,iLogtail对于文本处理的场景,也提供了C++加速处理能力,可以显著提升日志处理效率。C++加速不在本文讨论范围,敬请期待后续分享文章。

场景实战

本文将会详细介绍使用iLogtail社区版进行日志采集时,对于常见日志格式的处理实战。为了便于调测,以下样例默认将采集到的日志,经过处理后,输出到标准输出,开发者可以根据实际需求进行适当的调整。

场景1 -- 正则表达式解析及响应过滤

场景描述

按照正则解析请求日志格式,并且只采集status异常的日志,即不采集200的日志。

实现机制

这里需要用到两个插件:

  • 首先使用processor_regex进行日志字段提取,需要注意正则中的(),需要与提取出来的Keys严格对应。
  • 使用processor_filter_regex进行过滤处理,不采集status为200的日志。

实战

  • 输入

echo '127.0.0.1 - - [10/Aug/2022:14:57:51 +0800] "POST /PutData?Category=YunOsAccountOpLog" 0.024 18204 200 37 "-" "aliyun-sdk-java"' >> /home/test-log/proccessor-input.log

echo '127.0.0.1 - - [10/Aug/2022:14:57:52 +0800] "POST /PutData?Category=YunOsAccountOpLog" 0.14 18200 404 37 "-" "aliyun-sdk-java"' >> /home/test-log/proccessor-input.log

  • 采集配置

enable: true

inputs:

 - Type: file_log

   LogPath: /home/test-log/

   FilePattern: proccessor-input.log

processors:

 - Type: processor_regex

   SourceKey: content

   Regex: ([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\\"]*)\" \"([^\\"]*)\"

   Keys:

     - ip

     - time

     - method

     - url

     - request_time

     - request_length

     - status

     - length

     - ref_url

     - browser

 - Type: processor_filter_regex

   Exclude:

     status: "200"

flushers:

 - Type: flusher_stdout

   OnlyStdout: true

  • 输出

{

   "__tag__:__path__": "/home/test-log/proccessor-input.log",

   "ip": "127.0.0.1",

   "time": "10/Aug/2022:14:57:52",

   "method": "POST",

   "url": "/PutData?Category=YunOsAccountOpLog",

   "request_time": "0.14",

   "request_length": "18200",

   "status": "404",

   "length": "37",

   "ref_url": "-",

   "browser": "aliyun-sdk-java",

   "__time__": "1659884519"

}

场景2 -- Json格式解析及字段取值过滤

场景描述

采集的日志格式为Json,按照Json解析后,进行日志内容进行过滤。只采集ip以10开头、methodPOSTbrowser不为aliyun.*的日志。

实现机制

这里需要用到两个插件:

  • 因为原始日志时Json格式,所以需要首先使用processor_json进行日志的解析,处理后可以得到kv形式字段。
  • 使用processor_filter_regex进行过滤处理,只保留符合条件的日志。该插件可以支持多个字段的取值组合。

实战

  • 输入

echo '{"ip": "10.**.**.**", "method": "POST", "brower": "aliyun-sdk-java"}' >> /home/test-log/proccessor-input.log

echo '{"ip": "10.**.**.**", "method": "POST", "brower": "chrome"}' >> /home/test-log/proccessor-input.log

echo '{"ip": "192.168.**.**", "method": "POST", "brower": "aliyun-sls-ilogtail"}' >> /home/test-log/proccessor-input.log

  • 采集配置
  • 需要特别注意,10开头的IP需要与100开头的区分开,因此正则应该是10\..*

enable: true

inputs:

 - Type: file_log

   LogPath: /home/test-log/

   FilePattern: proccessor-input.log

processors:

 - Type: processor_json

   SourceKey: content

   KeepSource: false

   ExpandDepth: 1

   ExpandConnector: ""

 - Type: processor_filter_regex

   Include:

     ip: 10\..*

     method: POST

   Exclude:

     brower: aliyun.*

flushers:

 - Type: flusher_stdout

   OnlyStdout: true

  • 输出

{

   "__tag__:__path__": "/home/test-log/proccessor-input.log",

   "ip": "10.**.**.**",

   "method": "POST",

   "brower": "chrome",

   "__time__": "1659881747"

}

场景3 -- 多行日志解析

场景描述

多行文本日志即默认一条日志有多行内容,常见于Java程序异常调用栈打印。iLogtail通过行首正则表达式去匹配一条日志的行首,未匹配部分为该条日志的一部分。

本例以时间开头的行作为开头,进行多行日志解析。

实现机制

需要借助processor_split_log_regex实现多行匹配,使用时需要根据日志特点指定行首正则。

实战

  • 输入

echo -e  '[2022-03-03 18:00:00] xxx1\nyyyyy\nzzzzzz\n[2022-03-03 18:00:01] xxx2\nyyyyy\nzzzzzz' >> /home/test-log/proccessor-input.log

  • 采集配置

enable: true

inputs:

 - Type: file_log

   LogPath: /home/test-log/

   FilePattern: proccessor-input.log

processors:

 - Type: processor_split_log_regex

   SplitRegex: \[\d+-\d+-\d+\s\d+:\d+:\d+]\s.*

   SplitKey: content

   PreserveOthers: true

flushers:

 - Type: flusher_stdout

   OnlyStdout: true

  • 输出

{

   "__tag__:__path__": "/home/test-log/multiline.log",

   "content": "[2022-03-03 18:00:00] xxx1\nyyyyy\nzzzzzz\n",

   "__time__": "1657367638"

}

{

   "__tag__:__path__": "/home/test-log/multiline.log",

   "content": "[2022-03-03 18:00:01] xxx2\nyyyyy\nzzzzzz",

   "__time__": "1657367638"

}

场景4 -- 混合日志模式解析

场景描述

有时业务日志不是单一的Json模式,可能嵌套了其他的模式,这时候如果用正则去匹配会比较复杂。iLogtail数据处理pipeline的设计可以对原始日志进行层层提取。

本例对主体为key-value格式,但是其中部分字段嵌套Json的日志内容进行解析处理。

实现机制

实战

  • 输入

echo -e  "time:2017.09.12 20:55:36\tjson:{\"key1\" : \"xx\", \"key2\": false, \"key3\":123.456, \"key4\" : { \"inner1\" : 1, \"inner2\" : false}}" >> /home/test-log/proccessor-input.log

  • 采集配置

enable: true

inputs:

 - Type: file_log

   LogPath: /home/test-log/

   FilePattern: proccessor-input.log

processors:

 - Type: processor_split_key_value

   SourceKey: content

   Delimiter: "\t"

   Separator: ":"

 - Type: processor_json

   SourceKey: json

   KeepSource: false

   ExpandDepth: 1

   ExpandConnector: ""

 - Type: processor_drop

   DropKeys:

     - key4

flushers:

 - Type: flusher_stdout

   OnlyStdout: true

  • 输出

{

   "__tag__:__path__": "/home/test-log/proccessor-input.log",

   "content": "time:2017.09.12 20:55:36\tjson:{\"key1\" : \"xx\", \"key2\": false, \"key3\":123.456, \"key4\" : { \"inner1\" : 1, \"inner2\" : false}}",

   "time": "2017.09.12 20:55:36",

   "key1": "xx",

   "key2": "false",

   "key3": "123.456",

   "__time__": "1659911138"

}

总结

以上,我们介绍了使用iLogtail社区版对于常见日志格式解析处理的实战,可以应用于日志格式标准化处理、日志过滤等场景。当然iLogtail还有众多数据处理插件可供选择,开发者可以基于我们的本篇实战分享及文档,构建属于自己的data_pipelines

我们也将一些常见的处理模版归档到GitHub供开发者使用,当然也希望开发者跟我们一起共建,将自己使用的案例分享给社区的所有开发人员。

关于iLogtail

iLogtail作为阿里云SLS提供的可观测数据采集器,可以运行在服务器、容器、K8s、嵌入式等多种环境,支持采集数百种可观测数据(日志、监控、Trace、事件等),已经有千万级的安装量。目前,iLogtail已正式开源,欢迎使用及参与共建。

GitHub:https://github.com/alibaba/ilogtail

社区版文档:https://ilogtail.gitbook.io/ilogtail-docs/about/readme

企业版官网:https://help.aliyun.com/document_detail/65018.html

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
烨陌
+关注
目录
打赏
0
2
0
0
580
分享
相关文章
日志采集效能跃迁:iLogtail 到 LoongCollector 的全面升级
LoongCollector 在日志场景中实现了全面的重磅升级,从功能、性能、稳定性等各个方面均进行了深度优化和提升,本文我们将对 LoongCollector 的升级进行详细介绍。
350 86
日志审查安排工具实战攻略:中小团队如何通过日志审查安排工具建立可控、安全的审查机制?
在审计敏感时代,日志审查安排工具成为安全运维与合规管理的关键利器。它实现审查任务的流程化、周期化与可视化,支持多系统协作、责任到人,确保“可控、可查、可追”的日志治理。工具如板栗看板、Asana、Monday 等提供任务调度、问题闭环与合规对接能力,助力企业构建高效、透明的日志审查体系,提升安全与合规水平。
Aipy实战:分析apache2日志中的网站攻击痕迹
Apache2日志系统灵活且信息全面,但安全分析、实时分析和合规性审计存在较高技术门槛。为降低难度,可借助AI工具如aipy高效分析日志,快速发现攻击痕迹并提供反制措施。通过结合AI与学习技术知识,新手运维人员能更轻松掌握复杂日志分析任务,提升工作效率与技能水平。
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
220 5
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
609 6
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
143 1
超实用的SpringAOP实战之日志记录
【11月更文挑战第11天】本文介绍了如何使用 Spring AOP 实现日志记录功能。首先概述了日志记录的重要性及 Spring AOP 的优势,然后详细讲解了搭建 Spring AOP 环境、定义日志切面、优化日志内容和格式的方法,最后通过测试验证日志记录功能的准确性和完整性。通过这些步骤,可以有效提升系统的可维护性和可追踪性。
117 1
「测试线排查的一些经验-中篇」&& 调试日志实战
「测试线排查的一些经验-中篇」&& 调试日志实战
103 1
「测试线排查的一些经验-中篇」&& 调试日志实战
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
206 9

相关产品

  • 日志服务
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等

    登录插画

    登录以查看您的控制台资源

    管理云资源
    状态一览
    快捷访问