대시보드를 구성하다 보면,, 시간 토큰값을 내려받아 하위 패널의 검색에 사용할 경우가 많은데 그럴때마다 찾아보게 된다. 따라서 한번에 정리해두려고 한다.
단순 토큰 설정 후 내려받기
대부분 알고있는 방법이다. 가장 많이 사용하는 방법 중 하나이다.
이후 아래 패널에서 이 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으로 변경해주어야 한다.
만약 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을 다시 체크해보면 대부분 해결 된다.
앞의 패널에서 검색 결과로 나온 시간을 내려받을 수 있다. 패널의 원본보기 옵션을 이용해 xml 파일로 들어간다.
이후에는 결과를 받아올 query 태그를 찾는다.
query 태그 바로 아래에 done태그를 지정한다. 이후에는 작업이 완료되면,
완료된 결과물(reulst
)에서 가져올 필드를 .
뒤에 적어준다. 나는 info_min_time필드를 가져올 것이라 위의 그림처럼 지정했다.
<done>
<set token="done_time">$result.info_min_time$</set>
</done>
다른 패널에서 이미 설정된 시간 토큰을 활용하고 싶을 때는 어떻게 해야할까?
검색 문에서 하위의 시간 범위 설정을 클릭하여, 토큰을 지정한다.
이후에 earliest, latest를 수동으로 지정해줄 수 있다.
이때는 $을 사용하지 않는다.
아래의 그림처럼, earliest, latest문자열을 그대로 사용해서 넣어줄 수 있다.
subsearch의 효과는 결과를 문자열로 ret해준다는 장점이 있다. 아래의 쿼리처럼 makeresults를 사용하면 2)와 같은 효과를 낸다고 보면 된다.
따라서 검색의 결과를 패널 내에서 재활용하여 시간을 사용할 수 있다는 장점이 있다. 필자의 경우 subsearch를 굉장히 많이 애용하는 편 이다.
index=_*
[| makeresults
| eval earliest_time = $done_time$
| eval latest_time = $epoch_time$]
<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>
끝이다!!!