正则表达式

正则表达式是什么?

正则表达式(RegEx)可以单独使用,也可以与基本搜索文档中的任何搜索功能一起使用,以提供高级功能,并可以极大地增强关键字搜索的能力。RegEx搜索被放置在两个斜杠(" / ")内。

为什么使用正则表达式?

正则表达式具有搜索复杂数据和自定义日志格式的强大功能

  • 与关键字搜索不同,RegEx可以执行部分和不区分大小写的匹配。
  • RegEx搜索可以用于搜索带有特殊字符的事件,如斜杠(/),双引号(")
  • RegEx可以与KVP和JSON搜索相结合,以匹配带有变量值的字段。*例如,如果你发送你的Apache Access Logs到InsightOps的JSON格式,你可以使用remoteIP键找到任何值,代表来自几内亚国家的ip(所有在几内亚的ip是在197.149.192.0 - 197.149.225.225)
         
1
remoteIP = /“197 \ .149 \[12]。[0-59][0 - 9]* \ \[0]。/ NX”/

关键字搜索

关键字搜索将对所有日志工作,无论其格式。关键字搜索在默认情况下是区分大小写的,并且将匹配一个完整的字符串,直到它被非字母字符分隔。例如,给定下面的日志事件。

         
1
4月13日20:01:01主机名掌管部分(/ etc / cron.hourly)[26263]:从0 anacron
2
Apr 13 20:01:01 hostname run-parts(/etc/cron.hour)[26272]: finished 0anacron

InsightOps将通过搜索“etc”或“run”匹配事件,因为文本由空格和非字母字符分隔。InsightOps不会匹配“小时”,但会匹配“小时”。

关键词搜索可以结合逻辑操作符,例如“starting AND finished”将返回两个日志事件。

注意:当您列出一系列关键字时,InsightOps自动假定每个关键字之间有一个AND。如果你想匹配一个精确的字符串,在搜索的周围放置“双引号”。

使用正则表达式关键字匹配

部分匹配

默认情况下,regex搜索将返回部分匹配。下面的搜索将匹配" complete ", " complete "和" completed "

         
1
(/完成/)

使用不区分大小写的关键字搜索意味着下面的搜索将匹配Error、Error、Error和任何其他形式的大写

         
1
我在哪里(/错误/)

建设与常规快递业务

正则表达式使用特殊字符来支持搜索更高级的模式。这些字符是+如果需要将特殊字符作为普通字符使用,则必须使用反斜杠进行转义。

多次匹配某物

的名字

例子

描述

任何

一个*

*将匹配0个或多个前一个字符

至少有一个

+

+匹配至少一次重复的前一个字符

完全

一个

匹配前一个字符的确切数字

从,

一个{x, y}

匹配范围内前一个字符的数目。

一个{y}

匹配前一个字符的限制

至少

一个{x}

至少匹配前一个字符的限制

匹配字符集

的名字

例子

描述

任何字符

点匹配任何单个字符

任何数字

\ d

匹配0-9的数字字符

任何空格

\ s

匹配任何空白字符

只要不是数字

\ D

匹配任何非数字的字符

只要不是空白

\ S

匹配除空格外的任何字符

给定

(美国广播公司)

匹配指定的任何字符

除了给定集合之外的任何集合

(^ abc)

匹配除指定字符外的任何字符

基本

正则表达式的旗帜

标志可以改变RegEx搜索的默认行为。它们在RegEx搜索的末尾,在斜杠“/”之后指定

  • /i case-insensitive:不区分大小写,默认操作为区分大小写
  • /m multiline:启用start(^)和end($)的特殊字符来匹配多行日志事件的单独行,默认操作是只匹配日志事件的开始和结束
  • /s新行:启用特殊字符(.)匹配新行
  • /U ungreedy:默认情况下RegEx是贪婪的,即搜索尝试匹配最大字符数。这导致搜索是不贪婪的,即它尝试匹配满足搜索参数的最少字符数
基本

正则表达式的例子

InsightOps RegEx可以独立使用,也可以与任何搜索功能一起使用基本搜索文档提供先进的能力。RegEx搜索被放置在两个斜杠(" / ")中,可以包括可选的标志,如" i "。

的名字

描述

/空/

包含Null的事件,例如NullPointerException

/错误/我

包含错误的事件,不区分大小写,例如error, error

/例外”。/ *”

包含带有名称的异常跟踪的事件

/ 20 [01] /

包含200或201的事件

ab * c

匹配字符串ac, abc, abbc

ab + c

匹配字符串abc, abbc,但不匹配ac

ab c {2}

匹配abbc,但不匹配abc或abbbc。

ab {1,3} c

匹配abc、abbc和abbbc

ab c {2}

匹配ac、abc、abbc

ab c {2,}

匹配abbc, abbbc,但不是abc

交流

匹配字符串abc, acc, adc,但不匹配ac。

a \ d

匹配a0 a1 a2

一个\某人

匹配一个b。

a \ D

匹配字符串ab, ac,而不是a0

Sc的\

匹配字符串abc, a0c,但不匹配c

/ /我完成

匹配字符串completed以及completed、completed和complete

场= / regexp

字段的值与正则表达式匹配

场!= /正则表达式/

字段的值与正则表达式不匹配

基本

正则表达式字段提取

Regex分组和命名允许您在日志事件中标识值并为这些值指定名称,类似于在日志事件中使用Key值对。然后可以使用这个命名的捕获组执行更复杂的搜索功能。

好处

这使您能够识别日志中不采用键值格式的关键信息片段,以便将搜索功能应用于日志中的值。通过为标识的值指定名称,可以将这些值与高级搜索函数(如GroupBy())一起使用,或用于计算计数、总和、平均值或唯一实例计数等值。它们还可以用于创建警报时的比较。这意味着您可以创建一种非键值对日志格式的键值对类型。

  • 对命名的捕获组使用标准的RE2正则表达式语法
  • 不依赖于任何日志类型或结构
  • 取消对数据采用KVP格式的要求
  • 可以在查询中使用,并保存用于创建仪表板项。

名叫捕捉组

名为capture group的RegEx是通过在表达式中使用以下语法声明的:

         
1
(? P <名称> regExp)

从' > '右侧的查询返回的结果将被赋值为' < > '中包含的名称。

考虑下面的示例日志事件,其中包含一个特定的值,如“total sale”:

         
1
12:12:14新销售活动-客户提姆-总销售额24.45 -商品毯
2
12:12:15新销售活动-顾客提姆-总销售额100.45 -单品夹克
3.
12:12:16新销售活动-客户提姆-总销售额1000.33 -商品电脑

找到' total sale '后面的值并将该值赋给名为' salvalue '的命名变量的正则表达式是:

         
1
(/总销售(? P < saleValue > \ d *) /)

一旦你捕获了密钥,你就可以对它执行所有的LEQL函数,例如:

         
1
where(/总销售额(?P<销售额>\d*)/)计算(平均:销售额)

在示例中,' salvalue '是由于正则表达式而将分配' total sale '后面的数字的名称。一旦分配到saleValue,就可以对这些数字应用平均计算。

在这种情况下,正则表达式字段提取非常有用,因为值不是键值格式(KVP),这使得很难告诉大多数系统要使用什么值。通过使用Regex命名捕获组语法,现在很容易识别值并为其分配名称。然后将此名称用作搜索查询的一部分。还可以保存查询,然后使用它创建仪表板项。