多行编解码器插件
编辑多行编解码器插件编辑
- 插件版本:v3.1.2
- 发布时间:2024-04-25
- 更新日志
有关其他版本,请参阅版本化插件文档。
获取帮助编辑
如有关于插件的问题,请在论坛中打开一个主题。如需报告错误或提出功能请求,请在Github中打开一个议题。如需获取 Elastic 支持的插件列表,请参阅Elastic 支持矩阵。
描述编辑
多行编解码器会折叠多行消息并将其合并到单个事件中。
如果您正在使用支持多个主机的 Logstash 输入插件(例如 beats 输入插件),则不应使用多行编解码器来处理多行事件。这样做可能会导致流混合和事件数据损坏。在这种情况下,您需要在将事件数据发送到 Logstash 之前处理多行事件。
此编解码器的最初目标是允许将来自文件的多个消息行连接到单个事件中。例如,将 Java 异常和堆栈跟踪消息连接到单个事件中。
配置如下所示
input { stdin { codec => multiline { pattern => "pattern, a regexp" negate => "true" or "false" what => "previous" or "next" } } }
pattern
应与您认为是该字段是多行事件一部分的指示符相匹配。
what
必须是 previous
或 next
,并指示与多行事件的关系。
negate
可以是 true
或 false
(默认为 false
)。如果为 true
,则与模式不匹配的消息将构成多行过滤器的匹配,并将应用 what
。(反之亦然)
例如,Java 堆栈跟踪是多行的,并且通常消息从最左侧开始,每行都缩进。这样做
input { stdin { codec => multiline { pattern => "^\s" what => "previous" } } }
这表示任何以空格开头的行都属于上一行。
另一个示例是将不以日期开头的行合并到上一行。
input { file { path => "/var/log/someapp.log" codec => multiline { # Grok pattern names are valid! :) pattern => "^%{TIMESTAMP_ISO8601} " negate => true what => "previous" } } }
这表示任何不以时间戳开头的行都应与上一行合并。
一个更常见的例子是 C 行延续符(反斜杠)。以下是实现方法
input { stdin { codec => multiline { pattern => "\\$" what => "next" } } }
这表示任何以反斜杠结尾的行都应与下一行组合。
多行编解码器配置选项编辑
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
字符串,以下之一: |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
是 |
||
否 |
||
字符串,以下之一: |
是 |
charset
编辑
- 值可以是以下任意值:
ASCII-8BIT
、UTF-8
、US-ASCII
、Big5
、Big5-HKSCS
、Big5-UAO
、CP949
、Emacs-Mule
、EUC-JP
、EUC-KR
、EUC-TW
、GB2312
、GB18030
、GBK
、ISO-8859-1
、ISO-8859-2
、ISO-8859-3
、ISO-8859-4
、ISO-8859-5
、ISO-8859-6
、ISO-8859-7
、ISO-8859-8
、ISO-8859-9
、ISO-8859-10
、ISO-8859-11
、ISO-8859-13
、ISO-8859-14
、ISO-8859-15
、ISO-8859-16
、KOI8-R
、KOI8-U
、Shift_JIS
、UTF-16BE
、UTF-16LE
、UTF-32BE
、UTF-32LE
、Windows-31J
、Windows-1250
、Windows-1251
、Windows-1252
、IBM437
、IBM737
、IBM775
、CP850
、IBM852
、CP852
、IBM855
、CP855
、IBM857
、IBM860
、IBM861
、IBM862
、IBM863
、IBM864
、IBM865
、IBM866
、IBM869
、Windows-1258
、GB1988
、macCentEuro
、macCroatian
、macCyrillic
、macGreek
、macIceland
、macRoman
、macRomania
、macThai
、macTurkish
、macUkraine
、CP950
、CP951
、IBM037
、stateless-ISO-2022-JP
、eucJP-ms
、CP51932
、EUC-JIS-2004
、GB12345
、ISO-2022-JP
、ISO-2022-JP-2
、CP50220
、CP50221
、Windows-1256
、Windows-1253
、Windows-1255
、Windows-1254
、TIS-620
、Windows-874
、Windows-1257
、MacJapanese
、UTF-7
、UTF8-MAC
、UTF-16
、UTF-32
、UTF8-DoCoMo
、SJIS-DoCoMo
、UTF8-KDDI
、SJIS-KDDI
、ISO-2022-JP-KDDI
、stateless-ISO-2022-JP-KDDI
、UTF8-SoftBank
、SJIS-SoftBank
、BINARY
、CP437
、CP737
、CP775
、IBM850
、CP857
、CP860
、CP861
、CP862
、CP863
、CP864
、CP865
、CP866
、CP869
、CP1258
、Big5-HKSCS:2008
、ebcdic-cp-us
、eucJP
、euc-jp-ms
、EUC-JISX0213
、eucKR
、eucTW
、EUC-CN
、eucCN
、CP936
、ISO2022-JP
、ISO2022-JP2
、ISO8859-1
、ISO8859-2
、ISO8859-3
、ISO8859-4
、ISO8859-5
、ISO8859-6
、CP1256
、ISO8859-7
、CP1253
、ISO8859-8
、CP1255
、ISO8859-9
、CP1254
、ISO8859-10
、ISO8859-11
、CP874
、ISO8859-13
、CP1257
、ISO8859-14
、ISO8859-15
、ISO8859-16
、CP878
、MacJapan
、ASCII
、ANSI_X3.4-1968
、646
、CP65000
、CP65001
、UTF-8-MAC
、UTF-8-HFS
、UCS-2BE
、UCS-4BE
、UCS-4LE
、CP932
、csWindows31J
、SJIS
、PCK
、CP1250
、CP1251
、CP1252
、external
、locale
- 默认值为
"UTF-8"
此输入中使用的字符编码。例如 UTF-8
和 cp1252
如果您的日志文件是 Latin-1
(又名 cp1252
)或 UTF-8
以外的其他字符集,则此设置很有用。
这仅影响“纯文本”格式的日志,因为 JSON 已经是 UTF-8
。
ecs_compatibility
编辑
- 值类型为字符串
-
支持的值为
-
disabled
:插件仅设置message
字段 -
v1
、v8
:符合 Elastic 通用模式的行为(还会添加[event][original]
)
-
-
默认值取决于运行的 Logstash 版本
- 如果 Logstash 提供了
pipeline.ecs_compatibility
设置,则其值将用作默认值 - 否则,默认值为
disabled
- 如果 Logstash 提供了
控制此插件与 Elastic 通用模式 (ECS) 的兼容性。
max_bytes
编辑
- 值类型为 字节
- 默认值为
"10 MiB"
如果未正确定义事件边界,则事件的累积可能会导致 Logstash 因内存不足错误而退出。此设置确保在达到一定字节数后刷新多行事件,它与 max_lines 结合使用。
max_lines
编辑
- 值类型为数字
- 默认值为
500
如果未正确定义事件边界,则事件的累积可能会导致 Logstash 因内存不足错误而退出。此设置确保在达到一定行数后刷新多行事件,它与 max_bytes 结合使用。