와탭 블로그

전체보기

Apache, Nginx 웹서버 모니터링 (Telegraf, WhaTap)

2019년 12월 03일

Aphace and Nginx

Apahce와 Nginx는 설정을 통해 서버 상태를 확인하는 기능을 기본적으로 제공하고 있습니다. 이 기능은 URL을 통해서 접근하기 때문에 일회성의 데이터 입니다. 모니터링을 하기 위해서는 지속적으로 데이터를 수집, 저장 그리고 출력하는 기능들이 더해져야 합니다. 오픈소스 Telegraf 에이전트는 지속적으로 데이터를 수집하고 원하는 형태로 데이터를 전달할 수 있습니다. Telegraf 를 통해서 Apache와 Nginx 의 상태 데이터를 수집하고, 와탭의 수집서버로 전달할 수 있습니다. 와탭에서는 전달받은 웹서버 모니터링 데이터를 저장하고 과거 또는 실시간 데이터를 대시보드, 그래프 등의 형태로 조회할 수 있습니다.

Apache, Naginx server status
arrow_forward
Telegraf
arrow_forward
whatap
arrow_forward
User Interface

Apache 모니터링

참고 자료 : https://httpd.apache.org/docs/2.2/ko/mod/mod_status.html

  • status_module을 설정하여 상태 정보를 확인할 수 있습니다.
  • status_module이 구성되어 있는지 확인합니다.
  • # apachectl -D DUMP_MODULES | grep status

    status_module (shared)

  • Apache conf 파일에 아래와 같이 설정합니다.
  • Apache 2.2 설정

    <IfModule mod_status.c>

    <Location /server-status>

    SetHandler server-status

    oder allow,deny

    allow from all

    <Location>

    <IfModule>

    Apache 2.4 설정

    <IfModule status_module>

    <Location /server-status>

        SetHandler server-status

        Require all granted

    <Location>
    <IfModule>

  • Apache를 재시작 후 설정된 /server-status URL을 통해서 웹서버 상황을 확인할 수 있습니다.
서버 상태 확인

Apache를 재시작 후 설정된 /server-status URL을 통해서 웹서버 상황을 확인할 수 있습니다.

Apache2.4_server_status

http://도메인/server-status?auto 을 통해서 서버 상태를 확인할 수 있습니다.
auto 옵션은 간소화되고 변환하기 쉬운 텍스트 데이터를 조회할 수 있습니다.

server_status_auto
제공 정보
  • 요청을 서비스하는 worker의 개수
  • 쉬고 있는(idle) worker의 개수
  • 각 worker들의 상태, worker가 처리한 요청의 개수와 worker가 서비스한 전체 바이트 수
  • 총 접근 횟수와 서비스한 바이트 수
  • 서버가 시작혹은 재시작한 시간과 동작한 시간
  • 초당 요청 수 평균, 초당 서비스한 바이트 수와 요청당 바이트 수 평균
  • 현재 아파치 전체와 각 worker들의 CPU 비율
  • 현재 처리하고 있는 호스트와 요청
  • Scoreboard
    “_” : 요청을 대기중인 상태(프로세스 있음)
    “S” : 시작 중인 상태
    “R” : 요청을 분석하고 있는 상태
    “W” : 응답을 전송 중인 상태
    “K” : 계속 연결 중인 상태 (Keepaddve)
    “D” : DNS 조회 중인 상태
    “C” : 연결을 종료하고 있는 상태
    “.” : 현재 프로세스가 없는 열린 슬롯

Nginx 모니터링

참고 자료 : https://nginx.org/en/docs/http/ngx_http_stub_status_module.html

  • nginx 설정 파일에 기능을 설정합니다.
  • Centos 6 기준으로 /etc/nginx/conf.d/Default.conf 에 아래 설정을 추가합니다.
  • server 항목 내부에 location 설정을 합니다.

    server {

        listen 80;

        server_name …

     

        ...

     

        location /server-status {

            stub_status on;

            access_log off ;

            allow all;

            #allow 127.0.0.1 ;

            #deny all;

        }
    }

http://도메인/server-status 을 통해서 서버 상태를 확인할 수 있습니다.

nginx_status
제공 정보
  • Active connections
    연결을 포함한 현재 활성 클라이언트 연결 수
  • accepts
    총 클라이언트 연결 수
  • handled
    처리 된 총 연결 수. 일반적으로 매개 변수 값은 accepts 정보와 동일합니다.
    (일부 자원 제한에 도달하지 않는 한. 예 : worker_connections 제한 )
  • requests
    총 클라이언트 요청 수
  • Readings
    nginx가 요청 헤더를 읽는 현재 연결 수
  • Writing
    nginx가 응답을 클라이언트에 다시 쓰는 현재 연결 수
  • Waiting
    요청을 기다리는 현재 유휴 클라이언트 연결 수

Telegraf

Telegraf 에이전트를 통해서 Apache와 Nginx 서버 상태 정보를 지속적으로 수집(기본 설정 10초 간격)할 수 있습니다. Telegraf에는 apache input plugin, nginx input plugin이 포함되어 있어 설정으로 활성활 할 수 있습니다.

수집한 데이터를 와탭 서버로 전달하기 위해서는 whatap output plugin이 필요합니다. Telegraf 공식 버전에는 WhaTap output plugin 이 아직 적용되지 않았습니다. WhaTap output plugin을 추가하기 위해 리뷰가 진행 중입니다. 정식 배포 전에는 아래 다운로드 설치로 Telegraf를 설치합니다.

Telegraf release-1.12 버전을 기준으로 WhaTap output plugin을 추가한 설치파일입니다. Telegraf를 이미 사용중인 경우에는 실행파일만 교체하여 사용할 수 있습니다.

다른 운영체체에 대해서는 support@whatap.io로 부탁드립니다.

Apache input plugin

  • Apache의 서버 상태 정보를 수집하기 위한 설정을 합니다
  • ttelegraf.conf (/etc/telegraf/telegraf.conf)를 수정하여 inputs.apache plugin 을 활성화 합니다.
    • [[inputs.apache]] 주석을 제거 합니다.
    • urls에 Apache status_module 로 설정한 server-status url을 등록합니다.

# # Read Apache status information (mod_status)

[[inputs.apache]]

#    ## An array of URLs to gather from, must be directed at the machine

#    ## readable version of the mod_status page including the auto query string.

#    ## Default is "http://localhost/server-status?auto".

  urls = ["http://localhost/server-status?auto"]

#

#    ## Credentials for basic HTTP authentication.

#    # username = "myuser"

#    # password = "mypassword"

#

#    ## Maximum time to receive response

#    # response_timeout = "5s

#

#    ## Optional TLS Config

#    # tls_ca = "/etc/telegraf/ca.pem"

#    # tls_cert = "/etc/telegraf/cert.pem"

#    # tls_key = "/etc/telegraf/key.pem"

#    ## Use TLS but skip chain & host verification

#    # insecure_skip_verify = false

Nginx input plugin

  • Nginx의 서버 상태 정보를 수집하기 위한 설정을 합니다.
  • telegraf.conf (/etc/telegraf/telegraf.conf)를 수정하여 inputs.nginx plugin 을 활성화 합니다.
    • [[inputs.nginx]] 주석을 삭제합니다.
    • urls 항목에 nginx에 설정된 server-status url 을 등록합니다.

# # Read Nginx's basic status information (ngx_http_stub_status_module)

[[inputs.nginx]]

#    # An array of Nginx stub_status URI to gather stats.

  urls = ["http://localhost/server_status"]

#

#    ## Optional TLS Config

#    tls_ca = "/etc/telegraf/ca.pem"

#    tls_ca = "/etc/telegraf/cert.cer"

#    tls_ca = "/etc/telegraf/key.key"

#    ## Use TLS but skip chain & host verification

#    insecure_skip_verify = false

#

#    # HTTP response timeout (default: 5s)

#    response_timeout = "5s"

WhaTap ouput plugin

아래 설정에 필요한 정보는 와탭 어플리케이션 와탭 어플리케이션 모니터링(Java, Node, Python, Php) 프로젝트의 에이전트 설치 화면에서 라이선스 키 및 와탭 수집서버 정보를 확인할 수 있습니다.

agent_install
  • [[outputs.whatap]] 주석(#)을 삭제합니다.
  • license의 주석(#)을 삭제합니다. 프로젝트의 라이선스 키 정보를 입력합니다. (문자형으로 입력합니다.)
  • pcode의 주석(#)을 삭제합니다. 프로젝트 코드를 입력합니다. (숫자형으로 입력합니다.) 프로젝트 코드는 어플리케이션 프로젝트 화면의 왼쪽 메뉴 하단에 PCODE 뒤에 숫자형 코드입니다.
  • servers의 주석(#)을 삭제합니다. 수집서버 정보(아이피,포트) 를 설정합니다.
    프로토콜은 tcp만 지원합니다.문자 형식으로 "tcp://아이피:포트"를 등록합니다.
    배열 형식으로 등록합니다. 콤마(,)로 구분하여 배열 형식으로 등록합니다.

# # Configuration for WhaTap

[[outputs.whatap]]

#    ## You can create a project on the WhaTap site(https://www.whatap.io)

#    ## to get license, project code and server IP information.

#

#    ## WhaTap license. Required

license = "x2tggtnopk2t9-xxxxxxxxxx-aaaaaaaaaa"

#

#    ## WhaTap project code. Required

pcode = 118

#

#    ## WhaTap server IP. Required

#    ## Put multiple IPs.

#      ["tcp://1.1.1.1:6600","tcp://2.2.2.2:6600"]


servers = ["tcp://1.2.3.4:6600", "tcp://5.6.7.8:6600"]

#    ## Connection timeout.

#    # timeout = "60s"

데이터 확인

WhaTap output plugin에 설정한 어플리케이션 모니터링 프로젝트 내부에서 확인이 가능합니다.

대시보드

태그 카운트 보드를 통해서 직접 원하는 대시보드를 생성할 수 있습니다. Apache 또는 Nginx 웹서버 모니터링 과 시스템 모니터링을 같이 구성할 수도 있습니다.

사전정의 태그 보드에는 Apahce 또는 Nginx 모니터링을 대상으로 미리 구성되어 있어서 데이터 연결 후 바로 간략한 모니터링 정보를 확인할 수 있습니다.

Apache에 대한 대시보드를 제공합니다.
apache_dashboard
  • CPULoad : CPULoad를 그래프로 보여줍니다.
  • CPU User : 사용자 CPU 사용율을 그래프로 보여줍니다.
  • Used Memory : 시스템 메모리 사용율을 그래프로 보여줍니다.
  • ReqPerSec : 초당 요청 수의 평균을 그래프로 보여줍니다.
  • BytesPerSec : 초당 전송 바이트의 평균을 그래프로 보여줍니다.
  • BytesPerReq : 요청당 전송 바이트의 평균을 그래프로 보여줍니다.
  • Worker : Busy Workers(요청을 처리하는 작업 수), Idel Workers(쉬고 있는 작업 수)를 그래프로 보여줍니다.
  • Scoreboard : 스코어보드를 그래프로 보여줍니다.
Nginx 에 대한 대시보드를 제공
nginx_dashboard
  • Active : 처리중인 커넥션 수를 그래프로 보여줍니다.
  • CPU User : 사용자 CPU 사용율을 그래프로 보여줍니다.
  • Used Memory : 시스템 메모리 사용율을 그래프로 보여줍니다.
  • Server accepts, handled, requests 항목을 그래프로 보여줍니다
  • Reading reading, writing, waiting 항목을 그래프로 보여줍니다.
태그 카운트 조회

Telegraf 에서 전달되는 데이터들을 시간, 카테고리, 태그, 필드 등을 선택하여 데이터를 조회할 수 있습니다.

tagcount_1
태그 카운트 차트 조회

Telegraf 에서 전달되는 데이터들을 시간, 카테고리, 태그, 필드 등을 선택하여 차트로 조회할 수 있습니다. 여러 개의 차트를 추가하여 비교할 수 있습니다.

tagcount_chart
임재환(jhlim@whatap.io)
Development TeamLead Developer
<  이전 글

다음 글  >

최신글