python實現skywalking郵件告警webhook接口


1、介紹

    Skywalking可以對鏈路追蹤到數據進行告警規則配置,例如響應時間、響應百分比等。發送警告通過調用webhook接口完成。webhook接口用戶可以自定義。

2、默認告警規則

告警配置文件:config/alarm-settings.yml

3、告警配置文件語法

rules:

<RULE_NAME>_rule:   規則名稱,必須以“_rule”結尾

metrics-name: <VALUES>  oal腳本中的度量名稱

threshold  閾值

op  比較操作符“<、>、=”

period  多久檢查一次當前指標數據,默認為分鍾

count  表示到達多少次后發送告警信息

silence-period  在多久之內忽略相同的告警信息

message  告警內容

include-names  本規則告警生效的服務列表

 

webhooks:

    告警信息產生后的回調地址,即調用這個接口發送出去。

4、配置alarm-settings.yml文件

5、重啟skywalking服務

6、默認規則

Skywalking默認提供的 alarm-settings.yml ,定義的告警規則如下:

過去3分鍾內服務平均響應時間超過1秒

服務成功率在過去2分鍾內低於80%

服務90%響應時間在過去3分鍾內高於1000毫秒

服務實例在過去2分鍾內的平均響應時間超過1秒

端點平均響應時間過去2分鍾超過1秒

7、警報消息application/json 格式

{

  "scopeId": 1,

  "scope": "SERVICE",

  "name": "serviceA",

  "id0": 12, 

  "id1": 0, 

  "ruleName": "service_resp_time_rule",

  "alarmMessage": "alarmMessage xxxx",

  "startTime": 1560524171000

}

解釋:

scopeId、scope:作用域,取值詳見 https://github.com/apache/skywalking/blob/v6.6.0/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java ;

name:目標作用域下的實體名稱;

id0:作用域下實體的ID,與名稱匹配;

id1:暫不使用;

ruleName: alarm-settings.yml 中配置的規則名稱;

alarmMessage:告警消息體;

startTime:告警時間(毫秒),時間戳形式。

8、python實現郵件告警webhook接口

#!/usr/bin/env python

# _*_ coding: utf-8 _*_

# Tile:

# Author:shy

#https://www.cnblogs.com/yy-cola/p/8066020.html

#https://www.cnblogs.com/qumogu/p/14317010.html

#https://www.cnblogs.com/leijiangtao/p/11757639.html

from flask import Flask,request

import smtplib

from email.mime.text import MIMEText

import time

 

app = Flask(__name__)

@app.route("/send_mail",methods=["POST"])

def send_mail():

    info = request.json

    print(info,type(info))

    for i in info:

        alter_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(i["startTime"] / 1000))

        content = """

        警告時間:%s

        警告類型:%s

        服務名稱:%s

        規則名稱:%s

        詳細內容:%s

        """ % (alter_time, i["scope"], i["name"], i["ruleName"], i["alarmMessage"])

        print(content)

    # 發送郵件

        mail_host="mail.abc.com"

        sender_user="sa@abc.com"

        sender_pwd = "1qaz@WSX"

        sender_addr="sa@abc.com"

        rec_addr="test@abc.com"

        message_mail = MIMEText(content,"plain",'utf-8')

        message_mail['Subject'] = 'Skywalking鏈路監控告警'

        message_mail['From'] = sender_addr

        message_mail['To'] = rec_addr

        server = smtplib.SMTP_SSL(mail_host)

        server.connect(mail_host,465)

        server.login(sender_user,sender_pwd)

        server.sendmail(sender_addr,rec_addr,message_mail.as_string())

    return "成功"

 

if __name__ == "__main__":

    app.run("172.16.1.2","5000")

##########################################################

skywalking調用接口url:

http://172.16.1.2:5000/send_mail


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM