根据阿里云日志服务SLS实现企业微信机器人预警

一、通过阿里云Getlogs接口获取日志信息:

def get_log_path(project_name, log_name):
    """
    获取项目日志信息
    :param project_name: 项目名称
    :param log_name: 日志库名称
    :return:
    """
    # 日志服务的服务接入点。
    result_list = []
    endpoint = 'cn-shanghai.log.aliyuncs.com' #日志服务器,这里以上海为例
    # 获取日志的凭证。这里需要填入你获取日志的凭证
    access_key_id = ''
    access_key = ''

    # 创建日志服务Client。
    client = LogClient(endpoint, access_key_id, access_key)

    query = '' # 这里为你需要查询日志的内容 例如你需要查询eroor级别的,填level=error
    #  from_time和to_time表示查询日志的时间范围,UNIX时间戳格式。
    # 将时间转换为 Unix 时间戳(单位:秒)
    from_time = int(time.time()) - 60 
    to_time = int(time.time())
    req = GetLogsRequest(project, log_name, from_time, to_time, query=query, line=20) #line为需要拉取时间段内的多少条日志信息
    # 发起查询请求
    res = client.get_logs(req)
    data = res.get_logs()
    # 处理查询结果
    for log in data:
        result_list.append(log.get_contents())
    return result_list

二、处理日志为字典格式,日志返回类似于字典格式,却非字典格式 :

def string_to_dict(s):
    matches = re.findall(r'(\w+):\[(.*?)\]', s)
    # 构建字典
    result = {key: value for key, value in matches}

    return result

三、根据处理过的日志格式,预警到企业微信群:

def send_wx_path(url, project_name, log_name):
    """
    发送日志报错信息至企业微信
    :param url: 企业机器人地址
    :param project_name: 监控的项目名称
    :param log_name: 监控的日志库名称
    :return:
    """
    for i in get_log_path(project_name=project_name, log_name=log_name):
        result = string_to_dict(i['content']) #通过字典转换方法,将日志内容转换为字典并获取内容
        timestamp = result['timestamp'] #获取日志信息时间
        # 根据企业微信文档我选择了markdown形式发送预警信息,具体信息可以查看企业微信机器人文档
        data = {
            "msgtype": "markdown",
            "markdown": {
            }
        }
        requests.request("POST", url=url, json=data)

四、企业微信预警实时监控:

def execute_task(project_name, log_name, url):
    """
    进行实时监控
       :param url: 企业机器人地址
       :param project_name: 监控的项目名称
       :param log_name: 监控的日志库名称
       :return:
       """
    while True:
        now = datetime.datetime.now()
        if is_workday(date=now):  # 判断当前时间是否为工作日
            if 8 <= now.hour <= 22:
                send_wx_path(url=url, project_name=project_name, log_name=log_name)
                time.sleep(65)
            else:
                time.sleep(3600)
        else:
            time.sleep(3600 * 24 * 2)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值