본문 바로가기
AWS/AWS SDK for Python

AWS SDK (Boto3) 를 이용한 CloudWatch DB Log to Excel Download

by DBTechBiz 2022. 8. 29.

AWS SDK (Boto3) 를 이용한 CloudWatch DB Log to Excel Download

Cloud 환경에서 여러 Database 를 관리하는 관리자는 매일 아침 출근을 하면, 일일이 CloudWatch 로그그룹에서 각각의 Instance 로그파일을 클릭하여 Database 에 대한 이상유무를 확인한다. 경보(Alarm)를 걸어놓긴 하지만 모든 경보를 Case 별로 설정하기란 사실상 불가능하므로 대부분의 데이터베이스 관리자는 일일이 확인하거나 중요한 Core DB 에 대해서만 확인을 할 것이다.

이러한 번거로움을 줄이기 위해 저자는 AWS 에서 제공하는 Boto3 Library 를 이용하여 1개의 엑셀파일에 모든 로그를 Download 하고 엑셀 필터 기능을 통해 이상유무를 아침마다 확인을 한다. 이런 식의 자동화를 이용하여 저자는 아침마다 1시간 가량 로그를 확인하던 시간을 5분으로 줄였으며, 다른 데이터베이스 관리자도 이러한 자동화를 통하여 업무 효율화를 이룰 수 있다록 직접 개발 및 사용 중인 소스를 공유하고자 한다.



AWS SDK (Boto3) 를 이용한 Python 소스

# Libary Import
import sys
import boto3
from botocore.awsrequest import AWSRequest
import botocore.auth as auth
import urllib.request
import datatime
import pandas as pd

# AWS RDS 운영환경 기본 설정 (profile은 awscli 툴을 이용하여 사전에 설정함)
region = 'ap-northeast-2'
profile = 'prd'

session = boto3.session.Session(profile_name = profile)
credentials = session.get_credentials()
sigv4auth = auth.SigV4Auth(credentials, 'rds', region)

rds_client = session.client('rds')

instance_id_gruoup = ['aurora-instance-mysqldb-0', 'aurora-instance-mysqldb-1'] # 수집할 인스턴스명

# 수집할 로그 날짜(1시간마다 로그가 쌓이며 1일 전의 로그 수집으로 셋팅)
yesterday = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
print("Setting Date : ", yesterday)

# 로그 수집 및 Excel Download
main_log = pd.DataFrame()

for instance_id in instance_id_group:
	files = rds_client.describe_db_log_files(DBInstanceIdentifier = instance_id)
    print("Colleting Log File : ", instance_id)
    
    for file in files['DescribeDBLogFiles']:
    	file_name = file['LogFileName']
        
        # mysql 기준으로 파일명에 날짜가 포함되어 날짜로 파일명을 가져옴(ex. error/mysql-error-running.log.2022-08-08.10, slowquery/mysql-slowquery.log.2022-08-09.02)
        if yesterday in file_name:
        	response = rds_client.download_db_log_file_portion(
            	DBInstanceIdentifier = instance_id,
                LogFileName = file_name
            )
            
            temp_log = pd.DataFrame(response['LogFileData'].split('\n'))
            temp_log['log_file'] = file_name
            temp_log['instance_id'] = instance_id
            temp_log['category'] = profile
            temp_log.columns = ['context', 'log_file', 'instance_id', 'category']
            temp_log = temp_log.reindex(columns = ['category', 'instance_id', 'log_file', 'context'])
            
            main_log = pd.concat([main_log, temp_log])

main_log.to_excel(yesterday + '_' + profile + '.xlsx')

지정된 모든 로그가 엑셀 파일에 저장되면, 엑셀 필터 기능을 이용하여 이상유무를 체크하면 된다. 좀 더 나아가서는 이를 프로그램화할 수도 있으며, 엑셀 Visual Basic 을 이용하여 Error 가 난 부분만 표기하도록 변경할 수도 있다.

반응형

'AWS > AWS SDK for Python' 카테고리의 다른 글

AWS CLI 설치 및 환경 설정 방법  (0) 2022.08.30

댓글