Splunk で 相関マトリックスを作るには?


はじめに

Splunk で相関マトリックスを作りたい! でも標準コマンドやグラフでは用意されていないですよね(もしあったらすみません)今回は相関マトリックスを作るための2つの手法を見つけたのでご紹介します。

手法1: MLTK + Algoを追加して利用する

こちらは、MLTK だけではアルゴリズムが足りず、追加のAppを入れます。

事前準備環境

(*) ちなみに3つ目のAppは Splunk8でも問題なく動作しております。

使い方

MLTKのアルゴリズムとして呼び出すので、fit の後に CorrelationMatrix とします。

| inputlookup diabetes.csv
| fit CorrelationMatrix *

色の付け方は、以下のようにヒートマップを選択します。

ヒートマップとしてはこれで十分かもしれませんが、もっと可視化して分析したいですよね。

手法2: seaborn の相関マトリックスを使う

そんなときに DLTK (DeepLearning Toolkit)を使うと、seabornを使った可視化ダッシュボードが Splunk上でできるというblogを見つけました。

完成したら、以下のようなイメージでダッシュボード上で可視化できます。

ということで早速使い方をみてみましょう。使うためにはちょっとした事前準備と工夫が必要です。

事前準備環境

DLTKのセットアップの仕方はこちらの記事をご覧ください。セットアップまででOKです。
https://qiita.com/maroon/items/5a8b027631a674d6d8be

DLTKの場合は、計算処理をコンテナ側で実施するため、コンテナを起動し、アルゴリズムとなる correlationmatrix.py を最初に作成しておく必要があります。 でも心配しないでください。すでにコードは用意されているので、コードを一度実行すればアルゴリズムは作成されます。あとは普通にSplunkから SPLを実行すればいいのです。 ただし可視化部分は seabornで作成したpng イメージをダッシュボードで表示するため、すこし工夫が必要です。

今回は、細かい仕組みは省いて、どう利用するかにフォーカスを当ててみたいと思います。

1) コンテナ起動

DLTKの場合、計算処理をコンテナ上で実行するため、起動しておく必要があります。起動は簡単です。
DLTKのContainers というタブに移動すると以下のような画面が表示されます。 DLTK3.2 の場合 Golden Image GPUというのがありますが、こちらが標準的な Docker Imageとして用意されているので、こちらを選択して、Startボタンで起動します。(これだけ)

初回は、このGolden Imageがダウンロードされて、起動するため少し時間がかかりますが、2回目からはすぐに起動できます。
(23GB 近くあるイメージなので、Disk容量などに注意!)

2) correlatonmatrix アルゴリズム作成

コンテナ起動したら、[JUPTER LAB] というボタンをクリックしてログインしてください。( Pass: Splunk4DeepLearning)

DLTKの場合、アルゴリズムを自分で作成します。ただしすでにコードはいくつか用意されているので、1から作る必要はありません。

correlationmatrix のコードは、githubからダウンロードする必要があります。
https://github.com/splunk/splunk-mltk-container-docker
ダウンロードしたら、その中に /notebook/correlationmatrix.ipynb というファイルがあるので、jupyternotebookにドラック&ドロップします。
( ver 3.2以降の新規インストールであれば最初から入っております。バージョンアップした場合などは古いvolumeが残っているため存在しない場合があります。その場合は上記の方法で取得ください)

念の為 Stagingから実行しておきます。

Splunk 上で、以下のSPLをコピペして実行してください。( lookupファイルの権限が Privateになっているので、MLTKのサーチで実行してください。もしくはGlobal 権限を与えるか)

| inputlookup diabetes.csv
| fit MLTKContainer mode=stage algo=correlationmatrix plot="matrix,pairplot" response from BMI age blood_pressure diabetes_pedigree glucose_concentration number_pregnant serum_insulin skin_thickness into app:diabetes_correlation

その後、jupyter notebook に戻って、先ほどのcorrelationmatrix を全て実行します。
以下のように、Runから [Run All Cells]を選択するといいでしょう。

エラーなく、最後までいけば成功です。これで correlationmatrix のコードがコンテナ上に作成されました。

3) Splunk上で correlationmatrix が動作するか確認。

以下のサンプルコードを使って、先ほど作成したアルゴリズムが動作するかみてみましょう。

| inputlookup churn.csv
| table "Day Calls" "Eve Calls" "Night Calls" "Intl Calls" "Churn?"
| fit MLTKContainer algo=correlationmatrix plot="matrix,pairplot" "Churn?" from * into correlation_churn

エラーなく、以下のように表示されれば成功です。

4) correlationmatrix の可視化

おまたせしました。ようやく可視化が出来ます。

仕組みとしては、上記の correlationmatrix が裏で seabornを使って可視化したものを imageとして保存しております。それを呼び出してダッシュボードで表示するという仕組みです。サンプルダッシュボードがありますので、そちらを複製して、利用することにします。

DTLKの 「例(Sample)」 - 「基本」 - 「Correlation Matrix and pair plot」 をクリック

ダッシュボードを複製して、適当な名前を作成します。

必要に応じて、権限を他のAppから参照できるようにしておいてください。

最後にダッシュボード内の SPLとトークンを修正します。

以下にように、「編集」ー「ソース」 から以下の2カ所を修正します。

これで保存すれば、OK!

上級者は、jupyternotebook のコードを編集すれば、他のseabornのオプションイメージも利用できます。

最後に

最初はちょっと面倒そうに見えますが、一度作ってしまうとあとはダッシュボード内の SPLを入れ替えるだけで再利用できます。
またこのようなイメージをダッシュボードに貼る方法も面白いですよね。

コンテナを利用することで、Splunkと計算ノードを分離出来るので、Splunk単体だとCPU/Memory などの制限に引っかかってしまうケースも多いですが、DLTKを使うことで回避することも可能です。

是非、お試しください。