多行编解码器插件
- 插件版本: v3.1.2
- 发布日期: 2024-04-25
- 更新日志
其他版本,请参阅 版本化插件文档。
关于插件的问题,请在 Discuss 论坛上发帖。关于 bug 或功能请求,请在 Github 上提交 issue。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"
}
}
}
这表示任何以反斜杠结尾的行都应与下一行合并。
| 设置 | 输入类型 | 必需 |
|---|---|---|
auto_flush_interval |
number | 否 |
字符集 |
字符串,其中之一是 ["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"] |
否 |
ecs_compatibility |
string | 否 |
max_bytes |
bytes | 否 |
max_lines |
number | 否 |
multiline_tag |
string | 否 |
negate |
boolean | 否 |
pattern |
string | 是 |
patterns_dir |
数组 | 否 |
what |
字符串,其中之一是 ["previous", "next"] |
是 |
- 值类型为number
- 此设置没有默认值。
当遇到匹配的新行或此秒数内没有附加新数据时,将多个行的累积转换为一个事件。无默认值。如果未设置,则不自动刷新。单位:秒
- 值可以是以下任意一项:
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 格式了。
值类型为 字符串
支持的值为
disabled:插件仅设置message字段v1,v8:符合 Elastic Common Schema 的行为(同时添加[event][original])
默认值取决于正在运行的 Logstash 版本
- 当 Logstash 提供
pipeline.ecs_compatibility设置时,将使用其值作为默认值。 - 否则,默认值为
disabled
- 当 Logstash 提供
控制此插件与 Elastic Common Schema (ECS) 的兼容性。
- 值类型为 字节
- 默认值为
"10 MiB"
如果事件边界未正确定义,事件的累积可能会导致 logstash 因内存不足而退出。此设置确保在达到一定字节数后刷新多行事件,它与 max_lines 结合使用。
- 值类型为number
- 默认值为
500
如果事件边界未正确定义,事件的累积可能会导致 logstash 因内存不足而退出。此设置确保在达到一定行数后刷新多行事件,它与 max_bytes 结合使用。
- 值类型为 字符串
- 默认值为
"multiline"
使用给定的标签标记多行事件。此标签仅添加到实际包含多行的事件中。
- 值类型为 布尔值
- 默认值为
false
反转正则表达式模式 (如果不匹配)。
- 这是一个必需的设置。
- 值类型为 字符串
- 此设置没有默认值。
要匹配的正则表达式。
- 值类型为array
- 默认值是
[]
Logstash 默认附带大量模式,因此您不一定需要自己定义,除非您添加了额外的模式。
模式文件是纯文本格式
NAME PATTERN
例如
NUMBER \d+
- 这是一个必需的设置。
- 值可以是以下任意一项:
previous,next - 此设置没有默认值。
如果模式匹配,事件属于下一个还是上一个事件?