Prometheus 및 Grafana로 NGINX Plus API Gateway를 시각화하는 방법
Kubernetes에서 가시성(Visibility)을 개선하는 방법에서 논의한 바와 같이 API 앱 개발 및 제공 팀의 가장 큰 과제 중 하나는 앱 성능, 보안 및 가용성에 대한 통찰력을 얻는 것입니다. 이러한 통찰력은 팀이 문제를 신속하게 해결하고 트래픽 급증에 사전에 대비하는 데 도움이 됩니다.
Load Balancer, Reverse Proxy, API Gateway 및 Ingress Controller와 같은 트래픽 관리 도구는 앱 및 인프라 상태에 대한 풍부한 정보를 생성합니다. NGINX Plus 대시보드에서 이러한 중요한 메트릭을 실시간으로 추적할 수 있으며 NGINX Plus는 메트릭을 타사 모니터링 도구에 제공하여 시간 경과에 따른 성능 시각화에서 추가 통찰력을 제공할 수도 있습니다. 가장 인기 있는 두 가지 도구가 함께 작동하여 다음과 같은 시계열 그래프를 제공합니다.
- Prometheus – 모니터링 및 경고를 위한 CNCF(Cloud Native Computing Foundation)의 오픈소스 프로젝트
- Grafana – Prometheus와 같은 시계열 데이터베이스에서 그래프 및 기타 시각화를 생성하는 오픈소스 시각화 및 분석 도구
Prometheus-njs 모듈을 사용하면 NGINX Plus 메트릭을 Prometheus 및 Grafana에 쉽게 제공할 수 있습니다. NGINX JavaScript 모듈(NJS) 및 NGINX Plus API를 사용하여 NGINX Plus에서 Prometheus 서버로 메트릭을 내보냅니다.
목차
1. 전제 조건
2. NGINX Plus API Gateway 설정
3. Prometheus 서버 설정
4. Grafana 서버 설정
5. Grafana에서 NGINX Plus 그래프 만들기
6. 모든 NGINX Plus API Gateway 배포를 위한 통합 인사이트 및 분석
1. 전제 조건
데모를 시작하기 전에 다음 전제 조건을 충족했습니다.
- NGINX Plus 서버에 NGINX Plus를 설치합니다. 데모를 위해 깨끗한 초기 설치를 수행하고 있습니다. 기존 NGINX Plus 서버를 사용하는 경우 데모 중에 구성 파일에 대한 변경 사항을 수정해야 할 수 있습니다.
- NGINX Plus 서버에 NGINX JavaScript(njs) 모듈을 설치합니다.
- Prometheus 서버에 최신 버전의 Docker를 설치합니다. 데모에서는 일반적인 관행을 따르고 NGINX Plus와 별도의 두 번째 서버에서 Prometheus를 실행합니다.
- Grafana 서버(데모에서는 세 번째 서버)에 최신 버전의 Docker를 설치합니다.
2. NGINX Plus API Gateway 설정
1. Prometheus-njs 모듈을 설치합니다. 우리는 데모에서 Ubuntu 20.04를 사용하고 있으며 이것이 적절한 명령입니다.
$ sudo apt-get install nginx-plus-module-prometheus
2. 선호하는 텍스트 편집기를 사용하여 /etc/nginx/nginx.conf를 열고 http block 외부의 최상위(top-level) context에서 다음 load_module 지시문(directive)을 추가합니다.
load_module modules/ngx_http_js_module.so;
# existing top-level directives
http {
#...
}
3. (선택 사항) 하위 요청의 응답 본문을 저장하기 위한 버퍼 크기를 늘립니다(기본 크기는 플랫폼에 따라 4KB 또는 8KB임). 이것은 NGINX error log에 나타나는 너무 큰 하위 요청 응답 오류를 방지합니다. http 블록에 다음 subrequest_output_buffer_size 지시문을 추가합니다.
http {
#...
subrequest_output_buffer_size 32k;
}
4. nginx.conf를 저장하고 이 명령을 실행하여 NGINX 구성이 구문적으로 올바른지 확인합니다.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
5. 디렉토리를 conf.d로 변경하고 파일을 나열하십시오.
$ cd conf.d
$ ls
default.conf
6. default.conf 파일은 포트 80에서 수신 대기하는 가상 서버를 정의합니다. Prometheus용 가상 서버는 해당 포트에서 수신 대기해야 하므로 default.conf를 제거하여 해제하십시오.
$ sudo rm default.conf
7. 선호하는 텍스트 편집기를 사용하여 다음 내용으로 prometheus.conf라는 새 파일을 만듭니다.
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
server {
location = /metrics {
js_content prometheus.metrics;
}
location /api {
api;
}
}
js_import 지시문은 NGINX Plus API에 의해 생성된 메트릭을 Prometheus에 필요한 형식으로 변환하는 NGINX JavaScript 코드의 위치를 지정합니다. (Prometheus-njs에 대해 load_module 지시문을 추가할 필요도 없습니다.)
첫 번째 location 블록은 Prometheus 형식 메트릭에 대한 액세스를 제공합니다. 두 번째 위치 블록은 원시 메트릭을 생성하고 Prometheus에 노출하는 NGINX Plus API를 활성화합니다.
참고: 프로덕션 환경에서는 NGINX Plus API에 대한 액세스를 제한하는 것이 좋습니다.
8. prometheus.conf를 저장하고 4단계에서와 같이 올바른 구문을 확인하고 이 명령을 실행하여 NGINX Plus를 시작합니다.
$ sudo nginx
3. Prometheus 서버 설정
/etc/prometheus 디렉토리에 prometheus.yml이라는 YAML 형식의 Prometheus 구성 파일을 새로 만듭니다(Prometheus 웹 사이트의 기본 구성 파일 기반). 표시된 대로 한 가지 변경 사항은 대상 필드에 NGINX Plus 서버의 IP 주소와 포트를 추가하는 것입니다.
global:
scrape_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['NGINX_Plus_IP_address:80']
구성 파일에 포함할 수 있는 추가 옵션을 포함하여 Prometheus 구성에 대한 자세한 내용은 Prometheus 설명서를 참조하세요.
2. prometheus.yml을 저장하고 다음 명령을 실행합니다. Docker Hub에서 Prometheus를 가져와 포트 9090에 노출합니다.
$ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
3. 브라우저에서 새 Prometheus 서버의 IP 주소와 포트로 이동합니다. 다음과 같은 페이지는 서버가 작동 중임을 확인합니다.

4. Prometheus가 NGINX Plus 메트릭의 피드에 액세스하고 있는지 확인합니다. 창의 오른쪽 상단 모서리에 있는 Execute 버튼 왼쪽에 있는 지구본 아이콘을 클릭합니다. 다음과 같은 메트릭 목록이 나타납니다.

4. Grafana 서버 설정
1. 다음 명령을 실행하여 Docker Hub에서 Grafana를 가져와 포트 3000에 노출합니다.
[terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana
다른 설치 방법은 Grafana 설명서를 참조하십시오.
2. 브라우저에서 새 Grafana 서버의 IP 주소와 포트로 이동합니다. Grafana 로그인 페이지에서 서버가 작동 중임을 확인합니다.

3. 이메일 또는 사용자 이름 및 비밀번호 필드에 admin을 입력하여 로그인합니다. 메시지가 표시되면 새 보안 암호를 설정하는 것이 좋지만 시간을 위해 데모에서는 해당 단계를 건너뜁니다.
4. 표시되는 Grafana 홈페이지에서 Grafana 설명서의 지침에 따라 Prometheus를 데이터 소스로 등록합니다. 비디오는 Grafana GUI의 단계를 보여줍니다.
참고: Grafana 지침의 5단계에서 표시된 URL 예제(http://localhost:9090) 대신 Prometheus 서버의 IP 주소(및 포트 9090)를 입력합니다.

Grafana 지침의 7단계에서 Save & test 버튼을 클릭하면 확인 표시가 있는 녹색 상자와 Data source is working이라는 메시지가 Grafana가 Prometheus 서버에 성공적으로 연결되었음을 나타냅니다.

5. Grafana에서 NGINX Plus 그래프 만들기
Prometheus는 하나의 메트릭만 보는 데 유용하지만 Grafana를 사용하면 단일 그래프에서 메트릭 컬렉션을 쉽게 볼 수 있습니다.
Grafana 그래프를 작성하려면:
- 페이지 왼쪽의 탐색 모음에서 더하기 기호(+)를 클릭합니다(이전 섹션의 4단계 스크린샷 참조). Create 드롭다운 메뉴에서 Dashboard를 선택합니다.
- 빈 패널(empty panel) 추가 상자를 클릭합니다.
- 표시되는 New dashboard/Edit Panel 페이지에서 페이지 하단에 있는 Query 탭의 Data source 필드에 Prometheus가 나타나는지 확인합니다. 그렇지 않은 경우 드롭다운 메뉴에서 Prometheus를 선택합니다.
- Metrics browser >필드에 nginx를 입력합니다. NGINX Plus 메트릭 목록이 나타납니다.

다음은 그들이 제공하는 정보에 대한 아이디어를 제공하는 간단한 설명입니다.
- nginxplus_connections_accepted – 허용된 클라이언트 연결
- nginxplus_connections_active – 활성 클라이언트 연결
- nginxplus_connections_dropped – 삭제된 클라이언트 연결이 삭제됨
- nginxplus_connections_idle – 유휴 클라이언트 연결
- nginxplus_http_requests_current – 현재 HTTP 요청
- nginxplus_http_requests_total – 총 HTTP 요청
- nginxplus_nginx_meta – NGINX 메타 정보
- nginxplus_processes_respawned – 비정상적으로 종료되고 다시 생성된 자식 프로세스의 총 수
- nginxplus_ssl_handshakes – 성공적인 SSL 핸드셰이크
- nginxplus_ssl_handshakes_failed – SSL 핸드셰이크 실패
- nginxplus_ssl_session_reuses – SSL 핸드셰이크 중 세션 재사용
- nginxplus_workers_mem_private – NGINX worker가 사용하는 개인 메모리, 공유 라이브러리는 포함되지 않음
- nginxplus_workers_mem_rss – NGINX worker 프로세스에서 사용하는 메모리
5. 목록에서 메트릭을 선택합니다(데모에서는 nginxplus_connections_active를 선택함). 다른 메트릭을 선택하려면 + Query 버튼을 클릭하고 새로운 Metrics browser > 필드(데모에서는 nginxplus_connections_idle 선택)에서 다른 메트릭을 선택합니다.
6. 페이지 상단의 그래프 위에 있는 “refresh”(원을 이루는 두 개의 화살표) 아이콘을 클릭하면 결과가 그래프에 나타나기 시작합니다.

6. 모든 NGINX Plus 배포를 위한 통합 인사이트 및 분석
“많은 NGINX Plus 인스턴스를 포함하여 대규모 NGINX 배포가 있는 경우 어떻게 합니까?”라고 물을 수 있습니다. 또는 “Prometheus 및 Grafana의 통찰력 및 분석을 기반으로 내 인스턴스의 구성을 업데이트하려면 어떻게 해야 합니까?” NGINX 배포를 위한 control 및 management-plane 솔루션인 NGINX Controller는 이러한 질문을 비롯한 많은 문제를 해결하는 데 도움이 됩니다.
Prometheus 및 Grafana는 모니터링, 경고 및 시각화를 위한 탁월한 솔루션이지만 구성 및 정책을 업데이트하는 방법을 제공하지 않습니다. 이러한 통찰력을 기반으로 조치를 취하려면 여전히 개별 NGINX Plus 인스턴스에 로그인하여 변경해야 하며, 이는 특히 크고 복잡한 NGINX Plus 배포의 경우 시간이 많이 걸리고 오류가 발생하기 쉽습니다.

NGINX Controller는 초당 요청 수, CPU 사용량, 4xx 및 5xx 오류, 상태 확인 실패 등을 포함하여 200개 이상의 NGINX Plus 메트릭에 대한 심층적인 통찰력과 분석을 제공하며 이 모든 것이 앱 중심의 직관적이고 통합된 플랫폼에서 제공됩니다. 그런 다음 NGINX 전문가가 복잡성을 추상화하도록 설계한 자동화된 역할별 워크플로를 활용하여 데이터를 심층 분석하고 보고서로 내보내고 필요한 구성 및 정책 변경을 수행할 수 있습니다.
NGINX Controller를 사용하면 펄스 또는 앱 배포를 계속 확인하고 NGINX Plus 인스턴스 및 구성 개체(예: 환경, Gateway 및 앱을 대규모로 제어할 수 있습니다. 또한 선호하는 모니터링 및 경고 솔루션의 사용을 희생할 필요가 없습니다. NGINX Controller의 API 우선 설계는 타사 솔루션과의 통합을 매우 간단하고 간단하게 만듭니다.
댓글을 달려면 로그인해야 합니다.