====== 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'' : 총 결과 행 수