2024년 3월 17일 일요일

Splunk 대시보드

엘라스틱은 대시보드 전체 차트가 하나의 시간 선택기를 공유하며, 임의 차트의 특정 시간 범위를 마우스 클릭(또는 드래그)을 통해 전체 차트에 적용할 수도 있다.


스플렁크는 약간 복잡한데, 일단 대시보드 전체 차트의 시간 범위를 동기화 하려면 '공유된 시간 선택기' 입력 사용이 필수.


대시보드 소스 원본을 보면 전체 차트가 공유된 시간 선택기의 토큰값을 사용하는 구조.
<form version="1.1" theme="light">
  <label>Windows Event2</label>
  <fieldset submitButton="false" autoRun="false">
    <input type="time" token="field1" searchWhenChanged="true">
      <label></label>
      <default>
        <earliest>-15m</earliest>
        <latest>now</latest>
      </default>
    </input>
  </fieldset>
  <row>
    <panel>
      <title>이벤트 발생 추이</title>
      <chart>
        <search>
          <query>index=winevent
| timechart count by EventCode useother=false</query>
          <earliest>$field1.earliest$</earliest>
          <latest>$field1.latest$</latest>
        </search>
        <option name="charting.chart">column</option>
        <option name="charting.chart.stackMode">stacked</option>
        <option name="charting.drilldown">all</option>
        <option name="height">222</option>
        <option name="refresh.display">progressbar</option>
</chart>
    </panel>
  </row>
  <row>
    <panel>
      <title>이벤트 유형 현황</title>
      <table>
        <search>
          <query>index=winevent
| stats count by EventCode, TaskCategory
| sort count, TaskCategory desc</query>
          <earliest>$field1.earliest$</earliest>
          <latest>$field1.latest$</latest>
          <sampleRatio>1</sampleRatio>
        </search>
        <option name="count">10</option>
        <option name="dataOverlayMode">none</option>
        <option name="drilldown">cell</option>
        <option name="percentagesRow">false</option>
        <option name="refresh.display">progressbar</option>
        <option name="rowNumbers">false</option>
        <option name="totalsRow">false</option>
        <option name="wrap">true</option>
      </table>
    </panel>
  </row>
</form>

이때 상위 차트 특정 시점 클릭 시

하위 차트 시간 범위를 클릭 시점으로 바꾸고 싶다면? 일단 클릭 지점의 시작/종료 시간값을 저장해주는 드릴다운 작업 추가.


이후 대시보드 소스에서 하위 차트 검색어 변경. 저장된 상위 차트의 클릭 시간값을 하위 차트 검색에 적용하는 방식.
<form version="1.1" theme="light">
  <label>Windows Event2</label>
  <fieldset submitButton="false" autoRun="false">
    <input type="time" token="field1" searchWhenChanged="true">
      <label></label>
      <default>
        <earliest>-15m</earliest>
        <latest>now</latest>
      </default>
    </input>
  </fieldset>
  <row>
    <panel>
      <title>이벤트 발생 추이</title>
      <chart>
        <search>
          <query>index=winevent
| timechart count by EventCode useother=false</query>
          <earliest>$field1.earliest$</earliest>
          <latest>$field1.latest$</latest>
        </search>
        <option name="charting.chart">column</option>
        <option name="charting.chart.stackMode">stacked</option>
        <option name="charting.drilldown">all</option>
        <option name="height">222</option>
        <option name="refresh.display">progressbar</option>
        <drilldown>
          <set token="start_time">$earliest$</set>
          <set token="end_time">$latest$</set>
        </drilldown>
      </chart>
    </panel>
  </row>
  <row>
    <panel>
      <title>이벤트 유형 현황</title>
      <table>
        <search>
          <query>index=winevent earliest=$start_time$ latest=$end_time$
| stats count by EventCode, TaskCategory
| sort count, TaskCategory desc</query>
          <earliest>$field1.earliest$</earliest>
          <latest>$field1.latest$</latest>
          <sampleRatio>1</sampleRatio>
        </search>
        <option name="count">10</option>
        <option name="dataOverlayMode">none</option>
        <option name="drilldown">cell</option>
        <option name="percentagesRow">false</option>
        <option name="refresh.display">progressbar</option>
        <option name="rowNumbers">false</option>
        <option name="totalsRow">false</option>
        <option name="wrap">true</option>
      </table>
    </panel>
  </row>
</form>

그런데 해당 작업은 최초 대시보드 실행 결과에는 적용되지 않는다. 처음 시작할 때는 저장된 시간값이 없기 때문.


상위 차트를 불러온 후, 해당 차트의 특정 시점을 클릭했을 때만 하위 차트를 불러올 수 있다는 얘기.


이때 첫 번째 해결책은 초기 시간값을 지정해주는 것.
<form version="1.1" theme="light">
   <init>        
    <set token="start_time">-15m</set>      
    <set token="end_time">now</set>    
  </init>
  <label>Windows Event2</label>
  <fieldset submitButton="false" autoRun="false">
    <input type="time" token="field1" searchWhenChanged="true">
      <label></label>
      <default>
        <earliest>-15m</earliest>
        <latest>now</latest>
      </default>
    </input>
  </fieldset>
  <row>
    <panel>
      <title>이벤트 발생 추이</title>
      <chart>
        <search>
          <query>index=winevent
| timechart count by EventCode useother=false</query>
          <earliest>$field1.earliest$</earliest>
          <latest>$field1.latest$</latest>
        </search>
        <option name="charting.chart">column</option>
        <option name="charting.chart.stackMode">stacked</option>
        <option name="charting.drilldown">all</option>
        <option name="height">222</option>
        <option name="refresh.display">progressbar</option>
        <drilldown>
          <set token="start_time">$earliest$</set>
          <set token="end_time">$latest$</set>
        </drilldown>
      </chart>
    </panel>
  </row>
  <row>
    <panel>
      <title>이벤트 유형 현황</title>
      <table>
        <search>
          <query>index=winevent earliest=$start_time$ latest=$end_time$
| stats count by EventCode, TaskCategory
| sort count, TaskCategory desc</query>
          <earliest>$field1.earliest$</earliest>
          <latest>$field1.latest$</latest>
          <sampleRatio>1</sampleRatio>
        </search>
        <option name="count">10</option>
        <option name="dataOverlayMode">none</option>
        <option name="drilldown">cell</option>
        <option name="percentagesRow">false</option>
        <option name="refresh.display">progressbar</option>
        <option name="rowNumbers">false</option>
        <option name="totalsRow">false</option>
        <option name="wrap">true</option>
      </table>
    </panel>
  </row>
</form>

이때 문제는 지정된 초기값 때문에 공유된 시간 선택기가 하위 차트에는 적용되지 않는다는 것이다. 시간 수정자(earliest, latest)가 시간 선택기보다 우선하기 때문.


두 번째 해결책은? 

시간 선택기와 드릴다운 작업으로 저장한 시간값을 모두 사용할 수 있는 방법은 의외로 간단하다. 토큰 이름을 통일하면 됨.
<form version="1.1" theme="light">
  <label>Windows Event2</label>
  <fieldset submitButton="false" autoRun="false">
    <input type="time" token="field1" searchWhenChanged="true">
      <label></label>
      <default>
        <earliest>-15m</earliest>
        <latest>now</latest>
      </default>
    </input>
  </fieldset>
  <row>
    <panel>
      <title>이벤트 발생 추이</title>
      <chart>
        <search>
          <query>index=winevent
| timechart count by EventCode useother=false</query>
          <earliest>$field1.earliest$</earliest>
          <latest>$field1.latest$</latest>
        </search>
        <option name="charting.chart">column</option>
        <option name="charting.chart.stackMode">stacked</option>
        <option name="charting.drilldown">all</option>
        <option name="height">222</option>
        <option name="refresh.display">progressbar</option>
        <drilldown>
          <set token="field1.earliest">$earliest$</set>
          <set token="field1.latest">$latest$</set>
        </drilldown>
      </chart>
    </panel>
  </row>
  <row>
    <panel>
      <title>이벤트 유형 현황</title>
      <table>
        <search>
          <query>index=winevent earliest=$field1.earliest$ latest=$field1.latest$
| stats count by EventCode, TaskCategory
| sort count, TaskCategory desc</query>
          <earliest>$field1.earliest$</earliest>
          <latest>$field1.latest$</latest>
          <sampleRatio>1</sampleRatio>
        </search>
        <option name="count">10</option>
        <option name="dataOverlayMode">none</option>
        <option name="drilldown">cell</option>
        <option name="percentagesRow">false</option>
        <option name="refresh.display">progressbar</option>
        <option name="rowNumbers">false</option>
        <option name="totalsRow">false</option>
        <option name="wrap">true</option>
      </table>
    </panel>
  </row>
</form>


그런데 선택 시간 해제는 안 되네(..)

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스