====== Box Anemometer ======
* [[https://github.com/box/Anemometer|Box Anemometer]]
* [[database:mysql|MySQL]] Slow Query 분석기
* [[http://www.percona.com/doc/percona-toolkit/|Percona-Toolkit]]이 필요하다.
===== 설치 주의점 =====
* [[https://github.com/box/Anemometer#readme|Anemometer README]] 에 따라 설치 진행
* ''php-bcmath'' 패키지 필요.
* ''/etc/php.ini''에 ''date.timezone = Asia/Seoul'' 설정 필요.
===== 로그 분석해서 DB에 넣기 =====
* [[http://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html|pt-query-digest]]를 사용한다.
* 기본적인 쿼리 분석해서 DB 넣기 스크립트
pt-query-digest --user=anemometer --password=superSecurePass \
--review h=db.example.com,D=slow_query_log,t=global_query_review \
--history h=db.example.com,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% \
--filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" \
slow_query_log_file.log
* ''$HOSTNAME'' 부분은 분석대상 쿼리의 호스트이름을 넣어주면 ''global_query_review_history.hostname_max'' 컬럼에 hostname 값으로 입력이 되게 되며 검색 조건으로 해당 hostname을 지정할 수 있게 된다.
* ''slow_query_log_file.log''를 자신의 Slow query log 파일로 변경한다.
* 분석 결과 DB 관련 정보는 자신이 설정한대로 바꿔 넣는다.
* pt-query-digest 구 버전에서는 ''--review-history'' 였지만, 2.2.1 버전에서는 ''--history''로 옵션이 바뀐 것 같음.
===== nginx에 설치 =====
* ''php-fpm'' 패키지 설치.
* nginx와 php-fpm을 패키지로 설치하면 ''/etc/nginx/fastcgi_params'' 파일이 생성된다.
* 잘 안될경우 [[nginx:log|nginx log]]를 통해 php-fpm 관련된 ''$document_root'', ''$fastcgi_script_name'' 변수들을 찍어보고 비교해 본다. 보통은 ''root'',''alias''등의 경로 지정이 잘못돼서 안 되는 경험을 했다.
* ''php-fpm'' 설정에서, ''user''와 ''group''이 실제 PHP 파일들이 있는 디렉토리와 파일에 대한 권한과 동일하도록 변경해야 한다.
* ''/var/www/html/anemometer''에 설치했다고 할 때,
server {
listen 80;
server_name example.com;
location /anemometer {
root /var/www/html;
index index.html index.htm;
}
# *.php 파일만 php-fpm 이 처리한다.
location ~ ^/anemometer/.+\.php$ {
root /var/www/html;
index index.html index.htm;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
===== 결과 화면 컬럼 설명 =====
* ''checksum'' : 쿼리 체크섬. 퍼머링크로 사용되어 다른 사람들과 쿼리 URL을 공유할 수 있음.
* ''snippet'' : 쿼리 문자열
* ''query_time_avg'' : 평균 쿼리 시간 - 초(sec)
* ''rows_sent_avg'' : 평균 결과 행 수
* ''ts_cnt'' : 쿼리 실행 갯수(sloq query로 떨어진 것만)
* ''Query_time_sum'' : 총 쿼리 시간 합.
* ''Rows_sent_sum'' : 총 결과 행 수