logstash 同时支持多个管道_ELK logstash 处理多行事件(25th)

本文介绍如何使用Logstash的multilinecodec插件处理多行日志,包括合并Java堆栈跟踪、C风格行续行及时间戳日志等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有些日志是分多行输出的,为了能正确的处理这些多行的事件,logstash必须哪些行是单一事件的一部分。多行事件处理是比较复杂的,需依赖正确的事件顺序。最佳方法是尽早的在管道中处理以保证日志有序。这就是本文要说到的logstash管道multiline codec,专门来处理合并多行事件的。

multiline插件最重要的方面:

pattern 选项指定一个正则表达式。 事件匹配指定的正则表达式来确定是前一个事件的内容还是新的事件的内容。可以使用grok正则表达式的模板来配置该选项。

what 选项有两个选择值:previous 或者 next。previous 值指定行匹配pattern选项的内容是上一行的一部分。 next 指定行匹配pattern选项的内容是下一行的一部分。* negate选项适用于 multiline codec 行不匹配pattern选项指定的正则表达式。

了解更多还需要看看multiline codec 和 multiline filter 插件的配置项。

下面介绍三个例子:

java 堆栈跟踪单个事件

C-style 线连续成单个事件

从时间标记事件

java stack traces

Java stack traces  包含多行内容,后面几行与初始行缩进,如下所示:

Exception in thread "main" java.lang.NullPointerException

at com.example.myproject.Book.getTitle(Book.java:16)

at com.example.myproject.Author.getBookTitles(Author.java:25)

at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

1

2

3

4

Exceptioninthread"main"java.lang.NullPointerException

atcom.example.myproject.Book.getTitle(Book.java:16)

atcom.example.myproject.Author.getBookTitles(Author.java:25)

atcom.example.myproject.Bootstrap.main(Bootstrap.java:14)

logstash配置如下:

input {

stdin {

codec => multiline {

pattern => "^\s"

what => "previous"

}

}

}

1

2

3

4

5

6

7

8

input{

stdin{

codec=>multiline{

pattern=>"^\s"

what=>"previous"

}

}

}

该配置将任何以空白开始的行与上一行合并。

输出的结果如下:

{

"@timestamp" => "2015-12-11T07:32:20.872Z",

"message" => "Exception in thread \"main\" java.lang.NullPointerException\n at com.example.myproject.Book.getTitle(Book.java:16)\n at com.example.myproject.Author.getBookTitles(Author.java:25)\n at com.example.myproject.Bootstrap.main(Bootstrap.java:14)Settings: Default filter workers: 4",

"@version" => "1",

"tags" => [

[0] "multiline"

],

"host" => "localhost"

}

1

2

3

4

5

6

7

8

9

{

"@timestamp"=>"2015-12-11T07:32:20.872Z",

"message"=>"Exception in thread \"main\" java.lang.NullPointerException\n        at com.example.myproject.Book.getTitle(Book.java:16)\n        at com.example.myproject.Author.getBookTitles(Author.java:25)\n        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)Settings: Default filter workers: 4",

"@version"=>"1",

"tags"=>[

[0]"multiline"

],

"host"=>"localhost"

}

line continuations

多种编程语言使用\字符在一行末尾表示该行继续,如:

printf ("%10.10ld \t %10.10ld \t %s\

%f", w, x, y, z );

1

2

printf("%10.10ld  \t %10.10ld \t %s\

%f",w,x,y,z);

logstash配置如下:

input {

stdin {

codec => multiline {

pattern => "\\$"

what => "next"

}

}

}

1

2

3

4

5

6

7

8

input{

stdin{

codec=>multiline{

pattern=>"\\$"

what=>"next"

}

}

}

该配置将以\字符结尾的任何行合并到下一行。

输出的结果如下:

{

"@timestamp" => "2015-12-11T07:46:02.116Z",

"message" => "printf (\"%10.10ld \\t %10.10ld \\t %s\\\n %f\", w, x, y, z );",

"@version" => "1",

"tags" => [

[0] "multiline"

],

"host" => "localhost"

}

1

2

3

4

5

6

7

8

9

{

"@timestamp"=>"2015-12-11T07:46:02.116Z",

"message"=>"printf (\"%10.10ld  \\t %10.10ld \\t %s\\\n  %f\", w, x, y, z );",

"@version"=>"1",

"tags"=>[

[0]"multiline"

],

"host"=>"localhost"

}

timestamps

有些日志是以时间戳开始的,如:

[2015-08-24 11:49:14,389][INFO ][env ] [Letha] using [1] data paths, mounts [[/

(/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]

1

2

[2015-08-2411:49:14,389][INFO][env][Letha]using[1]datapaths,mounts[[/

(/dev/disk1)]],netusable_space[34.5gb],nettotal_space[118.9gb],types[hfs]

logstash配置如下:

input {

stdin {

codec => multiline {

pattern => "^%{TIMESTAMP_ISO8601} "

negate => true

what => previous

}

}

}

1

2

3

4

5

6

7

8

9

input{

stdin{

codec=>multiline{

pattern=>"^%{TIMESTAMP_ISO8601} "

negate=>true

what=>previous

}

}

}

该配置使用negate => true 选项来指定任何不是以时间戳开始的行属于前行。也就是不匹配pattern的行都属于前行的内容的一部分。

输出的结果如下:

{

"@timestamp" => "2015-12-11T08:08:37.013Z",

"message" => "[2015-08-24 11:49:14,389][INFO ][env ] [Letha] using [1] data paths, mounts [[/\n(/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]",

"@version" => "1",

"tags" => [

[0] "multiline"

],

"host" => "localhost"

}

1

2

3

4

5

6

7

8

9

{

"@timestamp"=>"2015-12-11T08:08:37.013Z",

"message"=>"[2015-08-24 11:49:14,389][INFO ][env                      ] [Letha] using [1] data paths, mounts [[/\n(/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]",

"@version"=>"1",

"tags"=>[

[0]"multiline"

],

"host"=>"localhost"

}

后面看应用处理mysql慢查询日志。

<think>好的,用户之前问过SRE对SAP运维的启示和具体做法,现在又接着问提到的工具链是什么。我需要先回顾之前的回答,看看当时提到了哪些工具链。 在之前的回答里,第二部分的关键实践中的“自动化优先”部分提到了部署工具链,比如Prometheus+Grafana,还有集成到SAP Solution Manager的自愈脚本,以及CI/CD流水线。用户现在想知道这些工具链具体指什么,需要详细说明每个工具的作用和如何应用于SAP运维。 首先,用户可能是IT运维人员或者负责SAP系统的管理者,他们可能对SRE有一定了解,但需要具体工具的例子来实施。需要解释清楚每个工具的功能,以及它们在SAP环境中的具体应用场景,比如监控、自动化、CI/CD等。 接下来,用户可能想知道这些工具如何整合在一起,形成一个完整的工具链,以及为什么选择这些工具。可能需要分点详细说明每个工具链的组成部分,比如监控、自动化、CI/CD、日志管理、混沌工程等,并举例说明每个类别中的具体工具。 同时,用户可能希望了解这些工具链如何帮助提升SAP系统的可靠性和效率,比如减少人工干预、快速定位问题、自动化修复等。需要结合SAP运维的实际案例,说明工具链的实际效果。 另外,需要注意回答的结构要清晰,按照不同的工具类别来分点,每个类别下说明工具名称、功能、在SAP中的应用场景和示例。这样用户能够一目了然地理解工具链的组成和作用。 可能还需要补充一些用户未明确问到但相关的内容,比如SAP自身的工具(如Solution Manager)与第三方工具(如Prometheus)的整合,或者开源工具在企业中的适用性,帮助用户全面了解工具链的选择和部署。 最后,要确保语言简洁明了,避免使用过于专业的术语,或者在必要时进行解释,确保不同技术背景的读者都能理解。同时,要强调工具链的整合和协同工作,以及如何通过工具链实现SRE的核心原则,比如自动化、监控驱动等。</think>### SRE工具链在SAP运维中的组成与应用 SRE工具链是通过**标准化技术栈实现自动化、监控和持续改进**的集成化工具集合。针对SAP系统运维,其工具链需覆盖**监控告警、自动化操作、日志分析、混沌工程**等核心场景,以下是具体组成及典型工具示例: --- #### 一、**监控与可视化工具** 1. **基础设施监控** - **Prometheus + Grafana** - **功能**:采集服务器、网络、存储等底层指标(如CPU利用率$ \geq 90\%$告警)。 - **SAP适配**:通过Exporter抓取SAP HANA数据库指标(如`hana_system_status`),实时监控表空间使用率。 - **示例**:设置Grafana看板跟踪SAP应用服务器(AS)的`disp+work进程`内存消耗。 2. **SAP原生监控工具** - **SAP Solution Manager (SolMan)** - **功能**:集成CCMS(Computing Center Management System)监控ABAP/J2EE栈,支持事务码ST03N性能分析。 - **关键场景**:配置Technical Monitoring(如检测RFC连接超时事件`RFC_ERROR_COMMUNICATION`)。 - **SAP Focused Run**(大型企业专用) - **功能**:集中监控多套SAP系统,支持批量作业异常检测(如SM37作业状态码≠绿色)。 --- #### 二、**自动化与编排工具** 1. **运维自动化** - **Ansible** - **功能**:通过Playbook批量执行SAP Basis操作(如系统参数调整`rdisp/wp_no_dia`)。 - **示例**:自动化清理旧传输请求(STMS中`TR*`状态为“已完成”的条目)。 - **SAP LaMa(Landscape Management)** - **功能**:编排系统克隆、客户端复制(SCCL)等操作,降低人工操作风险。 2. **自愈脚本** - **Python + SAP GUI Scripting** - **功能**:编写脚本处理常见故障(如自动解锁用户`SM12`、清理锁条目`SMENQ`)。 - **示例**:当监控到`ENQUEUE_ERROR`时,触发脚本调用RFC函数`TH_DELETE_USER_LOCK`。 --- #### 三、**CI/CD与版本控制工具** 1. **代码发布流水线** - **Jenkins + GitLab** - **功能**:构建ABAP代码传输流程(DEV→QAS→PRD),集成CTS+(Change and Transport System)。 - **实践**:通过GitLab MR(Merge Request)触发自动传输请求审批(SE09状态变更)。 - **SAP Transport Management Service (TMS)** - **功能**:标准化传输路由,防止未经测试的请求进入生产系统。 2. **配置即代码(IaC)** - **Terraform** - **功能**:定义SAP基础设施资源(如AWS EC2实例部署HANA节点)。 - **SAP BTP(Business Technology Platform)** - **功能**:通过命令行工具(btp CLI)自动化管理云资源(如创建Fiori应用订阅)。 --- #### 四、**日志与根因分析工具** 1. **集中式日志管理** - **ELK Stack(Elasticsearch + Logstash + Kibana)** - **功能**:聚合SAP系统日志(如系统日志`SM21`、ABAP Dump`ST22`)。 - **示例**:建立Kibana仪表板分析`SHORTDUMP`类型分布(如`DBSQL_DUPLICATE_KEY_ERROR`)。 - **SAP Application Interface Framework (AIF)** - **功能**:跟踪接口错误日志(如IDOC状态`51`异常),关联业务上下文。 2. **AIOps智能分析** - **Moogsoft/Splunk ITSI** - **功能**:对告警进行聚类降噪,识别潜在关联(如并发用户激增导致`SM50`进程阻塞)。 --- #### 五、**混沌工程与压测工具** 1. **故障注入工具** - **Chaos Monkey for SAP**(定制化方案) - **功能**:模拟SAP集群节点故障(如关闭Enqueue Server进程`enserver`)。 - **SAP Load Runner** - **功能**:压力测试关键事务(如模拟1000并发用户执行`F.02`财务报表生成)。 2. **性能基准测试** - **SAP Quick Sizer** - **功能**:估算系统资源需求(如HANA内存分配公式$ \text{内存} = 1.5 \times \text{数据量}$)。 - **JMeter + SAP Java Connector (JCo)** - **功能**:测试BAPI/RFC调用性能(如`BAPI_GOODSMVT_CREATE`物料过账延迟)。 --- #### 六、**协作与知识管理工具** 1. **事件响应平台** - **ServiceNow + Jira** - **功能**:联动SAP SolMan生成事件工单,跟踪SLO消耗情况。 - **PagerDuty** - **功能**:根据告警级别(如SAP BASIS P1级故障)自动呼叫值班人员。 2. **文档即代码** - **Confluence + Git** - **功能**:版本化存储运维手册(如SAP升级检查清单`SUM_DMO`步骤)。 --- #### 工具链整合示例 某企业SAP S/4HANA运维工具链架构: $$ \begin{aligned} &\text{数据源层:SAP HANA CCMS/ST03N + 操作系统日志} \\ &\text{采集层:Prometheus Exporters + Logstash Agent} \\ &\text{分析层:Grafana(指标) + Kibana(日志)} \\ &\text{执行层:Ansible Playbook + SAP LaMa} \\ &\text{协作层:ServiceNow工单 + Confluence知识库} \end{aligned} $$ --- #### 实施建议 1. **优先集成SAP原生工具**(如SolMan),再扩展第三方工具。 2. **统一API标准**:通过SAP NetWeaver Gateway暴露事务码功能,供外部工具调用。 3. **安全合规**:确保工具链符合GDPR(如日志脱敏)和SAP安全基线(如SAP Note 2253214)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值