Elastic Stack을 사용하여 NGINX 웹 서버를 모니터링하는 방법
이 글에서는 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에서 NGINX 데이터 시각화
다음으로 Kibana를 사용하여 데이터를 보고 분석하는 방법을 살펴보겠습니다.
인프라
Kibana 사이드바에서 인프라 앱으로 이동하면 인프라의 스냅 샷(마지막 순간)을 볼 수 있습니다. 사용된 구성에 따라 비 자동 검색 기반 설정의 호스트에서 데이터에 액세스할 수 있으며, 자동 검색 설정의 경우 Docker 및 Kubernetes 버튼(사용된 제공자를 기반으로 함)이 올바른 데이터 세트로 연결됩니다.
호스트 기반 설정을 사용하면서 호스트 버튼을 클릭하면 다음 데이터가 Metricbeat에서 전달되는 것을 볼 수 있습니다.
노드 중 하나를 선택하고 메트릭 보기를 선택하면 해당 단일 NGINX 서버에 대한 자세한 메트릭이 있는 페이지를 볼 수 있습니다.
로그
대신 로그 앱으로 이동하면 Filebeat에서 전달된 액세스 및 오류 로그를 볼 수 있습니다.
사전 구성된 NGINX 대시보드
이제 Kibana의 실행 및 액세스 가능한 인스턴스가 있으므로 미리 작성된 대시 보드를 로드할 수 있습니다.
Metricbeat 대시 보드를 로드하려면 Metricbeat 디렉토리에서 다음을 실행하십시오.
sudo ./metricbeat setup --dashboards
그리고 Filebeat에 대해서도 동일하게 수행하십시오.
sudo ./filebeat setup --dashboards
이제 Kibana 내 대시 보드 탭으로 이동하면 다음이 표시됩니다.
"nginx" 검색으로 좁히면 다음과 같은 대시 보드를 사용할 수 있습니다.
예를 들어 [Filebeat NGINX] 액세스 및 오류 로그 ECS 대시보드는 다음과 같습니다.
이를 통해 Elastic Stack을 사용하여 NGINX 서버를 모니터링하는 방법을 배웠습니다. 여기서부터는 사용자에게 매우 중요한 정보를 자세히 살펴볼 수 있도록 다양한 옵션(예를 들면 다른 그룹화 및 필터링 옵션)을 보여줍니다.