2017年3月22日 エンジニアリング

Prelertのベータ版でMachine Learningを体験する

著者 Kosho Owa (JP)

「Prelertのベータ版」として提供していた機械学習の機能は、Machine Learningとして提供を開始しました。詳しくはこちらのエントリをご覧ください。


3月7日からサンフランシスコで開催したElastic{ON}17Opening 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 addresshttp://localhost:9200Choose index from list から、farequoteを選択します。Next ボタンを押します。

Create New Job

Job DetailsName に、farequoteと入力します。Analysis Configuration を開きます。bucketSpan1 hour に設定します。続いて +Add Detector を押します。次の通り入力したら、Add ボタンで Detector の設定を完了します。

  • function: metric
  • fieldName: responsetime
  • byFieldName: airline

Add New Detector

Influencersairline をチェックします。

Analysis Configuration

Edit JSON タブを開き、以下の設定を JSON のルート構造の直下に加えます。

"modelDebugConfig": {
  "writeTo": "DATA_STORE",
  "boundsPercentile": 95
}

Edit JSON

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)

Timelion

まとめ

皆様の環境でも異常が検知できましたでしょうか。試用期間の延長が必要な場合には、こちらよりお問い合わせください。Elastic{ON}17では、異常検知の仕組みなどについても紹介しました。こちらの動画をぜひご覧いただき、リリースまでに理解を深めていただければと思います。