如何使用Promtail / Loki-AlertManager为日志中的每个错误发送警报?

时间:2020-06-07 15:27:53

标签: prometheus prometheus-alertmanager grafana-loki

我正在使用Promtail + Loki收集日志,但我想不出该如何提醒日志文件中的每个错误。我也在使用Prometheus,Alertmanager和Grafana。我见过有人设法做到这一点,但没有人解释细节。请注意,我不是要查找处于FIRING状态或“ Alerting”状态的Grafana仪表盘的警报。我需要做的就是每一次都知道我的其中一个日志出现错误。 如果无法完全以这种方式完成操作,那么下一个最佳解决方案是每X秒刮一次,然后发出类似“ 6条新错误消息”的警报。

3 个答案:

答案 0 :(得分: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

还有另一种方法:添加一个Promtail pipeline_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

然后您将把普罗米修斯度量标准作为常规警报进行管理。

答案 1 :(得分:0)

在Loki v2.0中,有一种新的警报方式:https://grafana.com/docs/loki/latest/alerting/

您现在可以直接在Loki中对其进行配置,并将其发送到Alertmanager。

答案 2 :(得分: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/ 中,例如 /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 返回的计数。