成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入理解Alertmanager:源碼解讀如何自定義Alert的恢復時間

運維 服務器運維
在prometheus告警體系中,在告警策略正常運行時,檢測到有新的符合告警規則的信息,就產生告警發送給alertmanager,如果恢復了,也會產生恢復的信息發送給alertmangaer,這是理想的情況。

Alertmanager 處理由 Prometheus 服務器等客戶端應用程序發送的告警。負責對它們進行分組、靜默、抑制、去重并路由到正確的接收方,例如Email、Wechat、Webhook。

Prometheus告警處理邏輯的問題

在prometheus告警體系中,在告警策略正常運行時,檢測到有新的符合告警規則的信息,就產生告警發送給alertmanager,如果恢復了,也會產生恢復的信息發送給alertmangaer,這是理想的情況。

如果在告警過程中有發生告警規則的更新,比如發現告警閾值太低,調整了閾值,那么在prometheus的更新過程中,會丟棄老的評估信息,直接使用新的評估規則再次運行評估,評估過程中,如果不會再產生告警,也不會產生恢復信息。

那就會產生一個問題,以前發送給Alertmanager的舊規則生成的告警,不會收到恢復了。

總結下就是:

  • 每個評估周期持續發送告警給Alertmanger。
  • 如果有規則更新,直接新啟goroutine執行新的評估,直接放棄老的規則和goroutine。

Alertmanager的修復邏輯

Prometheus評估后發送給Alertmanger的firing告警是沒有結束時間的。

[
{
"labels": {
"alert_class": "metric",
"alert_rule_id": "940",
"alert_severity": "1",
"alert_strategy": "cwhistle_demo_00",
"alert_strategy_id": "100",
"alertname": "入流量異常告警",
"city": "chongqing2",
"tcs_instance": "10.27.38.145",
"tcs_product": "clb",
"tcs_type": "clb_tgw_inner_outer"
},
"annotations": {
"query": "barad_tbr{tcs_type=~\"clb_tgw_inner_outer\",tcs_product=~\"clb\",clb_tgw_inner_outer=~\"10.27.38.145|10.27.38.146\"} < 5",
"value": "0.00"
},
"state": "firing",
"activeAt": "2021-01-25T08:31:34.941070644Z",
"value": "0e+00"
}
]

在Alertmanger中,告警的觸發和恢復判斷是基于時間范圍實現的,Alertmanager中Alert定義如下,自帶時間范圍。

// Alert is a generic representation of an alert in the Prometheus eco-system.
type Alert struct {
// Label value pairs for purpose of aggregation, matching, and disposition
// dispatching. This must minimally include an "alertname" label.
Labels LabelSet `json:"labels"`

// Extra key/value information which does not define alert identity.
Annotations LabelSet `json:"annotations"`

// The known time range for this alert. Both ends are optional.
StartsAt time.Time `json:"startsAt,omitempty"`
EndsAt time.Time `json:"endsAt,omitempty"`
GeneratorURL string `json:"generatorURL"`
}

當 Alert.EndsAt < time.Now() 時判定為恢復。

// Resolved returns true iff the activity interval ended in the past.
func (a *Alert) Resolved() bool {
return a.ResolvedAt(time.Now())
}
// ResolvedAt returns true off the activity interval ended before
// the given timestamp.
func (a *Alert) ResolvedAt(ts time.Time) bool {
if a.EndsAt.IsZero() {
return false
}
return !a.EndsAt.After(ts)
}

在Api的接收過程中,會確保每個Alert的StartsAt和EndsAt有值。

func (api *API) postAlertsHandler(params alert_ops.PostAlertsParams) middleware.Responder {
logger := api.requestLogger(params.HTTPRequest)
alerts := OpenAPIAlertsToAlerts(params.Alerts)
now := time.Now()
api.mtx.RLock()
resolveTimeout := time.Duration(api.alertmanagerConfig.Global.ResolveTimeout)
api.mtx.RUnlock()
for _, alert := range alerts {
alert.UpdatedAt = now
// Ensure StartsAt is set.
if alert.StartsAt.IsZero() {
if alert.EndsAt.IsZero() {
alert.StartsAt = now
} else {
alert.StartsAt = alert.EndsAt
}
}
// If no end time is defined, set a timeout after which an alert
// is marked resolved if it is not updated.
if alert.EndsAt.IsZero() {
alert.Timeout = true
alert.EndsAt = now.Add(resolveTimeout)
}
if alert.EndsAt.After(time.Now()) {
api.m.Firing().Inc()
} else {
api.m.Resolved().Inc()
}
}
.....

在上述代碼中可以看到,alert.EndsAt= time.Now() + 全局配置的ResolveTimeout(默認5分鐘),也就是每個Alert默認給5分鐘的過期時間,過期就恢復。

事件告警自定義過期時間

默認的5分鐘對于prometheus metric告警是足夠的,但如果想使用基于loki的日志告警(通常為了控制資源消耗,不會設置很大的評估范圍),有時候偶發一個告警,然后很快就恢復了;或者想基于Event類型的事件告警,因為觸發頻率低,且不會持續發送,5分鐘就比較容易誤解。

那么在這里我們就可以基于Label著色和修改過期時間的方法自定義事件告警過期恢復時間。

實現如下:

這樣就可以實現事件告警的自定義恢復時間,同時可以利用Alertmanager已有的其他功能。

責任編輯:姜華 來源: 今日頭條
相關推薦

2016-10-26 20:49:24

ReactJavascript前端

2017-11-13 08:43:57

確保恢復最新

2018-06-15 09:26:13

RTORPO差異

2016-12-08 15:36:59

HashMap數據結構hash函數

2020-07-21 08:26:08

SpringSecurity過濾器

2010-06-01 15:25:27

JavaCLASSPATH

2015-01-22 15:59:07

Android源碼日期時間控件SelectTime

2014-12-10 10:37:45

Android自定義布局

2012-11-22 10:11:16

LispLisp教程

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis

2009-09-25 09:14:35

Hibernate日志

2013-09-22 14:57:19

AtWood

2020-09-23 10:00:26

Redis數據庫命令

2019-06-25 10:32:19

UDP編程通信

2017-01-10 08:48:21

2024-02-21 21:14:20

編程語言開發Golang

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2017-08-15 13:05:58

Serverless架構開發運維

2025-06-05 05:51:33

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区三区久久精品 | 久久精品国产99国产 | av免费成人 | 日韩三级在线观看 | 国产精久久久久久久 | 成人羞羞国产免费视频 | 国产精品一区二区三区四区 | 亚洲一区二区三区四区视频 | 国产精品久久久久国产a级 欧美日韩国产免费 | 鸳鸯谱在线观看高清 | 久久久久久久国产 | 五月激情综合 | 一级毛片高清 | 日韩免费视频一区二区 | 中文字幕一区二区三区精彩视频 | 中文字幕在线播放第一页 | 中文字幕啪啪 | 久久精品亚洲成在人线av网址 | 日日爱视频 | 黄在线| 一区二区免费 | 亚洲精品欧美一区二区三区 | 天天操夜夜艹 | 国产最好的av国产大片 | 中文字幕日韩欧美一区二区三区 | 欧美日韩精品在线一区 | 日韩福利视频 | 久久久久久久久久久久久九 | 午夜亚洲 | 精品欧美一区二区三区久久久小说 | 免费污视频 | 国产精品精品久久久 | 免费在线观看成人 | 欧洲亚洲一区二区三区 | 国产乱一区二区三区视频 | 精品真实国产乱文在线 | 亚洲精品一区二三区不卡 | 久久久精品网站 | 亚洲电影专区 | 黄色精品 | 亚州午夜精品 |