Splunk JSON 데이터 파싱 (1)

seaturtle·2023년 12월 5일
0

Splunk 기록

목록 보기
1/2

테스트1

JSON depth가 3 이상인 데이터 필드별로 조회하기

1. JSON depth가 3 이상인 데이터 생성

| makeresults 
| eval _raw="{ \"Key1\": \"Value1\", \"Key2\": { \"subKey2_1\": \"sub value1 for key2\", \"Manifest\": [{ \"flight\": \"start\", \"City\": \"Los Angeles\", \"code\": 7870, \"Inventory\": { \"snacks\": 300, \"status\": \"full\" } }, { \"flight\": \"end\", \"City\": \"Las Vegas\", \"code\": 7470, \"Inventory\": { \"snacks\": 56, \"status\": \"near empty\" } } ], \"subKey2_3\": \"sub value3 for key2\" }, \"Key3\": \"Value3\", \"Key4\": \"Value4\"}"

데이터 구조 사진

2. Key2의 Manifest의 객체 조회

| fromjson _raw
| fromjson Key2
| eval Origin = mvindex(Manifest,0)
| eval Destination = mvindex(Manifest,1)

fromjson : JSON 형태 객체를 다중값 가진 필드들로 전환하는 명령어

  • 키->필드, 값=필드값
  • ex) _raw 데이터 처리 후 Key2 처리

    - {"Key2" : "subKey2_1", "Manifest", "subKey2_3"}

mvindex(m,start,end) : m 필드의 start번째행 반환하는 함수

  • mvindex(Manifest,0) : Manifest 필드의 0번째 행 반환 (첫번째 행)

    - Origin : Manifest 첫번째 요소
    - Destination : Manifest 두번째 요소

3. 정규식 사용해 필드명 변경

| rex mode=sed field=Origin "s/\"([^\"]+)\":/\"\\1_Origin\":/g"
| rex mode=sed field=Destination "s/\"([^\"]+)\":/\"\\1_Destination\":/g"

rex : mode=sed 속성 통해 정규식에 해당하는 필드의 텍스트 변경 가능

  • ex) 이벤트 데이터에 큰 따옴표(")로 묶인 텍스트 찾고 그 뒤에 _Origin 추가

=> fromjson 통해 각 객체에 접근 가능

4. 최종 결과

참고 사이트 : https://community.splunk.com/t5/Splunk-Search/How-to-parse-json-with-SPL/m-p/647527

profile
하루 기록

0개의 댓글