Splunk HTTP Event Collector와 Apache APISIX 통합하기

API7.ai

February 10, 2022

Ecosystem

시스템의 복잡성은 기술이 반복되고 엔터프라이즈 아키텍처가 진화함에 따라 증가하고 있습니다. 로그는 다양한 분석 엔진을 지원하고 호환될 수 있어 사용자가 선택, 운영 및 유지보수 과정에서 비용을 줄일 수 있습니다. 로그 기반 분석 및 관찰은 시스템 안정성을 보장하는 초석으로 매우 중요한 역할을 합니다.

Apache APISIX는 뛰어난 성능을 가진 API 게이트웨이일 뿐만 아니라, 커뮤니티 사용자들과의 데이터 및 로그 운영 및 유지보수에 대한 소통을 통해 대부분의 주요 오픈 소스 및 상용 로깅 솔루션을 지원하고 있습니다. 이에는 HTTP Logger, TCP Logger, Kafka Logger, UDP Logger, RocketMQ Logger, SkyWalking Logger, Aliyun Cloud Logging(SLS), Google Cloud Logging 등이 포함됩니다.

이제 Apache APISIX Logger 지원 매트릭스에 새로운 추가 기능이 있습니다: Splunk HEC Logging.

이 글은 Apache APISIX에서 Splunk HEC 서비스를 구성하고 사용하는 방법을 설명합니다.

Splunk HTTP Event Collector에 대해

Splunk는 다양한 애플리케이션의 데이터를 수집, 인덱싱, 검색 및 분석하는 데 사용할 수 있는 머신 데이터용 전체 텍스트 검색 엔진입니다. DB Engines의 검색 엔진 순위에 따르면, Splunk는 현재 2위를 차지하고 있으며 널리 사용되는 전체 텍스트 검색 소프트웨어입니다. Splunk는 ElasticSearch와 마찬가지로 중단 없는 검색 결과를 제공하는 준실시간 데이터 스트림입니다.

Splunk HTTP Event Collector (HEC)는 Splunk에서 제공하는 HTTP 이벤트 수집기로, HTTP(S) 프로토콜을 사용하여 데이터 및 애플리케이션 이벤트를 Splunk로 전송하는 기능을 제공합니다.

splunk-hec-logging 플러그인에 대해

splunk-hec-logging은 Apache APISIX 요청 로그를 Splunk로 전달하여 분석 및 저장하는 데 사용됩니다. 이 플러그인이 활성화되면, Apache APISIX는 Log 단계에서 요청 컨텍스트 정보를 가져와 Splunk Event Data Format으로 직렬화하고 배치 큐에 제출합니다. 큐의 데이터는 배치 큐의 최대 처리 용량이 트리거되거나 버퍼를 새로 고치는 최대 시간에 도달하면 Splunk HEC에 커밋됩니다.

splunk-hec-logging 플러그인 사용 방법

Splunk 구성

Splunk Enterprise 배포

Splunk 설치 가이드를 참조하여 배포하십시오. 이 글에서는 Docker를 통한 배포를 시연합니다.

Docker 명령 매개변수는 다음과 같습니다.

docker run -p 18088:8088 -p 18000:8000 \    # 8088은 HEC 포트, 8000은 관리 백엔드 포트
  -e "SPLUNK_PASSWORD=your-password" \      # 관리자 로그인 비밀번호
  -e "SPLUNK_START_ARGS=--accept-license" \ # 라이선스 조건 수락 (Splunk는 기본적으로 Enterprise Trial License를 제공함)
  -e "SPLUNK_HEC_TOKEN=your-hec-token" \    # 기본 HEC 토큰 설정, 이는 구성 후 기본 HEC를 생성함
  -itd --rm --name splunk-example splunk/splunk:latest

명령 매개변수는 Docker Splunk 문서에서 설명됩니다.

Splunk HEC 구성

Docker에서 기본 HEC가 이미 구성 및 생성되었으므로, 여기서는 생성 과정을 다루지 않습니다. 수동 생성 과정에 대한 자세한 내용은 문서를 참조하십시오: Splunk Web에서 HTTP Event Collector 설정 및 사용.

Splunk Enterprise에 로그인하여 HEC 확인

브라우저를 통해 Docker의 매핑된 포트에 접근합니다. 관리 백엔드의 8000 포트를 호스트의 18000 포트에 매핑해야 하므로, 운영 중에는 호스트에서 "루프백 주소와 포트"를 통해 접근할 수 있습니다. 예: http://127.0.0.1:18000, 로그인 기본 사용자 이름은 admin이며, 비밀번호는 위 예제에서 환경 변수로 설정한 SPLUNK_PASSWORD 값입니다.

아래 그림과 같이 로그인이 성공한 것을 확인할 수 있습니다.

Splunk UI

화면 오른쪽 상단의 "Settings > Data Inputs"를 클릭하여 기본 HEC가 성공적으로 설정되었는지 확인합니다.

기본 HEC

HTTP Event Collector의 Inputs 열에서 HEC의 수를 확인할 수 있으며, 이는 성공적인 설정을 나타냅니다.

HEC 수

이 시점에서 HTTP Event Collector를 클릭하여 HEC 세부 정보 목록에 들어가 HEC의 Token 정보를 확인할 수 있습니다.

HEC Token 정보

Token Values는 위 Docker 환경 변수에서 구성한 SPLUNK_HEC_TOKEN 값입니다.

Apache APISIX 구성

splunk-hec-logging 플러그인 활성화

다음 명령을 실행하여 splunk-hec-logging 플러그인을 활성화합니다.

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "plugins":{
        "splunk-hec-logging":{
            "endpoint":{
                // HEC 엔드포인트
                "uri":"http://127.0.0.1:18088/services/collector",
                // HEC 토큰
                "token":"BD274822-96AA-4DA6-90EC-18940FB2414C"
            },
            // // 배치 큐 버퍼를 새로 고치는 최대 시간 (초)
            "inactive_timeout":2,
             // 배치 큐당 최대 로그 항목 수
            "batch_max_size":10
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "127.0.0.1:1980":1
        }
    },
    "uri":"/splunk.do"
}'

플러그인 매개변수는 다음 표에 설명되어 있습니다.

이름필수기본값설명
endpointN/ASplunk HEC 엔드포인트 구성 정보
endpoint.uriN/ASplunk HEC 이벤트 수집 API
endpoint.tokenN/ASplunk HEC 신원 토큰
endpoint.channel아니오N/ASplunk HEC 전송 채널 식별, 참조: HTTP Event Collector Indexer Acknowledgment에 대해
endpoint.timeout아니오10Splunk HEC 데이터 제출 시간 초과 (초).
ssl_verify아니오TRUESSL 인증 활성화, 참조: OpenResty 문서.
max_retry_count아니오0처리 파이프라인에서 제거되기 전의 최대 재시도 횟수.
retry_delay아니오1실행이 실패할 경우 프로세스 실행을 지연시킬 시간 (초).
buffer_duration아니오60배치에서 가장 오래된 항목의 최대 지속 시간 (초)이 먼저 처리되어야 함.
inactive_timeout아니오5버퍼를 새로 고치는 최대 시간 (초).
batch_max_size아니오1000배치 큐당 최대 항목 수.

요청 전송

다음 명령을 실행하여 Splunk에 요청을 전송합니다.

$ curl -i http://127.0.0.1:9080/splink.do
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Date: Fri, 10 Dec 2021 09:57:52 GMT
Server: APISIX/2.11.0

Hello, Splunk HEC Logging

로그 확인

Splunk 콘솔에 로그인하여 "Search & Reporting"을 클릭합니다.

Splunk 콘솔

검색 상자에 source="apache-apisix-splunk-hec-logging"을 입력하여 전송된 요청 로그를 쿼리합니다.

로그 쿼리

splunk-hec-logging 플러그인 비활성화

splunk-hec-logging 구성을 제거하여 플러그인을 비활성화합니다.

curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "uri":"/logging.do",
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "127.0.0.1:1980":1
        }
    },
    "plugins":{
    }
}'

요약

Apache APISIX는 현재 더 많은 서비스와의 통합을 지원하기 위해 추가 플러그인 작업을 진행 중입니다. 관심이 있다면 GitHub Discussion에서 토론을 시작하거나 메일링 리스트를 통해 소통할 수 있습니다.

관련 글

Tags: