Blog

2019.07.17 - Elastic Stack을 사용하여 NGINX 웹 서버를 모니터링하는 방법

drscg 2020. 9. 25. 14:59

이 글에서는 Elastic Stack의 다양한 구성 요소를 사용하여 NGINX를 모니터링하는 방법을 알아봅니다. Metricbeat와 Filebeat를 사용하여 데이터를 수집합니다. 이 데이터는 Elasticsearch로 전송되어 저장됩니다. 마지막으로 Kibana를 사용하여 해당 데이터를 보겠습니다.

Metricbeat는 연결과 관련된 데이터(활성, 처리됨, 수락됨 등) 및 총 클라이언트 요청 수를 수집합니다. Filebeat는 액세스 및 오류 로그와 관련된 데이터를 수집합니다. Mileage는 설정에 따라 다를 수 있지만 대부분이 정보를 사용하여 다음과 같은 특정 사항을 추론할 수 있습니다.

  • 특정한 리소스에 대한 오류 로그가 급증한다면 여전히 필요한 리소스를 삭제했음을 의미할 수 있습니다.
  • 액세스 로그는 서비스 사용량이 많은 시간을 표시합니다(따라서 유지관리와 같은 작업을 수행하기에 가장 좋은 시기를 확인할 수 있습니다).
  • 클라이언트 요청이 갑자기 급증하면 디도스 공격과 같이 악의적인 상황임을 가려낼 수 있습니다.

이 글은 모니터링 기능을 중점적으로 다루며, Elasticsearch 설정과 같은 것들을 간략하게 설명합니다. 저는 Mac을 사용하고 있으므로 Elasticsearch, Metricbeat, Filebeat 및 Kibana의 Mac 배포를 사용합니다. 다른 플랫폼에 대한 배포는 다운로드 페이지에서 얻을 수 있습니다.

Elasticsearch 설치

Metricbeat 및 Filebeat (실제로 모든 Beats)에는 데이터를 저장하기 위해 Elasticsearch 클러스터가 필요합니다. 간단한 Elasticsearch 클러스터를 로컬로 설정하겠습니다. Elasticsearch를 외부에 공개하지 않으므로 보안 구성에 시간을 소비하지 않을 것입니다.

1단계: Elasticsearch 다운로드

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.0-darwin-x86_64.tar.gz

2단계: 아카이브 추출

tar -xvf elasticsearch-7.1.0-darwin-x86_64.tar.gz

3단계: bin 디렉토리로 변경

cd elasticsearch-7.1.0/bin

4단계: 단일 노드 클러스터 시작

./elasticsearch

기본적으로 클러스터는 localhost:9200에서 실행됩니다.

NGINX 실행

NGINX를 실행할 수 있는 방법은 여러 가지가 있습니다. 호스트에서 독립적으로, Docker 컨테이너를 통해, Kubernetes 설정 하에 등으로 실행할 수 있습니다. Beats는 컨테이너 API 이벤트를 수신하여 서버 컨테이너를 사용하거나 제거할 때의 서버 컨테이너를 추적할 수 있는 자동 검색 기능이 있습니다.

NGINX를 설정하고 구성할 수 있는 다양한 방법이 있기 때문에, 이 글에서는 지나친 가정 없이 호스트 구성뿐만 아니라 자동 검색(이 경우 Docker) 사례를 보여줍니다.

Metricbeat 및 Filebeat 구성

이제 Beats를 구성하여 데이터를 수집하고 전송하도록 하겠습니다.

Metricbeat

Metricbeat를 사용하여 메트릭을 수집합니다.

1단계: Metricbeat 다운로드:

curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.1.0-darwin-x86_64.tar.gz

2단계: 아카이브 추출

tar -xvf metricbeat-7.1.0-darwin-x86_64.tar.gz

3단계: 디렉토리 변경

cd metricbeat-7.1.0-darwin-x86_64

이제 구성 시간입니다!

기본적으로 구성 파일(metricbeat.yml)은 이전에 구성한 localhost:9200에서 실행 중인 Elasticsearch 클러스터를 찾습니다.

4단계: 관련 Metricbeat 모듈 활성화

기본적으로 시스템 수준 메트릭만 수집됩니다.

./metricbeat modules enable nginx

5단계: 파일 소유권 변경

Metricbeat를 루트로 실행하므로 파일 소유권 몇 개를 변경해야 합니다(또는 엄격한 권한 검사를 비활성화하기 위해 명령줄에서 --strict.perms = false 옵션을 사용하도록 선택할 수 있음).

sudo chown root metricbeat.yml 
sudo chown root modules.d/system.yml 
sudo chown root modules.d/nginx.yml

6단계: 메트릭 세트 활성화

modules.d/nginx.yml 파일을 열면 다음과 같은 주석을 지울 수 있는 stubstatus 메트릭 세트를 활성화할 수 있습니다.

#metricsets:
#  - stubstatus

이 메트릭 세트는 NGINX ngx_http_stub_status 모듈에서 데이터를 수집하므로 이 NGINX 모듈을 메트릭 세트가 작동하도록 구성해야 합니다.

여기에서 모니터링되는 호스트를 변경할 수도 있으며 기본적으로 <a href="http://127.0.0.1"> htttp://127.0.0.1</a>이 모니터링됩니다. 여기까지가 호스트 기반 설정의 전부입니다.

7단계: 자동 검색 설정(대체)

자동 검색 설정을 사용하면 동일한 구성이라도 세 제공자인 Docker, Kubernetes 및 Jolokia마다 구성이 다릅니다. Docker의 예제는 다음과 같이 metricbeat.yml 구성 파일의 맨 아래에 metricbeat.autodiscover를 추가하는 것입니다.

metricbeat.autodiscover:
  providers:
    - type: docker
      templates:
        - condition:
            contains:
              docker.container.image: nginx
          config:
            - module: nginx
              metricsets: ["stubstatus"]
              hosts: "${data.host}:${data.port}"

이 구성을 사용하면 이름에 NGINX가 포함된 이미지를 사용하는 모든 Docker 컨테이너(정확한 일치보다는 하위 문자열 일치를 수행함)가 일치하고 stubstatus 메트릭 세트와 함께 NGINX 모듈을 활성화하는 구성을 사용합니다.

8단계: Metricbeat 실행

이제 구성되었습니다. 로그를 stderr에 보내고 syslog/file 출력을 비활성화하는 플래그로 Metricbeat를 실행할 수 있습니다.

sudo ./metricbeat -e

모든 것이 제대로 작동했다면 초기 출력이 표시되었을 것이며, 이후 Metricbeat에서 데이터를 다시 클러스터에 게시할 때마다 추가 출력이 표시되어야 합니다.

Filebeat

Filebeat를 사용하여 로그를 수집합니다.

1단계: Filebeat 다운로드

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.0-darwin-x86_64.tar.gz

2단계: 아카이브 추출

tar -xvf filebeat-7.1.0-darwin-x86_64.tar.gz

3단계: 디렉토리 변경

cd filebeat-7.1.0-darwin-x86_64

4단계: NGINX 모듈 활성화

./filebeat modules enable nginx

기본적으로 액세스 및 오류 로그가 수집됩니다. 로그 파일 경로의 경우 Filebeat는 OS를 기반으로 경로를 결정하려고 시도합니다. 다른 경로를 명시적으로 설정해야 하는 경우 modules.d/nginx.yml 구성 파일에서 경로를 설정할 수 있습니다.

5단계: 파일 소유권 변경

sudo chown root filebeat.yml
sudo chown root modules.d/nginx.yml
sudo chown root module/nginx/access/manifest.yml
sudo chown root module/nginx/error/manifest.yml

이제 호스트 기반 설정이 완료되었습니다.

6단계: 자동 검색 설정(대체)

이전과 마찬가지로 자동 검색을 사용하려면 추가 구성이 필요합니다. 이전 섹션과 유사하게 Docker의 예제에서도 자동 검색 섹션을 구성에 추가해야 하며, filebeat.yml은 다음과 같습니다.

filebeat.autodiscover:
 providers:
   - type: docker
     templates:
       - condition:
         contains:
           docker.container.image: nginx
         config:
           - module: nginx
             access:
               input:
                 type: docker
                 containers.ids:
                   - "${data.docker.container.id}"
             error:
               input:
                 type: docker
                 containers.ids:
                   - "${data.docker.container.id}"

여기서는 Docker 입력을 사용하도록 액세스 및 오류 옵션을 구성합니다. Docker 입력은 해당 경로(Docker 로그가 있는 기본 경로로, 기본값은 /var/lib/docker/containers)에서 컨테이너 로그를 검색합니다. 템플릿 조건과 일치하는 컨테이너의 ID를 사용하여 containers.ids를 지정합니다. 종합하면, 로그(기본적으로)는 /var/lib/docker/containers/ac29b98ad83ca43bb4c15ae8f0d03aff8c7d57bf5dee9024124374b92b14b0f2/ (ID는 다름)에서 제공됩니다.

7단계: Filebeat 실행

sudo ./filebeat -e

Kibana 설치

이제 Metricbeat 및 Filebeat가 NGINX 서버에 대한 데이터를 전송하므로 Kibana를 통해 데이터를 볼 수 있는 방법이 필요합니다.

1단계: Kibana 다운로드

curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.1.0-darwin-x86_64.tar.gz

2단계: 아카이브 추출 및 디렉토리 변경

tar -xzf kibana-7.1.0-darwin-x86_64.tar.gz
cd kibana-7.1.0-darwin-x86_64

3단계: Kibana 실행

./bin/kibana

기본적으로 Kibana는 http://localhost:9200의 Elasticsearch 호스트를 사용하며 http://localhost:5601에서 액세스할 수 있습니다.

http://localhost:5601로 이동하면 다음과 같은 메시지가 표시됩니다.

Kibana에 오신 것을 환영합니다

선택적으로 샘플 데이터를 사용해볼 수 있지만 직접 탐색을 클릭해 보겠습니다.

Kibana에서 NGINX 데이터 시각화

다음으로 Kibana를 사용하여 데이터를 보고 분석하는 방법을 살펴보겠습니다.

인프라

Kibana 사이드바에서 인프라 앱으로 이동하면 인프라의 스냅 샷(마지막 순간)을 볼 수 있습니다. 사용된 구성에 따라 비 자동 검색 기반 설정의 호스트에서 데이터에 액세스할 수 있으며, 자동 검색 설정의 경우 Docker 및 Kubernetes 버튼(사용된 제공자를 기반으로 함)이 올바른 데이터 세트로 연결됩니다.

호스트, Kubernetes 및 Docker 버튼

호스트 기반 설정을 사용하면서 호스트 버튼을 클릭하면 다음 데이터가 Metricbeat에서 전달되는 것을 볼 수 있습니다.

전달된 데이터를 보려면 호스트 버튼을 클릭

노드 중 하나를 선택하고 메트릭 보기를 선택하면 해당 단일 NGINX 서버에 대한 자세한 메트릭이 있는 페이지를 볼 수 있습니다.

서버 메트릭을 보여주는 Kibana 그래프

로그

대신 로그 앱으로 이동하면 Filebeat에서 전달된 액세스 및 오류 로그를 볼 수 있습니다.

Kibana 로그 앱에 오류 및 액세스 로그가 표시됨

사전 구성된 NGINX 대시보드

이제 Kibana의 실행 및 액세스 가능한 인스턴스가 있으므로 미리 작성된 대시 보드를 로드할 수 있습니다.

Metricbeat 대시 보드를 로드하려면 Metricbeat 디렉토리에서 다음을 실행하십시오.

sudo ./metricbeat setup --dashboards

그리고 Filebeat에 대해서도 동일하게 수행하십시오.

sudo ./filebeat setup --dashboards

이제 Kibana 내 대시 보드 탭으로 이동하면 다음이 표시됩니다.

사용 가능한 대시 보드를 표시하는 Kibana 페이지

"nginx" 검색으로 좁히면 다음과 같은 대시 보드를 사용할 수 있습니다.

사용 가능한 NGINX 대시보드를 표시하는 Kibana 페이지

예를 들어 [Filebeat NGINX] 액세스 및 오류 로그 ECS 대시보드는 다음과 같습니다.

Filebeat NGINX 액세스 및 오류 로그 ECS

이를 통해 Elastic Stack을 사용하여 NGINX 서버를 모니터링하는 방법을 배웠습니다. 여기서부터는 사용자에게 매우 중요한 정보를 자세히 살펴볼 수 있도록 다양한 옵션(예를 들면 다른 그룹화 및 필터링 옵션)을 보여줍니다.

직접 사용해 보기

Elastic Stack을 시작하는 것은 쉽습니다. 제공된 curl 명령을 통해 다양한 제품을 다운로드하거나 다운로드 페이지로 이동하여 거기서 시작할 수 있습니다. 또는 더 쉬운 방법으로 Elasticsearch Service의 14일 무료 평가판을 사용해보고 시작하십시오. 궁금한 점이 있으면 토론 포럼에서 문의해주세요.