阿里云starrocks监控告发至钉钉群_startrocks routine load 告警

44 阅读2分钟

def msg(warntype, content, token): # 根据实际修改1:钉钉机器人地址 dingding_url = 'oapi.dingtalk.com/robot/send?…' + token # 根据实际修改2:钉钉的加签 secret = 'SECd0c0f14733789a******************645a4d1ae76ea3481b1384f5ef'

# 加签算法,钉钉文档里的
timestamp = str(round(time.time() \* 1000))
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = dingding_url + "&timestamp={}&sign={}".format(timestamp, sign) ##加签算法使用

if warntype == 'routineloadwarn':
    owner=["dfdfs134"]

if warntype == 'fewarn' or warntype == 'bewarn':
    owner=["faasdfaAQE"]

json_text = {
    "at": {
        "atMobiles": [
            "180xxxxxx"
        ],
        "atDingtalkIds":owner,
        "isAtAll": "False"
    },
    "msgtype": "text",
    "text": {
        "content": content
    }

}

requests.post(api_url, json.dumps(json_text), headers=headers)

def srmsg(ip,port,username,passwd,db,exe_sql): conn = pymysql.connect(host=ip,port=port,user=username,password=passwd,database=db) cursor = conn.cursor() sql = exe_sql cursor.execute(sql) result=cursor.fetchall() cursor.close() conn.close() return result

def fewarn(clustername,base_tuple_fe,token): warntype='fewarn' #2.4.1版本SR if clustername == 'SR': for feinfo in base_tuple_fe: # print(feinfo) if feinfo[10] == "false": fewanrmsg = "集群: " + clustername + "\n" +
"异常FE: " + feinfo[1] + "\n" +
"状态: " + feinfo[10] + "\n" +
"上次启动时间: " + feinfo[15] msg(warntype, fewanrmsg, token) else: #2.4.1版本SR for feinfo in base_tuple_fe: # print(feinfo) if feinfo[9] == "false": fewanrmsg = "集群: " + clustername + "\n" +
"异常FE: " + feinfo[1] + "\n" +
"状态: " + feinfo[9] + "\n" +
"上次启动时间: " + feinfo[14] msg(warntype, fewanrmsg, token)

def bewarn(clustername,base_tuple_be,token): warntype='bewarn' #2.4.1版本SR if clustername == 'SatrRocks': for beinfo in base_tuple_be: # print(beinfo) if beinfo[9] == "false": bewanrmsg = "集群: " + clustername + "\n" +
"异常BE: " + beinfo[2] + "\n" +
"状态: " + beinfo[9] + "\n" +
"上次启动时间: " + beinfo[7] msg(warntype, bewanrmsg, token) else: #2.3.1版本sr for beinfo in base_tuple_be: # print(beinfo) if beinfo[8] == "false": bewanrmsg = "集群: " + clustername + "\n" +
"异常BE: " + beinfo[1] + "\n" +
"状态: " + beinfo[8] + "\n" +
"上次启动时间: " + beinfo[6] msg(warntype, bewanrmsg, token)

def routineloadwarn(clustername,load_tuple,token): warntype='routineloadwarn' for info in load_tuple: #title = dict_srprod["envname"] input_message= "集群: "+ clustername + "\n" +
"任务id: "+ info[0] + "\n" +
"任务名: "+ info[1] + "\n" +
"库名: " + info[5]+ "\n" +
"表名: " + info[6]+ "\n" +
"状态: " + info[7]+ "\n" +
"挂起时间: "+ info[2] + "\n" +
"日志链接:" + info[16] + "\n" +
"其他错误:" + info[17] msg(warntype, input_message, token)

if name == '__main__': dict_srprod={"envname":"生产SatrRocks","ip":"192.168.10.10","port":29030,"username":"root","passwd":"********","dbname":["test1","test2"], "check_fe_status":"show frontends;","check_be_status":"show backends;","check_rtload":"show routine load where State='PAUSED' and TableName in ('t1','t2');" } dict_qwprod={"envname":"生产(1)SatrRocks","ip":"192.168.10.10","port":39030,"username":"root","passwd":"********","dbname":["test0","test"], "check_fe_status":"show frontends;","check_be_status":"show backends;","check_rtload":"show routine load where State='PAUSED';" } dict_srsit={"envname":"测试SatrRocks","ip":"192.168.10.11","port":19030,"username":"root","passwd":"********","dbname":["test1","test2","test3"], "check_fe_status":"show frontends;","check_be_status":"show backends;","check_rtload":"show routine load where State='PAUSED' and TableName='t0';" }

token = "xxxxx"

"""

环境0 """ #生产 routine load monitor base_tuple=srmsg(dict_srprod["ip"],dict_srprod["port"], dict_srprod["username"],dict_srprod["passwd"], dict_srprod["dbname"][0],dict_srprod["check_rtload"])

routineloadwarn(dict_srprod["envname"],base_tuple,token)

# 生产be/fe状态监控
base_tuple_fe = srmsg(dict_srprod["ip"], dict_srprod["port"],
                      dict_srprod["username"], dict_srprod["passwd"],
                      dict_srprod["dbname"][0], dict_srprod["check\_fe\_status"])
fewarn(dict_srprod["envname"],base_tuple_fe,token)

base_tuple_be = srmsg(dict_srprod["ip"], dict_srprod["port"],
                      dict_srprod["username"], dict_srprod["passwd"],
                      dict_srprod["dbname"][0], dict_srprod["check\_be\_status"])
bewarn(dict_srprod["envname"],base_tuple_be,token)

"""

环境1 """ #### routine load monitor base_tuple=srmsg(dict_qwprod["ip"],dict_qwprod["port"], dict_qwprod["username"],dict_qwprod["passwd"], dict_qwprod["dbname"][0],dict_qwprod["check_rtload"])

routineloadwarn(dict_qwprod["envname"],base_tuple,token)

# be/fe状态监控
base_tuple_fe = srmsg(dict_qwprod["ip"], dict_qwprod["port"],
                      dict_qwprod["username"], dict_qwprod["passwd"],
                      dict_qwprod["dbname"][0], dict_qwprod["check\_fe\_status"])
fewarn(dict_qwprod["envname"],base_tuple_fe,token)

base_tuple_be = srmsg(dict_qwprod["ip"], dict_qwprod["port"],
                      dict_qwprod["username"], dict_qwprod["passwd"],
                      dict_qwprod["dbname"][0], dict_qwprod["check\_be\_status"])
bewarn(dict_qwprod["envname"],base_tuple_be,token)

"""

环境2 """ ####测试routine load monitor base_tuple=srmsg(dict_srsit["ip"],dict_srsit["port"], dict_srsit["username"],dict_srsit["passwd"], dict_srsit["dbname"][0],dict_srsit["check_rtload"])

routineloadwarn(dict_srsit["envname"],base_tuple,token)

# 测试be/fe状态监控
base_tuple_fe = srmsg(dict_srsit["ip"], dict_srsit["port"],
                      dict_srsit["username"], dict_srsit["passwd"],
                      dict_srsit["dbname"][0], dict_srsit["check\_fe\_status"])
fewarn(dict_srsit["envname"],base_tuple_fe,token)

base_tuple_be = srmsg(dict_srsit["ip"], dict_srsit["port"],