From 47fe0d94c830927af3e3551f57a7175d1b9f7609 Mon Sep 17 00:00:00 2001 From: zhanghan2021 Date: Tue, 29 Oct 2024 16:42:12 +0800 Subject: [PATCH] get prometheus alerting by it's api --- server/model/alert.go | 28 +++++++++++++++ server/service/alertservice.go | 49 +++++++++++++++++++++++++++ server/service/prometheus/ruleyaml.go | 6 +++- 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 server/model/alert.go create mode 100644 server/service/alertservice.go diff --git a/server/model/alert.go b/server/model/alert.go new file mode 100644 index 0000000..e31eeb5 --- /dev/null +++ b/server/model/alert.go @@ -0,0 +1,28 @@ +package model + +type AlertsResponse struct { + Status string `json:"status"` + Data struct { + Alerts []AlertResponse `json:"alerts"` + } `json:"data"` +} + +type AlertResponse struct { + Labels struct { + AlertName string `json:"alertname"` + Group string `json:"group"` + UserName string `json:"userName"` + DepartmentName string `json:"departmentName"` + Instance string `json:"instance"` + Job string `json:"job"` + Severity string `json:"severity"` + Metric string `json:"metric"` + } `json:"labels"` + Annotations struct { + Description string `json:"description"` + Summary string `json:"summary"` + } `json:"annotations"` + State string `json:"state"` + ActiveAt string `json:"activeAt"` + Value string `json:"value"` +} diff --git a/server/service/alertservice.go b/server/service/alertservice.go new file mode 100644 index 0000000..5d3fb23 --- /dev/null +++ b/server/service/alertservice.go @@ -0,0 +1,49 @@ +package service + +import ( + "encoding/json" + "io/ioutil" + "net/http" + + "openeuler.org/PilotGo/prometheus-plugin/config" + "openeuler.org/PilotGo/prometheus-plugin/model" +) + +func pullAlert() ([]model.AlertResponse, error) { + remote := "http://" + config.Config().PrometheusServer.Addr + "/api/v1/alerts" + + request, err := http.NewRequest("GET", remote, nil) + if err != nil { + return nil, err + } + + client := &http.Client{Transport: &http.Transport{}} + + resp, err := client.Do(request) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + defer client.CloseIdleConnections() + + var alerts model.AlertsResponse + err = json.Unmarshal(body, &alerts) + if err != nil { + return nil, err + } + if alerts.Status != "success" { + return nil, err + } + var data []model.AlertResponse + for _, alert := range alerts.Data.Alerts { + if alert.State == "firing" { + data = append(data, alert) + } + } + return data, nil +} diff --git a/server/service/prometheus/ruleyaml.go b/server/service/prometheus/ruleyaml.go index a27c058..d57abae 100644 --- a/server/service/prometheus/ruleyaml.go +++ b/server/service/prometheus/ruleyaml.go @@ -106,6 +106,9 @@ func rollBackPromAlertRuleYaml() error { } return nil } + +var SetDelayTicker bool + func reloadPrometheus() error { cmd := "systemctl stop prometheus && systemctl start prometheus" _, _, stderr, err := utils.RunCommand(cmd) @@ -113,7 +116,8 @@ func reloadPrometheus() error { return err } if len(stderr) != 0 { - return errors.New("重启kylin-monitor失败:" + stderr) + return errors.New("重启prometheus失败:" + stderr) } + SetDelayTicker = true return nil } -- Gitee