Splunk에서 데이터를 필터링할 때 가장 자주 사용하는 명령어인
"search와 where에 대한 차이점에 대한 공부 내용입니다."
이번 글에서는
"search와 where의 차이를 설명하고, 각 명령어를 구분해 사용하는 방법과 조합해서 활용하는 방법을 시나리오별로 소개합니다."
1. search와 where의 주요 차이점
기능 | search | where |
적용 시점 | 원시 데이터를 검색한 후, 검색 파이프라인 초반부에서 적용됨 | 통계 데이터나 변환된 데이터에 대해 필터링을 수행 |
적용 대상 | 원본 이벤트 필터링 | 통계 데이터나 변환된 데이터에 대해 필터링 수행 |
지원되는 조건 표현식 | 간단한 키워드 검색 | 복잡한 조건, 함수, 계산식 사용 가능 |
2. 예시로 쉽게 이해하기
- search: 데이터베이스에서 데이터를 가져오기 전에 조건을 걸러주는 역할
- 예: "상태 코드가 200인 데이터만 가져와!"
- where: 데이터를 가져온 후 특정 조건을 기반으로 추가 필터링
- 예: "가져온 데이터 중 응답 시간이 2초를 초과한 데이터만 보여줘."
3. search와 where의 구분 사용 방법
시나리오 1: 간단한 필터링
목표: "로그 데이터에서 HTTP 상태 코드가 404인 이벤트만 검색"
- search 사용:
- 원본 데이터에서 status_code=404 조건에 맞는 이벤트만 가져옵니다.
index=web_logs | search status_code=404
- where 사용:
- 모든 데이터를 검색한 후, 조건에 맞는 이벤트만 필터링합니다.
- 단, 원본 데이터가 많으면 속도가 느려질 수 있습니다.
index=web_logs | where status_code=404
- 결론:
- 원본 데이터 필터링에는 search를 사용하는 것이 효율적입니다.
목표: "HTTP 상태 코드별 평균 응답 시간이 2초 이상인 데이터를 확인"
- where 사용:
- stats 명령어로 계산된 평균 응답 시간(avg_time)을 기준으로 필터링합니다.
index=web_logs | stats avg(response_time) as avg_time by status_code | where avg_time > 2
- search 사용:
- avg_time은 stats 명령어로 생성된 계산된 필드입니다.
- search는 원본 데이터에 없는 필드를 이해하지 못하므로 동작하지 않습니다.
index=web_logs | stats avg(response_time) as avg_time by status_code | search avg_time > 2
- 결론:
- 통계나 계산 결과에 대한 필터링에는 where를 사용해야 합니다.
4. search와 where의 조합 사용 방법
시나리오 3: 효율적인 데이터 필터링과 세부 조건 추가
목표: "상태 코드가 500인 이벤트 중, 응답 시간이 2초를 초과한 데이터만 확인"
- 조합된 쿼리:
- search를 사용해 상태 코드가 500인 이벤트만 원본 데이터에서 필터링
- 이후 where를 사용해 가져온 데이터에서 응답 시간이 2초를 초과한 이벤트를 필터링.
index=web_logs status_code=500 | where response_time > 2
- 결론:
- 간단한 필터링은 search로 처리하고, 복잡한 조건은 where로 처리하는 것이 효율적입니다.
시나리오 4: 복잡한 조건 필터링
목표: "응답 시간이 2초를 초과하고, IP 주소가 특정 CIDR 범위(192.168.0.0/24)에 속하는 이벤트만 검색"
- 조합된 쿼리:
- cidrmatch 함수는 특정 CIDR 범위에 속하는 IP를 확인하며, 복잡한 조건을 함께 처리할 수 있습니다.
index=web_logs | where response_time > 2 and cidrmatch("192.168.0.0/24", src_ip)
- 결론:
- 복잡한 조건 필터링에는 where를 사용하며, 함수나 연산식과 조합하여 강력한 필터링 로직을 구성할 수 있습니다.
5. 요약: search와 where 사용법 정리
사용 상황 | search | where |
원본 데이터 필터링 | 원본 데이터의 간단한 필터링에 사용 | 모든 데이터를 가져온 후 필터링에는 비효율적 |
통계 또는 계산된 데이터 필터링 | 적합하지 않음 | 통계 결과 및 계산된 데이터에 대한 조건 필터링에 적합 |
간단한 조건 | 상태 코드가 404와 같은 간단한 조건 | 복잡한 논리 연산이나 함수가 포함된 조건 |
조합 사용 | 원본 데이터 필터링 후 세부 조건 추가에 사용 | search와 조합하여 세밀한 필터링에 활용 |
6. 최적화된 Splunk 쿼리 작성 팁
- 간단한 조건은 search로 처리:
- 원본 데이터를 필터링할 때는 항상 search를 사용해 효율성을 높입니다.
- 복잡한 조건은 where를 활용:
- 통계 결과나 계산된 데이터를 기반으로 하는 조건에는 where를 사용합니다.
- 조합해서 사용:
- 먼저 search로 데이터를 좁히고, 추가 조건을 where로 필터링하면 성능과 가독성을 모두 확보할 수 있습니다.
참고
https://docs.splunk.com/Documentation/SCS/current/SearchReference/StatsCommandExamples
stats command examples - Splunk Documentation
stats command examples The following are examples for using the SPL2 stats command. To learn more about the stats command, see How the SPL2 stats command works. Many of these examples use the statistical functions. See Overview of SPL2 stats and chart func
docs.splunk.com
https://docs.splunk.com/Documentation/SCS/current/SearchReference/SearchCommandExamples
search command examples - Splunk Documentation
search command examples The following are examples for using the SPL2 search command. To learn more about the search command, see How the SPL2 search command works. 1. Field-value pair matching This example shows field-value pair matching for specific valu
docs.splunk.com
'Splunk > Search Command' 카테고리의 다른 글
Splunk eval 완벽 가이드: 기본 문법, 데이터 계산, 실전 활용 팁 총정리 (0) | 2025.02.15 |
---|---|
Splunk eval case() 함수 완벽 가이드 - 활용법 및 실전 예제 (0) | 2025.02.08 |
Splunk mvexpand 완벽 가이드: 다중값 필드 분석의 모든 것 (예시와 실무 활용법) (1) | 2025.01.25 |
Splunk SPL에서의 JOIN 연산: LEFT, INNER, OUTER JOIN (0) | 2025.01.21 |
Splunk SPL에서 append와 join을 함께 사용하기 (0) | 2025.01.05 |