sdk接口获取日志信息保存到本地
from typing import List
from alibabacloud_sls20201230.client import Client as Sls20201230Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_sls20201230 import models as sls_20201230_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
from openpyxl import Workbook
class SlowLogExporter:
def __init__(self, access_key_id, access_key_secret, region_id='cn-hangzhou'):
self.access_key_id = access_key_id
self.access_key_secret = access_key_secret
self.region_id = region_id
self.client = self.create_client()
def create_client(self) -> Sls20201230Client:
config = open_api_models.Config(
read_timeout=60000,
access_key_id=self.access_key_id,
access_key_secret=self.access_key_secret,
)
config.endpoint = f"{self.region_id}.log.aliyuncs.com"
return Sls20201230Client(config)
def query_logs(self, project, logstore, from_, to, query) -> List[dict]:
get_logs_request = sls_20201230_models.GetLogsRequest(
from_=from_,
to=to,
query=query,
)
runtime = util_models.RuntimeOptions()
headers = {}
try:
response = self.client.get_logs_with_options(project, logstore, get_logs_request, headers, runtime)
logs = response.body
if isinstance(logs, list):
return logs
elif isinstance(logs, dict):
return logs.get('logs', [])
else:
print("返回格式不符合预期:", logs)
return []
except Exception as error:
print("查询日志失败:", error)
return []
def write_logs_to_excel(self, logs: List[dict], file_path: str) -> None:
workbook = Workbook()
worksheet = workbook.active
worksheet.title = "Log Entries"
# 写入表头
headers = ['path', 'total', 'min_response_time', 'avg_response_time', 'max_response_time']
for col_idx, header in enumerate(headers, start=1):
worksheet.cell(row=1, column=col_idx, value=header)
# 写入日志条目
for row_idx, log in enumerate(logs, start=2):
for col_idx, header in enumerate(headers, start=1):
worksheet.cell(row=row_idx, column=col_idx, value=log.get(header, ""))
# 保存文件
workbook.save(file_path)
if __name__ == '__main__':
access_key_id = 'xxxxxxx'
access_key_secret = 'xxxxxxx'
endpoint = f'cn-xxxxxxx.log.aliyuncs.com'
project = 'xxxxxxx'
logstore = 'xxxxxxx'
from_ = 1713864629
to = 1714123838
query = "xxxxxxx"
exporter = SlowLogExporter(access_key_id, access_key_secret)
logs = exporter.query_logs(project, logstore, from_, to, query)
if logs:
exporter.write_logs_to_excel(logs, './xlsl/xxxxx-log.xlsx')