NGINX / PHP-FPM 모니터링 조건 만들기
nginx 와 php-fpm 은 가장 널리 쓰이는 web 과 was 구성이다. 안정적인 서비스 운영을 위해선 지속적인 시스템 모니터링이 필요한데, 이 두 어플리케이션을 효과적으로 모니터링할 수 있는 기반 데이터 추출이 필요하다. 이 데이터는 Zabbix 등 시스템 모니터링 툴로 전달되기 위함이며, ‘프로세스’의 상태를 확인하는 것을 주목적으로 하고 있다.
NGINX
nginx 를 위한 모니터링 툴은 매우 다양하다. A 부터 Z 까지 모두 해결해 주는 솔루션도 있지만, 현재 모니터링 툴로 Zabbix 를 사용중이기 때문에 단순히 nginx 컨디션 체크를 위한 값들이 필요하다. 우리가 사용할 플러그인은 Munin 으로 매우 높은 효율의 모니터링 툴을 제공한다. 결과 수집 부터 통계 표현까지 가능하지만, 누차 강조하지만 지금 시점에서는 Zabbix 로 전달할 값을 만들어내는 것 만 필요하기에 단순히 현재 nginx 의 컨디션만 체크하는 선 까지 진행해 보도록 하겠다.
Munin 을 사용하기 위해 NGINX 는 반드시 http_stub_status_module 이 필요하다
$nginx -V # 현재 설치된 패키지를 확인할 수 있다 nginx version: nginx/1.4.1 (Ubuntu) TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --with-pcre-jit --with-http_ssl_module --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --without-http_uwsgi_module --without-http_scgi_module --with-ipv6 <strong>--with-http_stub_status_module</strong> --with-http_realip_module --add-module=/build/buildd/nginx-1.4.1/debian/modules/naxsi/naxsi_src --add-module=/build/buildd/nginx-1.4.1/debian/modules/nginx-cache-purge --add-module=/build/buildd/nginx-1.4.1/debian/modules/nginx-upstream-fair
위와 같이 –with-http_stub_status_module 이 있으면 사용 가능함을 의미한다. 이제 화면에 보여줄 url 을 virtual host 설정에 추가하자
$vi default.conf location /status.nginx { # http://s-tune.com/status.nginx 애 맵핑된다 stub_status on; # 위에서 언급한 http_stub_status_module 을 활성화 한다 access_log off; # 모니터링 접근은 로깅하지 않는다 allow 10.0.0.0/24; #특정 subnet 사용자만 접근할 수 있다 allow 127.0.0.1; deny all; # 허용된 subnet 이외에는 모두 차단 }
이제 Munin 설치가 남았다. Ubuntu 12 이상에는 apt-get 으로 패키지 설치가 가능하다.
$apt-get install munin-node ### 설치 완료 후 $vi /etc/munin/plugin-conf.d/munin-noode # 가장 아래에 추가한다 [nginx*] env.url http://s-tune.com/status.nginx # 저장후 $munin-node-configure --suggest # 플러그인 파일이 생성된다 $cd /etc/munin/plugins/ $sudo ln -sf /usr/share/munin/plugins/nginx_* . $service munin-node restart $service nginx reload
설치 방법은 매우 간단하다. 이제, 위에서 설정한 http://s-tune.com/status.nginx 를 방문하면 다음과 결과 화면을 얻을 수 있다. 설명이 필요 없을 정도의 간결한 결과 값을 확인할 수 있으며 이 URL 을 Zabbix 로 크롤링, 값을 확인하면 된다.
Active connections: 1 # 활성화된 연결 개수
server accepts handled requests
72 72 518
# nginx 는 72개의 접속을 받아들였고
# 72개의 접속을 핸들링 했으며 (수용하고, 닫히지 않은)
# 518번의 요청을 핸들링했다(한번 접속 마다 7.2회의 요청이 있었다)
Reading: 0 Writing: 1 Waiting: 0
# reading : nginx가 읽은 요청 헤더
# wrting : nginx 가 읽은 요청 본문 / 요청 처리수 또는 클라이언트의 요청에 의한 기록
# wating : keep alive 접속. 실제 활성화된 상태 (reading + writing)
여기서 ‘치명적’ 이라고 한다면 Active connections 가 1보다 커야하며 wating 상태의 값이 nginx 에 지정한 최대 접속 수보다 낮아야 한다.
PHP-FPM
php-fpm 은 자체적으로 매우 유용한 통계 페이지 출력 기능을 포함하고 있다. 별도의 어플리케이션 설치가 필요 없고 설정만으로 확인이 가능하다.
$vi /etc/php5/fpm/pool.d/www.conf pm.status_path = /status.fpm # 주석을 해지하고, nginx 에서 alias 할 주소를 지정한다 $service php5-fpm restart $vi /etc/nginx/site-enabled/default.conf location ~ ^/(status.fpm|ping)$ { access_log off; # 로깅을 하지 않는다 allow 10.0.0.0/24; #특정 subnet 사용자만 접근할 수 있다 allow 127.0.0.1; deny all; #allow 이외에는 모두 접근 차단 include fastcgi_params; fastcgi_pass 127.0.0.1:9000; # fpm 에 붙는다 } $service nginx reload
이 상태에서 상기 URL 로 접속한다면 다음과 같은 결과를 얻을 수 있는데, 명칭이 직관적이어서 별도의 코맨트 없이 알아보기 편하다
pool: www
process manager: dynamic
start time: 20/Aug/2014:05:17:53 +0000
start since: 10
accepted conn: 1
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 14
active processes: 1
total processes: 15
max active processes: 1
max children reached: 0
slow requests: 0
이제 이들 페이지를 Zabbix 에 등록하고 트리거를 잘 구성하면 끝.