Filebeat多行pattern正则

Filebeat有几个接受正则表达式的配置选项。例如multiline.patterninclude_linesexclude_lines,和 exclude_files所有接受正则表达式。

注意:建议正则放在单引号内,例如'^\[?[0-9][0-9]:?[0-9][0-9]|^[[:graph:]]+'

样例 描述
单个字符
x 单个字符
. 任何字符
[xyz] 字符类
[^xyz] 非字符类
[[:alpha:]] ASCII字符类
[[:^alpha:]] 非ASCII字符类
\d Perl字符类
\D 非Perl字符类
\pN Unicode字符类(一个字母的名称)
\p{Greek} Unicode字符类
\PN 非Unicode字符类(一个字母的名称)
\P{Greek} 非Unicode字符类
复合类型
xy
x|y
重复类型
x* 以x开头
x+ 一个或者多个x
x? 零或一个x
x{n,m} n or n+1 or … or m x, prefer more
x{n,} n or more x, prefer more
x{n} exactly n x
x*? zero or more x, prefer fewer
x+? one or more x, prefer fewer
x?? zero or one x, prefer zero
x{n,m}? n or n+1 or … or m x, prefer fewer
x{n,}? n or more x, prefer fewer
x{n}? exactly n x
分组
(re) numbered capturing group (submatch)
(?P<name>re) named & numbered capturing group (submatch)
(?:re) non-capturing group
(?i)abc set flags within current group, non-capturing
(?i:re) set flags during re, non-capturing
(?i)PaTTeRN case-insensitive (default false)
(?m)multiline multi-line mode: ^ and $ match begin/end line in addition to begin/end text (default false)
(?s)pattern. let . match \n (default false)
(?U)x*abc ungreedy: swap meaning of x* and x*?, x+ and x+?, etc (default false)
空字符串
^ at beginning of text or line (m=true)
$ at end of text (like \z not \Z) or line (m=true)
\A at beginning of text
\b at ASCII word boundary (\w on one side and \W, \A, or \z on the other)
\B not at ASCII word boundary
\z at end of text
转义序列
\a bell (same as \007)
\f form feed (same as \014)
\t horizontal tab (same as \011)
\n newline (same as \012)
\r carriage return (same as \015)
\v vertical tab character (same as \013)
* literal *, for any punctuation character *
\123 octal character code (up to three digits)
\x7F two-digit hex character code
\x{10FFFF} hex character code
\Q...\E literal text ... even if ... has punctuation
ASCII字符类
[[:alnum:]] alphanumeric (same as [0-9A-Za-z])
[[:alpha:]] alphabetic (same as [A-Za-z])
[[:ascii:]] ASCII (same as \x00-\x7F])
[[:blank:]] blank (same as [\t ])
[[:cntrl:]] control (same as [\x00-\x1F\x7F])
[[:digit:]] digits (same as [0-9])
[[:graph:]] graphical (same as [!-~] == [A-Za-z0-9!"#$%&'()*+,-./:;<=>?@[\]^_` {|}~])
[[:lower:]] lower case (same as [a-z])
[[:print:]] printable (same as [ -~] == [ [:graph:]])
[[:punct:]] punctuation (same as [!-/:-@[-`{-~])
[[:space:]] whitespace (same as [\t\n\v\f\r ])
[[:upper:]] upper case (same as [A-Z])
[[:word:]] word characters (same as [0-9A-Za-z_])
[[:xdigit:]] hex digit (same as [0-9A-Fa-f])
支持Perl字符类
\d digits (same as [0-9])
\D not digits (same as [^0-9])
\s whitespace (same as [\t\n\f\r ])
\S not whitespace (same as [^\t\n\f\r ])
\w word characters (same as [0-9A-Za-z_])
\W not word characters (same as [^0-9A-Za-z_])

管理多行消息

Filebeat 收集的文件可能包含跨越多行文本的消息。例如,多行消息在包含 Java 堆栈跟踪的文件中很常见。为了正确处理这些多行事件,您需要multiline在文件中配置设置filebeat.yml以指定哪些行是单个事件的一部分。

note 如果您要将多行事件发送到 Logstash,请使用此处描述的选项来处理多行事件,然后再将事件数据发送到 Logstash。尝试在 Logstash 中实现多行事件处理(例如,通过使用 Logstash 多行编解码器)可能会导致流混合和损坏的数据。

另请阅读避免 YAML 格式问题正则表达式支持以避免常见错误。

配置选项

filebeat.inputs您可以在配置文件部分指定以下选项,filebeat.yml以控制 Filebeat 如何处理跨多行的消息。
以下示例显示如何配置 Filebeat 以处理多行消息,其中消息的第一行以方括号 ( [) 开头。

multiline.type: pattern
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after

Filebeat 获取所有不以开头的行[并将它们与之前的行合并。例如,您可以使用此配置将多行消息的以下行连接到单个事件中:

[beat-logstash-some-name-832-2015.11.28] IndexNotFoundException[no such index]
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.resolve(IndexNameExpressionResolver.java:566)
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:133)
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:77)
    at org.elasticsearch.action.admin.indices.delete.TransportDeleteIndexAction.checkBlock(TransportDeleteIndexAction.java:75)

multiline.type
定义要使用的聚合方法。默认值为pattern. 另一个选项是count让您聚合恒定数量的行。
multiline.pattern
指定要匹配的正则表达式模式。请注意,Filebeat 支持的正则表达式模式与 Logstash 支持的模式有些不同。有关受支持的正则表达式模式的列表,请参阅正则表达式支持。根据您配置其他多行选项的方式,与指定正则表达式匹配的行被视为前一行的延续或新多行事件的开始。您可以设置negate选项来否定模式。
multiline.negate
定义模式是否被否定。默认值为false.
multiline.match
指定 Filebeat 如何将匹配的行组合成一个事件。设置为after或before。这些设置的行为取决于您指定的内容negate:

image.png

note ** 该after设置相当于previousLogstash中,并且before相当于next.**
multiline.flush_pattern
指定一个正则表达式,其中当前的多行将从内存中刷新,结束多行消息。
multiline.max_lines
可以组合成一个事件的最大行数。如果多行消息包含多于max_lines,则丢弃任何其他行。默认值为 500。
multiline.timeout
在指定的超时之后,即使没有找到新的模式来启动新事件,Filebeat 也会发送多行事件。默认为 5 秒。
multiline.count_lines
聚合成单个事件的行数。
multiline.skip_newline
设置后,多行事件在没有行分隔符的情况下连接。

Java 堆栈跟踪

Java 堆栈跟踪由多行组成,初始行之后的每一行都以空格开头,如下例所示:

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)

要将这些行合并为 Filebeat 中的单个事件,请使用以下多行配置:

multiline.type: pattern
multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after

此配置将任何以空格开头的行合并到上一行。
这是一个 Java 堆栈跟踪,它提供了一个稍微复杂的示例:

Exception in thread "main" java.lang.IllegalStateException: A book has a null property
       at com.example.myproject.Author.getBookIds(Author.java:38)
       at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
       at com.example.myproject.Book.getId(Book.java:22)
       at com.example.myproject.Author.getBookIds(Author.java:35)
       ... 1 more

要将这些行合并为 Filebeat 中的单个事件,请使用以下多行配置:

multiline.type: pattern
multiline.pattern: '^[[:space:]]+(at|\.{3})[[:space:]]+\b|^Caused by:'
multiline.negate: false
multiline.match: after

In this example, the pattern matches the following lines:

  • a line that begins with spaces followed by the word at or ...
  • a line that begins with the words Caused by:
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容