写作LogQL查询来访问洛基的日志数据刚刚容易,多亏了新模式解析器与发布洛基2.3。它使编写为非结构化查询日志格式简单。和模式解析器可以是一个数量级的速度比正则表达式解析器。让我们仔细看看。
Log-parsing困境
洛基2.0引入了新的LogQL处理JSON解析器,logfmt和正则表达式。虽然JSON和logfmt解析器是快速和容易使用,正则表达式解析器既不是。
考虑NGINX的解析日志提取标签和值。找到请求的方法和状态,查询是可怕的和繁琐的。正则表达式是强调在这个示例查询:
我们可以让它简单直观的解析常见的日志格式。毕竟,这些非结构化的日志条目标记字符和空格隔开。
引入模式解析器
如果洛基2.3.0介绍了模式的解析器。它既简单易用和超级有效地提取数据从非结构化的日志。
剧透!这是相同的查询,使用模式编写解析器:
有相当大的区别这个模式表达式和正则表达式。从我自己的经验我知道这对于这个例子生成正则表达式。我花了几个迭代和20分钟。最重要的是,模式解析器解析日志行速度比正则表达式解析器。
模式解析器的语法和语义
调用模式解析器在一个LogQL查询通过指定:
|模式”<模式表达式>”
或
| <模式表达式>的模式
<模式表达式>
指定日志的结构线。它由捕获和文本。
捕获定义一个字段名称和分隔的<
和>
字符。在这个例子中,<状态>
定义了字段名的地位。这名未透露姓名的捕获< _ >
跳过并忽略匹配日志中的内容。
捕获匹配从一行的开始处,或从先前的文本集的末尾,或者下一组文字。如果一个捕捉不匹配,模式解析器停止处理日志。默认情况下,模式表达式是固定在日志的开始。如果你想改变这种行为,开始你的表达与一位不愿透露姓名的捕捉,< _ >
。
模式解析器实例
模式解析表达式的例子运行NGINX日志行。这里有三个样本NGINX日志行:
192.0.2.0——[04 / 8月/ 2021:21:12:04 + 0000]“GET / api /插件/ versioncheck ? slugIn = &grafanaVersion = 6.3.5 HTTP / 1.1”200 2”——““Go-http-client / 2.0”“220.248.51.226, 34.120.177.193”“TLSv1.2”“CN”“CN31”
198.51.100.0——[04 / 8月/ 2021:21:12:04 + 0000]”得到/ ws / ?EIO = 3外贸= polling&t = NiJ0b8H HTTP / 1.1 200 103 //www.tubolov.com/grafana/download?平台= mac”“Mozilla / 5.0(麦金塔电脑;Intel Mac OS X 10 _15_7) AppleWebKit / 605.1.15 (KHTML,像壁虎)版本/ 14.1.1 Safari 605.1.15”“2001:240:168:3400:: 1:8, 2600:1901:0: b3ea::“TLSv1.3”“JP JP13”
203.0.113.0——[04 / 8月/ 2021:21:12:04 + 0000]“GET / healthz HTTP / 1.1”200年15”——““GoogleHC / 1.0”“-”“-”“-”“-”
这是例子<模式表达式>
:
< _ >——< _ > " <法> < _ > < _ > " <地位> < _ > < _ > " < _ > " < _ >
这个表匹配字段的部分第三样NGINX日志模式表达式。注意,最后一个< _ >
字段<模式表达式>
日志中消耗结束4个字段,当它停止消费时达到的日志。
NGINX日志行字段 | NGINX样本 | <模式表达式> |
---|---|---|
remote_addr美元 | 203.0.113.0 | < _ > |
- - - - - - | - - - - - - | - - - - - - |
$ remote_user | - - - - - - | - - - - - - |
(time_local美元) | (0000年8月04 / / 2021:21:12:04 +) | < _ > |
" $请求” | “得到/ healthz HTTP / 1.1” | “<法> < _ > < _ >” |
美元的地位 | 200年 | <状态> |
bytes_sent美元 | 15 | < _ > |
“http_referer美元” | “-” | < _ > |
“http_user_agent美元” | “GoogleHC / 1.0” | “< _ >” |
“-”“-”“-”“-” | < _ > |
这个示例日志行定义方法= = 200“获得”和状态。
第二个示例使用模式解析器代理Kubernetes环境使者。这个度量查询返回99延迟/路径和方法,在几秒钟内。
quantile_over_time(0.99,{容器=“特使”}|模式”(< _ >)”<法> <路径> < _ > " < _ > < _ > < _ > < _ > <延迟> ' |打开延迟\ [$ __interval])(方法、路径)/ 1 e3
匹配日志行,本例定义方法,路径和延迟。
了解更多
展示如何阅读和简单的模式表达式,我们创建了一些在我们的GitHub库查询示例。你可以阅读更多关于模式解析器的文档。
我们希望您利用这个快速和简单的日志解析。试着自己免费模式解析器Grafana云,最简单的方法开始度量,日志、痕迹和仪表板。注册一个免费账户。