【问题标题】:Is the fingerprint field in Alertmanager unique?Alertmanager 中的指纹字段是否唯一?
【发布时间】:2020-03-22 19:05:10
【问题描述】:

我正在开发一个仪表板,它接收所有 Alertmanager 读数并对其进行处理。我在请求有效负载中查找了一个唯一字段,以在我的数据库中创建一个唯一的外部警报 ID。请求负载如下所示:

{
  "status": "firing",
  "labels": {
    "alertname": "",
    "app": "",
    "cluster": "",
    "deployed_location": "",
    "instance": "",
    "job": "",
    "kubernetes_namespace": "",
    "kubernetes_pod_name": "",
    "pod_template_hash": "",
    "release": "",
    "replica": "",
    "severity": ""
  },
  "annotations": {
    "description": "",
    "summary": ""
  },
  "startsAt": "",
  "endsAt": "",
  "generatorURL": "",
  "fingerprint": ""
}

我首先使用了generatorURL 字段,但后来意识到许多不同的警报对于generatorURL 具有相同的值。我一直在尝试fingerprint,情况好多了。但是,我遇到了 2 到 15 个警报具有相同 fingerprint 的情况。

我想知道:

  1. Alertmanager 请求中真的没有唯一字段吗?
  2. Alertmanager 逻辑(或我的警报)的本质是使用相同的fingerprint 创建许多警报,我应该只处理它并在我这边处理它,即不要在如果给定的fingerprint 已经被使用,我的数据库。我还担心如果我在警报模型上设置unique=True,会错过一些具有相同指纹的新警报...

【问题讨论】:

  • 此时,我很确定指纹字段不是唯一的。不过,更有趣的是,我使用 fingerprintalertNamestartsAt 来生成唯一 ID,但我仍然收到重复警报。

标签: prometheus-alertmanager fingerprinting


【解决方案1】:

我正在开发一个类似的警报系统。我想知道是否可以将“StartAt”字段或警报的创建时间导入prometheus标签/标签,它会使图形独一无二。

【讨论】:

    【解决方案2】:

    如果跳转到alert.Fingerprint()定义,比如this one,可以找到fingerprint的impl

    所以,alert.Fingerprint() 对于labels 来说是独一无二的

    // labelSetToFingerprint works exactly as LabelsToSignature but takes a LabelSet as
    // parameter (rather than a label map) and returns a Fingerprint.
    func labelSetToFingerprint(ls LabelSet) Fingerprint {
        if len(ls) == 0 {
            return Fingerprint(emptyLabelSignature)
        }
    
        labelNames := make(LabelNames, 0, len(ls))
        for labelName := range ls {
            labelNames = append(labelNames, labelName)
        }
        sort.Sort(labelNames)
    
        sum := hashNew()
        for _, labelName := range labelNames {
            sum = hashAdd(sum, string(labelName))
            sum = hashAddByte(sum, SeparatorByte)
            sum = hashAdd(sum, string(ls[labelName]))
            sum = hashAddByte(sum, SeparatorByte)
        }
        return Fingerprint(sum)
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2021-02-19
      相关资源
      最近更新 更多