Splunk
1. 개요
Splunk는 다양한 소스에서 생성되는 머신 데이터(Machine Data)를 실시간으로 수집, 인덱싱, 검색 및 분석하여 인사이트를 도출하는 빅데이터 분석 플랫폼이다.
현대 IT 인프라는 [[마이크로서비스 아키텍처(MSA)]], 클라우드 네이티브 환경의 확산으로 인해 서버, 네트워크 장비, 애플리케이션, 보안 장비 등에서 방대한 양의 로그 데이터가 생성된다. 이러한 로그들은 형식이 제각각이며 분산되어 있어, 장애 발생 시 원인 파악(Root Cause Analysis)이나 보안 위협 탐지에 많은 시간이 소요된다. Splunk는 이러한 파편화된 데이터를 통합하여 가시성을 제공함으로써 IT 운영의 효율성을 높이고 비즈니스 의사결정을 지원한다.
2. 핵심 아키텍처 및 작동 원리
Splunk는 데이터의 흐름에 따라 크게 세 가지 핵심 구성 요소로 나뉜다. 가장 큰 특징은 스키마리스(Schema-less) 저장 방식이다. 이는 데이터를 저장할 때 미리 테이블 구조(Schema)를 정의하지 않고, 검색 시점에 필드를 추출하는 방식으로 데이터 형식의 변경에 유연하게 대응할 수 있게 한다.
2.1 데이터 처리 파이프라인
데이터는 다음과 같은 단계로 처리되어 저장 및 검색된다.
1. Parsing (파싱): 유입된 원시 데이터를 분석하여 개별 '이벤트(Event)' 단위로 쪼개고, 타임스탬프를 부여하며 호스트 및 소스 정보를 할당한다.
2. Indexing (인덱싱): 파싱된 이벤트를 압축하여 디스크에 저장하고, 빠른 검색을 위해 인덱스 파일을 생성한다.
3. Searching (검색): 사용자가 SPL 쿼리를 실행하면 인덱스 파일에서 조건에 맞는 이벤트를 찾아 필드를 추출하고 결과를 반환한다.
2.2 구성 요소 및 역할
| 구성 요소 |
역할 |
주요 기능 |
| Forwarder |
데이터 수집 및 전송 |
로그 파일 모니터링, 네트워크 포트 수신, Indexer로 데이터 전송 |
| Indexer |
데이터 처리 및 저장 |
데이터 파싱(Parsing), 인덱싱(Indexing), 스토리지 저장, 검색 쿼리 실행 |
| Search Head |
검색 및 시각화 |
SPL 쿼리 인터페이스 제공, 대시보드 생성, 검색 결과 시각화 및 관리 |
2.3 데이터 수집 방식 (Push vs Pull)
Splunk는 환경에 따라 두 가지 데이터 수집 메커니즘을 지원한다.
- Push 방식 (Forwarding): Universal Forwarder(UF)와 같은 경량 에이전트를 대상 서버에 설치하여 데이터를 Indexer로 밀어내는 방식이다. HTTP Event Collector(HEC)를 통해 애플리케이션이 직접 데이터를 전송하는 방식도 이에 해당하며, 실시간성이 높고 리소스 소모가 적어 가장 권장된다.
- Pull 방식 (Polling): Splunk 서버가 외부 시스템에서 데이터를 직접 가져오는 방식이다.
Modular Inputs나 DB Connect를 통해 데이터베이스에 주기적으로 쿼리를 날려 데이터를 가져오거나, SNMP, WMI 등의 프로토콜을 사용하여 에이전트 설치가 불가능한 장비의 데이터를 수집할 때 사용된다.
3. 주요 기능 및 활용 사례
3.1 핵심 기능
- 실시간 모니터링: 유입되는 데이터를 실시간으로 스트리밍하여 특정 패턴이나 임계치 초과 여부를 즉각 확인한다.
- 대시보드 시각화: 검색 결과를 차트, 그래프, 맵 등 다양한 시각적 요소로 구성하여 운영 현황을 한눈에 파악할 수 있는 대시보드를 구축한다.
- 알림(Alert) 설정: 특정 조건(예: 5분간 500 에러 100건 발생)이 충족될 경우 이메일, 슬랙(Slack), 웹훅(Webhook) 등을 통해 관리자에게 즉시 알림을 전송한다.
3.2 활용 사례
- 보안 관제 ([[SIEM]]): 보안 정보 및 이벤트 관리(SIEM) 도구로 활용하여 침입 탐지, 이상 징후 분석, 컴플라이언스 준수 여부를 모니터링한다.
- IT 운영 분석 (ITOA): 애플리케이션 성능 모니터링(APM) 및 인프라 로그 분석을 통해 서비스 장애를 조기에 발견하고 복구 시간을 단축한다.
- 비즈니스 분석: 웹 로그나 트랜잭션 데이터를 분석하여 사용자 행동 패턴을 파악하고 매출 추이를 분석하는 등 비즈니스 인사이트를 도출한다.
- 관측 가능성 (Observability): 최근에는 단순 로그 분석을 넘어 메트릭, 트레이스(Trace) 데이터를 통합 분석하는 'Observability' 플랫폼으로 확장하고 있으며, OpenTelemetry 지원 및 Splunk Observability Cloud를 통해 전체 시스템의 상태를 정밀하게 관측한다.
4. SPL (Search Processing Language)
SPL은 Splunk의 핵심인 전용 쿼리 언어로, 유닉스(Unix)의 파이프(|) 구조를 채택하여 검색 결과를 다음 명령어로 전달하며 데이터를 단계적으로 가공한다.
4.1 기본 문법 및 구조
[기본 검색어] | [명령어1] | [명령어2] | [시각화/통계 명령어]
4.2 주요 명령어 요약
| 명령어 |
용도 |
설명 |
stats |
통계 계산 |
count, sum, avg, dc(distinct count) 등 통계치 산출 |
eval |
필드 계산 |
새로운 필드를 생성하거나 기존 필드의 값을 계산/수정 |
where / search |
필터링 |
특정 조건에 맞는 이벤트만 필터링 |
table |
표 생성 |
출력할 필드를 지정하여 표 형태로 나열 |
sort |
정렬 |
지정한 필드를 기준으로 오름차순/내림차순 정렬 |
timechart |
시계열 분석 |
시간 흐름에 따른 통계치를 차트 형태로 생성 |
rex |
정규표현식 추출 |
런타임에 정규표현식을 사용하여 필드를 강제로 추출 |
4.3 쿼리 예시
1. 기본 검색: 'error'라는 단어가 포함된 로그 중 'web_server' 소스 데이터 필터링
source="web_server" "error"
2. 통계 함수: 에러 로그의 발생 횟수를 호스트별로 집계하여 내림차순 정렬
source="web_server" "error"
| stats count by host
| sort - count
3. 시각화 쿼리: 시간대별 에러 발생 건수를 시계열 차트로 표현하기 위한 쿼리
source="web_server" "error"
| timechart span=1h count
5. Splunk 제품군 및 에코시스템
5.1 배포 모델
- Splunk Enterprise: 사용자가 직접 온프레미스(On-premise) 또는 자체 클라우드 환경에 설치하여 운영하는 소프트웨어 버전이다. 인프라 제어권이 높다.
- Splunk Cloud: Splunk에서 제공하는 [[SaaS]] 형태의 서비스이다. 설치, 업데이트, 인프라 관리를 Splunk가 담당하여 운영 부담이 적다.
5.2 App 및 Add-on
- Splunk App: 특정 목적(예: Cisco 네트워크 관리, AWS 모니터링)을 위해 미리 구성된 대시보드, 보고서, 검색 쿼리의 묶음이다.
- Add-on: 특정 데이터 소스의 형식을 Splunk가 이해할 수 있도록 필드를 정의하고 파싱 규칙을 제공하는 확장 팩이다.
6. 설치 및 초기 설정 가이드
Splunk를 처음 도입할 때의 일반적인 설정 단계는 다음과 같다.
- 설치 및 계정 생성: OS(Linux/Windows)에 맞는 패키지를 설치하고, 웹 인터페이스(Splunk Web) 접속을 위한 관리자 계정(admin)과 비밀번호를 생성한다.
- 데이터 입력(Data Input) 설정:
Settings > Data Inputs 메뉴에서 모니터링할 로그 파일 경로를 지정하거나, 네트워크 포트(TCP/UDP)를 개방하여 실시간 스트림을 수신하도록 설정한다.
- 인덱스(Index) 설계 및 생성: 데이터의 성격(예:
security, app_log)에 따라 인덱스를 분리 생성한다. 이는 검색 성능 최적화뿐만 아니라, 데이터별 보관 주기(Retention Policy)를 다르게 설정하여 스토리지 효율을 높이기 위함이다.
- Forwarder 배포 및 연결: 수집 대상 서버에 Universal Forwarder를 설치하고,
splunk add forward-server [Indexer_IP]:9997 명령을 통해 Indexer와 연결하여 데이터를 전송한다.
- 필드 추출 및 대시보드 구성:
Field Extractor를 사용하여 비정형 로그에서 의미 있는 필드를 정의하고, SPL을 통해 생성한 쿼리를 대시보드 패널로 저장하여 시각화한다.
7. 라이선스 체계 및 과금 방식
Splunk는 기본적으로 상용 소프트웨어이며, 과금 방식은 크게 두 가지로 나뉜다.
- 데이터 용량 기반 과금 (Ingest-based): 하루에 인덱싱하는 데이터의 총량(GB/day)에 따라 비용을 지불하는 방식이다. 가장 일반적인 모델이다.
- 워크로드 기반 과금 (Workload-based): 데이터 양과 관계없이 검색 및 분석에 소모되는 컴퓨팅 자원(CPU, 메모리 등)의 양에 따라 비용을 지불하는 방식이다. 데이터 유입량은 많지만 검색 빈도가 낮은 환경에 유리하다.
- Free License: 학습용으로 제공되며, 인덱싱 용량 제한이 매우 낮고 분산 환경 구성이 불가능하다.
8. 장단점 및 대안 솔루션
8.1 장단점 분석
- 장점:
- 강력한 분석 능력: SPL을 통해 복잡한 데이터 가공과 분석이 매우 빠르게 가능하다.
- 빠른 도입 속도: 스키마리스 구조 덕분에 데이터 포맷 정의 없이 즉시 수집 및 검색이 가능하다.
- 방대한 생태계: 수많은 App과 Add-on이 존재하여 타 솔루션과의 연동이 쉽다.
- 단점:
- 높은 비용: 데이터 유입량에 따른 라이선스 비용이 매우 고가이다.
- 리소스 소모: 인덱싱 및 검색 과정에서 상당한 CPU와 I/O 자원을 요구한다.
8.2 Splunk vs [[ELK Stack]] 비교
| 비교 항목 |
Splunk |
ELK Stack (Elasticsearch, Logstash, Kibana) |
| 비용 |
고가의 상용 라이선스 |
오픈소스 기반 (상용 기능은 유료) |
| 설치 및 설정 |
상대적으로 쉽고 통합적임 |
각 구성 요소를 개별 설치 및 설정 필요 |
| 데이터 구조 |
스키마리스 (Schema-less) |
스키마 기반 (Dynamic Mapping 지원) |
| 쿼리 언어 |
SPL (매우 강력하고 직관적) |
Query DSL / KQL (학습 곡선 존재) |
| 관리 편의성 |
통합 관리 콘솔 제공 |
개별 컴포넌트 관리 및 튜닝 필요 |
# Splunk
## 1. 개요
Splunk는 다양한 소스에서 생성되는 머신 데이터(Machine Data)를 실시간으로 수집, 인덱싱, 검색 및 분석하여 인사이트를 도출하는 빅데이터 분석 플랫폼이다.
현대 IT 인프라는 [[마이크로서비스 아키텍처(MSA)]], 클라우드 네이티브 환경의 확산으로 인해 서버, 네트워크 장비, 애플리케이션, 보안 장비 등에서 방대한 양의 로그 데이터가 생성된다. 이러한 로그들은 형식이 제각각이며 분산되어 있어, 장애 발생 시 원인 파악(Root Cause Analysis)이나 보안 위협 탐지에 많은 시간이 소요된다. Splunk는 이러한 파편화된 데이터를 통합하여 가시성을 제공함으로써 IT 운영의 효율성을 높이고 비즈니스 의사결정을 지원한다.
## 2. 핵심 아키텍처 및 작동 원리
Splunk는 데이터의 흐름에 따라 크게 세 가지 핵심 구성 요소로 나뉜다. 가장 큰 특징은 **스키마리스(Schema-less)** 저장 방식이다. 이는 데이터를 저장할 때 미리 테이블 구조(Schema)를 정의하지 않고, 검색 시점에 필드를 추출하는 방식으로 데이터 형식의 변경에 유연하게 대응할 수 있게 한다.
### 2.1 데이터 처리 파이프라인
데이터는 다음과 같은 단계로 처리되어 저장 및 검색된다.
1. **Parsing (파싱):** 유입된 원시 데이터를 분석하여 개별 '이벤트(Event)' 단위로 쪼개고, 타임스탬프를 부여하며 호스트 및 소스 정보를 할당한다.
2. **Indexing (인덱싱):** 파싱된 이벤트를 압축하여 디스크에 저장하고, 빠른 검색을 위해 인덱스 파일을 생성한다.
3. **Searching (검색):** 사용자가 SPL 쿼리를 실행하면 인덱스 파일에서 조건에 맞는 이벤트를 찾아 필드를 추출하고 결과를 반환한다.
### 2.2 구성 요소 및 역할
| 구성 요소 | 역할 | 주요 기능 |
| :--- | :--- | :--- |
| **Forwarder** | 데이터 수집 및 전송 | 로그 파일 모니터링, 네트워크 포트 수신, Indexer로 데이터 전송 |
| **Indexer** | 데이터 처리 및 저장 | 데이터 파싱(Parsing), 인덱싱(Indexing), 스토리지 저장, 검색 쿼리 실행 |
| **Search Head** | 검색 및 시각화 | SPL 쿼리 인터페이스 제공, 대시보드 생성, 검색 결과 시각화 및 관리 |
### 2.3 데이터 수집 방식 (Push vs Pull)
Splunk는 환경에 따라 두 가지 데이터 수집 메커니즘을 지원한다.
* **Push 방식 (Forwarding):** Universal Forwarder(UF)와 같은 경량 에이전트를 대상 서버에 설치하여 데이터를 Indexer로 밀어내는 방식이다. HTTP Event Collector(HEC)를 통해 애플리케이션이 직접 데이터를 전송하는 방식도 이에 해당하며, 실시간성이 높고 리소스 소모가 적어 가장 권장된다.
* **Pull 방식 (Polling):** Splunk 서버가 외부 시스템에서 데이터를 직접 가져오는 방식이다. `Modular Inputs`나 `DB Connect`를 통해 데이터베이스에 주기적으로 쿼리를 날려 데이터를 가져오거나, SNMP, WMI 등의 프로토콜을 사용하여 에이전트 설치가 불가능한 장비의 데이터를 수집할 때 사용된다.
## 3. 주요 기능 및 활용 사례
### 3.1 핵심 기능
* **실시간 모니터링:** 유입되는 데이터를 실시간으로 스트리밍하여 특정 패턴이나 임계치 초과 여부를 즉각 확인한다.
* **대시보드 시각화:** 검색 결과를 차트, 그래프, 맵 등 다양한 시각적 요소로 구성하여 운영 현황을 한눈에 파악할 수 있는 대시보드를 구축한다.
* **알림(Alert) 설정:** 특정 조건(예: 5분간 500 에러 100건 발생)이 충족될 경우 이메일, 슬랙(Slack), 웹훅(Webhook) 등을 통해 관리자에게 즉시 알림을 전송한다.
### 3.2 활용 사례
* **보안 관제 ([[SIEM]]):** 보안 정보 및 이벤트 관리(SIEM) 도구로 활용하여 침입 탐지, 이상 징후 분석, 컴플라이언스 준수 여부를 모니터링한다.
* **IT 운영 분석 (ITOA):** 애플리케이션 성능 모니터링(APM) 및 인프라 로그 분석을 통해 서비스 장애를 조기에 발견하고 복구 시간을 단축한다.
* **비즈니스 분석:** 웹 로그나 트랜잭션 데이터를 분석하여 사용자 행동 패턴을 파악하고 매출 추이를 분석하는 등 비즈니스 인사이트를 도출한다.
* **관측 가능성 (Observability):** 최근에는 단순 로그 분석을 넘어 메트릭, 트레이스(Trace) 데이터를 통합 분석하는 'Observability' 플랫폼으로 확장하고 있으며, OpenTelemetry 지원 및 Splunk Observability Cloud를 통해 전체 시스템의 상태를 정밀하게 관측한다.
## 4. SPL (Search Processing Language)
SPL은 Splunk의 핵심인 전용 쿼리 언어로, 유닉스(Unix)의 파이프(`|`) 구조를 채택하여 검색 결과를 다음 명령어로 전달하며 데이터를 단계적으로 가공한다.
### 4.1 기본 문법 및 구조
`[기본 검색어] | [명령어1] | [명령어2] | [시각화/통계 명령어]`
### 4.2 주요 명령어 요약
| 명령어 | 용도 | 설명 |
| :--- | :--- | :--- |
| `stats` | 통계 계산 | count, sum, avg, dc(distinct count) 등 통계치 산출 |
| `eval` | 필드 계산 | 새로운 필드를 생성하거나 기존 필드의 값을 계산/수정 |
| `where` / `search` | 필터링 | 특정 조건에 맞는 이벤트만 필터링 |
| `table` | 표 생성 | 출력할 필드를 지정하여 표 형태로 나열 |
| `sort` | 정렬 | 지정한 필드를 기준으로 오름차순/내림차순 정렬 |
| `timechart` | 시계열 분석 | 시간 흐름에 따른 통계치를 차트 형태로 생성 |
| `rex` | 정규표현식 추출 | 런타임에 정규표현식을 사용하여 필드를 강제로 추출 |
### 4.3 쿼리 예시
**1. 기본 검색: 'error'라는 단어가 포함된 로그 중 'web_server' 소스 데이터 필터링**
```spl
source="web_server" "error"
```
**2. 통계 함수: 에러 로그의 발생 횟수를 호스트별로 집계하여 내림차순 정렬**
```spl
source="web_server" "error"
| stats count by host
| sort - count
```
**3. 시각화 쿼리: 시간대별 에러 발생 건수를 시계열 차트로 표현하기 위한 쿼리**
```spl
source="web_server" "error"
| timechart span=1h count
```
## 5. Splunk 제품군 및 에코시스템
### 5.1 배포 모델
* **Splunk Enterprise:** 사용자가 직접 온프레미스(On-premise) 또는 자체 클라우드 환경에 설치하여 운영하는 소프트웨어 버전이다. 인프라 제어권이 높다.
* **Splunk Cloud:** Splunk에서 제공하는 [[SaaS]] 형태의 서비스이다. 설치, 업데이트, 인프라 관리를 Splunk가 담당하여 운영 부담이 적다.
### 5.2 App 및 Add-on
* **Splunk App:** 특정 목적(예: Cisco 네트워크 관리, AWS 모니터링)을 위해 미리 구성된 대시보드, 보고서, 검색 쿼리의 묶음이다.
* **Add-on:** 특정 데이터 소스의 형식을 Splunk가 이해할 수 있도록 필드를 정의하고 파싱 규칙을 제공하는 확장 팩이다.
## 6. 설치 및 초기 설정 가이드
Splunk를 처음 도입할 때의 일반적인 설정 단계는 다음과 같다.
1. **설치 및 계정 생성:** OS(Linux/Windows)에 맞는 패키지를 설치하고, 웹 인터페이스(Splunk Web) 접속을 위한 관리자 계정(admin)과 비밀번호를 생성한다.
2. **데이터 입력(Data Input) 설정:** `Settings > Data Inputs` 메뉴에서 모니터링할 로그 파일 경로를 지정하거나, 네트워크 포트(TCP/UDP)를 개방하여 실시간 스트림을 수신하도록 설정한다.
3. **인덱스(Index) 설계 및 생성:** 데이터의 성격(예: `security`, `app_log`)에 따라 인덱스를 분리 생성한다. 이는 검색 성능 최적화뿐만 아니라, 데이터별 보관 주기(Retention Policy)를 다르게 설정하여 스토리지 효율을 높이기 위함이다.
4. **Forwarder 배포 및 연결:** 수집 대상 서버에 Universal Forwarder를 설치하고, `splunk add forward-server [Indexer_IP]:9997` 명령을 통해 Indexer와 연결하여 데이터를 전송한다.
5. **필드 추출 및 대시보드 구성:** `Field Extractor`를 사용하여 비정형 로그에서 의미 있는 필드를 정의하고, SPL을 통해 생성한 쿼리를 대시보드 패널로 저장하여 시각화한다.
## 7. 라이선스 체계 및 과금 방식
Splunk는 기본적으로 상용 소프트웨어이며, 과금 방식은 크게 두 가지로 나뉜다.
* **데이터 용량 기반 과금 (Ingest-based):** 하루에 인덱싱하는 데이터의 총량(GB/day)에 따라 비용을 지불하는 방식이다. 가장 일반적인 모델이다.
* **워크로드 기반 과금 (Workload-based):** 데이터 양과 관계없이 검색 및 분석에 소모되는 컴퓨팅 자원(CPU, 메모리 등)의 양에 따라 비용을 지불하는 방식이다. 데이터 유입량은 많지만 검색 빈도가 낮은 환경에 유리하다.
* **Free License:** 학습용으로 제공되며, 인덱싱 용량 제한이 매우 낮고 분산 환경 구성이 불가능하다.
## 8. 장단점 및 대안 솔루션
### 8.1 장단점 분석
* **장점:**
* **강력한 분석 능력:** SPL을 통해 복잡한 데이터 가공과 분석이 매우 빠르게 가능하다.
* **빠른 도입 속도:** 스키마리스 구조 덕분에 데이터 포맷 정의 없이 즉시 수집 및 검색이 가능하다.
* **방대한 생태계:** 수많은 App과 Add-on이 존재하여 타 솔루션과의 연동이 쉽다.
* **단점:**
* **높은 비용:** 데이터 유입량에 따른 라이선스 비용이 매우 고가이다.
* **리소스 소모:** 인덱싱 및 검색 과정에서 상당한 CPU와 I/O 자원을 요구한다.
### 8.2 Splunk vs [[ELK Stack]] 비교
| 비교 항목 | Splunk | ELK Stack (Elasticsearch, Logstash, Kibana) |
| :--- | :--- | :--- |
| **비용** | 고가의 상용 라이선스 | 오픈소스 기반 (상용 기능은 유료) |
| **설치 및 설정** | 상대적으로 쉽고 통합적임 | 각 구성 요소를 개별 설치 및 설정 필요 |
| **데이터 구조** | 스키마리스 (Schema-less) | 스키마 기반 (Dynamic Mapping 지원) |
| **쿼리 언어** | SPL (매우 강력하고 직관적) | Query DSL / KQL (학습 곡선 존재) |
| **관리 편의성** | 통합 관리 콘솔 제공 | 개별 컴포넌트 관리 및 튜닝 필요 |