QA Engineering/Tool & Automation

파이썬, 패턴 구분하여 csv 저장하는 스크립트

일해라폴폴 2023. 8. 31. 12:08
반응형

AWS의 EC2는 직접 띄워 놓은 서버에 접근해서 콘솔로그등을 검색, 저장 가능 했는데 ECS의 Fargate는 서버리스다 보니 couldwatch를 통해 로그를 확인 할수 있다

차이점 정리 https://velog.io/@wjd489898/AWS-EC2와-ECS배포-비교하기

현재 사용중인 서비스의 ECS couldwatch를 접근 하여 보면, timestamp 필드, message 필드, logstream_name 필드로 나뉘어져 있고 대부분의 필요한 정보는 message 필드를 통해서 확인 할수 있다

message 필드에 찍히는 로그가 이쁘게 나오면 csv로 출력 하더라도 정리 하기가 편한데 간혹 외부 업체에서 작업 하는 경우 이런 부분에 대한 고려가 없이 상당히 지저분(?) 하게 로그를 출력하는 경우가 있다

대부분 시안성이 떨어져서 couldwatch 에서 조차 패턴 검색을 해도 제대로 보이지 않는 경우가 있고, csv로 출력하는 경우에는 더더욱 한셀안에 1라인으로 쭉 늘어진 로그라 데이터 가공 부터가 일인 경우가 있다

파이썬 스크립트에서 패턴 정의를 하고, 해당 패턴에 따라서 csv 파일에서 읽은 message 컬럼 뒤로 각각의 패턴으로 나누어진 로그를 열분리 하게 끔 출력하게 했다

import pandas as pd
from datetime import datetime

#####################################################################################
####                      Clouldwatch csv transfer manual                      ######
####                                                                           ######
####                   1. AWS 쿼리 조회 결과 파일을 CSV 로 다운로드                    ######
####              2. 다운로드 받은 파일을 아래 df = pd.read_csv 이하 경로에 추가         ######
####                    3. 저장한 위치를 output_file 이하 경로에 추가                 ######
####                      4. 조회에 필요한 패턴은 잘 추가 해주세요                      ######
####                                                                           ######
#####################################################################################

# 패턴 분류 하려는 csv 파일 위치
# AWS 에서 csv 파일을 다운 받으면, logs-insights-results.csv 저장
df = pd.read_csv('/Users/{user_name}/Downloads/logs-insights-results.csv')

# print(df.columns)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

get_uri_pattern = r"\[GET\]\s*\[URI:(.*?)\]"
post_uri_pattern = r"\[POST\]\s*\[URI:(.*?)\]"
user_pattern = r"\[USER:(.*?)\]"
request_body_pattern = r"\[REQUEST BODY:(.*?)\]"
response_error_pattern = r"\[RESPONSE:(.*?)\]"

df['URI'] = df['@message'].str.extract(get_uri_pattern, expand=False)
df['URI'] = df['@message'].str.extract(post_uri_pattern, expand=False)
df['USER ID'] = df['@message'].str.extract(user_pattern, expand=False)
df['REQUEST'] = df['@message'].str.extract(request_body_pattern, expand=False)
df['RESONSE'] = df['@message'].str.extract(response_error_pattern, expand=False)

# 패턴 출력 하는 new csv 파일
output_file = f'/Users/{user_name}/Downloads/logs-insights-results_{timestamp}.csv'
df.to_csv(output_file, index=False)

print(f"The new file creates that to making C column. Filename :{output_file}.")
반응형