본문 바로가기
Splunk/Search Command

Splunk foreach SPL: 멀티 필드, 멀티값, JSON 배열 반복 처리법

by drinkdog 2025. 7. 2.
반응형
foreach는 동일한 작업을 여러 필드나 값에 일괄 적용할 수 있는 SPL 명령입니다.
테스트 결과, 필드 내 합계 계산, JSON 배열 다루기 등 복잡한 반복 작업도 foreach 한 줄로 간편하게 정리할 수 있습니다.

📌 1. foreach는 왜 쓰는가?

  • 여러 필드(field1, field2, field3...)에 동일한 eval 처리를 해야 할 때
  • 멀티밸류 필드나 JSON 배열의 각 요소를 합산하거나 변형할 때

Splunk 공식 문서에 따르면 기본 모드는 multifield, 멀티밸류나 JSON에선 mode=multivalue/json_array 를 사용합니다.


🛠️ 2. foreach 문법 핵심

... | foreach [mode=<모드>] <필드 또는 필드패턴> [mode-options] [<subsearch>]
 
  • mode (선택): multifield (기본), multivalue, json_array, auto_collections
  • <FIELD>: 필드명 또는 *가 포함된 패턴
  • <<FIELD>>, <<ITEM>>, <<ITER>>, <<MATCHSTR>> 등의 템플릿 사용
모드 반복 대상 사용 탬플릿
multifield 다중 필드 (field*) <<FIELD>>, <<MATCHSTR>>
multivalue 멀티값 필드 <<ITEM>>, <<ITER>>
json_array JSON 배열 <<ITEM>>, <<ITER>>
auto_collections 자동판단(멀티/JSON) <<ITEM>>, <<ITER>>

🔍3. foreach 문법 핵심

3‑1. 다중 필드 합계 계산

| makeresults
| eval test1=1, test2=2, test3=3, total=0
| foreach test* [eval total = total + <<FIELD>>]
→ test1, test2, test3 값을 total에 합산

 

3‑2. 총합을 GB 단위로 변환

| 
 index=_internal source=*license_usage.log type!="*Summary"
 | timechart span=1d sum(b) AS daily_bytes by st
 | foreach * [eval <<FIELD>> = '<<FIELD>>'/1024/1024/1024]
→ 모든 필드(예: csv, universal_data_json)를 GB 단위로 변환

3‑3. 멀티밸류 필드 합산

| makeresults
| eval mv=mvappend("1","2","3"), total=0
| foreach mode=multivalue mv [eval total = total + <<ITEM>>]
→ 멀티값을 모두 더해 total=6 생성

3‑4. JSON 배열 합산

| makeresults
| eval arr=json_array(1,2,3), total=0
| foreach mode=json_array arr [eval total = total + <<ITEM>>]
→ JSON 배열 값을 모두 더해 total=6

3‑5. JSON 객체 평균 계산

| makeresults
| eval studentToGrade=json_object("Adam",80,"Samantha",95,"Tina",76)
| eval keys=json_keys(studentToGrade), grades=json_array(), total=0, count=0
| foreach mode=json_array keys [eval grades=json_append(grades,"",json_extract(studentToGrade, <<ITEM>>))]
| foreach mode=json_array grades [eval total=total+<<ITEM>>, count=count+1]
| eval avgGrade = total/count
→ JSON 키를 기반으로 수집, 평균(approx 83.7) 계산

🧠 4. 실전 활용 팁

  • 대형 이벤트 로그에서 특정 접두 필드 합계 & 레이블 분류
  • API JSON 응답을 정규화하여 파싱 및 시각화
  • multivalue 필드 합산, 평균 등 통계 처리을 간편하게 처리

❗ 5. 유의사항/주의점

  • mode=multivalue/json_array 사용 시 하나의 eval만 허용됨
  • 멀티밸류/JSON 반복 시 템플릿과 일치해야 함 (<<ITEM>>, <<ITER>>)
  • 외부 필드명에 특수문자 있으면 '' 감싸줘야 예기치 않은 오류 방지

✅ 6. 마무리

모드 사용 상황 장점
multifield 필드 이름이 유사할 때 공통 연산 자동 처리
multivalue 멀티밸류 필드 내부 각 요소 반복 합산/평균
json_array JSON 로그 데이터 배열 단위 처리 자동화

 

출처

https://help.splunk.com/en/splunk-enterprise/search/spl-search-reference/9.4/search-commands/foreach

 

 

 

반응형