精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

夜鶯自定義告警模板

數據庫 其他數據庫
要實現上面的需求很簡單,夜鶯監控的數據庫表Alert_cur_event保存了我們所需要的當前未處理的告警總數,而且夜鶯監控也提供了查詢未處理告警的面板,而對于告警恢復時候的值我們只需要根據自定義的恢復Promql即可查詢。

希望在告警通知里有以下數據:

  • 告知當前系統還有多少未處理的告警。
  • 告知當前告警恢復時候的具體值。
  • 告警通知里增加查看未處理告警的頁面鏈接。

具體實現

要實現上面的需求很簡單,夜鶯監控的數據庫表alert_cur_event保存了我們所需要的當前未處理的告警總數,而且夜鶯監控也提供了查詢未處理告警的面板,而對于告警恢復時候的值我們只需要根據自定義的恢復promql即可查詢。

最簡單的方式就是直接通過notify.py腳本進行告警發送,我們只需要做一丟丟修改即可。

整體腳本如下:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
import json
import requests
import pymysql

# 處理字符問題
reload(sys)
sys.setdefaultencoding('utf-8')

# 通過api查詢指標
def getPrometheus(url, promql):
    response = requests.get(url, params={'query': promql})
    data = json.loads(response.text)
    # 提取指標數據
    if response.status_code == 200
        result = data['data']['result']
        if len(result) == 1:
            return result[0]['value'][1]
        else:
            return 0
    else:
        return 0

def count_rows_and_get_rule_names():
    try:
        conn = pymysql.connect(
            host='127.0.0.1',
            port=3306,
            user='n9e',
            passwd='1234',
            db='n9e_v6',
            charset='utf8mb4'
        )
        cursor = conn.cursor()

        # Count the total number of rows in the table
        count_query = "SELECT COUNT(*) FROM alert_cur_event"
        cursor.execute(count_query)
        total_rows = cursor.fetchone()[0]
        return total_rows

    except Exception as e:
        print("Error: ", e)


class Sender(object):
    @classmethod
    def send_qywx(cls, payload):
        users = payload.get('event').get("notify_users_obj")
        is_recovered = payload.get('event').get("is_recovered")
        tokens = {}
        phones = {}
        res = {} 

        history_row = count_rows_and_get_rule_names()

        if is_recovered:
            # 獲取自定義的恢復promql
            promQL = payload.get('event').get("annotations").get("recovery_promql")
            url = "http://127.0.0.1:9090/api/v1/query"
            res = getPrometheus(url, promQL)

        # 查詢活躍告警的面板
        currAlert = "http://127.0.0.1:17000/alert-cur-events"
        for u in users:
            if u.get("phone"):
                phones[u.get("phone")] = 1

            contacts = u.get("contacts")
            if contacts.get("qywx_robot_token", ""):
                tokens[contacts.get("qywx_robot_token", "")] = 1

        headers = {
            "Content-Type": "application/json;charset=utf-8",
            "Host": "qyapi.weixin.qq.com"

        }

        for t in tokens:
            url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={}".format(t)
            content = payload.get('tpls').get("qywx", "qywx not found")
            content = "# **當前環境的全部告警數**: %s" % (history_row) + "\n" + content
            if is_recovered:
                content = content + "\n" + "> **恢復時值**: %s" % (res)

            if history_row > 0:
                content = content + "\n" + "[當前活躍告警](%s)" % (currAlert)
            body = {
                "msgtype": "markdown",
                "markdown": {
                    "content": content
                }
            }

            response = requests.post(url, headers=headers, data=json.dumps(body))
  

def main():
    payload = json.load(sys.stdin)
    with open(".payload", 'w') as f:
        f.write(json.dumps(payload, indent=4))
    for ch in payload.get('event').get('notify_channels'):
        send_func_name = "send_{}".format(ch.strip())
        if not hasattr(Sender, send_func_name):
            print("function: {} not found", send_func_name)
            continue
        send_func = getattr(Sender, send_func_name)
        send_func(payload)

  
def hello():
    print("hello nightingale")

if __name__ == "__main__":
    if len(sys.argv) == 1:
        main()
    elif sys.argv[1] == "hello":
        hello()
    else:
        print("I am confused")

需要在服務器上安裝pymysql以及requests包

然后將上面的腳本放到夜鶯監控面板->系統設置->通知設置->通知腳本中,并將腳本設置為啟用狀態。

然后新增名叫qywx的通知媒介以及名叫qywx_robot_token的聯系方式,在發送告警的時候會通過通知媒介來調用通知方法,比如你的通知媒介名叫zhangsan,那么你定義的方法名就是send_zhangsan。另外還會從聯系方式處獲取發送的token。

然后我們來創建一個通知模板,這個模板是在原生的基礎上進行更改的,如下創建一個名叫qywx的模板。

> **級別狀態**: {{if .IsRecovered}}<font color="info">告警恢復</font>{{else}}<font color="warning">發生告警</font>{{end}}   
> **級別級別**: S{{.Severity}}
> **告警類型**: {{.RuleName}}{{if .RuleNote}}   
> **告警詳情**: {{.RuleNote}}{{end}}{{if .TargetIdent}}   
> **監控對象**: {{.TargetIdent}}{{end}}   
> **監控指標**: {{.TagsJSON}}{{if not .IsRecovered}}   
> **觸發時值**: {{.TriggerValue}}{{end}}   
{{if .IsRecovered}}> **恢復時間**: {{timeformat .LastEvalTime}}{{else}}> **首次觸發時間**: {{timeformat .FirstTriggerTime}}{{end}}   
{{$time_duration := sub now.Unix .FirstTriggerTime }}{{if .IsRecovered}}{{$time_duration = sub .LastEvalTime .FirstTriggerTime }}{{end}}> **距離首次告警**: {{humanizeDurationInterface $time_duration}}
> **發送時間**: {{timestamp}}

在實際發送過程中會對模板進行相應的增加。

最后,再來配置告警,比如我們現在要配置一個K8s中Pod的狀態異常的告警規則,如下:

填寫具體的規則名以及備注,并且填寫具體的promql。

往下繼續填寫通知媒介以及附加信息。

其中附加信息中就有告警恢復時候的promql,在python腳本中會獲取當前的promql,然后調用prometheus的接口進行查詢當前值,最后填充到告警模板中去。

以上就是具體的實現思路,希望對你有所啟發。

加餐

除了這種python腳本的方式,還可以通過自定義webhook的方式實現,夜鶯是支持回調地址的,只需要把回調地址填寫進去即可。

那這個webhook應該怎么開發呢?

其實不需要我們做啥大的開發,直接把夜鶯的源碼里告警相關的CV出來,改吧改吧就能直接用了。

首先,把alert_cur_event的數據結構弄過來,查表就查它。

其次,增加一個查詢prometheus的接口,如下:

package prometheus  
  
import (  
   "context"  
   "devops-webhook-service/src/server/config"       "github.com/prometheus/client_golang/api"   "github.com/prometheus/client_golang/api/prometheus/v1"   "github.com/prometheus/common/model"   "github.com/toolkits/pkg/logger"   "time")  
  
func GetMetricsValue(promql string) string {  
   client, err := api.NewClient(api.Config{  
      Address: config.C.Prometheus.Address,  
   })  
   if err != nil {  
      logger.Error("init prometheus client failed. err: ", err)  
   }  
   queryAPI := v1.NewAPI(client)  
   result, warnings, err := queryAPI.Query(context.TODO(), promql, time.Now())  
   if err != nil {  
      // handle error  
      logger.Error("query prometheus metrics failed. err: ", err)  
   }  
   if len(warnings) > 0 {  
      // handle warnings  
   }  
   vector := result.(model.Vector)  
   //for _, sample := range vector {  
   // fmt.Printf("Time: %v, Value: %v\n", sample.Timestamp, sample.Value)   //}  
   return vector[0].Value.String()  
  
}

再則,我們就可以把需要的告警字段都動議到告警模板中,通過template自動填充數據了。

## 當前環境的告警總數: {{ .TotalAlert }}  
---  
**級別狀態**: {{if .IsRecovered}}<font color="info">S{{.Severity}} Recovered</font>{{else}}<font color="warning">S{{.Severity}} Triggered</font>{{end}}  
**規則標題**: {{.RuleName}}{{if .TargetIdent}}  
**監控對象**: {{.TargetIdent}}{{end}}{{ if .IsRecovered }}  
**當前值**: {{ .RecoveryValue }}{{end}}  
**監控指標**: {{.TagsJSON}}{{if not .IsRecovered}}  
**觸發時值**: {{.TriggerValue}}{{end}}  
{{if .IsRecovered}}**恢復時間**: {{timeformat .LastEvalTime}}{{else}}**首次觸發時間**: {{timeformat .TriggerTime}}{{end}}  
**發送時間**: {{timestamp}}  
---

最后,就是在notify.go中做一丟丟的小修改。

比如event事件增加兩個字段。

type NoticeEvent struct {  
   *models.AlertCurEvent  
   RecoveryValue string // 恢復時候的值  
   TotalAlert    int    // 告警總數  
}

比如在notify.go中的GenNotice方法里,增加查詢prometheus和數據庫的代碼。

var recoveryValue string  
if event.IsRecovered {  
   text := event.RuleNote  
   promql := strings.Split(text, "=")[1]  
   recoveryValue = prometheus.GetMetricsValue(promql)  
}  
  
// 獲取當前剩余的總告警數  
events, err := models.AlertCurEventGetAll(event.Cluster)  
if err != nil {  
   logger.Error("get alert event failed. err: ", err)  
}

整體代碼也就只需要一丟丟東西。

最后

以上就是整體的實現了,這只是領導根據領導的需要做的,每個團隊的需求不一樣,實現方式肯定也不通,這里只是拋磚引玉。

個人建議使用webhook比較好一點,因為可以比較靈活的增加其他的功能,比如告警認領,比如告警抑制,比如告警轉發等。

另外,最近剛換工作沒多久,寫的文章少了,但是對技術的熱愛并沒有減少。

責任編輯:姜華 來源: 運維開發故事
相關推薦

2023-03-26 08:41:37

2022-04-11 07:47:45

zabbix郵件告警項目

2023-04-20 07:12:33

夜鶯監控夜鶯

2011-03-02 10:24:23

DashboardAndroid用戶界面設計模板

2025-08-27 07:22:12

自定義接口Prometheus

2015-02-12 15:33:43

微信SDK

2015-02-12 15:38:26

微信SDK

2016-12-26 15:25:59

Android自定義View

2016-11-16 21:55:55

源碼分析自定義view androi

2011-06-23 10:49:13

Qt 自定義信號

2015-01-14 15:06:48

定義相機

2009-06-08 20:13:36

Eclipse自定義控

2011-12-16 14:23:51

Java

2013-04-01 14:35:10

Android開發Android自定義x

2021-11-23 15:06:42

Kubernetes 運維開源

2022-04-24 15:17:56

鴻蒙操作系統

2009-07-06 16:59:26

JSP自定義標簽

2013-04-19 10:14:24

2013-06-27 11:10:01

iOS開發自定義UISlider

2015-07-22 10:57:36

watchOS圖表自定義
點贊
收藏

51CTO技術棧公眾號

欧美日韩一级大片网址| 久久一夜天堂av一区二区三区| 91麻豆国产精品久久| **欧美日韩vr在线| 青娱乐国产视频| 国产极品一区| 亚洲一区在线观看免费| 麻豆91蜜桃| 中文字幕免费在线看| 亚洲网色网站| 精品亚洲一区二区三区在线播放| 久久精品网站视频| www在线观看播放免费视频日本| 国内精品国产三级国产a久久| 久久久久久国产精品久久| 亚洲精品中文字幕无码蜜桃| 3d成人动漫在线| 成人精品免费看| 国产九九精品视频| 欧美在线视频第一页| 日韩成人一级| 日韩三级视频在线看| 久久久国产欧美| 欧美特级特黄aaaaaa在线看| 日本网站在线观看一区二区三区| 欧美黑人性生活视频| 国产jjizz一区二区三区视频| 免费一级欧美在线大片| 欧美中文字幕亚洲一区二区va在线| 日本丰满少妇黄大片在线观看| 久草视频在线免费| 精品成人免费| 久久综合色影院| 国产美女永久免费无遮挡 | 日本午夜在线亚洲.国产| 秋霞欧美一区二区三区视频免费| 色老板在线视频一区二区| 91精品国产色综合久久不卡电影| 午夜欧美一区二区三区免费观看| 国产尤物在线视频| 午夜欧美视频| 日韩在线欧美在线| av黄色在线免费观看| 国内视频在线精品| 欧美xingq一区二区| www.污污视频| 国产不卡在线| 国产精品三级在线观看| 欧美下载看逼逼| 天堂在线中文字幕| a在线欧美一区| 国产91精品入口17c| 国产视频在线一区| 国产美女视频91| 91免费高清视频| 国产女同91疯狂高潮互磨| 六月丁香综合在线视频| 国产精品天天狠天天看| 午夜一级黄色片| 亚洲乱码在线| 啊v视频在线一区二区三区| 超碰人人干人人| 久久美女精品| xx视频.9999.com| 日韩va亚洲va欧美va清高| 国产精品不卡| 美乳少妇欧美精品| 欧美成人免费观看视频| 国产精品地址| 91精品国产高清久久久久久久久 | 性欧美高清come| 亚洲综合一区在线| 欧美精品一区二区三区三州| 国模私拍一区二区国模曼安| 狠狠做深爱婷婷久久综合一区 | 正在播放精油久久| av片在线观看永久免费| 亚洲一区欧美一区| 国产乱子夫妻xx黑人xyx真爽| av电影一区| 欧美三级资源在线| 日韩欧美中文视频| 岛国av一区| 亚洲人精选亚洲人成在线| 呻吟揉丰满对白91乃国产区| 一区二区三区四区日韩| 久久久亚洲精选| 无码一区二区三区| 精品亚洲成a人| 国产精品对白刺激久久久| 日本成人一区| 麻豆精品久久久| 97超碰人人模人人爽人人看| 涩涩视频在线观看免费| 国产精品久久久久久久久免费丝袜 | 国产精品久久久久久久一区二区 | 国产孕妇孕交大片孕| 高清日韩电视剧大全免费| 欧美精品一区二区三区久久| 老司机精品视频在线观看6| 亚洲一区二区在线观看视频| 黄色片一级视频| 国产精品日本一区二区三区在线| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲av成人精品日韩在线播放| 国产日韩欧美高清| a级免费在线观看| 国产成人免费9x9x人网站视频| 91精品国产综合久久久蜜臀粉嫩| 性色av蜜臀av色欲av| 欧美亚洲国产精品久久| 欧美黄色www| 中文字幕久久网| 99精品欧美一区二区三区综合在线| 天堂va久久久噜噜噜久久va| 国产后进白嫩翘臀在线观看视频| 亚洲色图一区二区| www.爱色av.com| 日韩不卡在线视频| 最新中文字幕亚洲| 国产成人一级片| 国产成人欧美日韩在线电影| 日韩妆和欧美的一区二区| 新版中文在线官网| 欧美日韩国产123区| 日日噜噜噜噜久久久精品毛片| 一区二区三区亚洲变态调教大结局| 亚洲性猛交xxxxwww| 日本最新中文字幕| 国产日韩综合| yellow视频在线观看一区二区| 亚洲无码精品国产| 26uuuu精品一区二区| 免费人成在线观看视频播放| 国产成年精品| 中文字幕av一区二区三区谷原希美| 日韩欧美a级片| 国产69精品一区二区亚洲孕妇| 中文字幕制服丝袜在线| 素人一区二区三区| 亚洲色图第一页| 日韩久久中文字幕| 99久久久无码国产精品| 99久久免费观看| 国产亚洲高清在线观看| 日韩在线观看你懂的| 日本丰满少妇做爰爽爽| 久久亚洲一区二区三区四区| 国产九九九九九| 韩国三级一区| 国产亚洲欧洲高清| 亚洲天堂五月天| 国产色一区二区| 好男人www社区| av中文字幕一区二区| 国产91免费观看| 天堂av中文字幕| 国产婷婷在线视频| 性色国产成人久久久精品| 一区二区三区偷拍| 蜜桃91精品入口| 国产色综合一区二区三区| 成人av中文| 国产精品自拍首页| 成人网欧美在线视频| 日韩欧美成人区| 91精品一区二区三区四区| 免费视频成人| 亚洲午夜久久久久久久| 天天干天天操天天操| 国产亚洲制服色| 日韩高清第一页| 中国精品18videos性欧美| 波多野结衣久草一区| 秋霞午夜理伦电影在线观看| 欧美精品一卡两卡| 欧美xxxx黑人xyx性爽| www.在线成人| 成人亚洲视频在线观看| 国产一区99| 久久成人免费视频| 丰满人妻一区二区| 懂色aⅴ精品一区二区三区蜜月| 精品无码一区二区三区| 麻豆国产精品777777在线| 久久久天堂国产精品| 国产一区调教| 国产精品你懂得| 亚洲aⅴ在线观看| 欧美中文字幕一区| 免费一级片在线观看| 蜜臀久久99精品久久久久久9| 中文字幕色一区二区| 国产精品极品国产中出| 国产精品va在线| 4438x成人网全国最大| 亚洲国产成人精品久久久国产成人一区| 国产视频123区| 国产精品自拍av| 99爱视频在线| 婷婷亚洲综合| 久久伊人一区| 亚洲不卡视频| 国产精品久久久久久久久久久不卡 | 性欧美videoshd高清| 亚洲影视一区二区三区| 2020国产精品视频| 高潮毛片在线观看| 亚洲精品之草原avav久久| 国产一区二区在线视频观看| 精品高清一区二区三区| 亚洲欧美精品久久| 久久亚洲二区三区| 中文字幕一二三| 麻豆精品精品国产自在97香蕉 | www中文字幕在线观看| 色一区av在线| 伦理片一区二区三区| 精品对白一区国产伦| 亚洲影院一区二区三区| 欧美性69xxxx肥| 久久久久久久九九九九| 国产精品久久久久久福利一牛影视 | 久久夜色精品国产欧美乱极品| 性感美女一区二区三区| 精品在线播放午夜| 日本一区二区精品| 国产精品毛片久久久| 亚洲一区久久久| 亚洲精品大片| 久久成人18免费网站| 成人性爱视频在线观看| 国产丝袜精品视频| 免费国产黄色片| 精品日产卡一卡二卡麻豆| 国产欧美第一页| 欧美二区三区的天堂| 中文字幕人妻丝袜乱一区三区| 色婷婷激情综合| 亚洲GV成人无码久久精品| 欧美极品xxx| 91成年人网站| 久久久国产精品不卡| 亚洲人人夜夜澡人人爽| 成人久久久精品乱码一区二区三区| 奇米影视亚洲色图| 欧美三区不卡| 国产 欧美 日韩 一区| 欧美精品97| 日本一级黄视频| 亚洲性感美女99在线| 国产成a人亚洲精v品在线观看| 欧美日本一区| 日本一本中文字幕| 国产视频一区欧美| 日本三区在线观看| 日本免费在线视频不卡一不卡二| 亚洲成人av免费看| 麻豆精品视频在线观看免费| 热久久久久久久久| 国产高清在线精品| 久久久久久婷婷| 91麻豆免费看| 1024在线看片| 亚洲另类中文字| 国产真实的和子乱拍在线观看| 亚洲国产成人av网| 日本一区二区三区精品| 欧美亚洲综合久久| 国产理论片在线观看| 精品国产一区久久| 香蕉av一区二区三区| 一级做a爰片久久毛片美女图片| 伊人在线视频| 欧美黑人xxx| 日韩电影免费观| 成人性教育视频在线观看| 91在线一区| 日本精品一区二区三区高清 久久| 日韩高清欧美| www.一区二区.com| 午夜亚洲精品| 性生生活大片免费看视频| 国产成人精品影视| 一本加勒比北条麻妃| 中文字幕一区二区三区精华液 | 国产乱肥老妇国产一区二| 日韩欧美中文字幕一区二区三区| 精品网站在线看| 国产精品99视频| 国产精品沙发午睡系列| 久久成人免费网站| 久久精品女同亚洲女同13| 中文字幕 久热精品 视频在线| 在线免费日韩av| 色吊一区二区三区| 国产无遮挡aaa片爽爽| 色一情一乱一乱一91av| 国产超碰人人模人人爽人人添| 日韩成人久久久| 国产福利视频在线观看| 人九九综合九九宗合| 草草影院在线| 国产精品一区专区欧美日韩| 精品五月天堂| 国产精品一区二| 日本一区二区三区视频| 日韩少妇内射免费播放18禁裸乳| 韩国视频一区二区| 久久久久亚洲av成人无码电影| 亚洲综合色噜噜狠狠| 一本到在线视频| 亚洲欧洲国产一区| www.youjizz.com在线| 亚洲bt天天射| 91欧美在线| 免费看a级黄色片| 99久久婷婷国产综合精品电影 | 欧美日韩午夜| 久热在线视频观看| 国产女主播一区| 国产亚洲欧美在线精品| 亚洲精美色品网站| 男人天堂亚洲| 亚洲999一在线观看www| 久久国产成人精品| 手机在线免费观看毛片| 久久久久久久久久看片| 国产三级av片| 亚洲精品乱码久久久久久按摩观| 成人影音在线| julia一区二区中文久久94| 中文字幕一区二区三区在线视频| 污污网站免费看| 欧美经典一区二区| 中文在线a天堂| 中文字幕久久久av一区| 91国内外精品自在线播放| 少妇免费毛片久久久久久久久| 首页国产欧美久久| 谁有免费的黄色网址| 在线精品视频一区二区三四| 国产小视频在线| 国产精品高潮粉嫩av| 国产剧情一区| 91热这里只有精品| 日本一区二区三区在线观看| 国产伦精品一区二区三区视频我| 日韩av最新在线| japanese色国产在线看视频| 韩国国内大量揄拍精品视频| 久久99成人| 2022中文字幕| 国产美女一区二区| 91网站免费视频| 欧美中文字幕久久| av中文天堂在线| 91久久在线播放| 亚洲一本二本| 中文字幕在线国产| 亚洲精品乱码久久久久久日本蜜臀| a天堂在线观看视频| 久久av.com| 欧美日韩视频免费看| 26uuu成人| 国产精品亚洲人在线观看| 五月天综合在线| 日韩av在线看| 韩国精品视频在线观看| 亚洲午夜激情| 国产成人aaa| 日产亚洲一区二区三区| 91精品国产91久久综合桃花| 久久香蕉av| 久久精品日产第一区二区三区乱码| 老司机精品久久| 欧美人与禽zoz0善交| 欧美v国产在线一区二区三区| 不卡的av影片| 色综合电影网| 国产美女av一区二区三区| 欧美久久久久久久久久久久| 亚洲成人激情在线观看| www.综合| 色阁综合av| 国产一区二区三区黄视频 | 亚洲黄色小视频| 亚洲 国产 欧美 日韩| 国产精品www色诱视频| 在线成人超碰| 国产精品福利导航| 精品女同一区二区三区在线播放| 第九色区av在线| 97久久天天综合色天天综合色hd | 久久久久久久久久久免费精品| 一本色道久久综合亚洲精品酒店| 午夜激情av在线| 婷婷久久综合九色综合伊人色| 成人高清免费观看mv| av资源站久久亚洲|