工作随笔:利用爬虫抓取系统日志

发布于:2023-01-04 ⋅ 阅读:(258) ⋅ 点赞:(0)

目录

背景:

需求:

准备工作:

代码


背景:

(每周进步一点点)

我是一名小测试,目前主要在负责一个工厂项目的测试工作,包括工厂使用的出货和货物管理的系统,客户使用的一个小程序。

同时还包括给我们的客户解决一些问题(我们叫他生产问题),巡检APM。

由于我们的系统主要布在阿里云上,利用kibana记录一些报错日志,工作要求我们每周去检查这些日志,尤其是报错的日志,以及未出现的报错。

需求:

以往都是人工去查看,时间会出现问题,比如这周是周五早上9点看的,下周是下午2点看的,那么就会有一段时间没有照顾到,以及服务比较多每次查看下来都要半个小时起步,再就是报错的发生次数比较多,一周的报错上千上万都是正常的,对报错内容进行抽检,查看参数,进行分析。如此以来工作重复。

那么利用能不能利用现有的工具去简化呢?想到的最贴近的解决方式就是爬虫,爬取数据+处理数据+持久化储存。

准备工作:

爬虫的主要工作方式就是利用接口来获取信息。

准确的抓到接口请求是我们要做的第一步,通过f12进行筛选和抓取

 这是我们抓取到的接口详情。

 我们一共有ASC,PSSO,Device,Admin,DC等服务

按照同样的操作,获取其接口地址

 我们将后面参数的位置去掉,可以明显发现这个位置就是服务的地方,往后看,明显的参数还包括了时间,start和end的位置。(等会需要作为参数代入进去)

我们看下这个接口返回的是什么?

用游览器访问网址可以拿到一个json

 错误的名称,发生次数,还有id 是我们所需要的。

代码:

转到我们代码的层面上来,第一步,获取对应的参数,对应的服务以及时间,时间有两个参数,star和end, 在上面的地址中,我们还发现这个日期是补位的,所以需要进行一个补位操作,设定了一个add0()的方法去调用

import datetime
def add0(xx):
    if xx < 10:
        xx = f'0{xx}'
    else:
        pass
    return xx

now = datetime.datetime.now()
nowdate = f"{now.year}-{add0(now.month)}-{add0(now.day)}"
now_7 = now + datetime.timedelta(days=-7)
now_7date = f"{now_7.year}-{add0(now_7.month)}-{add0(now_7.day)}"

首要的参数服务名以及把上面的时间参数混入进来:

url = ['Service-Filter-Prd', 'Device-Prd', 'UI-Admin-Prd',
               'Service-OTA-Prd', 'DC_Web_Host', 'ASC_Web_Host', 'PSSO_Web_Host']
for i in range(0, len(url)):
    ASC_url = f"http://kiban.cn:12560/s/apm/internal/apm/services/{url[i]}/errors?environment=ENVIRONMENT_ALL&kuery=&start={now_7date}T01%3A00%3A00.000Z&end={nowdate}T01%3A00%3A00.000Z&sortDirection=desc"
    print(f'{ASC_url}')

利用爬虫的方式,拿到这个json,(这里需要导入json包)

如果是正常爬虫的话,需要加入head,token等参数,从上面f12那里往下找是可以复制过来的,(token其实也是从接口获取的,可以从接口获取返回作为参数传递给下一个接口,与接口测试相通)

result = requests.get(ASC_url).text
errorgroup = json.loads(result)

拿到json之后,就是解析数据,在爬虫里也有这步

errorgroup_result = errorgroup['errorGroups']
for j in range(0, len(errorgroup_result), 1):
    message = errorgroup_result[j]
    # print(message)
    messages = json.dumps(message)
    # print(messages)
    error = json.loads(messages)
    errname = error['message']
    errtime = error['occurrenceCount']
    errid = error['groupId']

这边只要能拿出来这个错误信息,发生次数,id这三个参数就行,由于有的服务没有错,所以需要提前做判断,在后面的持久化储存中进行操作

爬虫的最后一步就是持久化储存,原本是用来储存比如页面,图片等信息的,我们这边会把数据放入表格中。

使用的是openpyxl这个库,打开表格,存入数据,保存,相关请查询openpyxl库,是一个比较适合自动化办公的库

wb = Workbook()
wb.active
# 如果没有上面为新建,使用一次后转为下面指令
# wb = load_workbook('jilu.xlsx')

# 打开表和加入我们的第一行作为筛选条件
ws1 = wb.create_sheet(title=f'{nowdate}', index=0)
ws1.append(['报错服务','与错误信息', '发生次数', 'kibana地址','备注:\n1. 是否需要重点关注\n2. 导致错误原因\n3. 是否是我们的系统在调用?其他平台调用?\n4. 是否需要处理, 处理状态'])

#把服务名,错误信息,次数 地址加入
ws1.append([f'{url[i]}', f'{errname}', f'{errtime}', f'{errurl}'])
        wb.save(f'{nowdate}.xlsx')

最后跑出来是个表格。这是表格的内容最后一栏需要人工判断,并且提供地址(也是使用上面的方法拼接出来的地址,此处需要的参数为上面的id)

 至此,每周的巡检只需要半个小时左右即可完成,同时可以对比出新增的问题,以及错误报错趋势的变化。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到