분석 · 관제핵심 · 12분 읽기
Splunk의 수집·인덱스·SPL 검색
Splunk에서는 데이터를 전달하는 역할과 저장·검색하는 역할을 나눠 이해한다. 검색 결과의 정확도는 시간 해석과 출처 분류에서 시작한다.
개념부터 찾아보기
정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.
이 노트에서 설명할 수 있게 되는 것
- 수집·인덱싱·검색 시점의 처리를 분리해 설명한다.
- 시간과 sourcetype 오류가 검색 결과에 미치는 영향을 추적한다.
- 이벤트 수와 고유 값 수를 구분하여 집계한다.
01개념과 구성 요소
- 수집·저장·검색, , 가 입력 전달·색인·검색을 나누어 맡는다.
- 이벤트 문맥··index와 ·이 출처·형식·시간을 연결한다.
- 파이프 뒤의 명령이 앞 단계의 결과 집합을 바꾸며 집계 뒤에는 원래 모든 필드가 남지 않을 수 있다.
0210분 구간의 인증 실패를 SPL로 집계하는 순서
- 입력 집합 선택index··action 조건과 검색 시간으로 대상 이벤트를 고른다. 필드가 실제로 추출되어 있어야 한다.
- 시간 구간 배치 =10m으로 각 이벤트를 고정된 10분 구간에 넣는다.
- 그룹별 집계가 시간·host·user 조합별 실패 수와 출발지 집합을 만든다. 이벤트 행은 요약 행으로 바뀐다.
- 임계값 적용where가 failures>=5인 그룹만 남긴다. 경계 양쪽에 나뉜 네 번씩의 실패는 같은 그룹이 아니다.
- 원본·중복 검토요약에 기여한 이벤트와 반복 실행의 중복 경보를 확인한다. 고정 구간 집계를 sliding window로 해석하지 않는다.
03Forwarder·Indexer·Search Head의 책임
- 세 구성요소는 데이터를 수집·전달하고 는 이벤트를 저장·색인하며 는 검색을 분배하고 결과를 취합한다. 세 역할은 한 서버에 합쳐질 수도 분리될 수도 있다.
- 전달과 저장가 연결되었다는 사실과 이벤트가 올바른 시각·형식으로 저장되었다는 사실은 다르다.
- UF·파싱 위치Universal 는 경량 수집 역할이고 복잡한 변환이 필요한 구성에서는 처리 위치를 별도로 정한다. 필드 추출을 검색 시점에 수행할 수 있지만 이벤트 경계·timestamp·기본 메타데이터 등은 색인 전에 처리하는 부분도 있다.
04host·source·sourcetype·index
- 메타데이터host는 이벤트 발생 자산, source는 파일 경로나 입력 출처, 은 이벤트 형식과 처리 규칙, index는 저장 구역을 나타낸다. 파일명이 같아도 호스트가 다를 수 있고 같은 호스트의 auth 로그와 웹 로그는 다른 을 사용한다.
- 영향잘못된 은 시간 추출·줄 결합·필드 해석에 영향을 준다.
- 입력 예아래 입력은 가상 교육 파일을 lab index로 보내는 부분 예다. source의 실제 위치와 read 권한이 먼저 맞아야 하며, 이 설정만으로 수신 서버··가 모두 구성되지는 않는다.
- 중복 수집입력 경로를 두 번 설정하거나 같은 로그를 다른 경로로 동시에 받으면 중복 이벤트가 검색 결과를 부풀릴 수 있다.
text
[monitor:///var/log/training/auth.log]
disabled = 0
index = lab
sourcetype = training_auth원리를 설명하는 가상 학습 예시입니다.
05시간 기반 Bucket과 TSIDX
- Bucket·TSIDX이벤트는 시간 범위를 가진 bucket에 저장되고 raw data와 검색용 색인 구조가 함께 관리된다. TSIDX는 검색 term과 위치 정보 등을 이용해 모든 원문을 매번 순차 탐색하는 비용을 줄인다.
- 역인덱스 예admin→Event1,Event3은 토큰에서 관련 이벤트로 이동하는 역인덱스 관계의 예다.
- Hot·Warm·Cold·FrozenHot bucket은 쓰기가 진행되는 상태이고 warm·cold는 정책에 따라 이전된 상태이다. frozen은 일반 검색에서 빠지는 단계이며 설정에 따라 삭제되거나 archive 처리될 수 있어 영구 보관을 자동 보증하지 않는다.
- 복구 자료보관 자료를 다시 검색하려면 지원되는 복구 절차와 필요한 파일이 있어야 한다.
06_raw·_time과 필드 추출
- Raw·Time는 원본 이벤트 내용, 은 사건 시각으로 해석된 검색 시간이다. 메시지에 timezone이나 연도가 없으면 입력 설정과 수집 문맥이 시간 해석에 영향을 준다.
- 색인과 사건 시각색인 시각과 사건 시각이 다를 수 있으므로 지연 수집된 파일의 이벤트가 지금 시간창에 없다고 누락으로 확정할 수 없다.
- 필드 추출검색 시 추출한 user·src·action을 탐지 조건에 쓰려면 해당 의 실제 추출 결과를 읽어야 한다. Add-on마다 src_ip 또는 src 등 이름이 달라질 수 있다.
- 없는 필드존재하지 않는 필드를 기준으로 집계하면 의도한 결과가 조용히 사라질 수 있다.
07SPL 파이프는 앞 단계 결과를 바꾼다
- 파이프 변환기본 검색이 이벤트 집합을 고르면 파이프 뒤 명령이 그 집합을 변환한다. 는 그룹별 요약 결과로 바꾸므로 그 뒤에서 원래 모든 이벤트 필드가 자동으로 남아 있다고 가정하면 안 된다.
- Count·Distinct Countcount는 이벤트 수이고 (user)는 고유 사용자 수로 질문이 다르다.
- 10분 집계다음은 필드가 이미 정규화된 교육 데이터의 10분 구간별 실패 집계다. 은 시간을 고정 폭 구간에 배치하고 는 그 시간·호스트·사용자 조합별로 세며 where는 집계 결과를 제한한다.
- Valuesvalues(src)는 중복을 제거한 출발지 값 집합이므로 사건의 발생 순서를 보여 주지 않는다.
text
index=lab sourcetype=training_auth action=failure
| bin _time span=10m
| stats count AS failures values(src) AS sources BY _time host user
| where failures >= 5원리를 설명하는 가상 학습 예시입니다.
원리 심화
08이벤트 수·필드 존재 수·서로 다른 값의 수
- 전체 개수 count는 집계에 들어온 이벤트 수를 센다. 앞선 search·where·dedup에서 제거한 이벤트는 그 뒤 count에 포함되지 않는다.
- 필드 개수count(user)는 user 필드에 값이 있는 경우를 센다. user가 없는 이벤트도 존재하므로 전체 count와 달라질 수 있다.
- 고유 값(user)는 서로 다른 사용자 값의 수다. 한 사용자의 여러 실패를 이벤트 수처럼 늘리지 않으며 사람의 실제 수와도 반드시 같지는 않다.
- 다중 값필드가 다중 값으로 추출되면 집계 함수별 의미가 단일 값 예제와 달라질 수 있다. 추출 결과의 타입과 값 개수를 먼저 확인한다.
- 집계 후 정보 뒤에는 선택한 그룹 필드·집계 결과가 중심이 된다. 이후 명령이 원래 나 개별 이벤트 필드를 계속 사용할 수 있다고 가정하지 않는다.
예제로 추적
09가상 인증 로그 세 건의 집계 비교
- 표본 구성이벤트 1과 2의 user는 alice, 이벤트 3에는 user 필드가 없다고 가정한다. 세 건 모두 같은 시험 집계 범위에 있다.
- 전체 집계 count의 결과는 3이다. user 필드가 없다는 이유로 원래 이벤트가 존재하지 않는 것은 아니다.
- 필드 집계count(user)는 값이 있는 두 이벤트를 세어 2가 된다. 빈 필드와 파싱 실패를 조사하는 단서가 된다.
- 고유 집계(user)는 서로 다른 값 alice 하나를 세어 1이다. 두 번의 실패와 한 계정이라는 질문에 각각 다른 답이 필요하다.
- 해석 조건일부 이벤트의 user 누락이 파서 오류라면 고유 계정 1이라는 결론도 제한적이다. 원문·추출 성공률과 집계값을 함께 제시한다.
text
| stats count AS events count(user) AS with_user dc(user) AS users앞 단계에서 선택한 가상 세 이벤트에 적용할 집계 부분. 기대값은 events=3, with_user=2, users=1이며 실제 서비스에서 실행하지 않았다.
검증·예외
10통계는 맞지만 질문의 답이 아닌 경우
- 필터 위치집계 전 실패 이벤트를 고르는 것과 집계 후 실패 수가 큰 그룹을 고르는 것을 구분한다. 파이프 단계 순서가 모집단을 바꾼다.
- 시간 기준과 수집 시각·검색 시간 범위를 비교한다. 잘못 파싱된 시간이 정상 이벤트를 기간 밖으로 밀어낼 수 있다.
- 중복 처리재전송 중복 제거와 같은 사용자의 반복 행위 제거는 다르다. user만으로 dedup하면 실제 시도 수를 잃는다.
- 기준 단위IP·계정·세션·사건을 같은 개수로 부르지 않는다. ·공유 계정·한 요청의 여러 로그가 집계를 다르게 만든다.
11고정 구간과 Sliding Window는 다르다
- 구간 경계10:09에 네 번, 10:11에 네 번 실패했다면 실제 2분 안에 여덟 번이지만 10분 고정 구간별로는 네 번씩 나뉜다. 의 고정 구간은 임의 시점부터의 최근 10분을 뜻하는 sliding window와 다르다.
- 창 선택경계에 걸친 이벤트를 어떻게 처리할지는 탐지 질문에 따라 별도 설계한다.
- 반복 경보검색을 매분 실행하면 서로 겹치는 검색 범위의 같은 사건이 반복 경보로 올라올 수도 있다. 이벤트 ID·집계 키·경보 억제 정책을 정의해야 원시 사건 수와 알림 건수를 분리할 수 있다.
- 지연·누락시간 지연·누락·중복을 반영하지 않은 임계값은 도구가 정상 작동해도 의미가 달라진다.
12Event Index와 Metric Index
- Event·Metric IndexEvent index는 원문 로그와 검색 필드를 다루는 일반적인 자료 구조이고 metric index는 시간·측정값·dimension 중심의 수치 분석에 적합하다. CPU 사용률을 문자 로그로 저장할 수도 있지만 metric 형태로 다루면 측정값의 단위와 시계열 집계 목적이 명확해진다.
- 검색 방식두 형태는 검색 명령과 활용 방식이 다르므로 index라는 이름만 같다고 동일 쿼리를 복사하지 않는다. 누적 카운터와 순간 gauge도 다르게 집계한다.
- 저장 비용데이터 종류·카디널리티·보존 기간·검색 방식이 저장 및 비용에 영향을 준다.
13Elastic과 같은 질문을 비교하는 실습
- 100건 대조같은 가상 인증 이벤트 100건을 두 플랫폼에 넣고 전체 건수·호스트 수·실패 사용자 집계를 비교할 수 있다. 이것은 제품 이름보다 파싱과 필드 의미가 결과를 결정한다는 사실을 보여 준다.
- 파싱 조건같은 100건이어도 시간대·누락 필드·중복 처리 방식이 다르면 결과가 달라진다.
- 단계별 예상값원본 메시지→필드→집계→경보의 각 단계에 작은 예상값을 두면 어느 부분의 차이인지 좁힐 수 있다. 화면이 동일하게 보이는 것보다 어떤 입력이 어떤 집계 행에 기여했는지 역추적할 수 있는지가 중요한 기준이다.
- 성능 시험 구분동일 자료의 집계 비교와 처리 성능의 우열 평가는 다른 시험이다.
설명과 함께 보는 보조 도식
처리 과정
원문에서 SPL 집계까지
수집·인덱싱·검색의 책임을 분리한 모식도다. 실제 배치는 단일 서버 또는 분산 구성일 수 있다.
01Forwarder입력을 읽고 전달한다.
02파싱·Indexer이벤트 경계와 시간을 해석하고 저장한다.
03인덱스이벤트와 검색용 구조를 보존한다.
04Search Head질의를 실행하고 필드·통계 결과를 구성한다.
01
입력 전달
출처와 sourcetype 설정을 함께 확인한다.
- 확인 대상
- 원본 기록 수와 이벤트 경계
전체 단계를 한 번에 읽기
- 01
입력 전달
출처와 sourcetype 설정을 함께 확인한다.
- 확인 대상
- 원본 기록 수와 이벤트 경계
- 02
저장
이벤트 시각과 index가 검색 범위를 결정한다.
- 상태
- 검색 가능한 이벤트
- 03
검색 시 필드 확인
원문 표본에서 필드 추출이 기대와 같은지 확인한다.
- 04
집계 결과 해석
여섯 이벤트에 사용자 두 명이라면 count와 dc는 다른 값을 낸다.
- 이벤트 수
- 6
- 고유 사용자 수
- 2
READ · OBSERVE · CONNECT
함께 보는 학습 자료
아래 공식 자료를 본문의 개념·예제와 함께 읽어 보세요. 자료별로 확인할 위치와 관찰할 내용을 적었습니다.
Splunk: count·dc·통계 집계 예제
이벤트 수·필드 값이 있는 수·서로 다른 값의 수를 공식 예제로 나누어 읽는다.
읽으면서 확인할 것
- count와 count(field)의 대상 차이
- 또는 distinct_count가 세는 값
- BY 분류별 통계와 전체 통계의 분모
학습 확인
이해했는지 확인하기
- Forwarder·Indexer·Search Head의 데이터 경로를 확인한다.
- index·host·source·sourcetype·이벤트 시각을 확인한다.
- 집계 전에 원본 표본과 중복·줄바꿈 처리를 확인한다.
