问题标签 [logql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
135 浏览

logging - Logql 查询 avg 和 sum 给出相同的结果

我在 nginx 上有一个 loki 的 logql 查询,如下所示:

这给了我相同的结果

这意味着sumavg结果是相同的,并且都给了我值的总和。我的查询有什么问题?

0 投票
0 回答
730 浏览

prometheus - 您如何通过 LogQL 从日志行中提取和操作多个值以进行绘图?

我有一个系统将记录导入数据库,然后将导入持续时间记录为 hh:mm:ss.fffffff。这些日志被导入 Loki,我正在尝试在 Grafana 中创建导入时间图。下面是一个示例日志行:

2021-10-13T20:59:41.546540906Z 标准输出 F [10] INFO Import.Actions.Base.ImportController - 导入时间 00:00:04.3612494

我有下面的查询,它使用正则表达式来解析分钟和秒,然后使用 unwrap 和 avg_over_time 来绘制这些值,但它只适用于 1 分钟以下的时间:

sum(avg_over_time({app="import"} | regexp `Import time 00:(?P<processing_mins>\d\d):(?P<processing_secs>\d+\.\d+)` | processing_secs > 0 | unwrap processing_secs [2m]))

当持续时间类似于 00:01:05.000000 时,时间会被误报为 5s,而不是 1m 5s。有没有办法让 Loki / Grafana 将 01:05 理解为持续时间,或者对我提取的两个值进行数学运算并绘制图表?我试图做类似的事情:

sum(avg_over_time({app="import"} | regexp `Import time 00:(?P<processing_mins>\d\d):(?P<processing_secs>\d+\.\d+)` | processing_secs > 0 | unwrap processing_mins * 60 + processing_secs [2m]))

但这不起作用。

我还尝试了以下方法来创建持续时间(文档表明 Loki 理解持续时间https://grafana.com/docs/loki/latest/logql/),但我也遇到了错误:

avg_over_time({app="import"} |= "Import time" | regexp `Import time 00:(?P<processing_mins>\d\d):(?P<processing_secs>\d+\.\d+)` | label_format duration="{{.processing_mins}}m{{.processing_secs}}s" | unwrap duration[1m])

给了我这个错误:

管道错误:'SampleExtractionErr' 系列:'{ error ="SampleExtractionErr", app="import", container="eps-aapimport", duration="00m04.0713535s", filename="/var/log/pods/import -fb874d5fc-9v64l_522d5b82-78c0-4780-a256-f3b95b62e269/import/0.log", job="stable/import", namespace="stable", pod="import-fb874d5fc-9v64l", pod_template_hash="fb874d5fc", processing_mins="00", processing_secs="04.0713535"}'。使用标签过滤器有意跳过此错误。(例如 | error !="SampleExtractionErr")。要跳过所有潜在错误,您可以匹配空错误。(例如错误=“”)标签过滤器也可以在展开之后指定。(例如。克 | 解包延迟 | 错误=“”)

0 投票
2 回答
320 浏览

prometheus - 如何在 Grafana 中绘制每 1 秒事件速率的 max-in-1h-window?

我们从外部 API 获取的速率限制为每秒 500 次。我想跟踪随着用户群以周为单位增长,我们离这个限制有多近。我不需要每秒的准确速率,我需要 1 小时窗口内的最大 1 秒速率。提取是突发的,因此超过 1 秒的速率可能远高于 1 小时甚至 1 分钟的平均速率。

我在 fetches 上有一个 Prometheus 计数器,可以使用这个查询:

max_over_time(sum(rate(fetches_counter_total{namespace="$namespace"}[1m]))[1h:1m])

这会正确执行最大窗口,但仅适用于 1 分钟平均速率而不是 1 秒速率。当我将结尾更改为[1s]))[1h:1s])Grafana 时说“没有数据”并且没有显示任何情节。

我认为可能是 Prometheus 不够快,所以我在代码中添加了一个日志,每次提取发生时,我可以使用以下查询从 Loki 获取日志速率:

sum(count_over_time({namespace="$namespace"} |= "Fetch happened log text" [1s]))

这准确地给出了 1 秒的速率,但是当我将范围设置为一周时,点数比一周内的秒数少得多,并且每次刷新都会显示不同的点子集。为了获得最大窗口,我尝试了这个查询:

max_over_time(sum(count_over_time({namespace="$namespace"} |= "Fetch happened log text" [1s]))[5m:1s])

但它会抛出一个错误: parse error at line 1, col 15: syntax error: unexpected SUM, expecting NUMBER or { or (

现在我被困住了。从文档看来,unwrap记录日志可能会有所帮助,但我没有任何标签,也不知道如何应用于unwrap这种情况。

总之,是否有可能从 Prometheus 获得 1 秒速率或从 Loki 获得日志数量的 max_over_time?

0 投票
0 回答
48 浏览

logging - Loki LogQL first_over_time 不返回数据

我有以下业务用例:一个工作流(WorkflowId 列)有多个正在运行的实例(InstanceId 列),每个正在运行的实例都有多个步骤(步骤列),每个步骤都有多个事件(事件列)。我正在使用 Loki (Grafana) 存储以下时间序列:

我想计算每个 WorkflowId 的 Step(UploadDocuments) 的平均持续时间,这意味着首先计算每个 InstanceId 的步骤持续时间 (UploadDocuments)

然后为每个 WorkflowId 平均此持续时间。

我尝试通过 InstanceId 计算 First_Occurrence_Of_Step(UploadDocuments)

但没有结果...

哪个是计算每个 WorkflowId 的 Step(UploadDocuments) 平均值的正确 LogQL 查询?

谢谢,

0 投票
1 回答
565 浏览

grafana - 在 grafana loki 查询 (LogQL) 上使用变量

我已在服务器上成功安装 Loki,在数据中心的多台主机上安装 Promtail。每个主机运行不同数量的 tomcat,例如 tomcat10、tomcat11...tomcat20。

所以在 promtail 上,我的工作得到一个带有主机名的标签,__path__类似于work/java/tomcat*/logs*.

现在我在 Postgre 上添加与这些 tomcat 相关的不同应用程序名称,以及主机及其名称。

但我正在努力使用 Grafana 上的 LogQL 查询来访问这些变量。例如,我在 Grafana 中定义了以下名为varHost的变量

select server __value, server __text from loki_promtail.servers order by id ASC

假设我想访问 Host Saturn上的每个日志。它很容易使用{job="saturn"},但我想使用 ${varHost} 代替 Saturn(这是主机的名称),因此同一个面板可以显示多个主机信息。

同样,假设我正在尝试访问/work/java/tomcat10/logs/catalina.out. 我希望能够在 LogQL 查询中连接 varApp,因此, {filename="/work/java/tomcat10/logs/catalina.out"}我不想要类似的东西{filename="/work/java/tomcat${varApp}/logs/catalina.out"},我正在使用正则表达式 但在 Grafana 中的 ${varApp} 中{filename=~"/work/java/tomcat${varApp}/logs/catalina.out"}选择所有内容时失败。

我怎么能做到这一点?

提前谢谢你!

0 投票
1 回答
189 浏览

grafana - Grafana Loki LogQL 条形量规按总顺序排列

我正在使用 Grafana 和 Loki 来分析来自我的应用程序的日志,并且已经在一些地方使用了 Bar Gauge。

这是我的查询:

我得到:

在此处输入图像描述

我想知道是否可以根据度量结果对结果进行排序?或者,如果我可以使用其他替代方法来实现类似的结果?

谢谢。

0 投票
1 回答
243 浏览

logging - Grafana/Loki:如何在 LogQL 中使用多选模板变量?

我有一个自定义模板变量,它显示以下逗号分隔值:信息、错误、警告、调试。变量的名称是启用多选的 $Level。我需要它,所以当您选择超过 1 个值时,行过滤器表达式将相互堆叠,如下所示:

前任。信息+错误被选中: {job="mylogs"} |="info" |="error"

目前,我的查询设置如下: {job="mylogs"} |="$Level"

但是,使用当前方式,当我选择超过 1 个选项时,它不会产生任何日志。有没有办法通过 Grafana/Loki 实现这一目标?

TL;DR 有没有办法在 LogQL 行过滤器表达式中格式化 Grafana 模板变量?

0 投票
2 回答
870 浏览

json - LogQL 中的正则表达式 JSON 过滤

我想将 Kibana 查询转换为 LogQL:

我在 Grafana Explore 中尝试了以下操作,但它没有为我们的 JSON 日志消息返回任何记录:

使用!=而不是=~返回所有记录时:

如果我是对的,以下内容适用于文档到stack_traceJSON 日志行的字段:

字符串类型的工作方式与日志流选择器中使用的 Prometheus 标签匹配器完全相同。这意味着您可以使用相同的操作 (=,!=,=~,!~)。

来源:标签过滤器表达式

以下似乎有效,但似乎很尴尬:

此外,如果我是对的,它会在完整的 JSON 字符串中搜索InterruptedException和子字符串,而不是仅在其字段中搜索。Read timed outstack_trace

是否有更类似于 LogQL 的方式将上面的 Kibana 查询转换为 LogQL?操作员应该!~在这种情况下工作吗?

环境:Grafana 7.5.4 / 8.2.3,Loki:2.4.1

0 投票
1 回答
256 浏览

grafana - Grafana - 是否可以在基于 Loki 的仪表板查询中使用变量?

我正在 Grafana 上开发基于 Loki 的仪表板。我有一个用于在 Loki 跟踪日志中搜索文本的面板,当前查询如下:

wheresearchTrace是“文本框”类型的变量,供用户输入搜索文本。

我想包含另一个变量skipTestLog来跳过一些测试 cron 任务创建的日志。skipTestLog是两个选项的自定义变量:Yes,No.

假设测试 cron 任务创建的日志包含解析器后CronTest字段中的文本,有没有办法根据选择的值过滤掉它们?trace_messagejsonskipTestLog

0 投票
0 回答
89 浏览

grafana - 根据 Pytest 结果的 Loki 日志创建 Grafana 表仪表板

我是一个初学者,但我已经花了很多时间。我正在尝试根据 Grafana Loki 数据源的 Pytest 结果在 Grafana 中创建一个表。有多个 pytest 任务同时运行。因此,表格必须显示每个任务的进度。

例如,任务 1 的 pytest 日志如下所示

故事应该是这样的:

我认为在 Loki 中使用新功能“模式”是可行的方法,但我无法编写有效的查询。现在它让我想到了在 Loki 上编写一个 Python 日志处理器,我知道这是个坏主意。任何人都可以帮助继续依赖 Loki 的 LogQL 吗?谢谢!