[gunplot] gnuplot 사용하여 ab test 결과 시각화(그래프) 하기
AB 테스트 결과 로그 파일과 그래프 이미지 변환하기
AB 테스트를 통해 성능을 측정하고 해당 결과를 로그 파일로 저장한 후, 이를 그래프로 변환하는 과정을 소개합니다. 이 글에서는 AB 테스트를 수행하는 방법, 로그 파일 포맷 설명, 그리고 gnuplot을 사용하여 그래프로 변환하는 방법을 단계별로 설명합니다.
AB 테스트 수행 및 로그 파일 생성
먼저, AB 테스트를 수행하여 결과를 로그 파일로 저장합니다. 다음 명령어를 사용하여 AB 테스트를 실행합니다:
ab -T application/json -n 1000 -c 100 -p post.json -g result.plot
위 명령어는 100명의 동시 사용자가 1000번의 요청을 보내며, post.json
파일을 요청 본문으로 사용하고, 결과를 result.plot
파일로 저장합니다.
로그 파일 포맷
생성된 로그 파일의 내용은 다음과 같은 형식을 갖습니다:
starttime seconds ctime dtime ttime wait
Fri May 22 17:45:00 2020 1590137100 9 157 165 27
Fri May 22 17:45:00 2020 1590137100 8 159 167 25
Fri May 22 17:44:13 2020 1590137053 7 161 167 23
Fri May 22 17:44:13 2020 1590137053 8 160 168 28
Fri May 22 17:44:49 2020 1590137089 9 159 168 24
Fri May 22 17:46:18 2020 1590137178 10 161 172 27
각 열의 의미는 다음과 같습니다:
- starttime: 요청 시작 시간
- seconds: 시작 시간의 UNIX 타임스탬프
- ctime: 연결 시간, 서버와 소켓을 오픈하는 시간
- dtime: 처리 시간, 서버 작업 시간과 결과 반환 시간을 포함
- ttime: 요청 수행 시간 (ttime = ctime + dtime)
- wait: 서버 사이드 처리 시간 (네트워크 시간 = dtime - wait)
gnuplot을 사용한 그래프 이미지 변환
생성된 로그 파일을 바탕으로 gnuplot을 사용하여 그래프로 변환합니다. 다음은 두 가지 gnuplot 스크립트를 사용하여 그래프를 생성하는 방법입니다.
gnuplot_script_type_a.sh
첫 번째 스크립트는 요청 번호를 X축, 응답 시간을 Y축으로 하여 선 그래프로 표시합니다:
# 이미지 사이즈
set terminal png size 1024,768
# 가로, 세로 비율
set size 1,0.5
# 결과 파일명
set output "result.png"
# 범례/key 위치
set key left top
# y grid line
set grid y
# Label the x-axis
set xlabel 'requests'
# Label the y-axis
set ylabel "response time (ms)"
# Tell gnuplot to use tabs as the delimiter instead of spaces (default)
set datafile separator '\t'
# Plot the data
plot "result.plot" every ::2 using 5 title 'response time' with lines
exit
위 스크립트를 실행하면 다음과 같은 그래프가 생성됩니다:
gnuplot_script_type_b.sh
두 번째 스크립트는 시간을 X축, 응답 시간을 Y축으로 하여 포인트 그래프로 표시합니다:
# 이미지 사이즈
set terminal png size 1024,768
# 결과 파일 명
set output "result.png"
# 범례/key 위치
set key left top
# y축 grid line
set grid y
# x축 데이터 지정
set xdata time
# input time format
set timefmt "%s"
# x축 time format 시:분:초
set format x "%H:%M:%S"
# Label the x-axis
set xlabel 'H:M:S'
# Label the y-axis
set ylabel "response time (ms)"
# 구분자로 탭을 사용
set datafile separator '\t'
# Plot the data
plot "result.plot" every ::2 using 2:5 title 'response time' with points
exit
위 스크립트를 실행하면 다음과 같은 그래프가 생성됩니다:
결론
이 글에서는 AB 테스트 결과를 로그 파일로 저장하고, 이를 gnuplot을 사용하여 그래프로 변환하는 과정을 설명했습니다. gnuplot 스크립트를 통해 간단하고 효과적으로 데이터를 시각화할 수 있습니다. 이를 통해 서버의 응답 시간을 분석하고 성능을 향상시킬 수 있는 유용한 인사이트를 얻을 수 있습니다.