SplunkでTimechartのドリルダウンのカスタマイズ

Splunkで作ったチャートをクリックすると、デフォルトでは検索画面にドリルダウンできます。ドリルダウンの遷移先のURLを設定すれば、検索画面ではなく別のダッシュボードを表示できます。URLのクエリ文字列をうまくコントロールすることによって、クリックされたところの情報で遷移先のダッシュボードの検索条件を絞ることができます。

たとえば、下記のようなウェブアクセスログがあるとします。web.csvに保存します。
`access_time,user,url
2015/1/15 10:01:02,user0089,http://domain1.co.jp
2015/1/15 11:16:02,user0003,http://domain4.co.jp
2015/1/15 09:21:02,user0142,http://domain7.co.jp
2015/1/15 09:34:02,user0031,http://domain2.co.jp
2015/1/15 12:51:02,user0524,http://domain9.co.jp`

Splunkのトップページを開いてデータ追加をクリックします。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/43b9d67f-266a-1402-6ca0-b7debfe75f94.png)

データの追加画面でアップロードをクリックします。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/aa20f5bd-6131-e0ac-5441-2c8022b44e62.png)

ファイル選択画面で、下記の区域にweb.csvをダラッグ＆ドロップします。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/aea91cd3-1076-571b-2cc2-ff8b30e87915.png)

アップロードが完了したら、下記のような完了画面が表示されます。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/3fb75b5d-4870-ce94-747c-a2fbd1f542b0.png)

画面の上側の「次へ」ボタンをクリックして次に進みます。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/f8eabbf2-beb9-ece1-8c41-4fe586bc0781.png)

拡張子は.csvですからCSVというビルドインのSourcetypeに自動的になって、下記のように各列を識別できたことを確認できます。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/1fc78cb3-168c-e2ec-c5a0-a018dc07ce75.png)

検索画面で下記のTimechartコマンドを入力して、1時間単位のユーザ別のアクセス数の棒チャートを描画できます。
`index="test" | timechart span=1h count by user`
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/67de57b2-b344-d943-012c-adf2b3cc6b17.png)

棒チャートのデフォルトはスタックなしですから、スタックに変更する必要があります。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/6839d0dd-47ff-1b7e-5933-4b166894d346.png)

この画面を再利用するために、ダッシュボードとして保存します。まず、画面右上の保存メニューのダッシュボードをクリックします。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/ae1650f7-7c2f-0eaa-bd3b-366a9a43cb90.png)

表示された保存ダイアログに「access_chart」というID（後程URLの一部となる）を入力します。権限のところ「App内で共有」を選択し、保存ボタンを押します。


![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/857eb460-2458-43d7-6a44-36308aa8fe0c.png)

なにも設定しなくても、チャートから検索画面までドリルダウンできます。たとえば、3番目の棒をクリックすると、下記のようにuser0003を条件とする検索結果が表示されます。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/f4498a5c-23a3-cb59-8e1f-8b96672baf61.png)

生ログそのまま表示されるので、見づらいところがあります。下記のようなテーブルで表示したほうが分かりやすいかもしれません。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/a521e439-7bbc-0875-db64-c435e1a4a3ab.png)

チャートだけではなくテーブルもダッシュボードとして保存できるので、下記のように「access_url」というIDでこのテーブル画面を保存します。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/c1719265-0da4-fcaa-a35c-eb66a53892e6.png)


***


これで遷移元「access_chart」と遷移先「access_url」のダッシュボートが揃ったので、棒チャートをクリックすると、テーブル画面に移すようにソースを編集します。

まず、ダッシュボードメニューをクリックします。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/b46356af-84ca-c776-4f52-cbc0bb71446e.png)

次は、表示されたダッシュボード一覧から遷移元の「access_chart」をクリックします。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/ac877452-33f3-b5ec-4efe-aaf54098c587.png)

表示された画面の右上の編集メニューから「ソースの編集」をクリックします。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/ffacec30-bc10-abee-1900-e6b82763b9b6.png)

XML編集画面が表示されます。ソースコード後にある</chart>タグの前に<drilldown>のタグを挿入し、画面右下の保存ボタンを押します。
`<drilldown>
  <link>
   /app/search/access_url
  </link>
</drilldown>`

![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/5cfea58e-914f-c113-96e8-e7846b22d070.png)

保存すると、「access_chart」画面が再び表示されます。もう一度三番目の棒をクリックすると、「access_url」が表示されることを確認できます。

***

しかし、１番目、2番目の棒をクリックしても、同じuser0003のテーブル画面が表示されます。なぜならば、access_urlの検索文にuser0003が固定で書いているからです。ここをクリックされたユーザと連動させる必要があります。

「access_url」画面の右上の編集メニューから「パネルの編集」をクリックします。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/664396db-d03f-a232-3dcd-85c9f439bd54.png)

表示されたパネル編集画面で「入力の追加」メニューから「テキスト」を選択します。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/6f25bb35-d0f2-c772-b846-9e80d9a96fd0.png)


ダッシュボードの左上にテキストフィルドが新たに追加されます。そこの鉛筆アイコンをクリックしてテキストフィルドを設定できます。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/de3a8c18-6b3d-3816-485f-1c172945d97a.png)

下記のように各項目を設定し、適用ボタンを押して保存します。
トークンは変数です。テキストボックスに入力された値はuserという変数に保存され、\$user\$という形で利用できます。
トークンプリフィックス、トークンサフィックスとデフォルトが組み合わせると、「user="*"」というディフォルトの検索文字となります。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/0e8f0725-77e3-8ba8-8212-3e66c3fe062c.png)

テキストフィルドを設定した後、画面右側の虫眼鏡アイコンをクリックし、「サーチ文字列の編集」を選択します。
![a.png](https://qiita-image-store.s3.amazonaws.com/0/65589/9acb1eca-4040-1e35-144e-42e20a71d1a7.png)

表示されたサーチの編集ダイアログで「user=user0003」の部分を削除して、「$user$」に変更し、保存します。
変更前：`index="test"  user=user0003 | table access_time, url`
変更後：`index="test"  $user$ | table access_time, url`

「access_url」編集画面の右上の完了ボタンを押して通常モードに戻します。

***

遷移元の「access_chart」画面に戻して、編集メニューからソースの編集をクリックします。XML編集画面で、画面下部の<drilldown>のURLの後ろにクリックしたユーザの情報を追加します。
変更前：`/app/search/access_url`
変更後：`/app/search/access_url?form.user=$click.name2$`

追加された部分を少し説明する必要があります。
「form.user」とは、遷移先のformにuserというオークンを持つフィルドの値を設定する意味です。
「\$click.name2\$」とは、棒チャートのX軸の値を取得する意味です。
他にも、「\$click.value2\$」＝棒の高さ、即ちY軸の値。
「\$click.name\$」＝_timeの固定値。
「\$click.value\$」＝クリックされた棒の日時。

修正を保存して、棒をクリックすると、「access_url」画面に移し、クリックされたユーザの名前がテキストボックスに表示され、テーブルにそのユーザのアクセスログが表示されることを確認できます。