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

如何快速實(shí)現(xiàn)Prometheus告警聚合

數(shù)據(jù)庫 其他數(shù)據(jù)庫
在 Prometheus 中,告警聚合是指將多個相關(guān)的告警事件合并為單個聚合告警。當(dāng)存在大量具有相同或相似問題的告警時,告警聚合可以幫助減少噪聲,并提供更清晰、更有可讀性的告警信息。

上篇回顧

上篇文章我們主要對告警排班進(jìn)行了闡述,具體實(shí)現(xiàn)思路可以添加下方二維碼一起來聊一聊。當(dāng)然我們針對告警排班并沒有做到通用,針對這種情況后期會輸出一個可通用demo。當(dāng)我們在使用告警時經(jīng)常會遇到告警洪流的問題,所以我們針對此類問題特此做一了個告警聚合來盡可能的避免改問題的出現(xiàn)

告警聚合

我們看一下GPT針對告警聚合給出的解釋

在 Prometheus 中,告警聚合是指將多個相關(guān)的告警事件合并為單個聚合告警。當(dāng)存在大量具有相同或相似問題的告警時,告警聚合可以幫助減少噪聲,并提供更清晰、更有可讀性的告警信息。

通過告警聚合,可以將多個相關(guān)的告警事件合并為一個聚合告警,并在其中提供概要和摘要信息。這樣,當(dāng)出現(xiàn)大規(guī)模故障或問題時,可以避免大量重復(fù)的單獨(dú)告警,而是以更簡潔的方式提供關(guān)鍵信息。

告警聚合通常基于共享標(biāo)簽(例如,相同的實(shí)例、相同的任務(wù)等)來確定哪些告警應(yīng)該被聚合。在 Prometheus 的配置文件中,可以使用 group_by 關(guān)鍵字來定義告警聚合規(guī)則。

案例介紹

基于告警認(rèn)領(lǐng)功能實(shí)現(xiàn)代碼的基礎(chǔ)上進(jìn)行稍加修改(代碼可以添加下方二維碼獲取),依舊使用gin、gorm是實(shí)現(xiàn)針對告警名稱的聚合,結(jié)合template簡單展示告警詳情列表

環(huán)境概述

# kubectl get nodes 
NAME               STATUS   ROLES                  AGE   VERSION
k8s-master-50.57   Ready    control-plane,master   96d   v1.20.5
k8s-node-50.58     Ready    <none>                 96d   v1.20.5
k8s-node-50.59     Ready    <none>                 96d   v1.20.5

# kubectl get pod -n monitoring 
NAME                                  READY   STATUS    RESTARTS   AGE
alertmanager-main-0                   2/2     Running   0          8d
alertmanager-main-1                   2/2     Running   0          8d
alertmanager-main-2                   2/2     Running   0          8d
blackbox-exporter-55c457d5fb-5m7ql    3/3     Running   0          8d
grafana-9df57cdc4-gpzsq               1/1     Running   0          8d
kube-state-metrics-56dbb74497-gpkn9   3/3     Running   0          8d
node-exporter-4wl6d                   2/2     Running   0          8d
node-exporter-b4595                   2/2     Running   0          8d
node-exporter-g4l99                   2/2     Running   0          8d
prometheus-adapter-59df95d9f5-tnt4w   1/1     Running   0          8d
prometheus-adapter-59df95d9f5-xhz5v   1/1     Running   0          8d
prometheus-k8s-0                      2/2     Running   1          8d
prometheus-k8s-1                      2/2     Running   1          10m
prometheus-operator-c46b8b7c9-mg9cv   2/2     Running   0          8d
  • golang版本:1.17.10
  • gin版本:1.9.0
  • gorm版本:1.25.1

快速開始

  1. 釘釘機(jī)器人創(chuàng)建

這里就不做過多的說明了,詳細(xì)請看告警認(rèn)領(lǐng)功能實(shí)現(xiàn)章節(jié)

  1. 創(chuàng)建template模板
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>告警詳情</title>
</head>
<body>
    <table id="tfhover" class="tftable">
        {{ if gt (len .slice) 0 }}
        <tr>
            <th >告警序號</th>
            <th>告警名稱</th>
            <th>告警實(shí)例</th>
            <th>告警時間</th>
            <th>告警詳情</th>
        </tr>
        {{ range $index, $value := .slice }}
        <tr>
            <td>{{ $value.ID }}</td>
            <td>{{ $value.AlertName }}</td>
            <td>{{ $value.Instance }}</td>
            <td>{{ $value.CreatedAt }}</td>
            <td>{{ $value.AlertInfo }}</td>
        </tr>
        {{ end }}
        {{ else }}
        <tr>
            <td colspan="3">No data available</td>
        </tr>
        {{ end }}
    </table>
</body>
</html>

<style type="text/css">
    table.tftable {font-size:12px;color:#333333;width:100%;border-width: 1px;border-color: #729ea5;border-collapse: collapse;}
    table.tftable th {font-size:12px;background-color:#acc8cc;border-width: 1px;padding: 8px;border-style: solid;border-color: #729ea5;text-align:left;}
    table.tftable tr {background-color:#d4e3e5;}
    table.tftable td {font-size:12px;border-width: 1px;padding: 8px;border-style: solid;border-color: #729ea5;}
</style>

<script type="text/javascript">
    window.onload=function(){
        var tfrow = document.getElementById('tfhover').rows.length;
        var tbRow=[];
        for (var i=1;i<tfrow;i++) {
            tbRow[i]=document.getElementById('tfhover').rows[i];
            tbRow[i].onmouseover = function(){
                this.style.backgroundColor = '#ffffff';
            };
            tbRow[i].onmouseout = function() {
                this.style.backgroundColor = '#d4e3e5';
            };
        }
    };
</script>

這里只是簡單的展示了告警詳情,小伙伴也可以自定義該template

核心代碼

  1. 聚合實(shí)例
func (pa *prometheusAlert) AddPrometheusAlert(paMsg model.Alerts) (err error) {
 var alertInfo model.PrometheusAlert
 var (
  uids       []string
  instance   []string
  claimUsers string
  title      string
 )
 for _, alert := range paMsg.Alerts {
  alertInfo.UID = utils.EntryMd5([]string{alert.Labels.AlertName, alert.Labels.Pod, alert.Labels.Namespace,
   alert.Labels.Severity, alert.StartsAt.String()})
  alertInfo.AlertName = alert.Labels.AlertName
  alertInfo.Instance = alert.Labels.Instance
  alertInfo.Server = alert.Labels.Server
  alertInfo.Severity = alert.Labels.Severity
  alertInfo.AlertInfo = alert.Annotations.Description
  alertInfo.Pod = alert.Labels.Pod
  alertInfo.Pod = alert.Labels.Container
  alertInfo.Namespace = alert.Labels.Namespace
  _, uid := db.PrometheusAlert.AddPrometheusAlert(alertInfo)
  uids = append(uids, uid)
  alertMsg, _ := db.PrometheusAlert.SelectPrometheusAlert(alertInfo.UID)
  instance = append(instance, alertMsg.Instance)
 }
 if len(instance) >= 2 {
  instance = instance[:2]
  instance = append(instance, "\n\n<font color=\"#02b340\">實(shí)例過多請點(diǎn)擊詳情查看</font>")
 }
 data, title := template.DingGroupAlert(paMsg.Alerts[0].Labels.AlertName, paMsg.Alerts[0].Annotations.Description, strings.Join(instance, ","))
 data += fmt.Sprintf("### [查看詳情](dingtalk://dingtalkclient/page/link?url=%s&pc_slide=true&title=%s)",
  utils.URLEncode(viper.GetString("groupAlert.url")+"?uid="+strings.Join(uids, ",")), "")
 _ = DingSend.SendDing(viper.GetString("dingTalk.hook"), data, title, utils.StringToSlice(claimUsers))
 return nil
}
  1. 告警列表
func (pa *prometheusAlert) SelectPrometheusAlertList(uids string) (data []*model.PrometheusAlert, err error) {
 for _, uid := range strings.Split(uids, ",") {
  dataOne, _ := db.PrometheusAlert.SelectPrometheusAlert(uid)
  data = append(data, dataOne)
 }
 return data, nil
}
  1. 加載template
func (pa *prometheusAlert) PrometheusAlertList(ctx *gin.Context) {
 uids, _ := ctx.GetQuery("uid")
 slice, _ := service.PrometheusAlert.SelectPrometheusAlertList(uids)
 ctx.HTML(200, "index.html", gin.H{
  "slice": slice,
 })
}

觸發(fā)告警

告警信息的展示僅僅展示了部分內(nèi)容,可以按照各自的需求進(jìn)行展示

查看詳情

告警詳情僅僅展示了部分內(nèi)容,可以根據(jù)數(shù)據(jù)庫字段按需展示。這里也可以跟告警認(rèn)領(lǐng)功能結(jié)合使用。

責(zé)任編輯:武曉燕 來源: 原生運(yùn)維圈
相關(guān)推薦

2021-03-31 08:02:34

Prometheus 監(jiān)控運(yùn)維

2021-08-27 07:06:10

應(yīng)用

2024-07-31 08:02:26

Prometheus服務(wù)器代碼

2021-02-18 15:36:13

PrometheusAlertmanageGrafana

2023-11-24 16:57:53

2023-03-26 08:41:37

2023-04-26 08:20:54

2022-07-29 21:23:54

Grafana微服務(wù)

2020-03-09 09:15:56

集群Prometheus開源

2020-11-20 08:15:40

Grafana + P

2022-07-11 09:36:38

SpringJava開發(fā)

2010-06-04 16:17:02

2022-06-04 07:26:47

Thanos集群Prometheus

2022-09-19 08:32:46

AOP系統(tǒng)機(jī)器人

2022-09-04 17:53:20

Prometheus開源

2020-12-30 05:34:25

監(jiān)控PrometheusGrafana

2010-03-01 13:17:46

WCF單向服務(wù)

2025-04-09 08:05:00

運(yùn)維告警Prometheus

2025-04-09 11:35:00

MySQL數(shù)據(jù)庫監(jiān)控

2020-04-02 20:07:17

前端vuenote.js
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 人人天天操| 中文字幕久久久 | 中文在线一区 | 日本a视频 | 亚洲在线免费观看 | 午夜在线精品偷拍 | 夜夜骚视频 | 日韩手机在线看片 | 中文字幕在线视频精品 | 国产精品福利久久久 | 91精品国产日韩91久久久久久 | 在线中文字幕视频 | 99re视频在线| 81精品国产乱码久久久久久 | 成人在线免费视频 | 91久久国产综合久久 | 久久乐国产精品 | av免费网址 | 在线观看av网站永久 | 人人澡人人爱 | 99草免费视频 | 欧美精品91爱爱 | av在线天天 | 成人超碰| 网站黄色在线免费观看 | 午夜免费精品视频 | www.日本国产 | 99亚洲精品视频 | 日韩激情在线 | 一区二区三区四区不卡 | 久久久久久免费精品一区二区三区 | 在线观看视频一区二区三区 | 国产欧美在线播放 | 成人国内精品久久久久一区 | 99热电影| 99久久免费观看 | 午夜在线影院 | 97国产一区二区精品久久呦 | 午夜免费福利电影 | 日韩av一区二区在线观看 | 国产久|