多行编码插件

编辑
  • 插件版本: v3.1.2
  • 发布日期: 2024-04-25
  • 变更日志

其他版本请参见 版本化插件文档

获取帮助

编辑

如有关于插件的问题,请在 Discuss 论坛中发起主题讨论。如发现错误或有功能请求,请在 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 必须是 previousnext,并指示与多行事件的关系。

negate 可以是 truefalse(默认为 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

数字

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"]

ecs_compatibility

字符串

max_bytes

字节

max_lines

数字

multiline_tag

字符串

negate

布尔值

pattern

字符串

patterns_dir

数组

what

字符串,其中之一为 ["previous", "next"]

 

auto_flush_interval

编辑
  • 值类型为 数字
  • 此设置没有默认值。

当看到匹配的新行或在这么多秒内没有追加新数据时,多行的累积将转换为事件。没有默认值。如果未设置,则不进行自动刷新。单位:秒

charset

编辑
  • 值可以是以下任何一个:ASCII-8BITUTF-8US-ASCIIBig5Big5-HKSCSBig5-UAOCP949Emacs-MuleEUC-JPEUC-KREUC-TWGB2312GB18030GBKISO-8859-1ISO-8859-2ISO-8859-3ISO-8859-4ISO-8859-5ISO-8859-6ISO-8859-7ISO-8859-8ISO-8859-9ISO-8859-10ISO-8859-11ISO-8859-13ISO-8859-14ISO-8859-15ISO-8859-16KOI8-RKOI8-UShift_JISUTF-16BEUTF-16LEUTF-32BEUTF-32LEWindows-31JWindows-1250Windows-1251Windows-1252IBM437IBM737IBM775CP850IBM852CP852IBM855CP855IBM857IBM860IBM861IBM862IBM863IBM864IBM865IBM866IBM869Windows-1258GB1988macCentEuromacCroatianmacCyrillicmacGreekmacIcelandmacRomanmacRomaniamacThaimacTurkishmacUkraineCP950CP951IBM037stateless-ISO-2022-JPeucJP-msCP51932EUC-JIS-2004GB12345ISO-2022-JPISO-2022-JP-2CP50220CP50221Windows-1256Windows-1253Windows-1255Windows-1254TIS-620Windows-874Windows-1257MacJapaneseUTF-7UTF8-MACUTF-16UTF-32UTF8-DoCoMoSJIS-DoCoMoUTF8-KDDISJIS-KDDIISO-2022-JP-KDDIstateless-ISO-2022-JP-KDDIUTF8-SoftBankSJIS-SoftBankBINARYCP437CP737CP775IBM850CP857CP860CP861CP862CP863CP864CP865CP866CP869CP1258Big5-HKSCS:2008ebcdic-cp-useucJPeuc-jp-msEUC-JISX0213eucKReucTWEUC-CNeucCNCP936ISO2022-JPISO2022-JP2ISO8859-1ISO8859-2ISO8859-3ISO8859-4ISO8859-5ISO8859-6CP1256ISO8859-7CP1253ISO8859-8CP1255ISO8859-9CP1254ISO8859-10ISO8859-11CP874ISO8859-13CP1257ISO8859-14ISO8859-15ISO8859-16CP878MacJapanASCIIANSI_X3.4-1968646CP65000CP65001UTF-8-MACUTF-8-HFSUCS-2BEUCS-4BEUCS-4LECP932csWindows31JSJISPCKCP1250CP1251CP1252externallocale
  • 默认值为 "UTF-8"

此输入中使用的字符编码。例如 UTF-8cp1252

如果您的日志文件为 Latin-1(也称为 cp1252)或其他非 UTF-8 字符集,则此设置非常有用。

由于 JSON 本身就是 UTF-8,因此这仅影响“纯文本”格式的日志。

ecs_compatibility

编辑
  • 值类型为 字符串
  • 支持的值为

    • disabled:插件仅设置 message 字段
    • v1v8:Elastic Common Schema 兼容行为(也添加了 [event][original]
  • 默认值取决于正在运行的 Logstash 版本

    • 当 Logstash 提供 pipeline.ecs_compatibility 设置时,其值将用作默认值
    • 否则,默认值为 disabled

控制此插件与 Elastic Common Schema (ECS) 的兼容性。

max_bytes

编辑
  • 值类型为 字节
  • 默认值为 "10 MiB"

如果事件边界未正确定义,事件的累积可能会导致 Logstash 因内存不足而退出。此设置确保在达到一定字节数后刷新多行事件,它与 max_lines 结合使用。

max_lines

编辑
  • 值类型为 数字
  • 默认值为 500

如果事件边界未正确定义,事件的累积可能会导致 Logstash 因内存不足而退出。此设置确保在达到一定行数后刷新多行事件,它与 max_bytes 结合使用。

multiline_tag

编辑
  • 值类型为 字符串
  • 默认值为 "multiline"

使用给定标签标记多行事件。此标签仅会添加到实际包含多行的事件中。

negate

编辑

否定正则表达式模式(*如果不匹配*)。

pattern

编辑
  • 这是必需的设置。
  • 值类型为 字符串
  • 此设置没有默认值。

要匹配的正则表达式。

patterns_dir

编辑
  • 值类型为 数组
  • 默认值为 []

Logstash 默认附带了一些模式,因此您无需自行定义,除非您要添加其他模式。

模式文件是纯文本,格式为

    NAME PATTERN

例如

    NUMBER \d+

what

编辑
  • 这是必需的设置。
  • 值可以是:previousnext
  • 此设置没有默认值。

如果模式匹配,事件属于下一个事件还是上一个事件?