[Splunk 고급 설정] 여러 이벤트를 조건 별로 Index 분기하기 (props.conf & transforms.conf)
종종 하나의 호스트에서 다양한 종류의 로그가 들어올 때가 있다.
그 이유는 아래와 같다.
💡 1️⃣ 솔루션이 통합 에이전트 형태로 설치되는 경우
요즘 보안 솔루션들은 여러 기능을 하나의 에이전트(Agent)로 묶어 배포하는 경우가 많다.
예를 들어, 안랩의 경우 V3가 기존 백신 역할을 하고, 그 위에 EDR 모듈, EPP 모듈 등을 추가해서 통합 관리하도록 설계하는데
✅ 이럴 땐 하나의 프로그램(Agent)이 모든 기능 로그를 생성 → 하나의 호스트(서버 또는 PC)에 모든 로그가 한꺼번에 쌓임.
💡 2️⃣ 동일 호스트에 여러 솔루션이 설치되어 있는 경우
특히 대기업이나 공공기관에서는 보안 다층화(Defense in Depth) 전략을 사용한다.
- EPP와 EDR은 서로 다른 벤더(또는 같은 벤더의 다른 모듈) 제품을 동시에 설치
- V3(백신)는 기본적 악성코드 방어용, 추가로 EDR은 행위 기반 탐지용
✅ 이런 경우도 모든 로그가 한 호스트에서 발생.
💡 3️⃣ 중앙 관리 서버가 호스트 역할을 하는 경우
때로는 개별 PC나 서버가 아니라,
관리 콘솔 서버 또는 집중 관리 서버가 각 엔드포인트에서 올라오는 로그를 취합해서 한 번에 전송
✅ 이 경우, 모든 클라이언트 로그가 하나의 "호스트" 이름으로 Splunk나 SIEM에 나타날 수 있음.
💡 4️⃣ 로그 수집 정책에 따른 단일 식별자 사용
일부 조직에서는 관리 편의를 위해 모든 보안 로그를 단일 식별자(Host name)로 묶어 관리하기도 함.
- 예를 들어, EDR, EPP, V3 각각 별도로 호스트 구분 없이 hostname=WIN-ABC123으로 통일
- 이때도 하나의 호스트가 모든 로그를 가진 것처럼 보임
보통의 경우 host ip 기반으로 데이터를 수집하고 아래처럼 하나의 인덱스에 담는다.
데이터가 적은 경우엔 이렇게 저장해도 검색 성능에 지장이 없지만
데이터가 물리 서버의 스펙 대비 지나치게 많은 경우 검색 성능이 떨어진다.
이를 방지하기 위해 데이터를 로그 타입을 기준으로 분류하여 각각 새로운 인덱스로 분리한다.
🛡️ 로그 형식 설명
최근 보안 장비의 로그는 대부분 표준화된 포맷(예: CEF, LEEF, JSON 등)을 사용한다.
안랩의 EDR, EPP, V3 등 보안 솔루션들도 CEF(Common Event Format)를 기반으로 로그를 전송하며,
각 로그의 헤더에는 장비 식별 정보와 기본 이벤트 정보가 포함됨
✅ ✨ 안랩 장비 로그의 CEF 헤더 구조와 로그 타입 분류
보안 로그를 분석할 때 가장 먼저 확인해야 할 것은 로그의 헤더(Header) 정보!!!
안랩 장비 로그는 대표적으로 CEF(Common Event Format) 포맷을 사용하며, 헤더 구조는 아래와 같다.
CEF:Version | Vendor | 제품명 | 버전 | 로그타입 | 심각도 | 로그 상세 내용
🗂️ 로그타입을 기준으로 한 간단한 분류
보통 로그타입 값은 벤더사(안랩)에 문의하면 로그 정의서라는 문서 형태로 상세하게 제공된다.
로그 정의서에는 각 로그타입이 의미하는 탐지 시나리오, 동작 방식, 대응 방안 등이 자세히 기술되어있다.
이번 글에서는 이해를 돕기 위해 간단한 예시로 아래와 같이 여섯 가지 로그타입만 있다고 가정하자.
EPP_apple, EPP_banana
EDR_apple, EDR_banana
V3_apple, V3_banana
✅ ✨ Splunk에서 로그를 분리해서 저장할 때 필요한 .conf 파일
💡 1️⃣ props.conf
#props.conf
### 1안 ###
[ahnlab:syslog]
TRANSFORMS-change_index_1 = ahnlab_epp
TRANSFORMS-change_index_2 = ahnlab_v3
TRANSFORMS-change_index_3 = ahnlab_edr
### 2안 ###
[ahnlab:syslog]
TRANSFORMS-change_index = ahnlab_epp, ahnlab_v3, ahnlab_edr
💡 2️⃣ transforms.conf
#transforms.conf
[ahnlab_epp]
REGEX = \|(EPP_apple|EPP_banana)\|
DEST_KEY = _MetaData:Index
FORMAT = gz_ahnlab_epp
[ahnlab_v3]
REGEX = \|(V3_apple|V3_banana)\|
DEST_KEY = _MetaData:Index
FORMAT = gz_ahnlab_v3
[ahnlab_edr]
REGEX = \|(EDR_apple|EDR_banana)\|
DEST_KEY = _MetaData:Index
FORMAT = gz_ahnlab_edr
✅ ✨ 정리
이번 글에서는 props.conf와 transforms.conf를 활용해
하나의 호스트에서 들어오는 다양한 로그를 타입별로 인덱스에 분리하는 방법을 정리했다.
이 방법은 데이터량이 많아지는 환경에서 검색 성능을 유지하고, 로그 관리 효율성을 높이는 데 유용하다.
실제 운영 환경에 맞게 조건과 인덱스 구조를 설계해 적용하면 보다 체계적인 로그 관리가 가능하다.