问题:
- 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)
}