我正在尝试配置录制规则,根据文档,目前还不清楚如何设置。
我在 /loki/rules
中配置了 rules.yml 文件目录。根据文档 Recording rules ,我执行我自己的规则:
name: MyRules
interval: 1m
rules:
- record: generator:requests:rate2m
expr: |
sum(
rate({service="generator_generator"}[2m])
)
labels:
cluster: "something"
起初,这不会产生任何结果,Loki 中没有关于错误格式的日志,Prometheus 中没有指标(远程写入)。之后,我也将此文件复制到目录 rules-temp
还有/loki/rules/fake/
目录,基于文档 Ruler storage .从文档中,我不确定该文件应该位于何处,所以我将它复制到各处。结果是一样的——Loki 没有日志,Prometheus 没有。
休息一天后,我启动了Loki并找出日志:
2022-11-03T08:24:24.062210590Z level=error ts=2022-11-03T08:24:24.061854756Z caller=ruler.go:497 msg="unable to list rules" err="failed to list rule groups for user fake: failed to list rule group for user fake and namespace rules.yml: error parsing /loki/rules/fake/rules.yml: /loki/rules/fake/rules.yml: yaml: unmarshal errors:\n line 1: field name not found in type rulefmt.RuleGroups\n line 2: field interval not found in type rulefmt.RuleGroups\n line 3: field rules not found in type rulefmt.RuleGroups"
这个日志之前没有,甚至当我重新启动 Loki 时,它也不存在,不明白为什么。但我认为,Loki 无法解析我的规则文件。我发现了 corterx-tool用于验证 Loki 规则。几次运行后,我得到了新的 rules.yml 文件:
namespace: rules
groups:
- name: MyRules
interval: 1m
rules:
- record: generator:requests:rate1m
expr: |-
sum(rate({service="generator_generator"}[2m]))
labels:
cluster: something
它与文档中的不同,但看起来还可以:
$ cortextool rules lint --backend=loki rules.yml
INFO[0000] SUCCESS: 1 rules found, 0 linted expressions
在这次小成功之后,我再次运行 Loki,但在 Loki 日志或 Prometheus 中没有结果。我什至尝试设置错误的 prometheus 远程写入地址,但 Loki 没有记录任何关于此错误的信息。
我目前的 Loki 尺子配置:
ruler:
alertmanager_url: http://localhost:9093
remote_write:
enabled: true
client:
url: http://prometheus:9090/api/v1/write
Prometheus 在默认配置下运行。
版本: 洛基:2.6.1 普罗米修斯:v2.39.1
问题:
- 规则文件应该放在哪里,
/rules
之间有什么区别? ,/rules-temp
和/rules/<tenant-id>
? - 规则和规则文件的格式是什么?可以有多个文件吗?
- 为什么关于规则的日志没有出现在 Loki 日志中(错误的 Prometheus url,错误的 rules.yml 格式)?
- 如何在 Loki 中正确配置规则(记录和警报)?文档看起来很不清楚。
- 如何调试此配置和设置?基本上,如果没有日志或任何相关信息,我不知道去哪里检查是否有问题。
感谢任何提示。
最佳答案
问:规则文件应该放在哪里,/rules、/rules-temp、/rules/有什么区别?
A:这取决于您的统治者的存储后端。您将路径设置在:
ruler:
storage:
type: local
local:
directory: <rules-path>
然后,如果您有一个 Multi-Tenancy 集群,则规则文件应存储在子文件夹中 <rules-path>/<tenant-id>
.如果您不使用 Multi-Tenancy ,则规则文件应位于 <rules-path>/fake
下.
问:规则和规则文件的格式是什么?
A:格式和Prometheus一样,但是表达式是Loki的LogQL。
问:可以有多个文件吗?
A:是的,但是我没有使用本地文件系统作为统治者的存储,所以我不能提供更多细节。我的 Loki 集群是一个 Multi-Tenancy 集群,并为标尺使用 S3 存储后端。在这样的设置中,每个租户在 S3 存储桶中都有一个单独的文件夹来存放他们的规则,他们通过 Loki ruler API 上传他们的规则。这也可以用 cortextool 来完成。通过 API 上传规则时有一个限制 - 每个请求一个规则组。
问:为什么Loki日志中没有关于规则的日志(错误的Prometheus url,错误的rules.yml格式)?
答:如果你设置log_level: debug
在您的统治者上,您应该能够在日志中看到与记录/警报规则处理相关的消息。
问:如何在 Loki 中正确配置规则(记录和警报)?
A:正如我之前提到的,它与 Prometheus 中的格式相同,但查询语言不同。
问:如何调试此配置和设置?基本上,如果没有日志或任何相关信息出现问题,我不知道去哪里检查。
A:这里有一些我可以给你的想法:
- 在 Grafana 中测试您的规则表达式 > 探索您的 Loki 数据源。
- 在 Loki 和接收 Prometheus 服务器中启用调试日志级别。
- 在 Loki 上启用统治者 API 并通过向
http://<loki-ruler>:<loki-port>/loki/api/v1/rules
发送获取请求来检查您的规则是如何设置的.
关于grafana - 如何使用 Loki 配置记录和警报规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74329564/