post Image
Splunkと機械学習(基礎編)

Splunkにあるデータを有効利用しよう

Splunkといえばデータを検索・分析・可視化するソフトウェアとして有名ですね。

IT運用管理、セキュリティ・コンプライアンス、DevOps、ビジネス分析からIoTまで、様々な使い方に応用できます。
普段吐き捨てているようなログも、Splunkにかければ問題をいち早く見つけて障害を予防したり、今までトラブルシューティングではgrepに頼っていたのが、Splunkを活用することで問題解決時間を90%短縮したという事例もあります。

さて、今回は「分析」について少しだけもう少し踏み込んでみたいと思います。
Splunkに取り込んだデータを機械学習にかけて、様々な要因から潜在的な問題を見つけよう、異常を検知しようというものになります。
それを実現するのが Machine Learning Toolkit というAppです。

そもそもAppってナニ?

少し話がそれますが、Splunkには様々なオンラインコミュニティがあります。
Splunk Answersブログドキュメンテーション 等々ありますが、詳細はまた別の機会に。

これらコミュニティの中でも、1,000種類以上ものAppやAdd-onが提供されている Splunkbase というプラットフォームがあります。

App StoreとかGoogle Playのようなもので、こちらに公開されているAppをSplunk環境にインストールすることで、ダッシュボードをイチから構築することなくすぐに使えたり、ベンダーごとにフォーマットが異なるログをカンタンに取り込むことができます。

そういったPrebuiltのダッシュボードや設定ファイル、スクリプト等が入っているのがAppです。

ほとんどのAppは無償で提供されていて、課金なしで使うことができます。(例外もあります)

Machine Learning Toolkit (aka MLTK)

その中でも人気なAppが Machine Learning Toolkit と呼ばれるもので、これを使うことでSplunkで検索したデータから機械学習をシームレスに使うことができる、というものです。

略してMLTKです。

無償です。

つまり、MLTKはタダで使えます。

インストール

まずは Splunkbase から Machine Learning Toolkit をお手元のSplunk環境にインストールします。
Screen Shot 2017-04-19 1.40.46 PM.png

他に、Python for Scientific Computing (for XXXX) をインストールします。これはOSごとに異なるので、SplunkがインストールされているOSに合わせて選びましょう。
Screen Shot 2017-04-19 1.41.12 PM.png

この中にはscikit-learnやpandas、SciPyといったPythonライブラリが入っています。
あとはSplunkを再起動すれば完了です。

使ってみよう

Splunk環境

今回の環境は↓です。バージョンによっては見え方やコマンドに多少の違いがありますので、ご了承ください。
Splunk Enterprise 6.5.2
Machine Learning Toolkit 2.1.0

MLTK Appの中身

Splunkにログインすると、Launcher画面の左側にMachine Learning Toolkitのアイコンができています。
Screen Shot 2017-04-19 2.40.08 PM.png
↑こんなのです。

ここにアクセスすると、ショウケースがいくつか表示されます。
Screen Shot 2017-04-19 2.43.13 PM.png

  • Predict Numeric Fields = 線形回帰(様々なフィールドの相関から数値フィールドの値を予測)
  • Predict Categorical Fields = 分類(True/Falseといった値を持つカテゴリカルフィールドの値を予測)
  • Detect Numeric Outliers = 時系列データの異常値を検出
  • Detect Categorical Outliers = 数値以外の異常値を検出
  • Forecast Time Series = 時系列データの将来予測
  • Cluster Numeric Events = クラスター分析

それぞれの項目にIT/セキュリティ/ビジネス/IoTのサンプルデータと事例があります。
今回はPredict Numeric FieldsPredict Categorical Fieldsを見てみましょう。

Predict Numeric Fields

数値データの学習モデルを作成し、線形回帰等のアルゴリズムでターゲットの数値を予測します。

それでは、早速Predict Server Power Consumptionにアクセスしてみます。
サーバーの消費電力と学習用の参考データ(CPU使用率やディスクI/O等)がserver_power.csvに入っています。

Screen Shot 2017-04-19 3.50.10 PM.png
↑SPL (Search Process Language) を入力してデータの検索・整形をします。

Screen Shot 2017-04-19 3.50.48 PM.png

  • Algorithm -> アルゴリズムを選択(サポートしているアルゴリズムはこちら
  • Field to predict -> 予測対象のフィールドを選択
  • Fields to use for predicting -> 学習用データのフィールドを指定
  • Split for training / test -> 学習用データとモデル適用データの比率を調整

Screen Shot 2017-04-19 4.11.16 PM.png
↑緑色のFit Modelボタンをポチッと。 すると、予測結果が下の方に表やグラフで表示されます。

ここでは、MLTK独自のカスタムコマンドsampleコマンドやfitコマンドを駆使しています。
これらのコマンドの詳しい使い方はまた別の機会に。

ずっと下にスクロールすると、R^2やRMSEといった数値が出てきます。
Screen Shot 2017-04-19 4.37.10 PM.png

ここで、それぞれの計算方法は↓

R^2\quad=\quad1\quad-\quad\frac{\sum_{i=1}^{N}{\bigl(x_i-y_i\bigr)}^2}{\sum_{i=1}^{N}{\bigl(x_i-\bar{x}_i\bigr)}^2}

xi: 実測値
x~1: 実測値の平均
yi: 予測値

R^2は実測と予測の差を、実測の偏差で割って計算しています。
つまり、この値が1に近いほど予測の精度が高いと言えます。

一方、RMSEの計算方法は↓

RMSE\quad=\quad\sqrt{\frac{1}{N}\sum_{i=1}^{N}{\bigl(x_i-y_i\bigr)}^2}

xi: 実測値
yi: 予測値

RMSEは実測と予測の偏差となり、0に近いほど予測の精度が高いということになります。

これらはSplunkのマクロで計算されており、[設定] > [詳細サーチ] > [サーチマクロ] からregressionstatisticsで確認できます。
このマクロの使い方も、後日実践編で解説したいと思います。

ということで、何度も学習用データやアルゴリズムを変えてみながら、R^2が1に近づくように、RMSEがゼロに近づくように、モデルを作成するのが肝要です。
失敗を恐れずに、めげずにトライ&エラーすることが大事です。

Predict Categorical Fields

True/FalseやSuites/Shoes/Accessoryといったカテゴリ系データの学習モデルを作成して予測します。

MLTKショウケースの中から、Predict Hard Drive Failureにアクセスしてみましょう。
HDDの故障有無を発見するためのデータとモデルが準備されています。
Screen Shot 2017-04-19 5.40.29 PM.png

前項のPredict Numeric Fieldsと基本的には同じです。
こちらはDiskFailureというフィールドでディスクの故障有無をYes/Noで記録されていて、これを予測するというものになります。

今回は数値データではないので、扱うアルゴリズムが変わってきます。
利用可能なアルゴリズムはこちらをご参照ください。

Screen Shot 2017-04-19 5.49.00 PM.png

画面下部にはPrecision、Recall、Accuracy、F1といった値が出ています。
PrecisionはFalse Positiveの比率、RecallはFalse Negativeの比率で、1に近づくほど高精度ということになります。

計算式は↓

Precision = \frac{TP}{TP + FP}
Recall = \frac{TP}{TP + FN}
Accuracy = \frac{TP + TN}{TP + TN + FP + FN}

Precisionではノイズの度合いを検査し、Recallでは検知漏れを検査することができますね。
これはclassificationstatisticsというマクロで実装されています。

また、その隣のClassification Resultsは行ごとに実測値が、列ごとに予測値が入ったマトリックスとなっています。
これは、confusionmatrixというマクロで実装されています。

マクロの使い方はごじt (ry

また、数値フィールドをカテゴリ系フィールドにするのに、Splunkのbinコマンドも活用するといいでしょう。
コマンドの使いk (ry

ちなみに、MLTK 2.1.0ではカテゴリ系データのバリエーションとして、1フィールドの中に100種類のデータ(カテゴリ)が上限となるようです。

これを応用すれば、マルウェア検知といったセキュリティ対策にも使えそうですね。

最後に

長々と書きましたが、触れたのはMLTKのほんの一部で、且つ、基本的な使い方に留まっています。

実際にSplunkにインデックスして監視対象としているログやメトリクス、諸々のデータにMLTKを適用して分析・予測・発見・検知してレポートやアラートを作成したり、ダッシュボードで可視化するには、途中で出てきたコマンドやマクロを活用する必要があります。

遠くない将来に実践編を書こうかと思います。
要望あるのかなぁ…

2017.05.12追記
実践編書きました → http://qiita.com/kikeyama/items/d3e5454a80b4dbd5941f


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。