mhy*_*efi 6 fingerprinting prometheus-alertmanager
我正在开发一个仪表板,它接收所有 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": ""
}
Run Code Online (Sandbox Code Playgroud)
我第一次使用该generatorURL字段,但后来意识到许多不同的警报具有相同的值generatorURL。我一直在努力fingerprint,情况好多了。但是,我遇到过 2 到 15 个警报具有相同fingerprint.
我想知道:
fingerprint,则不要在我的数据库中创建事件fingerprint已使用。我还担心,如果我设置unique=True警报模型,一些具有相同指纹的新警报将会被错过......如果你跳转到alert.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)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3968 次 |
| 最近记录: |