본문 바로가기
Database/Amazon Aurora MySQL

Windows10(WSL Ubuntu) + AWSCLI 를 이용하여 Aurora MySQL slowquery logs percona-toolkit 쿼리 분석

by DBTechBiz 2022. 10. 3.

Windows 10 (WSL Ubuntu) + AWSCI 를 이용하여 Aurora MySQL SlowQuery Logs Percona-Toolkit 쿼리 분석 하기

Windows 10 환경에서 Percona-Toolkit(pt-query-digest) 을 이용한 Aurora MySQL SlowQuery 분석


1. Microsoft Sotre 의 Ubuntu 설치

  • Ubuntu 22.04.1 LTS 버전으로 설치하였으며 버전은 각 환경에 맞게 설치한다.

 

2. Ubuntu Username, Password 등록

 

3. Ubuntu 창 마우스 오른쪽 클릭하여 복사/붙여넣기 사용 체크

 

4. apt 명령어를 이용하여 패키지 설치

#ubuntu gzip error 발생하여 offset value 변경
echo -en '\x10' | sudo dd of=/usr/bin/gzip count=1 bs=1 conv=notrunc seek=$((0x189))

sudo apt update
sudo apt install net-tools
sudo apt install jq
sudo apt install awscli
sudo apt install percona-toolkit

 

5. open-ssh 패키지 설치 및 환경설정 (Optional 설치로 ssh 접속이 필요없는 경우 해당 스텝은 무시한다.)

# root 패스워드 설정
sudo passwd

#New password:
#Retype new password:
#passwd: password updated successfully

# root 로 switch
su -
#Password:

# ssh 패키지 설치
apt install openssh-server

# sshd_config 설정
cd /etc/ssh
vi sshd_config
# 아래의 설정 변경
Port 22
PasswordAuthentication yes

# ssh-keygen
ssh-keygen -A

# sshd restart
service ssh --full-restart

# root 에서 일반 user 로 switch
exit

 

6. awscli 환경 설정

  • 아래의 링크를 참조하여 config 와 credentials 파일에 프로파일 및 인증 정보를 설정한다.

2022.08.30 - [AWS/AWS SDK for Python] - AWS CLI 설치 및 환경 설정 방법

cd
mkdir .aws
vi .aws/config
vi .aws/credentials

 

7. Aurora MySQL SlowQuery Logs 를 이용하여 Percona-Toolkit(pt-query-digest) 쿼리 스크립트 작성

# 디렉토리 생성
cd
mkdir percona
cd percona

# pt-query-digest 스크립트 생성 (스크립트는 aws profile 설정에 맞게 수정)
vi slowquery-pt-query-digest.sh

#!/bin/bash
#########################################################################
# aws profile 과 db 명을 선택
PS3='Please Select one: '
select AWS_PROFILE in "dev" "stg" "prd"
do
    echo "The one you have selected is : $AWS_PROFILE"
    break
done

select TARGET_NAME in "mysql-bk" "mysql-dw" "mysql-core"
do
    echo "The one you have selected is : $TARGET_NAME"
    break
done
#########################################################################
# set variables
LogGroupName="/aws/rds/cluster/aurora-rds-cluster-$TARGET_NAME/slowquery"
LogStreamName="aurora-instance-$TARGET_NAME-0"

#타임스탬프 컬럼 한국 시간 기준
#start_time="2022-09-29 09:00:00"
#end_time="2022-09-29 18:00:00"
start_time=$1
end_time=$2
#########################################################################
# parse to microseconds unixtime
format='%Y-%m-%d %H:%M:%S'
timestamp_start=$(TZ=KST-9 date -d "$format" -d "$start_time" +%s%3N)
timestamp_end=$(TZ=KST-9 date -d "$format" -d "$end_time" +%s%3N)
#########################################################################
# colorable
readonly cf="\\033[0m"
readonly red="\\033[0;31m"
#########################################################################
# secion header
display_section_header() {
  echo -e "${red}==================== $1 ====================${cf}"
}
#########################################################################
# get log events
cloudwatch_log_events() {
  aws logs get-log-events --profile "$AWS_PROFILE" \
    --log-group-name "$LogGroupName" \
    --log-stream-name "$LogStreamName" \
    --start-time "$timestamp_start" \
    --end-time "$timestamp_end" \
    --query 'events[].message' | jq -r '.[]'
}
#########################################################################
while read -r stream; do
  # get stream events
  display_section_header "$stream"
  events="$(cloudwatch_log_events "$stream")"

  # list SQL Query
  # Query를 실행 횟수 순서로 나열
  # grep -v 에서 특정 패턴을 제외
  # display_section_header "Queries"
  # echo "$events" | grep -v ^SET | grep -v ^# | grep -v ^use | sort | uniq -c | sort -r

  # pt-query-digest
  display_section_header "Pt-query-digest"
  echo "$events" | pt-query-digest | more

done <<<"$LogStreamName"

 

8. 스크립트 권한 부여 및 실행

# 실행 권한 부여
chmod 750 slowquery-pt-query-digest.sh

# start_time, end_time 을 입력(Aurora MySQL SlowQuery 기간)하여 스크립트 실행
bash slowquery-pt-query-digest.sh "2022-09-29 09:00:00" "2022-09-30 18:00:00"

 

  • AWSCLI + WSL Ubuntu + Percona Toolkit 조합으로 Aurora MySQL SlowQuery 를 보다 편하게 분석이 가능하다.

반응형

댓글