问题标签 [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.
logging - Logql 查询 avg 和 sum 给出相同的结果
我在 nginx 上有一个 loki 的 logql 查询,如下所示:
这给了我相同的结果
这意味着sum
和avg
结果是相同的,并且都给了我值的总和。我的查询有什么问题?
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")。要跳过所有潜在错误,您可以匹配空错误。(例如错误=“”)标签过滤器也可以在展开之后指定。(例如。克 | 解包延迟 | 错误=“”)
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?
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 查询?
谢谢,
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"}
选择所有内容时失败。
我怎么能做到这一点?
提前谢谢你!
logging - Grafana/Loki:如何在 LogQL 中使用多选模板变量?
我有一个自定义模板变量,它显示以下逗号分隔值:信息、错误、警告、调试。变量的名称是启用多选的 $Level。我需要它,所以当您选择超过 1 个值时,行过滤器表达式将相互堆叠,如下所示:
前任。信息+错误被选中:
{job="mylogs"} |="info" |="error"
目前,我的查询设置如下:
{job="mylogs"} |="$Level"
但是,使用当前方式,当我选择超过 1 个选项时,它不会产生任何日志。有没有办法通过 Grafana/Loki 实现这一目标?
TL;DR 有没有办法在 LogQL 行过滤器表达式中格式化 Grafana 模板变量?
json - LogQL 中的正则表达式 JSON 过滤
我想将 Kibana 查询转换为 LogQL:
我在 Grafana Explore 中尝试了以下操作,但它没有为我们的 JSON 日志消息返回任何记录:
使用!=
而不是=~
返回所有记录时:
如果我是对的,以下内容适用于文档到stack_trace
JSON 日志行的字段:
字符串类型的工作方式与日志流选择器中使用的 Prometheus 标签匹配器完全相同。这意味着您可以使用相同的操作 (=,!=,=~,!~)。
来源:标签过滤器表达式
以下似乎有效,但似乎很尴尬:
此外,如果我是对的,它会在完整的 JSON 字符串中搜索InterruptedException
和子字符串,而不是仅在其字段中搜索。Read timed out
stack_trace
是否有更类似于 LogQL 的方式将上面的 Kibana 查询转换为 LogQL?操作员应该!~
在这种情况下工作吗?
环境:Grafana 7.5.4 / 8.2.3,Loki:2.4.1
grafana - Grafana - 是否可以在基于 Loki 的仪表板查询中使用变量?
我正在 Grafana 上开发基于 Loki 的仪表板。我有一个用于在 Loki 跟踪日志中搜索文本的面板,当前查询如下:
wheresearchTrace
是“文本框”类型的变量,供用户输入搜索文本。
我想包含另一个变量skipTestLog
来跳过一些测试 cron 任务创建的日志。skipTestLog
是两个选项的自定义变量:Yes,No
.
假设测试 cron 任务创建的日志包含解析器后CronTest
字段中的文本,有没有办法根据选择的值过滤掉它们?trace_message
json
skipTestLog
grafana - 根据 Pytest 结果的 Loki 日志创建 Grafana 表仪表板
我是一个初学者,但我已经花了很多时间。我正在尝试根据 Grafana Loki 数据源的 Pytest 结果在 Grafana 中创建一个表。有多个 pytest 任务同时运行。因此,表格必须显示每个任务的进度。
例如,任务 1 的 pytest 日志如下所示
故事应该是这样的:
我认为在 Loki 中使用新功能“模式”是可行的方法,但我无法编写有效的查询。现在它让我想到了在 Loki 上编写一个 Python 日志处理器,我知道这是个坏主意。任何人都可以帮助继续依赖 Loki 的 LogQL 吗?谢谢!