add alerting notification

This commit is contained in:
liugq 2023-04-06 16:16:44 +08:00
parent c8cd0b80a4
commit 3fafe39b0d
7 changed files with 147 additions and 2 deletions

View File

@ -608,6 +608,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/builtin-calakp97h710dpnp1fa2
"id": "builtin-calakp97h710dpnp1fa2",
"created": "2022-06-16T03:58:29.437447113Z",
"updated": "2022-07-21T23:12:51.111569117Z",
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"name": "CPU utilization is Too High",
"enabled": false,
"resource": {
@ -734,6 +738,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/builtin-cal8n7p7h710dpnoaps0
"updated": "2022-07-13T04:00:06.181994982Z",
"name": "Cluster Health Change to Red",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -851,6 +859,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/builtin-cal8n7p7h710dpnogps1
"updated": "2022-07-22T00:06:26.498903821Z",
"name": "Disk utilization is Too High",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -980,6 +992,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/builtin-cbp20n2anisjmu4gehc5
"updated": "2022-08-09T08:52:44.633455664Z",
"name": "Elasticsearch node left cluster",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1074,6 +1090,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/builtin-calavvp7h710dpnp32r3
"updated": "2022-07-21T23:10:36.70696738Z",
"name": "Index Health Change to Red",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1168,6 +1188,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/builtin-calaqnh7h710dpnp2bm8
"updated": "2022-07-21T23:12:07.142532243Z",
"name": "JVM utilization is Too High",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1292,6 +1316,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/builtin-cbp2e4ianisjmu4giqs7
"updated": "2022-08-09T09:39:29.604751601Z",
"name": "Search latency is great than 500ms",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1414,6 +1442,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/builtin-calgapp7h710dpnpbeb6
"updated": "2022-07-22T00:03:34.044562893Z",
"name": "Shard Storage >= 55G",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1509,6 +1541,10 @@ POST $[[INDEX_PREFIX]]alert-rule/_doc/cb34sfl6psfiqtovhpt4
"updated": "2022-08-09T08:40:05.323148338Z",
"name": "Too Many Deleted Documents",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1632,8 +1668,8 @@ POST $[[INDEX_PREFIX]]view/_doc/cb34sfl6psfiqtovhpt4
"name": "Gateway Metrics",
"description": "",
"creator": {
"name": "admin",
"id": "default_user_admin"
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"view_id": "cb34sfl6psfiqtovhpt4",
"config":{

View File

@ -573,6 +573,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-calakp97h710dpnp1fa2
"updated": "2022-07-21T23:12:51.111569117Z",
"name": "CPU utilization is Too High",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -697,6 +701,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-cal8n7p7h710dpnoaps0
"updated": "2022-07-13T04:00:06.181994982Z",
"name": "Cluster Health Change to Red",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -814,6 +822,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-cal8n7p7h710dpnogps1
"updated": "2022-07-22T00:06:26.498903821Z",
"name": "Disk utilization is Too High",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -943,6 +955,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-cbp20n2anisjmu4gehc5
"updated": "2022-08-09T08:52:44.633455664Z",
"name": "Elasticsearch node left cluster",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1037,6 +1053,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-calavvp7h710dpnp32r3
"updated": "2022-07-21T23:10:36.70696738Z",
"name": "Index Health Change to Red",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1131,6 +1151,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-calaqnh7h710dpnp2bm8
"updated": "2022-07-21T23:12:07.142532243Z",
"name": "JVM utilization is Too High",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1255,6 +1279,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-cbp2e4ianisjmu4giqs7
"updated": "2022-08-09T09:39:29.604751601Z",
"name": "Search latency is great than 500ms",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1377,6 +1405,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-calgapp7h710dpnpbeb6
"updated": "2022-07-22T00:03:34.044562893Z",
"name": "Shard Storage >= 55G",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1472,6 +1504,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/cb34sfl6psfiqtovhpt4
"updated": "2022-08-09T08:40:05.323148338Z",
"name": "Too Many Deleted Documents",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",

View File

@ -630,6 +630,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-calakp97h710dpnp1fa2
"updated": "2022-07-21T23:12:51.111569117Z",
"name": "CPU utilization is Too High",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -754,6 +758,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-cal8n7p7h710dpnoaps0
"updated": "2022-07-13T04:00:06.181994982Z",
"name": "Cluster Health Change to Red",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -871,6 +879,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-cal8n7p7h710dpnogps1
"updated": "2022-07-22T00:06:26.498903821Z",
"name": "Disk utilization is Too High",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1000,6 +1012,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-cbp20n2anisjmu4gehc5
"updated": "2022-08-09T08:52:44.633455664Z",
"name": "Elasticsearch node left cluster",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1094,6 +1110,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-calavvp7h710dpnp32r3
"updated": "2022-07-21T23:10:36.70696738Z",
"name": "Index Health Change to Red",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1188,6 +1208,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-calaqnh7h710dpnp2bm8
"updated": "2022-07-21T23:12:07.142532243Z",
"name": "JVM utilization is Too High",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1312,6 +1336,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-cbp2e4ianisjmu4giqs7
"updated": "2022-08-09T09:39:29.604751601Z",
"name": "Search latency is great than 500ms",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1434,6 +1462,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/builtin-calgapp7h710dpnpbeb6
"updated": "2022-07-22T00:03:34.044562893Z",
"name": "Shard Storage >= 55G",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",
@ -1529,6 +1561,10 @@ POST $[[INDEX_PREFIX]]alert-rule/doc/cb34sfl6psfiqtovhpt4
"updated": "2022-08-09T08:40:05.323148338Z",
"name": "Too Many Deleted Documents",
"enabled": false,
"creator": {
"name": "$[[USERNAME]]",
"id": "$[[USER_ID]]"
},
"resource": {
"resource_id": "$[[RESOURCE_ID]]",
"resource_name": "$[[RESOURCE_NAME]]",

View File

@ -25,6 +25,10 @@ type Rule struct {
LastEscalationTime time.Time `json:"-"` //标识最近一次告警升级发送通知的时间
SearchText string `json:"-" elastic_mapping:"search_text:{type:text,index_prefixes:{},index_phrases:true, analyzer:suggest_text_search }"`
Expression string `json:"-"`
Creator struct {
Name string `json:"name" elastic_mapping:"name: { type: keyword }"`
Id string `json:"id" elastic_mapping:"id: { type: keyword }"`
} `json:"creator" elastic_mapping:"creator:{type:object}"`
}
func (rule *Rule) GetOrInitExpression() (string, error){

View File

@ -12,6 +12,7 @@ import (
"infini.sh/console/model/alerting"
alerting2 "infini.sh/console/service/alerting"
_ "infini.sh/console/service/alerting/elasticsearch"
"infini.sh/framework/core/api/rbac"
httprouter "infini.sh/framework/core/api/router"
"infini.sh/framework/core/elastic"
"infini.sh/framework/core/event"
@ -40,6 +41,12 @@ func (alertAPI *AlertAPI) createRule(w http.ResponseWriter, req *http.Request, p
}, http.StatusInternalServerError)
return
}
user, err := rbac.FromUserContext(req.Context())
if err != nil {
log.Error(err)
alertAPI.WriteError(w, err.Error(), http.StatusInternalServerError)
return
}
var ids []string
for _, rule := range rules {
exists, err := checkResourceExists(&rule)
@ -73,6 +80,10 @@ func (alertAPI *AlertAPI) createRule(w http.ResponseWriter, req *http.Request, p
}
}
rule.Metrics.Groups = groups
if user != nil {
rule.Creator.Name = user.Username
rule.Creator.Id = user.UserId
}
err = orm.Save(nil, rule)
if err != nil {

View File

@ -445,6 +445,10 @@ func (module *Module) initialize(w http.ResponseWriter, r *http.Request, ps http
return w.Write([]byte(cfg.ID))
case "RESOURCE_NAME":
return w.Write([]byte(cfg.Name))
case "USER_ID":
return w.Write([]byte("default_user_" + request.BootstrapUsername))
case "USERNAME":
return w.Write([]byte(request.BootstrapUsername))
}
panic(errors.Errorf("unknown tag: %v", tag))
})

View File

@ -10,6 +10,7 @@ import (
"fmt"
"github.com/Knetic/govaluate"
log "github.com/cihub/seelog"
"infini.sh/console/model"
"infini.sh/console/model/alerting"
alerting2 "infini.sh/console/service/alerting"
"infini.sh/console/service/alerting/action"
@ -720,6 +721,23 @@ func (engine *Engine) Do(rule *alerting.Rule) error {
if err != nil {
return fmt.Errorf("save alert message error: %w", err)
}
userID := rule.Creator.Id
if userID == "" {
userID = "*"
}
notification := &model.Notification{
UserId: util.ToString(userID),
Type: model.NotificationTypeNotification,
MessageType: model.MessageTypeAlerting,
Status: model.NotificationStatusNew,
Title: alertItem.Title,
Body: alertItem.Message,
Link: "/alerting/message",
}
err = orm.Create(nil, notification)
if err != nil {
return fmt.Errorf("failed to create notification, err: %w", err)
}
}else{
alertMessage.Title = alertItem.Title
alertMessage.Message = alertItem.Message