Splunk dashboard 시간 토큰 설정하기/ 시간 토큰 다른 패널에 전달하기 / Splunk 시간 변수 전달하기

Munang·2024년 8월 13일
0

splunk

목록 보기
56/57

대시보드를 구성하다 보면,, 시간 토큰값을 내려받아 하위 패널의 검색에 사용할 경우가 많은데 그럴때마다 찾아보게 된다. 따라서 한번에 정리해두려고 한다.

1. 시간 변수 설정하는 방법

1) 토큰 eval식 활용하기

  • 단순 토큰 설정 후 내려받기
    대부분 알고있는 방법이다. 가장 많이 사용하는 방법 중 하나이다.

    이후 아래 패널에서 이 time변수를 $을 사용해서 참조하면 된다.

  • 토큰 설정 후 relative_time으로 범위 추가 설정
    만약 내가 기존에 설정한 _time 필드에서 1일을 뺀 시간을 토큰으로 만들고 싶다면 아래와 같이 하면 된다.

relative_time에서 @뒤는 단위이고, 단위로 시간을 잘랐을때 얼마만큼을 움직일지를 @앞에 정의한다.

relative_time(strptime($row._time$,"%Y-%m-%dT%H:%M:%S.%Q%z"), "-1d@d") # 1일 전(예시)
relative_time(strptime($row._time$,"%Y-%m-%dT%H:%M:%S.%Q%z"), "-1m@m-1d") # 1일 전을 기준으로 1분 전
relative_time(strptime($row._time$,"%Y-%m-%dT%H:%M:%S.%Q%z"), "-1d@m") # 단위는 분으로 하되, 지금으로부터 1일 전

1일이 아니라 1일 후 이면 +로 변경하면된다.

1일 전 이면서 1분 전 => 24시간 하고 1분 전

검색 쿼리에서는 strptime으로 바꾸지 않고도 바로 relative_time을 써도 되던데?

  • 만약 이렇게 하였을 경우에는 Malformed Format으로 token전달이 안되었을 것 이다.
  • 대시보드에서 time토큰을 넘겨주면, 같은 패널 내에서는 epoch_time으로 작동하지만, 패널 밖을 나가는 순간 문자열 형태로 표현되기 때문에 한번 strptime으로 변경해주어야 한다.

2) epoch_time 활용하기

만약 1)에서 활용했던 방법에서 relative_time의 timerange만 잘 활용해도 원하는 시간을 모두 만들 수 있다. 하지만 조금 더 직관적인 방법이 하나 있다.

바로 time 단위를 epoch으로 바꾼 후 초를 빼주면 된다. epoch 시간이 초 단위이기 때문에 만약 24시간을 빼고싶다면, 24*60*60으로 86400를 빼주면 24시간 전이 된다.

strptime($row._time$,"%Y-%m-%dT%H:%M:%S.%Q%z")-86400

시간 변수를 설정했는데 Nan으로 나와요

  • 말 그대로 시간 변수가 제대로 설정이 안된 것 이다. 없는 데이터를 참조하기 때문에 그렇게 나오는 경우가 대부분이다.
  • 시간 format을 다시 체크해보면 대부분 해결 된다.

2. 검색 결과로 나온 시간을 변수로 설정하기

1) done 태그 활용하기

앞의 패널에서 검색 결과로 나온 시간을 내려받을 수 있다. 패널의 원본보기 옵션을 이용해 xml 파일로 들어간다.
이후에는 결과를 받아올 query 태그를 찾는다.

query 태그 바로 아래에 done태그를 지정한다. 이후에는 작업이 완료되면,
완료된 결과물(reulst)에서 가져올 필드를 .뒤에 적어준다. 나는 info_min_time필드를 가져올 것이라 위의 그림처럼 지정했다.

 		<done>
            <set token="done_time">$result.info_min_time$</set>
        </done>

3. 시간 변수를 다른 패널에 검색으로 활용하기

다른 패널에서 이미 설정된 시간 토큰을 활용하고 싶을 때는 어떻게 해야할까?

1) 시간 범위 설정하기

검색 문에서 하위의 시간 범위 설정을 클릭하여, 토큰을 지정한다.
이후에 earliest, latest를 수동으로 지정해줄 수 있다.

이때는 $을 사용하지 않는다.

2) earliest, latest 검색 문자열 사용하기

아래의 그림처럼, earliest, latest문자열을 그대로 사용해서 넣어줄 수 있다.

3) subsearch 사용하기

subsearch의 효과는 결과를 문자열로 ret해준다는 장점이 있다. 아래의 쿼리처럼 makeresults를 사용하면 2)와 같은 효과를 낸다고 보면 된다.

따라서 검색의 결과를 패널 내에서 재활용하여 시간을 사용할 수 있다는 장점이 있다. 필자의 경우 subsearch를 굉장히 많이 애용하는 편 이다.

index=_* 
    [| makeresults 
    | eval earliest_time = $done_time$ 
    | eval latest_time = $epoch_time$]

4. 실습 xml

<dashboard version="1.1" theme="light">
  <label>timerange</label>
  <row>
    <panel>
      <table>
        <search>
          <query>| makeresults
| addinfo</query>
          <done>
            <set token="done_time">$result.info_min_time$</set>
          </done>
          <earliest>-24h@h</earliest>
          <latest>now</latest>
        </search>
        <option name="drilldown">cell</option>
        <drilldown>
          <eval token="time">$row._time$</eval>
          <eval token="eval_time">relative_time(strptime($row._time$,"%Y-%m-%dT%H:%M:%S.%Q%z"), "-1d@d")</eval>
          <eval token="epoch_time">strptime($row._time$,"%Y-%m-%dT%H:%M:%S.%Q%z")-86400</eval>
        </drilldown>
      </table>
    </panel>
  </row>
  <row>
    <panel>
      <table>
        <search id="main_base">
          <query>| makeresults 
| eval token_time = "$time$"
| eval eval_time = "$eval_time$"
| eval epoch_time = "$epoch_time$"
| eval done_time ="$done_time$"</query>
          <earliest>-24h@h</earliest>
          <latest>now</latest>
        </search>
        <option name="drilldown">none</option>
        <option name="refresh.display">progressbar</option>
      </table>
    </panel>
  </row>
  <row>
    <panel>
      <table>
        <search>
          <query>index=_* 
    [| makeresults 
    | eval earliest_time = $done_time$ 
    | eval latest_time = $epoch_time$]</query>
          <earliest>0</earliest>
          <latest></latest>
        </search>
        <option name="drilldown">none</option>
        <option name="refresh.display">progressbar</option>
      </table>
    </panel>
  </row>
</dashboard>

끝이다!!!

0개의 댓글