Splunk Enterprise 를 통한 NGINX 및 NGINX Plus 운영 팁

Splunk Enterprise 는 기술 인프라, 보안 시스템 및 비즈니스 애플리케이션에서 생성된 빅 데이터의 가치를 활용하기 위한 데이터 수집 및 분석 소프트웨어입니다. 이를 통해 운영 성능과 비즈니스 결과를 추진하기 위한 통찰력을 제공하여 미활용된 데이터의 가치를 실현할 수 있습니다.

NGINX와 Splunk는 NGINX 및 NGINX Plus용 Splunk Add-On을 함께 제공하여 NGINX 로그 데이터와 NGINX Plus API 데이터를 색인화하는 데 도움을 줍니다. 이를 통해 NGINX 또는 NGINX Plus 배포 및 인프라 내에서 실행되는 애플리케이션에 대한 가치 있는 정보를 얻을 수 있습니다. 이 블로그에서는 다음과 같은 주제를 포함하여 Add-On을 다운로드하고 구성하는 단계별 지침을 제공합니다:

  • NGINX 및 NGINX Plus용 Splunk Add-On 설치
  • Splunk 유니버설 포워더 설치
  • NGINX 및 NGINX Plus 로깅 구성
  • Splunk Add-On에서 NGINX Plus 실시간 활동 모니터링 API에서 직접 데이터 읽기 활성화
  • Splunk 검색 처리 언어를 사용하여 데이터 분석 시작
  • Splunk Add-On for NGINX 및 NGINX Plus를 설정한 후, Splunk 환경에서 검색 및 보고할 수 있는 다양한 가치 있는 통계 정보를 얻을 수 있습니다.

참고: 해당 포스트의 가이드는 NGINX와 NGINX Plus 모두에 적용됩니다. 간결성을 위해 이후 블로그에서는 두 제품 간에 차이가 있는 경우를 제외하고 NGINX Plus에만 언급할 것입니다.

목차

1. Splunk Enterprise 란 무엇이며 어떻게 도움이 됩니까?
 1-1. Universal Forwarder
 1-2. 검색 처리 언어
 1-3. 애드온 및 앱
 1-4. NGINX 및 NGINX Plus에 Splunk Enterprise 를 설치하기 전에
2. NGINX 및 NGINX Plus용 Splunk 애드온 설치
3. Splunk Enterprise Universal Forwarder 설치
4. Splunk Enterprise 에 대한 Logging 구성
 4-1. 로그 형식 정의
  4-1-1. 표준 키 이름으로 로그 형식 정의
  4-1-2. JSON 형으로 로그 정의
 4-2. 로그 데이터 수집
  4-2-1. Splunk Enterprise Universal Forwarder를 사용하여 로그 데이터 수집
  4-2-3. syslog를 통해 로그 데이터 수집
5. NGINX Splunk 애드온을 사용하여 NGINX Plus API 데이터 읽기
6. Splunk Enterprise 검색 처리 언어 사용
7. 결론

1. Splunk Enterprise 란 무엇이며 어떻게 도움이 됩니까?

NGINX Plus 배포에서 데이터를 수집하기 위해 Add-On을 설정하는 구체적인 세부 사항에 들어가기 전에, NGINX Plus 로그 및 API 데이터를 가치 있는 운영으로 변환하는 강력한 도구로서 Splunk Enterprise 의 아키텍처를 살펴보겠습니다.

1-1. Universal Forwarder

Splunk는 Splunk 유니버설 포워더라는 에이전트를 사용하여 특정 서버의 로그 파일을 수신하고 해당 데이터를 Splunk 인덱서로 전달합니다.
Splunk 유니버설 포워더의 가장 강력한 기능 중 하나는 데이터가 key-value pair나 CSV 또는 JSON과 같은 구조화된 형식으로 제공될 때 로그 이벤트에서 필드를 전달할 수 있는 능력입니다.
포워더는 데이터를 인덱서로 전송하기 전에 데이터에 변경을 가할 수도 있으므로 Splunk로 전송되기 전에 민감한 정보를 마스킹할 수 있습니다.

일부 배포 시나리오에서는 각 NGINX Plus 인스턴스에 Splunk 유니버설 포워더를 배포하지 않거나 배포할 수 없을 수도 있습니다. 이 경우 NGINX Plus를 syslog를 통해 인덱서로 직접 로그 데이터를 전송하도록 구성할 수 있습니다.
NGINX는 Splunk 유니버설 포워더와 syslog 로그 수집 방법에 대한 지침을 제공하여 최적의 방법을 선택할 수 있도록 도와드리겠습니다. 환경에 가장 적합한 방법을 결정하는 데 어려움을 겪고 있다면 Splunk 블로그의 “Choosing a Forwarder, or not”를 참조하여 지침을 얻을 수 있습니다.

1-2. 검색 처리 언어

NGINX Plus 로그 및 API 데이터를 Splunk Enterprise에 피드한 후에는 강력한 Splunk 검색 처리 언어(SPL)를 사용하여 데이터를 다양한 방식으로 필터링, 분석, 보고 및 그래프화할 수 있습니다.
이를 통해 NGINX의 문제 해결, 원인 분석, 성능 측정 또는 애플리케이션의 비즈니스 결과 추적과 같은 다양한 목적으로 데이터를 활용할 수 있는 강력한 도구로 변환할 수 있습니다.

1-3. 애드온 및 앱

Splunk의 또 다른 중요한 기능은 Add-On 및 앱을 통해 기능을 확장할 수 있는 능력입니다. Splunk Add-On을 사용하면 어떤 소스에서든 데이터를 가져와 풍부한 데이터 세트를 생성하여 직접 분석이나 Splunk 앱에서 사용할 수 있습니다.
Splunk 앱은 저장된 검색을 기반으로 한 대시보드, 패널 및 UI 요소의 사전 구축된 컬렉션으로, 특정 기술이나 사용 사례에 대해 패키지화되어 다양한 역할에 즉시 유용하고 관련성을 갖도록 만들어집니다.

이전에 언급한 대로, NGINX, Inc.와 Splunk는 NGINX 및 NGINX Plus용 Splunk Add-On을 제공하기 위해 협력하고 있습니다. 이를 splunkbase에서 직접 다운로드할 수 있으며, splunkbase는 Splunk 앱 및 Add-On의 선별된 소스입니다.
이 Add-On에는 NGINX Plus 데이터를 Splunk Enterprise Security, Splunk IT Service Intelligence Splunk App for PCI Compliance와 같은 인기 있는 프리미엄 Splunk 앱에 자동으로 플러그인하기 위해 필요한 입력 및 지식도 포함되어 있습니다.

1-4. NGINX 및 NGINX Plus에 Splunk Enterprise 를 설치하기 전에

이 포스트의 전제조건은 이미 Splunk Enterprise 를 설치하고 자체 환경에서 실행하며 관리자 권한을 가지고 있다고 가정합니다. 그렇지 않은 경우, Splunk 웹사이트의 튜토리얼을 따라 빠르게 시작할 수 있습니다.
또한, non-production용으로 Splunk를 사용하는 경우 Splunk 개발자 라이선스를 요청할 수 있으며, 이는 무료 버전에서 허용되는 500MB 대신 하루에 10GB의 로그 데이터를 사용할 수 있도록 합니다.

2. NGINX 및 NGINX Plus용 Splunk 애드온 설치

Splunk Add-On을 설치하려면 다음 단계를 따르세요:

1. splunkbase에서 Splunk Add-On for NGINX and NGINX Plus를 다운로드하세요. 이는 splunk-add-on-for-nginx_xxx.tgz라는 압축된 tar 파일로 제공되며, 여기서 xxx는 Add-On의 버전 번호입니다.

2.브라우저에서 Splunk Enterprise UI의 호스트 이름 또는 IP 주소/포트 번호 조합에 액세스하여 로그인하세요. 기본 포트는 8000이지만 환경에 따라 다를 수 있습니다. 필요한 경우 Splunk 관리자에게 도움을 요청하세요.

3. 앱 홈페이지에서 톱니바퀴 아이콘을 클릭하여 앱 관리 페이지를 엽니다. 아래 스크린샷에 표시된 것과 같습니다.

The Splunk Enterprise Apps page lists the applications you have loaded into the system from splunkbase; when it lists the Add-On for NGINX and NGINX Plus, you're ready to gather data for troubleshooting NGINX

4. install app from file 버튼을 클릭하면 다음 창이 열립니다.

On the Splunk Enterprise 'Upload an app' page, select the Add-On for NGINX and NGINX Plus to start gathering data for operational intelligence and troubleshooting NGINX

5. 파일 선택을 클릭하고 1단계에서 다운로드한 splunk-add-on-for-nginx_ xxx .tgz 파일 로 이동한 후  Upload  버튼을 클릭하세요.

6. 업로드가 완료되면 Splunk를 다시 시작해야 한다는 메시지가 나타납니다. 적절한 재시작 시간을 선택하려면 Splunk 관리자에게 문의하세요.

7. 재시작이 완료되면 앱 관리 페이지로 돌아가서 Splunk Add-On for NGINX and NGINX Plus가 나열되어 있는지 확인하세요.

3. Splunk Enterprise Universal Forwarder 설치

이전에 논의한 대로, 로깅을 수행하는 NGINX Plus 호스트에 Splunk Universal Forwarder를 배포하는 것은 로그를 색인화하는 강력한 방법입니다. 다음 지침을 따라 Universal Forwarder를 설치하고 구성하세요.

1. 운영 체제에 맞는 최신 버전의 Splunk 유니버설 포워더를 다운로드하세요 (작성 시점에서는 Splunk 버전 6.5.1이었습니다). 예시 지침은 NGINX Plus R11 (NGINX 1.11.5 기반)을 실행하는 Ubuntu 16.04 LTS 서버를 대상으로 합니다.

# lsb_release -a | grep Description
Description:    Ubuntu 16.04.1 LTS

# /usr/sbin/nginx -v
nginx version: nginx/1.11.5 (nginx-plus-r11)

해당 포스트의 예시에서는 splunkforwarder-6.5.1-f74036626f0c-linux-2.6-amd64.deb라는 패키지를 다운로드합니다. 다른 운영 체제에 대한 지침은 Splunk 문서를 참조하세요.

2. Splunk Universal Forwarder가 실행될 호스트에 패키지를 복사합니다.

3. 운영 체제의 패키지 관리자를 사용하여 패키지를 설치하십시오.

# dpkg -i splunkforwarder-6.5.1-f74036626f0c-linux-2.6-amd64.deb 
Selecting previously unselected package splunkforwarder.
(Reading database ... 57607 files and directories currently installed.)
Preparing to unpack splunkforwarder-6.5.1-f74036626f0c-linux-2.6-amd64.deb ...
Unpacking splunkforwarder (6.5.1) ...
Setting up splunkforwarder (6.5.1) ...
complete

4. /opt/splunkforwarder/bin/splunk 이진 파일을 시작 옵션과 함께 실행하세요. 만약 이가 처음으로 Splunk 유니버설 포워더를 실행하는 경우, Splunk 라이선스 동의를 자동으로 수락하기 위해 –accept-license 플래그를 포함하세요.

# /opt/splunkforwarder/bin/splunk start --accept-license

This appears to be your first time running this version of Splunk.

Splunk> All batbelt. No tights.

Checking prerequisites...
        Checking mgmt port [8089]: open
                Creating: /opt/splunkforwarder/var/lib/splunk
                Creating: /opt/splunkforwarder/var/run/splunk
                Creating: /opt/splunkforwarder/var/run/splunk/appserver/i18n
                Creating: /opt/splunkforwarder/var/run/splunk/appserver/modules/static/css
                Creating: /opt/splunkforwarder/var/run/splunk/upload
                Creating: /opt/splunkforwarder/var/spool/splunk
                Creating: /opt/splunkforwarder/var/spool/dirmoncache
                Creating: /opt/splunkforwarder/var/lib/splunk/authDb
                Creating: /opt/splunkforwarder/var/lib/splunk/hashDb
New certs have been generated in '/opt/splunkforwarder/etc/auth'.
        Checking conf files for problems...
        Done
        Checking default conf files for edits...
        Validating installed files against hashes from '/opt/splunkforwarder/splunkforwarder-6.5.1-f74036626f0c-linux-2.6-x86_64-manifest'
        All installed files intact.
        Done
All preliminary checks passed.

Starting splunk server daemon (splunkd)...
Done

5. Splunk 유니버설 포워더가 실행 중인지 확인하세요.

# ps aux | grep splunk                                                                                                                                                                       
root     21450  0.7  4.7 183420 97924 ?  Sl   21:31   0:00 splunkd -p 8089 start
root     21451  0.0  0.6  66492 12948 ?  Ss   21:31   0:00 [splunkd pid=21450] splunkd -p 8089 start [process-runner]

6. Splunk 유니버설 포워더가 재부팅 시 자동으로 시작되도록 구성하세요 (splunk 명령에 enable boot-start 옵션을 포함하면 init 스크립트가 설치됩니다).

# /opt/splunkforwarder/bin/splunk enable boot-start
Init script installed at /etc/init.d/splunk.
Init script is configured to run at boot.

4. Splunk 에 대한 Logging 구성

NGINX Plus의 로깅을 구성하는 데는 몇 가지 단계가 필요합니다:

  • 표준 키 이름 또는 네이티브 JSON 형식을 사용하여 사용할 로그 형식을 정의합니다.
  • Splunk 유니버설 포워더 또는 syslog를 통해 NGINX Plus 데이터 수집을 설정합니다.

4-1. 로그 형식 정의

NGINX Plus Access Log에는 두 가지 유형의 사용자 정의 로그 형식을 정의할 수 있습니다:

  1. 표준 키 이름을 사용하는 형식. 이 형식은 Splunk Add-On for NGINX and NGINX Plus뿐만 아니라 Splunk Enterprise Security, Splunk IT Service Intelligence 및 Splunk App for PCI Compliance와 같은 다른 Splunk 앱과도 호환됩니다.
  2. JSON 형식을 사용하는 형식. Splunk Enterprise는 JSON 로그를 구문 분석할 수 있지만 다른 Splunk 앱과 호환되지 않습니다.

4-1-1. 표준 키 이름으로 로그 형식 정의

다른 Splunk 앱과 호환되도록 NGINX Plus Access Log에 대한 사용자 정의 로그 형식을 생성하는 것을 권장합니다. 호환성에 관심이 없는 경우 원하는대로 키 이름을 수정할 수 있습니다.

1. NGINX Plus 구성에 다음 log_format 지시문을 추가하여 adv라는 새로운 형식을 생성하세요. 각 변수(값)를 지정된 키 이름 앞에 따옴표로 묶으세요. 지시문을 모든 서버 블록에서 상속되도록 하기 위해 http 컨텍스트에 직접 지시문을 배치하는 것을 권장합니다. http 컨텍스트의 기본 위치는 주 NGINX 구성 파일인 /etc/nginx/nginx.conf입니다.

log_format adv 'site="$server_name" server="$host” dest_port="$server_port" '
               'dest_ip="$server_addr" src="$remote_addr" src_ip="$realip_remote_addr" '
               'user="$remote_user" time_local="$time_local" protocol="$server_protocol" '
               'status="$status" bytes_out="$bytes_sent" '
               'bytes_in="$upstream_bytes_received" http_referer="$http_referer" '
               'http_user_agent="$http_user_agent" nginx_version="$nginx_version" '
               'http_x_forwarded_for="$http_x_forwarded_for" '
               'http_x_header="$http_x_header" uri_query="$query_string" uri_path="$uri" '
               'http_method="$request_method" response_time="$upstream_response_time" '
               'cookie="$http_cookie" request_time="$request_time" ';

2. 구성 파일이 구문적으로 올바른지 확인하고 다시로드하세요. (구문이 올바르지 않은 경우 수정한 후 다시로드하세요.)

# /usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# /usr/sbin/nginx -s reload

3. NGINX Plus 구성에 다음 access_log 지시문을 추가하여 새로운 adv 로그 형식을 참조하세요. 다시 한 번, 모든 서버 블록에서 상속되도록 http 컨텍스트에 직접 지시문을 배치하는 것을 권장합니다. /var/log/nginx/access.log 경로명은 Access Log 파일을 나타내므로 이 지시문은 현재 로그 형식을 adv로 대체합니다. 대신 다른 경로명과 형식을 가진 여러 access_log 지시문을 포함하여 별도의 로그 파일을 생성할 수도 있습니다.

access_log /var/log/nginx/access.log adv;

Note:

  • NGINX Plus의 기본 오류 로그 위치인 /var/log/nginx/error.log는 기본 Access Log와 동일한 파일에서 정의됩니다. 우리는 해당 위치를 변경하지 않지만, 나중에 Splunk 유니버설 포워더를 통해 로그 데이터를 수집할 때 사용할 것이므로 이를 참고하세요.
error_log /var/log/nginx/error.log notice;
  • 작성 시점에서 Splunk Add-On에서 사용하는 사용자 정의 로그 형식은 http 모듈에서 나오는 로그와만 호환됩니다. stream 모듈을 사용하는 경우에도 Splunk Enterprise로 전달되는 사용자 정의 로그 형식을 생성할 수는 있지만, 데이터 구조는 다른 Splunk 앱과 호환되지 않습니다.

4-1-2. JSON 형식으로 로그 정의

NGINX 1.11.8 이상에서는 log_format 지시문에 escape 매개변수를 사용하여 NGINX 변수에 포함된 JSON 문자를 자동으로 이스케이프할 수 있습니다 (NGINX Plus 고객의 경우, 이 기능은 릴리스 12부터 사용할 수 있게 될 것입니다).

“4-1-1. 표준 키 이름으로 로그 형식 정의” 의 지침을 따르되, 다음과 같이 대체 사항을 적용하세요.

  • 1단계에서 다음 log_format 지시문을 NGINX Plus 구성에 추가하여 json이라는 새로운 형식을 생성하세요. escape=json 매개변수를 포함하세요.
log_format json escape=json '{'
                              '"time_local": "$time_local",'
                              '"core": {'
                                '"body_bytes_sent": "$body_bytes_sent",'
                                '"remote_addr": "$remote_addr",'
                                '"remote_user": "$remote_user",'
                                '"request": "$request",'
                                '"http": {'
                                  '"http_referer": "$http_referer",'
                                  '"http_user_agent": "$http_user_agent",'
                                  '"http_x_forwarded_for": "$http_x_forwarded_for"'
                                '}'
                              '}'
                            '}';
  • 3단계에서는 adv 대신 json 로그 형식을 참조하는 다음 access_log 지시문을 NGINX Plus 구성에 추가하세요.
access_log /var/log/nginx/access.log json;

NGINX Plus Access Log의 결과 항목은 다음과 같이 보입니다.

{"time_local": "29/Dec/2016:20:31:59 +0000","core": {"body_bytes_sent": "102","remote_addr": "127.0.0.1","remote_user": "","request": "GET /stub_status HTTP/1.1","http": {"http_referer": "","http_user_agent": "nginx-amplify-agent/0.40-2","http_x_forwarded_for": ""}}}

Splunk Enterprise는 JSON 구조화된 로그를 자동으로 구문 분석하고 각 로그 항목(이벤트)을 쉽게 탐색할 수 있는 구조로 표시합니다. 다음 스크린샷에 표시된 것과 같이 중괄호 오른쪽에 있는 플러스와 마이너스 문자를 클릭하여 JSON 구조를 확장하거나 축소할 수 있습니다. 또한, “Show as raw text”를 클릭하여 로그의 일반 텍스트 버전을 볼 수도 있습니다.

Splunk Enterprise는 각 통계에 대해 “Interesting Fields” 목록에 항목을 생성하여 해당 정보로 검색할 수 있도록 합니다. 다음 스크린샷에 표시된 것과 같이 항목의 이름은 JSON 구조 내에서의 위치를 나타내며, 수준은 점으로 구분됩니다.

JSON 로그 형식을 사용할 경우, 데이터 구조가 다른 Splunk 앱과 호환되지 않는다는 점을 유의해주세요.

4-2. 로그 데이터 수집

Splunk Enterprise에서 로그 데이터를 수집하는 데에는 두 가지 도구를 사용할 수 있습니다. 두 가지 도구에 대한 지침을 제공합니다:

  • Splunk 유니버설 포워더
  • syslog

4-2-1. Splunk Enterprise Universal Forwarder를 사용하여 로그 데이터 수집

이 시점에서 Splunk 유니버설 포워더가 설치되었으며 NGINX Plus는 Access Log에 사용자 정의 adv 로그 형식을 사용하고 있습니다. 기존의 Splunk Enterprise 서버가 있다면, Splunk Enterprise UI의 설정 탭의 전달 및 수신 섹션에서 특정 포트를 통해 데이터를 수신하도록 설정한 것으로 예상됩니다.
(Splunk 서버에서 Splunk CLI를 사용하여 포트를 설정할 수도 있습니다)
다음 지침은 Splunk이 기본 포트인 9997에서 데이터를 수신하도록 구성되어 있다고 가정합니다. 자세한 지침은 Splunk 문서를 참조하세요.

1. Splunk 유니버설 포워더가 로그를 TCP를 통해 Splunk 인덱서로 전달하도록 구성하려면 outputs.conf 파일을 편집하세요 (기본적으로 $SPLUNK_HOME/etc/system/local/에 위치합니다).

다음 stanzas와 attribute-value pairs을 생성하거나 수정하세요. defaultGroup 속성을 nginx로 설정하여 Splunk 유니버설 포워더가 데이터가 어디에서 오는지 Splunk에 알리도록 합니다.
파일의 맨 아래에 있는 server 속성을 Splunk 유니버설 포워더가 전송할 호스트 이름과 포트로 설정하세요. 예를 들어, 호스트 이름이 splunk.example.com이고 포트가 9997인 경우, 이 값을 배포에 맞게 조정하세요.

[tcpout]
defaultGroup = nginx

[tcpout:nginx]
server = splunk.example.com:9997

[tcpout-server://splunk.example.com:9997]

2. NGINX Plus 로그를 Splunk 유니버설 포워더가 찾을 위치와 데이터의 “sourcetype”을 지정하기 위해 inputs.conf 파일을 편집하세요
(기본적으로 outputs.conf 파일과 동일한 디렉토리인 $SPLUNK_HOME/etc/system/local/에 위치합니다).

monitor stanzas에서 지정된 attribute-value pairs을 설정하여 액세스 로그와 오류 로그를 식별하세요. Splunk Add-On for NGINX and NGINX Plus와 함께 이 데이터를 사용할 계획이라면, 표시된 sourcetype 값은 필수입니다.
그러나 필요에 따라 파일 경로 (Access Log 및 Error Log)를 변경할 수 있습니다. 경로명에는 정규 표현식 문자가 포함될 수 있으며, 구성을 통합하려는 경우에 사용할 수 있습니다. 자세한 내용은 Splunk 문서를 참조하세요.

# Monitor NGINX Logs

[monitor:///var/log/nginx/access.log]
disabled = false
sourcetype = nginx:plus:kv


[monitor:///var/log/nginx/error.log]
disabled = false
sourcetype = nginx:plus:error

Note: 로컬 구성을 무시하는 시스템 전체 기본 구성 파일이 있습니다 (이들은 $SPLUNK_HOME/etc/apps/SplunkUniversalForwarder/default/에 위치합니다). Splunk는 기본 구성을 변경하지 않는 것을 권장하지만, 포워더 설정에 문제가 발생하는 경우 기본 파일을 참조해야 할 수도 있습니다.

3. Splunk Universal Forwarder를 재시작하여 데이터를 Splunk 인스턴스로 전송하도록 설정하세요. 이 작업은 몇 분 정도 소요될 수 있으므로 조금 기다려주시기 바랍니다.

# /opt/splunkforwarder/bin/splunk restart
Stopping splunkd...
Shutting down.  Please wait, as this may take a few minutes.
.
Stopping splunk helpers...

Done.

Splunk> Australian for grep.

Checking prerequisites...
        Checking mgmt port [8089]: open
        Checking conf files for problems...
        Done
        Checking default conf files for edits...
        Validating installed files against hashes from '/opt/splunkforwarder/splunkforwarder-6.5.1-f74036626f0c-linux-2.6-x86_64-manifest'
File '/opt/splunkforwarder/etc/apps/SplunkUniversalForwarder/default/inputs.conf' changed.
File '/opt/splunkforwarder/etc/apps/SplunkUniversalForwarder/default/outputs.conf' changed.
All preliminary checks passed.

Starting splunk server daemon (splunkd)...
Done

4. 로그 데이터가 올바르게 색인화되고 있는지 확인하기 위해 Splunk Enterprise UI에 로그인하고 Search & Reporting 앱을 열어주세요. 다음과 같은 검색을 수행하세요.

index=main host=* sourcetype=*nginx*

4-2-1. Splunk Universal Forwarder 로그 스크린샷

다음 스크린샷에 표시된 대로 모든 NGINX Access Log 및 Error Log를 반환합니다.

Splunk Enterprise '검색 및 보고' 페이지에는 사용자 정의 검색 시간과 일치하는 NGINX 로그 항목이 표시되어 NGINX 문제 해결을 위한 운영 인텔리전스를 수집하는 데 도움이 됩니다.

Splunk SPL을 사용하여 검색 범위를 좁힐 수 있습니다. 다음은 SPL이 기본적으로 보고하는 필드에 대한 간단한 개요입니다. SPL에 대한 자세한 내용은 아래의 “Splunk 검색 처리 언어 사용”을 참조하세요.

  • index: Splunk Enterprise에 데이터가 저장된 인덱스입니다.
  • host: 로그를 Splunk Enterprise로 전달하는 서버의 실제 호스트명입니다. 일반적으로 FQDN입니다.
  • source: 호스트에서 실제 로그 파일까지의 경로입니다.
  • sourcetype: 호스트의 inputs.conf에서 지정된 소스 유형입니다.

Splunk Enterprise는 로그 파일의 키(Key)-값(Value) 데이터에서 더 많은 “Interesting Fields”를 생성합니다. 이러한 필드를 사용하여 검색 범위를 더욱 좁힐 수 있습니다.

4-2-3. syslog를 통해 로그 데이터 수집

선택적으로, Splunk를 네트워크 입력을 통해 데이터를 수집하도록 구성할 수도 있습니다 (syslog를 통해). 특정 시나리오에서는 이 방법이 로그 데이터 수집에 선호되는 방법일 수 있습니다.

1. Splunk를 UDP 포트를 통해 syslog를 통해 로그 데이터를 수신하도록 구성하세요. 예를 들어, 우리의 예시에서는 UDP 포트 514를 선택했습니다. 포트 번호 설정에 대한 자세한 지침은 Splunk 문서를 참조하세요.

2. NGINX Plus가 Access Log와 Error Log 데이터를 직접 Splunk Enterprise 서버로 전송하도록 주 구성 파일 (nginx.conf)를 편집하세요.

# send log data directly to syslog
error_log syslog_server=splunk.example.com debug;
access_log syslog_server=splunk.example.com,severity=info main;

포트 번호를 지정하지 않으므로 기본 포트인 514가 사용됩니다. Splunk Enterprise 서버가 다른 포트에서 수신 대기 중인 경우, 서버 이름 뒤에 콜론으로 구분하여 해당 포트를 추가하세요. (예를 들어, 서버 이름이 splunk.example.com인 경우)

3. 구성 파일이 구문적으로 올바른지 확인하고 다시 로드(Reload)하세요. (구문이 올바르지 않은 경우 수정한 후 다시 로드하세요.)

# /usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# /usr/sbin/nginx -s reload

4. 로그 데이터가 올바르게 색인화되고 있는지 확인하기 위해 Search & Reporting 앱에서 다음 문자열을 검색하세요.

index=* sourcetype=syslog

NGINX 및 NGINX Plus를 syslog로 로그를 전송하도록 구성하는 방법에 대한 자세한 정보는 NGINX STORE의 “Logging to syslog”에서 확인할 수 있습니다. syslog 방법으로 생성되는 데이터 구조도 JSON 로그 형식과 마찬가지로 Splunk Enterprise Security, Splunk IT Service Intelligence 및 Splunk App for PCI Compliance와 같은 다른 Splunk 앱과 호환되지 않는다는 점에 유의하세요.

5. NGINX Splunk 애드온을 사용하여 NGINX Plus API 데이터 읽기

NGINX Plus의 실시간 활동 모니터링 API에서 데이터를 수집하기 위해 Splunk Add-On for NGINX and NGINX Plus를 설정하는 단계는 다음과 같습니다:

  1. 실시간 활동 모니터링 API를 구성하세요. Nick Shadrin의 “Live Activity Monitoring of NGINX Plus in 3 Simple Steps” 블로그 게시물에서 빠르고 쉬운 지침을 확인하세요. 추가 정보는 NGINX Plus 관리 가이드를 참조하세요.
  2. Splunk Enterprise UI에 로그인한 후, 상단 탐색 모음에서 “Settings”를 클릭하고 “DATA” 카테고리에서 “Data Inputs”을 선택하세요. Splunk Add-On for NGINX and NGINX Plus는 “Local Inputs” 아래에 나열됩니다.
  3. “Actions” 열에서 “Add new”를 클릭하여 API Endpoint를 Splunk Enterprise에 추가하세요. “NGINX Status API Input” 창이 열립니다.
  4. 아래 스크린샷에 표시된 대로 “More settings”를 클릭하여 모든 필드를 열어주세요. 그런 다음 다음 필드를 작성하세요.
  • Name: API 엔드포인트에 대한 식별 이름을 원하는 대로 지정하세요.
  • NGINX URL: 실시간 활동 모니터링 API의 URL을 입력하세요. URL은 “/status”로 끝나야 합니다.
  • Interval: Splunk Enterprise가 통계의 다른 세트를 수집하는 빈도를 초 단위로 지정하세요. 여기에서는 60초로 지정했습니다.
  • Host: 통계를 수집하는 NGINX Plus 서버의 호스트명을 입력하세요.

5. 창 상단의 “Next >” 버튼을 클릭하여 구성을 저장하세요.
6. Add-On이 API 데이터를 수집하는지 확인하려면 Search & Reporting 앱에서 다음 문자열을 검색하세요.

6. Splunk Enterprise 검색 처리 언어 사용

Splunk에서의 데이터는 이벤트의 모음으로 구성됩니다. 이벤트는 타임스탬프와 관련된 값의 집합으로, 일반적으로 로그 파일에서 추출되거나 Splunk가 데이터를 수집하는 동안 수동으로 추가됩니다. Splunk의 강력한 검색 처리 언어(SPL)를 사용하면 데이터를 빠르게 검색하고 필터링할 수 있습니다.

SPL을 사용하여 파이프(|) 문자로 구분된 일련의 명령을 사용하여 key-value pair을 검색할 수 있습니다. 검색 요청에는 키워드, 따옴표로 묶인 구문, 부울 표현식, 와일드카드, field-name-value pair 및 비교 표현식을 포함할 수 있습니다.

SPL은 매우 강력한 도구이지만 구문이 복잡할 수 있습니다. 다행히도 Splunk는 포함된 문서를 제공하고 있으며, 핵심 검색 구성 요소를 이해하기에 좋은 출발점인 “Quick Reference Guide”“Search Reference” 페이지를 포함하고 있습니다.

애플리케이션 성능 모니터링을 위해 Splunk SPL을 사용하는 예제는 블로그의 “NGINX Logging 사용하여 애플리케이션 성능 모니터링하기”를 참조하세요.

7. 결론

Splunk Enterprise는 NGINX 및 NGINX Plus의 로그와 NGINX Plus의 Live Activity Monitoring API 데이터를 모두 수집할 수 있습니다. 우리는 Splunk 유니버설 포워더와 syslog를 통한 네트워크 입력과 같은 데이터를 Splunk Enterprise로 전달하는 다양한 방법에 대해 논의했습니다. 이제 데이터를 Splunk Enterprise에 색인화하고 데이터를 검색하고 보고할 준비가 되었습니다. 30일 무료 평가판을 통해 오늘 바로 시작하거나 사용 사례에 대해 논의하기 위해 NGINX STORE에게 문의하세요.

아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required