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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 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日志并进行多维度分析。
目录
相关文章
|
5天前
|
存储 监控 Java
Spring6入门 + Log4j2
Spring6入门 + Log4j2
|
5天前
|
SQL 存储 关系型数据库
轻松入门MySQL:深入理解MySQL日志,二进制日志、中继日志、回滚日志和重做日志(19)
轻松入门MySQL:深入理解MySQL日志,二进制日志、中继日志、回滚日志和重做日志(19)
|
8月前
|
运维 监控 安全
应急实战 | 记一次日志缺失的挖矿排查
应急实战 | 记一次日志缺失的挖矿排查
127 0
|
5天前
|
SQL 调度 Swift
【深入浅出】阿里自研开源搜索引擎Havenask日志查询
本次分享内容为Havenask的日志查询,文章包含了具体查询步骤和举例、实操演示,希望可以帮助大家更好的使用Havenask。
643 0
|
5天前
|
存储 消息中间件 Java
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
|
5天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
19 0
|
5天前
|
运维 Ubuntu Linux
【Linux操作系统】探秘Linux奥秘:日志管理的解密与实战
【Linux操作系统】探秘Linux奥秘:日志管理的解密与实战
48 0
|
5天前
|
存储 Java
jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
50 0
|
5天前
|
SQL 数据采集 数据挖掘
nginx+flume网络流量日志实时数据分析实战
nginx+flume网络流量日志实时数据分析实战
112 0

相关产品

  • 日志服务
  • http://www.vxiaotou.com