grafana - 如何使用 Loki 配置记录和警报规则

标签 grafana grafana-loki

我正在尝试配置录制规则,根据文档,目前还不清楚如何设置。

我在 /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

问题:

  1. 规则文件应该放在哪里,/rules 之间有什么区别? , /rules-temp/rules/<tenant-id>
  2. 规则和规则文件的格式是什么?可以有多个文件吗?
  3. 为什么关于规则的日志没有出现在 Loki 日志中(错误的 Prometheus url,错误的 rules.yml 格式)?
  4. 如何在 Loki 中正确配置规则(记录和警报)?文档看起来很不清楚。
  5. 如何调试此配置和设置?基本上,如果没有日志或任何相关信息,我不知道去哪里检查是否有问题。

感谢任何提示。

最佳答案

问:规则文件应该放在哪里,/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/

相关文章:

docker - 为什么 Loki 的 Docker Driver Client 在一段时间后停止记录?

grafana - loki ingress-nginx 通过正则表达式 logql 提取标签

grafana - 如何在grafana的Table Panel中添加颜色

docker - Promtail - 基于带有 docker-compose 标签的服务发现和 Grafana 日志浏览器中的标签

regex - 如何在正则表达式中获取多个值?

grafana - 在 Grafana 中合并 Loki 的多条日志行

amazon-web-services - AWS云信息: is supporting multiple LogDrivers possible in ContainerDefinitions

mongodb - 以 MongoDB 作为数据源的 Grafana

docker - Grafana + InfluxDB配置

excel - 将 Azure Blob 存储连接到 Grafana