Splunkのサーチ結果をIndexに保存して累積結果をチェック！


## 概要

以前の記事[Splunk Curl App で Qiita のページview数をチェックしてみた](https://qiita.com/maroon/items/266e74bbdc39bfe91e9f)で、curlコマンドを使って、リモートのデータを取得して表示することはできたのですが、この結果はどこにも保存されないため結果の推移がチェックできません

そこで以下の流れで推移をチェックしたいと思います
1. サーチ結果をIndexに取り込む（追記していくイメージ) 仕組みを追加
2. サーチをスケジュール設定をして、１日1回実行する
3. 取り込んだIndexをサーチして推移を確認する


## 1. サーチ結果をIndexに取り込む（追記していくイメージ) 仕組みを追加

サーチ結果をSplunk内に保存する方法として主に以下の３つがあると思われます

a. CSVファイルへの保存 ( outputcsv / outputlookup などを利用) 
b. KV Store への保存 ( outputlookup を利用)
c. Index への保存 (collect を利用)
(*) どの方法も課金対象外なのでご安心をw 

今回は Indexへの保存に挑戦してみます。

### 1-1. Indexへの保存方法

その前に Indexとは Splunk 内にあるデータを保存する先の事で、Index毎にアクセス制御したりデータの保存期間を設定したりできます。今回は新規にIndexを作成して、そこに保存する事にします

利用方法は簡単で２ステップのみ

1. 保存先の index をあらかじめ作成する
2. 保存したいサーチの最後に | collect index="作成したindex名"  と指定する

collect コマンドが index に保存するためのコマンドになります
collect コマンドにはオプションがありますので、詳細はこちらをご覧ください
https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Collect

注意) sourcetypeをデフォルトの stash から変更すると、ライセンスの課金対象になります!
通常はcollectコマンドはSummaryIndex というサーチの高速化のための機能です


### 1-2. 新規 Index の作成

「設定」 - 「インデックス」　- 「新規インデックス作成」　より、" qiita-viewcount" というインデックスを作成します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/2069e8a3-ed5b-2692-7ddb-92528d1b5c4f.png)


### 1-3.  Index にサーチ結果を保存する +  保存時間のフィールドを追加する

最後の行に |collect コマンドを指定している箇所が、前回のサーチに追加した箇所です（これだけ）

```
| curl  url="https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=100"  headers="{'Authorization': 'Bearer <<取得した Tokenを入力>>'}"  output=text
| makemv delim="rendered_body" reponse 
| mvexpand reponse
| rex field=reponse "\"id\":\"(?<id>[0-9a-z]+)"
| table id
| where isnotnull(id)
| map maxsearches=50 search="| curl  url=\"https://qiita.com/api/v2/items/$id$\" headers=\"{'Authorization': 'Bearer <<取得した Tokenを入力>>'}\"  output=json | table id title created_at page_views_count likes_count"
| collect index=qiita-viewcount 
```

|collect コマンドはデフォルトで保存した時間を _timeに追加されるのですが、info_min_time　が適用されるため、サーチ範囲が 24時間　とかしていると、24時間前の時間が _time に適用されてしまいます。
レポート実行時間とサーチ範囲をうまく調整すればいいのですが、今回は time フィールドをあらかじめ作って対応することにしました。

```:最後のcollectの前に追加
| eval time = strftime(now(),"%Y/%m/%d:%H:%M")
| table id time title page_views_count likes_count 
| collect index=qiita-viewcount addtime=false
```

### 1.4 保存したデータを確認してみる

ちゃんと保存できてるか確認してみましょう
通常のサーチと同じコマンドが利用できます!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/90f0053e-0513-61f5-c42c-3aa84ed68460.png)

無事に取り込めてますね

## 2.  サーチをスケジュール設定をして、１日1回実行する

それでは、このコマンドをスケジュール実行するように設定しておきます。スケジュール設定のためにはサーチをレポートとして保存し、レポートをスケジュール実行するように設定します。

例えば、今回は毎日 2:00 実行に設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/af900c8b-21b4-0ea8-0d51-0778e5fe8331.png)


完了です


## 3. 最後に取り込んだIndexをサーチして、推移を確認する

それでは、１週間保存した結果を使って、view の推移をみてみたいと思います

```
index="qiita-viewcount" 
| eval date=strptime(time,"%Y/%m/%d:%H:%M")
| eval date=strftime(date,"%Y/%m/%d")
| xyseries date title page_views_count
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/0e713c55-5c71-9366-8490-206f078de7f3.png)

推移が見えると、色々な事が考察できて楽しいですよね

如何でしたか？　collectコマンド。簡単にできて便利な機能です。ただしストレージ容量だけにはご注意を