12

我正在使用 Promtail + Loki 来收集我的日志,但我不知道如何对日志文件中的每个错误发出警报。我也在使用 Prometheus、Alertmanager 和 Grafana。我见过一些人已经设法实现了这一点,但没有一个人解释了细节。为了清楚起见,我不是在寻找保持在 FIRING 状态的警报或具有“Alerting”状态的 Grafana 仪表板。我所需要的只是每次在我的一个日志上出现错误时都知道。如果不能完全以这种方式完成,下一个最佳解决方案是每 X 秒刮一次,然后发出类似“6 条新错误消息”的警告。

4

3 回答 3

1

With Loki v2.0 there is a new way for alerting: https://grafana.com/docs/loki/latest/alerting/

You can now configure it directly in Loki and send it to the Alertmanager.

Update:

As requested a simple example for an alert:

  groups:
  - name: NumberOfErrors
    rules:
    - alert: logs_error_count_kube_system
      expr: rate({namespace="kube-system"} |~ "[Ee]rror"[5m]) > 5
      for: 5m
      labels:
        severity: P4
        Source: Loki
于 2020-11-20T07:27:40.750 回答
0

要在 Loki 中发出警报,请将规则文件添加到配置文件中标尺部分中指定的文件夹中。

ruler:
  storage:
    type: local
    local:
      directory: /etc/loki/rules
  rule_path: /tmp/loki/rules-temp
  alertmanager_url: http://alertmanager:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true
  enable_alertmanager_v2: true

如果您的配置如上所示,请将您的规则文件添加到/etc/loki/rules/like/etc/loki/rules/app/rules1.yaml

( /tmp/loki/rules/<tenant id>/rules1.yaml)

对于类似于“6 条新错误消息”的警报,您可以使用 sum(count_over_time()) 或 count_over_time()。

如果您有 和 之类job="error"job="info"标签,并且两个作业的公共标签为app="myapp",那么count_over_time({app="myapp"})将列出各个作业的值。sum(count_over_time({app="myapp"}))将列出两个作业中所有值的总和

rules1.yaml 的示例配置:

groups:
  - name: logs
    rules:
      - alert: ErrorInLogs
        expr: sum(count_over_time({app="myapp"}|~ "[Ee]rror"[1m]) >= 1
        for: 10s
        labels:
          severity: critical
          category: logs
        annotations:
          title: "{{$value}} Errors occurred in application logs"

这里{{$value}}将给出从 expr 返回的计数。

于 2021-03-24T06:27:39.553 回答
0

我有同样的问题。

稍微调查了一下,我发现 AlertManager 只是接收警报并路由它们。如果您有一项服务可以将 Loki 搜索转换为对 AlertManager API 的调用,那么它就完成了。可能你已经有两个了。

我找到了这个线程:https ://github.com/grafana/loki/issues/1753

其中包含此视频:https ://www.youtube.com/watch?v=GdgX46KwKqo

选项 1:使用 grafana

他们展示了如何通过 Grafana 中的搜索创建警报。如果你只是添加一个类型为“Prometheus Alertmanager”的警报通知通道,你会得到它。

因此,Grafana 将触发警报,Prometheus-AlertManager 将管理它。

选项 2:使用 promtail

还有其他方法:添加一个 promtailpipeline_stage以便使用您的搜索创建一个 Prometheus 指标并将其作为任何其他指标进行管理:只需添加 Prometheus 警报并从 AlertManager 管理它。

您可以阅读上一个链接中的示例:

pipeline_stages:
  - match:
      selector: '{app="promtail"} |= "panic"'
  - metrics:
      panic_total:
        type: Counter
        description: "total number of panic"
        config:
          match_all: true
          action: inc

并且您将像往常一样管理 prometheus 指标。

于 2020-08-03T14:19:33.617 回答