[TOC]
# Managing Mutiline Events(管理多行事件)
某些用例產生跨多行文本的事件。為了正確處理這些事件,Logstash需要知道哪些行是單個事件的一部分。
處理多行事件是復雜的并且依賴于適當的事件排序。確保有序的日志處理的最佳方法是在管道中盡可能早的處理。
[Multiline](https://www.elastic.co/guide/en/logstash/6.5/plugins-codecs-multiline.html) 編碼器是Logstash管道中處理多行事件的首選工具。Multiline編解碼器使用一組簡單的規則將單個輸入中的行合并。
> <font color=#DC143C size=4>IMPORTANT</font>:如果你使用的是支持多個主機的Logstash input插件,如beats,你應該使用諸如[Multiline](https://www.elastic.co/guide/en/logstash/6.5/plugins-codecs-multiline.html) 編解碼器來處理多行事件。Doing so may result in the mixing of streams and corrupted event data.(這樣做可能會導致流混合和損壞的事件數據。)這種情況,你需要在事件數據被發送到Logstash之前處理多行事件。
配置多行編解碼器最重要的是下面這些:
+ `Pattern`選項指定一個正則表達式。被匹配的行被解析為前一行的連續或者新的多行時間的開始。你可以在此配置選項中使用grok正則表達式模板。
+ `What`選項的值有兩個:`previous`或`next`。`Previous`表示在`pattern`選項中匹配到的值是前一行的一部分。`Next`表示在`pattern`選項中匹配到的值是接下來的行的一部分。`Negate`選項將沒有被`pattern`選項中匹配到的行應用到多行編解碼器。(The `negate` option applies the multiline codec to lines that *do not* match the regular expression specified in the `pattern` option.)
關于[multiline](https://www.elastic.co/guide/en/logstash/6.5/plugins-codecs-multiline.html)編解碼器插件的更多信息和配置選項,參考完整文檔。
# Multiline編解碼器配置示例
本章節的示例包括以下用例:
+ 將Java堆棧跟蹤組合為單個事件
+ 將C風格的行持續組合到單個事件中(Combining C-style line continuations into a single event)
+ 將來自時間戳的多行事件進行組合
## Java堆棧跟蹤
Java 堆棧跟蹤由多行組成,在初始行開始后的每一行都以空白開始,如:
```log
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)
```
要在Logstash中將這些行整合為一個事件,使用下面的multiline編解碼器配置:
```conf
input {
stdin {
codec => multiline {
pattern => "^\s"
what => "previous"
}
}
}
```
這個配置將任何以空白開始的行合并到前一行。
## Line Continuations(行延續?)
一些編程語言使用`\`字符在行的結尾表示行沒有結束,如:
```c
printf ("%10.10ld \t %10.10ld \t %s\
%f", w, x, y, z );
```
要在Logstash中將這些行整合為一個事件,使用下面的multiline編解碼器配置:
```conf
input {
stdin {
codec => multiline {
pattern => "\\$"
what => "next"
}
}
}
```
這個配置將任何以`\`字符結束的行合并到接下來的行。
## 時間戳
來自諸如Elasticsearch等服務的活動日志通常以時間戳開頭,其次是具體的信息,如:
```log
[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]
```
要在Logstash中將這些行整合為一個事件,使用下面的multiline編解碼器配置:
```conf
input {
file {
path => "/var/log/someapp.log"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601} "
negate => true
what => previous
}
}
}
```
這個配置使用`negate`選項來指定任何沒有以時間戳開頭的行屬于前一行。
- Emmm
- Logstash簡介
- 開始使用Logstash
- 安裝Logstash
- 儲存你的第一個事件
- 通過Logstash解析日志
- 多個輸入和輸出插件的混合使用
- Logstash是如何工作的
- 執行模型Execution Model
- 設置并運行Logstash
- Logstash目錄布局
- Logstash配置文件
- logstash.yml
- Secrets keystore for secure settings
- 從命令行運行Logstash
- 以服務的方式運行Logstash
- 在Docker中運行Logstash
- 配置容器版Logstash
- Logging
- 關閉Logstash
- 安裝X-Pack
- 設置X-Pack
- 升級Logstash
- 使用包管理升級
- 直接下載進行升級
- 升級至6.0
- Upgrading with the Persistent Queue Enabled
- 配置Logstash
- 管道配置文件的結構
- 訪問配置中的事件數據和字段
- 在配置中使用環境變量
- Logstash配置示例
- 多管道
- 管道間通信(beta)
- 重載配置文件
- 管理多行事件
- Glob Pattern Support
- Converting Ingest Node Pipelines
- Logstash間通信
- 配置集中式管道管理
- X-Pack Monitoring
- X-Pack Security
- X-Pack Settings
- Field References Deep Dive(深入字段引用)
- 管理Logstash
- 集中式管道管理
- 使用Logstash模塊
- 使用Elastic Cloud
- Logstash ArcSight模塊