一、通过阿里云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)