「Prelertのベータ版」として提供していた機械学習の機能は、Machine Learningとして提供を開始しました。詳しくはこちらのエントリをご覧ください。
3月7日からサンフランシスコで開催したElastic{ON}17のOpening Keynoteで、Machine Learningを発表しました。この製品は、昨年買収したPrelertの技術を元にしており、現在はベータ版としてダウンロードすることが可能です。Machine Learningは、今後数カ月以内にリリースされるElastic Stack/X-Packの5.4に含まれる予定ですが、それまでは、ぜひこのベータ版をお試しください。
ダウンロード
Prelertのダウンロードページを開き、必要事項を入力してSubmitボタンを押すと、インストーラーをダウンロードすることが出来ます。また、登録したメールアドレスにライセンスキーが送られます。
インストール
ダウンロードしたインストーラーを動作対象の環境にコピーします。必要に応じて実行権限を付与し、実行します。
$ chmod +x prelert_engine_2.1.2_release_linux_64bit.bin
$ ./prelert_engine_2.1.2_release_linux_64bit.bin
表示されるメッセージに従い、必要な情報を入力します。
取得したライセンスキーを入力します。
Please enter the license key provided by Prelert []:
インストール先のディレクトリを指定します。インストーラーを実行しているユーザーに、必要なアクセス権があることを確認ください。
Please enter the top level Prelert Engine installation directory [/opt/prelert/prelert_home]:
すでにElasticsearchやKibanaが動作している環境にインストールを行う場合には、Y
を入力し、ポート番号の設定などを行います。そうでない場合には、Return
キーを押して継続します。このインストーラーには、ElasticsearchとKibanaのインスタンスが含まれています。
Would you like to configure advanced options? [N]:
以下の質問には、N
を入力して、インストーラーを終了します。
Would you like to start the Prelert Engine now? [Y]:
続いて、Kibanaがバインドするネットワークインタフェイスの設定を行います。テキストエディタで、Prelertをインストールしたディレクトリ以下のcots/kibana/config/kibana.yml
を開きます。任意の場所にserver.host
の設定を加えます。localhostのみからアクセスする場合には不要です。
server.host: "XXX.XXX.XXX.XXX"
Senseと、Timelion Pluginをインストールします。以下のコマンドを実行します。
$ cots/kibana/bin/kibana plugin --install elastic/sense
$ cots/kibana/bin/kibana plugin --install elastic/timelion
起動と終了
Prelertのエンジン、Elasticsearch、Kibanaを起動するには、以下の通りスクリプトを実行します。
$ bin/prelert_startup.sh
起動が終了したらブラウザで、http://IP_ADDR:5601
を開いてください。KibanaのPlugin ChooserよりPrelertを選択すると、Prelertのコンソールが表示されます。
なお、終了するには、以下のスクリプトを実行します。
$ bin/prelert_shutdown.sh
サンプルデータの入力
サンプルデータを入手し、加工します。
$ curl -O http://s3.amazonaws.com/prelert_demo/farequote.csv
$ tail -n +2 farequote.csv | awk 'BEGIN{FS = ","}{print "{ \"index\" : { \"_index\" : \"farequote\", \"_type\" : \"metric\" } }\n{ \"@timestamp\" : \""$1"\", \"airline\": \""$2"\", \"responsetime\":" $3 "}" }' > bulk.txt
Senseからmappingを作成します。
PUT farequote
{
"mappings": {
"metric": {
"properties": {
"@timestamp": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ssZ"
},
"airline": {
"type": "string",
"index": "not_analyzed"
},
"responsetime": {
"type": "float"
}
}
}
},
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "0"
}
}
}
サンプルデータをインポートします。
$ curl -XPOST localhost:9200/_bulk --data-binary @bulk.txt
Jobの作成
Prelertのコンソールから Create new job ボタンを押して、新しいJobを作成します。データソースとして Elasticsearch server を選択します。Elasticsearch server address に http://localhost:9200
、Choose index from list から、farequote
を選択します。Next ボタンを押します。
Job Details の Name に、farequote
と入力します。Analysis Configuration を開きます。bucketSpan を 1 hour
に設定します。続いて +Add Detector を押します。次の通り入力したら、Add ボタンで Detector の設定を完了します。
- function:
metric
- fieldName:
responsetime
- byFieldName:
airline
Influencers の airline
をチェックします。
Edit JSON タブを開き、以下の設定を JSON のルート構造の直下に加えます。
"modelDebugConfig": {
"writeTo": "DATA_STORE",
"boundsPercentile": 95
}
Save ボタンを押します。
Saving new job と表示されたら、Start scheduler ボタンを押します。次の画面で Start ボタンを押すと学習と異常の検知が始まります。
結果の確認
Actions からResultsボタンを押すと、Summary view が表示されます。検知された異常の部分をクリックすると、右側に詳細が表示されます。 Open explorer ボタンを押すと、設定した Detector ごとの異常が表示されます。
Timelionでモデルを視覚的に確認する
Kibanaの Settings > Objects から、Export Everything を実行します。
Senseで、以下のリクエストを実行します。
DELETE .kibana
PUT .kibana
Kibanaの Settings > Indices から、 prelertresults-*
とprelert-int
の Index pattern を再作成します。Settings > Objects から、Export した Dashboard と、Visualization を Import します。
Prelertが作成したモデルを表示するには、以下の式をTimelionで実行します。
.es(index=prelertresults-farequote,q=airline:AAL,metric=avg:debugUpper).lines(0,10).color(lightblue) .es(index=prelertresults-farequote,q=airline:AAL,metric=avg:debugLower).lines(0,10).color(white) .es(index=prelertresults-farequote,q=airline:AAL,metric=avg:actual).color(blue)
まとめ
皆様の環境でも異常が検知できましたでしょうか。試用期間の延長が必要な場合には、こちらよりお問い合わせください。Elastic{ON}17では、異常検知の仕組みなどについても紹介しました。こちらの動画をぜひご覧いただき、リリースまでに理解を深めていただければと思います。