Splunk HTTP Event Collector와 Apache APISIX 통합하기
API7.ai
February 10, 2022
시스템의 복잡성은 기술이 반복되고 엔터프라이즈 아키텍처가 진화함에 따라 증가하고 있습니다. 로그는 다양한 분석 엔진을 지원하고 호환될 수 있어 사용자가 선택, 운영 및 유지보수 과정에서 비용을 줄일 수 있습니다. 로그 기반 분석 및 관찰은 시스템 안정성을 보장하는 초석으로 매우 중요한 역할을 합니다.
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
값입니다.
아래 그림과 같이 로그인이 성공한 것을 확인할 수 있습니다.
화면 오른쪽 상단의 "Settings > Data Inputs"를 클릭하여 기본 HEC가 성공적으로 설정되었는지 확인합니다.
HTTP Event Collector의 Inputs 열에서 HEC의 수를 확인할 수 있으며, 이는 성공적인 설정을 나타냅니다.
이 시점에서 HTTP Event Collector를 클릭하여 HEC 세부 정보 목록에 들어가 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"
}'
플러그인 매개변수는 다음 표에 설명되어 있습니다.
이름 | 필수 | 기본값 | 설명 |
---|---|---|---|
endpoint | 예 | N/A | Splunk HEC 엔드포인트 구성 정보 |
endpoint.uri | 예 | N/A | Splunk HEC 이벤트 수집 API |
endpoint.token | 예 | N/A | Splunk HEC 신원 토큰 |
endpoint.channel | 아니오 | N/A | Splunk HEC 전송 채널 식별, 참조: HTTP Event Collector Indexer Acknowledgment에 대해 |
endpoint.timeout | 아니오 | 10 | Splunk HEC 데이터 제출 시간 초과 (초). |
ssl_verify | 아니오 | TRUE | SSL 인증 활성화, 참조: 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"을 클릭합니다.
검색 상자에 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에서 토론을 시작하거나 메일링 리스트를 통해 소통할 수 있습니다.