前回 、Logstash を用いて、データの取り込みを行いました。
今回は、このデータを分析し、異常検知を行います。
① Index Patternの作成
まず、Index Pattern を作成します。
Index Pattern とは、複数の Index をまとめて扱うためのものであり、日付ごとに Index が作られる場合などに便利です。
また、Index を機械学習にかけるために、Index Pattern を作成する必要があります。
今回は 「sampledata_index」 という Index のみを扱うので、「sampledata_index」 という名前の Index Pattern を作成します。
(補足:日付ごとにIndexが作られる場合)
Temperature_20191224, Temperature_20191225, Temperature_20191226… のように Index が作られる場合、「Temperature_*」 という Index Pattern を作成すればよいです。
「*」 はワイルドカードであり、「Temperature_」 から始まるすべての Index が対象となります。
まず、左の機能一覧から Dev Tools を選択します。その後、Index Patterns、Create Index Pattern を選択します。
次に Step1 で Index Pattern 名を指定します。今回は 「sampledata_index」 を入力します。
次に Step2 で TimeFilter を指定します。これは時系列データを扱う際、どの項目を時間軸とするかを決めるものです。今回は 「@timestamp」 を選択します。
② 異常検知の実行
いよいよ投入したデータを異常検知にかけていきます。
まず、左の機能一覧から Machine Learning を選択します。
次に、Create new job を選択します。
次に、Index Pattern を入力する部分に 「sampledata_index」 を入力します。
次に、異常検知アルゴリズムを選択します。
今回は 「Single metric」 を選択します。
次に、詳細なジョブ設定を行います。
今回は以下の項目を設定しました。
- Bucket span
「どのくらいの期間をひとまとめにするか」を指定する項目です。
例えばこれを 7d(7日間) にした場合、7 日間のデータをひとまとめにして、学習・推定を行います。
今回は 7d を指定しました。
(Estimate bucket span という機能があり、これを実行することにより Bucket span を Elasticsearch が自動で推定します。)
- Aggregation
「Bucket span で選んだ期間のデータをどう扱うか」を指定する項目です。
今回は「Max」を指定しました。これは期間の値の最大で学習・推定を行います。
その他に以下のような項目があります。
項目 | データの扱い方 |
Sum | 期間の値を合計した数値で学習・推定を行います。 |
Count | 期間のデータ個数で学習・推定を行います。 |
Min | 期間の値で学習・推定を行います。 |
- Field
「Indexのカラムのうち、どのカラムに対して学習を行うか」を指定する項目です。
今回は「Value」を指定しました。
また、画面の右上から学習の対象とする期間を選ぶことができます。
今回は全期間を選択しました。
初期状態だと 15 分になっており、混乱の原因となるので注意してください!
上記の設定を行った後、「Create Job」 を実行します。
③ ジョブ実行結果の確認
実行後の画面が以下となります。
Index に入っているデータがグラフとして表示され、「異常である」と推定された期間には縦線が入っています。この縦線は異常度が高いほど色が明るくなっています。
グラフを眺めてみると、数値が急に大きくなった部分に縦線が入っているのが確認できます。
また、Elasticsearch が正常値と推定した範囲には薄い水色で色付けがされています。
この範囲から出た数値が異常だと判断されます。
以上の手順により、機械学習を用いた異常検知をすることができます。
機械学習の知識がなくても簡単に異常検知をすることができるため、ぜひ試してみてください。
次回は、異常検知した時にリアルタイムに通知を送信する機能、またダッシュボードの画像を取得する機能について説明します。
<前回までの記事>
Elastic Stack を使った予兆検知結果の可視化 〜概要と環境構築〜
Elastic Stack を使った予兆検知結果の可視化 〜Logstash を用いた Elasticsearch へのデータの取り込み〜
<次の記事>
Elastic Stack を使った予兆検知結果の可視化 〜検知した異常の通知〜