튜토리얼: NGINX 사용량 보고 구성

NGINX | 2024년 5월 01일

NGINX Plus R31에서는 NGINX Plus 사용량을 더 간단하고 효율적으로 보고할 수 있습니다. 사용량 보고 기능이 기본적으로 통합되어 별도의 NGINX Agent가 필요하지 않으므로, F5의 Flex Consumption Program(FCP) 고객과 기간제 구독을 이용하는 비FCP 고객 모두 원활하고 간편하게 보고할 수 있습니다. 이 기능은 NGINX Plus에 직접 내장되어 있어 인스턴스가 성능에 영향을 주지 않으면서 필요한 사용량 정보를 NGINX Instance Manager에 주기적으로 전달할 수 있습니다. 이 기능은 가상 머신과 NGINX Ingress Controller에서 사용할 수 있지만, 이 블로그에서는 NGINX Plus 인스턴스를 중점적으로 다룹니다. NGINX Ingress Controller를 NGINX Instance Manager에 보고하는 방법에 대한 가이드는 여기에서 확인할 수 있습니다.

설정을 간소화하고 사용자 지정 옵션과 대체 방법을 제공함으로써, 고객이 필수 사용량 보고를 효율적이고 유연하게 구현하고 FCP 규정 준수를 유지할 수 있도록 지원하고자 합니다. 아직 R31을 사용하지 않거나 업그레이드할 계획이 없는 고객은 NGINX Agent를 설치하거나 HTTP 상태 확인을 구성하는 방식으로 사용량 보고를 활성화할 수 있습니다.

참고: NGINX Plus 사용량을 보고하려면 전용 호스트에 NGINX Instance Manager를 설치해야 합니다. 다양한 설치 방법은 설치 가이드를 참조하세요.

NGINX Plus 인스턴스를 F5에 보고하는 방법은 세 가지 중에서 선택할 수 있습니다.

  • NGINX Plus R31 사용자 — 기본 NGINX 사용량 보고 구성
  • R31 또는 R31 이전 버전 사용자 — NGINX Agent 설치
  • R31 이전 버전 사용자 — NGINX Plus용 HTTP 상태 확인 구성

하나씩 살펴보겠습니다:

NGINX 네이티브 사용량 보고 구성

설치가 완료되면 NGINX Plus는 기본 DNS 항목인 "nginx-mgmt.local"을 통해 NGINX Instance Manager에 자동으로 연결됩니다. 기본적으로 NGINX Plus는 30분마다 Instance Manager와 통신하여 사용량 정보를 전송합니다. 필요에 따라 Instance Manager의 DNS 항목이나 기본 연결 간격을 변경하려면 NGINX 구성에 mgmt{} 블록을 추가하세요. 이 블록에는 UUID 파일, mTLS, DNS 확인자, 사용량 보고 간격, usage_report 엔드포인트 등의 기본 지시문도 포함되어 있습니다. 사용자 지정 가능한 지시문의 전체 목록은 종합적인 mgmtmodule 설명서를 참조하세요. ngx_mgmt_module을 사용하면 지시문을 손쉽게 사용자 지정하여 유연성과 편의성을 높일 수 있습니다.

다음 섹션에서는 환경에 맞게 이 기능을 구성하는 방법을 설명합니다.

NGINX Plus 구성

  1. 시스템 보안을 강화하려면 mTLS를 사용하는 것이 좋습니다. 이를 위해 NGINX Plus 인스턴스와 NGINX Instance Manager 각각에 사용할 인증서, 키 및 CA 키 인증서를 생성할 수 있습니다. 키 생성 방법에 대한 자세한 내용은 여기를 클릭하세요.
  2. 구성 파일 nginx.conf의 management 블록 내에 클라이언트 인증서 및 개인 키 파일의 경로를 지정합니다.
		
   mgmt {
          ssl_protocols TLSv1.2 TLSv1.3;
          ssl_ciphers DEFAULT;
          ssl_certificate          /home/ubuntu/agent.crt;
          ssl_certificate_key      /home/ubuntu/agent.key
       }
  1. 안전하고 신뢰할 수 있는 인증 프로세스를 위해 인증서의 진위를 검증할 CA 체인의 경로를 지정합니다.

   mgmt {
          ssl_trusted_certificate  /home/ubuntu/ca.pem;
          ssl_verify               on;
          ssl_verify_depth         2;
       }
  1. 사용자 지정 DNS 리졸버를 사용하는 경우, mgmt{}block에서 resolver 지시문을 사용하여 리졸버 주소를 지정합니다.

   mgmt {
          resolver 3.X.X.X;
       }
  1. NGINX Instance Manager에 사용자 지정 FQDN을 구성하려면 usage_report 지시문에 FQDN을 지정합니다. 그런 다음 호스트 이름을 NGINX Instance Manager IP 주소와 연결하는 A 레코드를 로컬 DNS에 추가합니다.

   mgmt {
          resolver 3.X.X.X;
          usage_report endpoint=nms.local interval=15m;
       }

NGINX Plus 구성 예시:


  mgmt {
         usage_report endpoint=nms.local interval=30m;
         resolver 3.X.X.X;
         ssl_protocols TLSv1.2 TLSv1.3;
         ssl_ciphers DEFAULT;
         ssl_certificate          /home/ubuntu/agent.crt;
         ssl_certificate_key      /home/ubuntu/agent.key;

         ssl_trusted_certificate  /home/ubuntu/ca.pem;
         ssl_verify               on;
         ssl_verify_depth         2;
     }

NGINX 구성을 저장하고 NGINX Plus를 다시 로드합니다.

sudo nginx -s reload

NGINX Instance Manager 구성

서버 블록 내 /etc/nginx/conf.d/nms-HTTP.conf에 SSL 인증서를 추가합니다. 여기를 클릭하여 NGINX Management Suite 서버에서 SSL 인증서를 구성하는 방법을 알아보세요.


server {
    listen 443 ssl http2;
    root /var/www/nms;
    server_name _;
    ssl_protocols       TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_certificate         /etc/nms/certs/server.crt;
    ssl_certificate_key     /etc/nms/certs/server.key;
    ssl_client_certificate  /etc/nms/certs/ca.pem;
    ssl_verify_client on;
 }

NGINX Plus 사용량을 확인하려면 브라우저에서 NGINX Management Suite에 로그인한 후 NGINX Instance Manager 모듈로 이동합니다. 그런 다음 페이지 왼쪽 하단에 있는 NGINX Plus 탭을 선택합니다.

단계별 안내가 담긴 이 동영상 튜토리얼을 시청하세요:

 

오류 로그 메시지

NGINX Instance Manager에서 사용량 데이터를 확인할 수 없을 때 NGINX Plus 인스턴스의 문제를 해결하는 데 참고할 수 있는 오류 메시지 목록입니다. 다음은 오류 메시지의 몇 가지 예입니다:

  • 동적 리졸버 오류: DNS 리졸버를 확인하지 못했습니다.
2024/04/02 04:02:10 [error] 574079#574079: recv() failed (111: Connection refused) while resolving, resolver: 3.17.128.165:53
2024/04/02 04:02:35 [warn] 574079#574079: usage report: nginx-mgmt.locals could not be resolved (110: Operation timed out)
  • 시스템 리졸버 오류: NGINX Instance Manager 호스트 이름을 확인하지 못함
2024/04/02 13:20:44 [info] 103888#0: usage report: host not found in resolver "nginx-mgmt.local"
  • SSL 연결 실패: SSL 인증서를 확인할 수 없거나 인증서가 만료되었습니다.
2024/04/02 13:13:50 [warn] 103877#0: usage report: peer SSL connection failed
  • 피어 통신 실패: NGINX Instance Manager에 연결할 수 없습니다.
2024/04/02 13:15:25 [warn] 103877#0: usage report: peer connection failed (-1: Unknown error)
2024/04/02 13:23:32 [warn] 103877#0: usage report: failed (server returned: 404 Not Found)
2024/04/02 19:53:45 [warn] 4648#4648: usage report: connection timed out

NGINX Agent 설치

아직 R31로 전환하지 않았거나 조만간 전환할 계획이 없더라도 NGINX Plus 인스턴스를 NGINX Instance Manager에 계속 보고할 수 있습니다. 환경에 NGINX Agent를 설치하면 됩니다. 설치가 완료되면 Instance Manager에 연결하여 사용량 데이터 전송을 시작할 수 있습니다. NGINX Agent를 설치하려면 이 링크에 제공된 지침을 따르세요.

NGINX Plus 사용량을 확인하려면 브라우저에서 NGINX Management Suite에 로그인한 후 NGINX Instance Manager 모듈로 이동합니다. 그런 다음 페이지 왼쪽 하단에 있는 NGINX Plus 탭을 선택합니다.

단계별 안내가 담긴 이 동영상 튜토리얼을 시청하세요:

 

NGINX Plus용 HTTP 상태 확인 구성

NGINX Agent를 설치하거나 R31로 업그레이드할 계획이 없더라도 NGINX Plus 인스턴스를 계속 보고할 수 있습니다. NGINX 구성 파일에서 HTTP 상태 확인을 구성하면 됩니다. 단, 이 옵션을 사용하려면 NGINX Plus 구성 파일을 수동으로 업데이트해야 합니다. 특히 환경에 여러 인스턴스가 있는 경우 이 방법은 시간이 많이 걸리고 번거로울 수 있습니다. 따라서 이 옵션을 선택하기 전에 이러한 요소를 고려하는 것이 좋습니다.

NGINX Plus 구성

  1. NGINX Plus 구성 파일을 열고 http {} 블록 안에 코드를 삽입합니다:

   keyval_zone zone=uuid:32K state=/var/lib/nginx/state/instance_uuid.json;
   keyval 1 $nginx_uuid zone=uuid;
   upstream receiver {
    zone receiver 64k;

    # REQUIRED: Update NMS_FQDN with NGINX Management Suite IP Address or hostname.
    # If configuring with hostname, please ensure to uncomment the resolver
    # directive below and define a DNS server that can resolve the hostname.
    server NMS_FQDN:443;

    # OPTIONAL: Update DNS_UP with DNS server IP address that can resolve
    # the hostname defined above.
    #resolver DNS_IP;
   }  

map CERT $repo_crt {
    # OPTIONAL: Location of client certificate
      default /home/ubuntu/agent.crt;
   }  

map KEY $repo_key {
    # OPTIONAL: Location of client certificate private key
      default /home/ubuntu/agent.key; 
   }


 server {
    location @ngx_usage_https {
        # OPTIONAL: Configure scheme (http|https) here
        proxy_pass https://receiver;

        # REQUIRED: If using NGINX APP PROTECT (NAP) on this instance, set nap=active on the following line:
proxy_set_header Nginx-Usage "Version=$nginx_version;Hostname=$hostname;uuid=$nginx_uuid;nap=active";	 

        health_check uri=/api/nginx-usage interval=1800s;       # DO NOT MODIFY
        proxy_ssl_certificate     $repo_crt;                    # DO NOT MODIFY
        proxy_ssl_certificate_key $repo_key;                    # DO NOT MODIFY
    }

    location @self {
        health_check uri=/_uuid interval=1d;
        proxy_pass http://self;
    }

    location = /_uuid {
        if ($nginx_uuid !~ .) {
            set $nginx_uuid $request_id;
        }
        return 204;
    }

    listen unix:/tmp/ngx_usage.sock;
  }

 upstream self {
    zone self 64k;
    server unix:/tmp/ngx_usage.sock;
 }
  1. NMS FQDN을 Instance Manager의 호스트 이름 또는 IP 주소로 업데이트합니다. 프라이빗 DNS를 사용하는 경우 주석을 해제하고 DNS IP 주소를 업데이트합니다.
  2. NGINX Instance Manager로 전송되는 HTTP 트래픽의 보안을 유지하려면 map CERT 및 map KEY 블록에 SSL 인증서와 키의 위치를 지정해야 합니다.

변경 사항을 저장하고 NGINX를 다시 로드합니다.

sudo nginx -s reload

NGINX Plus 사용량을 확인하려면 브라우저에서 NGINX Management Suite에 로그인한 후 NGINX Instance Manager 모듈로 이동합니다. 그런 다음 페이지 왼쪽 하단에서 NGINX Plus 탭을 선택합니다.

단계별 안내가 담긴 이 동영상 튜토리얼을 시청하세요:

 

결론

당사는 고객의 현재 상황에 맞춰 손쉽게 사용량 보고를 간소화하고 자동화할 수 있도록 지원하기 위해 최선을 다하고 있습니다. 이에 따라 유연한 보고를 위한 다양한 옵션을 제공하고 있습니다. 최근 출시된 NGINX Plus R31 업데이트를 사용하면 성능에 영향을 주지 않으면서 F5의 요구 사항을 준수하고, NGINX Plus 인스턴스의 월별 사용량 데이터를 더욱 간편하고 효율적으로 보고할 수 있습니다.

공유

작성자 소개

관련 블로그 게시물

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
NGINX | 2023. 11. 30.

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric

이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
NGINX | 2023. 03. 23.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법

앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
NGINX | 2021. 09. 27.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션

개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX | 2021. 07. 06.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법

NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX | 2021. 06. 30.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리

NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
NGINX | 2015. 03. 25.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유

Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.