블로그 | NGINX

Prometheus와 Grafana로 NGINX Plus를 시각화하는 방법

NGINX-F5-수평-검정-유형-RGB의 일부
모니카 손 썸네일
모니카 손
2021년 9월 23일 게시

Kubernetes에서 가시성을 개선하는 방법 에서 논의했듯이 앱 개발 및 제공 팀이 겪는 가장 큰 과제 중 하나는 앱 성능, 보안 및 가용성에 대한 통찰력을 얻는 것입니다. 이러한 통찰력은 팀이 문제를 신속하게 해결하고 트래픽 급증에 대비하는 데 도움이 됩니다.

트래픽 관리 도구(로드 밸런서, 역방향 프록시, API 게이트웨이, Ingress 컨트롤러 등)는 앱과 인프라 상태에 대한 풍부한 정보를 생성합니다. NGINX Plus 대시보드 에서 이러한 귀중한 지표를 실시간으로 추적할 수 있으며, NGINX Plus는 타사 모니터링 도구에 지표를 제공하여 시간 경과에 따른 성능 시각화를 통해 추가적인 통찰력을 제공할 수도 있습니다. 가장 인기 있는 두 가지 도구가 함께 작동하여 이러한 시계열 그래프를 제공합니다.

  • Prometheus – 모니터링 및 경고를 위한 Cloud Native Computing Foundation(CNCF)의 오픈 소스 프로젝트
  • Grafana – Prometheus와 같은 시계열 데이터베이스에서 그래프 및 기타 시각화를 생성하는 오픈 소스 시각화 및 분석 도구

Prometheus-njs 모듈을 사용하면 NGINX Plus 메트릭을 Prometheus와 Grafana에 쉽게 제공할 수 있습니다. NGINX JavaScript 모듈 (NJS)과 NGINX Plus API를 사용하여 NGINX Plus에서 Prometheus 서버로 메트릭을 내보냅니다.

이 비디오 데모에서는 NGINX Plus, Prometheus, Grafana를 설정하고 Grafana 그래프를 빌드하는 전체 단계를 다룹니다.

여러분이 직접 구현을 설정하는 데 도움이 되도록, 영상의 시간대에 매핑된 다음 섹션의 단계를 요약해 보겠습니다.

참고사항:

  • 이 지침은 NGINX Plus API 에 의존하므로 NGINX 오픈 소스에서는 작동하지 않습니다.
  • NGINX Ingress Controller와 함께 Prometheus와 Grafana를 사용하려면 설명서를 참조하세요.

필수 조건

데모를 시작하기 전에 다음과 같은 전제 조건을 충족했습니다.

  1. NGINX Plus 서버에 NGINX Plus를 설치합니다 . 데모의 목적상, 깨끗한 초기 설치를 진행하고 있습니다. 기존 NGINX Plus 서버를 사용하는 경우 데모 중에 구성 파일에 적용된 변경 사항을 수정해야 할 수도 있습니다.
  2. NGINX Plus 서버에 NGINX JavaScript(njs) 모듈을 설치합니다 .
  3. Prometheus 서버에 Docker의 최신 버전을 설치합니다 . 데모에서는 일반적인 관행에 따라 NGINX Plus와 별도의 두 번째 서버에서 Prometheus를 실행합니다.
  4. Grafana 서버에 Docker의 최신 버전을 설치합니다(데모에서는 세 번째 서버).

NGINX Plus 서버 설정(1:20)

  1. Prometheus-njs 모듈을 설치합니다. 데모에서는 Ubuntu 20.04를 사용하고 있으며, 이는 적절한 명령어입니다. 다른 운영 체제의 경우 설명서를 참조하세요.

    $ sudo apt-get 설치 nginx-plus-module-prometheus
    
  2. 선호하는 텍스트 편집기를 사용하여 /etc/nginx/nginx.conf를 열고 http 블록 외부의 최상위 컨텍스트에 다음 load_module 지시문을 추가합니다.

    load_module modules/ngx_http_js_module.so;
    # 기존 최상위 지시문
    
    http {
    #...
    }
    
  3. (선택 사항) 하위 요청의 응답 본문을 저장하기 위한 버퍼 크기를 늘립니다(플랫폼에 따라 기본 크기는 4KB 또는 8KB 입니다). 이렇게 하면 NGINX 오류 로그 에 나타나는 너무 하위 요청 응답 오류가 방지됩니다. http 블록에 다음 subrequest_output_buffer_size 지침을 추가합니다.

    http { #...
    하위 요청_출력_버퍼_크기 32k;
    }
    
  4. nginx.conf를 저장하고 이 명령을 실행하여 NGINX 구성이 구문적으로 올바른지 확인합니다.

    $ sudo nginx -t nginx: 설정 파일 /etc/nginx/nginx.conf 구문은 정상입니다. nginx: 설정 파일 /etc/nginx/nginx.conf 테스트가 성공했습니다.
    
  5. 디렉토리를 conf.d 로 변경하고 파일을 나열합니다.

    $ cd conf.d $ ls 기본.conf
    
  6. default.conf 파일은 포트 80에서 수신하는 가상 서버를 정의합니다. Prometheus의 가상 서버는 해당 포트에서 수신 대기해야 하므로 default.conf를 제거하여 여유 공간을 확보하세요.

    $ sudo rm 기본.conf
    
  7. 선호하는 텍스트 편집기를 사용하여 다음 내용으로 prometheus.conf 라는 새 파일을 만듭니다.

    js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
    
    서버 {
    위치 = /metrics {
    js_content prometheus.metrics;
    }
    
    위치 /api {
    api;
    } 
    }
    

    js_import 지시어는 NGINX Plus API 에서 생성된 메트릭을 Prometheus에서 요구하는 형식으로 변환하는 NGINX JavaScript 코드의 위치를 지정합니다. ( Prometheus-njs 에 대한 load_module 지시문을 추가할 필요도 없습니다.)

    첫 번째 위치 블록은 Prometheus 형식의 메트릭에 대한 액세스를 제공합니다. 두 번째 위치 블록은 NGINX Plus API를 활성화하여 원시 메트릭을 생성하고 이를 Prometheus에 노출합니다.

    메모: 운영 환경에서는 설명서 에 설명된 대로 NGINX Plus API 에 대한 액세스를 제한하는 것을 적극 권장합니다.

    Prometheus-njs 모듈에 대한 자세한 내용은 설명서를 참조하세요.

  8. prometheus.conf를 저장하고 4단계 와 같이 구문이 올바른지 확인한 후 이 명령을 실행하여 NGINX Plus를 시작합니다.

    $ sudo nginx
    

Prometheus 서버 설정(5:30)

  1. /etc/prometheus 디렉토리에 prometheus.yml 이라는 YAML 형식의 새로운 Prometheus 구성 파일을 만들고, 다음의 내용을 포함합니다(Prometheus 웹사이트의 기본 구성 파일을 기반으로 함). 표시된 대로 변경해야 할 사항은 대상 필드에 NGINX Plus 서버의 IP 주소와 포트를 추가하는 것입니다.

    글로벌: 스크래핑 간격: 15초 external_labels: 모니터: 'codelab-monitor' 스크랩 구성: - 작업 이름: 'prometheus' 스크랩 간격: 5s 정적 구성: - 대상: [' NGINX_Plus_IP_주소 :80']
    

    Prometheus 구성에 대한 자세한 내용, 구성 파일에 포함할 수 있는 추가 옵션 등을 알아보려면 Prometheus 설명서를 참조하세요.

  2. prometheus.yml을 저장한 후 다음 명령을 실행합니다. Docker Hub에서 Prometheus를 가져와 포트 9090에 노출시킵니다.

    $ sudo docker run --network="호스트" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
    
  3. 브라우저에서 새로운 Prometheus 서버의 IP 주소와 포트로 이동합니다. 다음과 같은 페이지는 서버가 작동하고 있음을 확인합니다.

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

Grafana 서버 설정(9:15)

  1. Docker Hub에서 Grafana를 가져와 포트 3000에 노출하려면 이 명령을 실행하세요.

    [터미널]$ 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단계에서 저장 및 테스트 버튼을 클릭하면 확인 표시가 있는 녹색 상자와 데이터 소스가 작동 중이라는 메시지가 나타나면 Grafana가 Prometheus 서버에 성공적으로 연결되었음을 나타냅니다.

Grafana에서 NGINX Plus 그래프 만들기(11:15)

Prometheus는 단 하나의 지표만 살펴보는 데 유용한 반면, Grafana를 이용하면 여러 지표 컬렉션을 단일 그래프에서 쉽게 살펴볼 수 있습니다.

Grafana 그래프를 작성하려면:

  1. 페이지 왼쪽 탐색 모음에서 더하기 기호( + )를 클릭합니다(이전 섹션의 4단계 의 스크린샷 참조). 만들기 드롭다운 메뉴에서 대시보드를 선택합니다.

  2. 빈 패널 추가 상자를 클릭합니다.

  3. 표시되는 새 대시보드/편집 패널 페이지에서 페이지 하단에 있는 쿼리 탭의 데이터 소스 필드에 Prometheus가 표시되는지 확인합니다. 그렇지 않은 경우 드롭다운 메뉴에서 Prometheus를 선택하세요.

  4. Metrics 브라우저 > 필드에 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 작업자가 사용하는 개인 메모리로 공유 라이브러리는 포함하지 않습니다.
    • nginxplus_workers_mem_rss – NGINX 작업자 프로세스에서 사용되는 메모리
  5. 목록에서 메트릭을 선택합니다(데모에서는 nginxplus_connections_active를 선택했습니다). 다른 메트릭을 선택하려면 + 쿼리 버튼을 클릭하고 새 메트릭 브라우저 > 필드에서 다른 메트릭을 선택합니다(데모에서는 nginxplus_connections_idle을 선택했습니다).

  6. 페이지 상단 절반의 그래프 위에 있는 "새로 고침"(두 개의 화살표가 원을 형성하는 모양) 아이콘을 클릭하면 그래프에 결과가 나타나기 시작합니다.

보너스: 모든 NGINX Plus 배포를 위한 통합된 통찰력 및 분석

"NGINX Plus 인스턴스가 많이 포함된 대규모 NGINX 배포가 있는 경우 어떻게 하나요?" 또는 "Prometheus와 Grafana의 통찰력과 분석을 기반으로 인스턴스 구성을 어떻게 업데이트할 수 있나요?"라고 질문하실 수 있습니다. NGINX 컨트롤러NGINX 배포를 위한 제어 및 관리 플레인 솔루션인 은 이러한 질문과 그 외 많은 질문에 대한 해답을 제공하는 데 도움이 됩니다.

Prometheus와 Grafana는 모니터링, 알림 및 시각화를 위한 탁월한 솔루션이지만 구성과 정책을 업데이트하는 방법은 제공하지 않습니다. 이러한 통찰력을 기반으로 조치를 취하려면 여전히 개별 NGINX Plus 인스턴스에 로그인하여 변경 작업을 해야 하는데, 이는 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 특히 대규모의 복잡한 NGINX Plus 배포의 경우 더욱 그렇습니다.

NGINX Controller는 초당 요청, CPU 사용량을 포함한 200개 이상의 NGINX Plus 메트릭에 대한 심층적인 통찰력과 분석을 제공합니다. 4xx5xx 오류, 상태 검사 실패 등 다양한 문제가 앱 중심의 직관적이고 통합된 플랫폼에서 제공됩니다. 그런 다음 데이터를 심층적으로 조사하고 보고서로 내보내고 NGINX 전문가가 복잡성을 추상화하기 위해 설계한 자동화된 역할별 워크플로를 활용하여 필요한 구성 및 정책 변경을 수행할 수 있습니다.

NGINX Controller를 사용하면 앱 배포의 최신 상황을 파악하고 규모에 맞게 NGINX Plus 인스턴스와 구성 개체(예: 환경, 게이트웨이, 앱)를 제어할 수 있습니다. 그리고 선호하는 모니터링 및 알림 솔루션 사용을 희생할 필요가 없습니다. Controller의 API 우선 설계 덕분에 타사 솔루션과의 통합이 매우 간단하고 직관적입니다.

NGINX Plus 및 NGINX Controller 시작하기

NGINX Plus를 사용해보지 않으셨다면, 로드 밸런서, 리버스 프록시, API 게이트웨이로 사용하거나, 향상된 모니터링 및 관리 API를 갖춘 완벽히 지원되는 웹 서버로 사용해보시기 바랍니다. 오늘 무료 30일 체험판을 통해 시작하거나, 사용 사례에 대해 논의하기 위해 저희에게 문의하세요 .

NGINX Controller를 사용하여 NGINX Plus 플릿을 시각화하고 모니터링할 수 있다고 생각하신다면, Controller App Security와 함께 애플리케이션 전송 및 API 관리 모듈이 모두 포함된 무료 30일 평가판을 확인해 보세요.


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."