gpt4 book ai didi

prometheus-alertmanager - Alertmanager 中的指纹字段是唯一的吗?

转载 作者:行者123 更新时间:2023-12-04 10:57:52 31 4
gpt4 key购买 nike

我正在开发一个仪表板,它接收所有 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 .

我想知道:
  • Alertmanager 请求中真的没有唯一字段吗?
  • Alertmanager 逻辑(或我的警报的性质)的本质是使用相同的 fingerprint 创建了许多警报。我应该处理它并在我这边处理它,即如果给定的 fingerprint 不在我的数据库中创建事件已经使用。我也担心如果我设置 unique=True在我的警报模型中,一些具有相同指纹的新警报将被遗漏...
  • 最佳答案

    如果你跳转到 alert.Fingerprint()定义,如 this one ,可以找到fingerprint的实现
    所以,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)
    }

    关于prometheus-alertmanager - Alertmanager 中的指纹字段是唯一的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59066569/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com