読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Prelertでプログラミングレスな異常検知に挑戦! Part2

Elasticsearch Prelert

こんにちは!@です。

前回はPrelertを使って、簡単に異常検知を行ってみました!
Prelert自身の説明や画面の説明はまず、こちらを読んでみてください!
acro-engineer.hatenablog.com

前回の記事ではPrelertの基本的な使い方を紹介しましたが、
紹介しきれなかった魅力的な機能があります。それがinfluencer検出機能です。
今回は公式サイトのサンプルを使い、このinfluencer検出機能を実際に使ってみます。

influencer検出機能とは

influencer検出機能はデータ群の異常とその要因を示す機能です。
この機能のうれしいところを、考えられるユースケースと共に紹介します。

Case1 不正取引の検出

次のようなニュースがありました。

www.itmedia.co.jp

1日の中で数多くの取引がある中、不正な取引を見つけることは非常に難しいです。

Prelertのinfluencer機能を利用することで、
その膨大な取引データの中から異常な取引があったことを検知するだけでなく、
異常を起こしたデータ(もしくはデータ群)を見つけ出すことができそうです。

Case2 システムの監視

システムの障害が発生すると損失が発生します。
次の記事によれば、国内企業一社あたり約2億1900万円の損失がシステム障害により発生しています。

www.ipa.go.jp

取得できる全ての情報を監視することは非常に難しいです。
システムから取得できる情報が膨大であることがその要因の一つとして、挙げられます。

Prelertのinfluencer検出機能を使えば、収集したメトリクスから、
システムの異常をいち早く見抜くことができそうです。

Case3 テレマティクス

自動車盗難の被害者に10件中2件しか自動車が戻ってこないことについて次の記事に掲載されています。

STOP THE 自動車盗難 自動車盗難の現状

自動車が盗難されるとGPSデータは通常の利用時に取得できるデータと
異なる傾向のデータを取得できそうです。
Prelertのinfluencer検出機能を使って、普段と異なる振る舞いの検知をし、
盗難車を発見することができそうです。

Influencer検出機能を使ってみる

データの説明

今回、利用するのは公式サイトWebサービスのログデータになります。

ログの例は次のとおりです。

2016/04/04 00:00:00 INFO  [http-8680]: FareQuoteImpl - FareQuoteImpl.getFare(AAL): exiting: 132.2046
2016/04/04 00:00:00 INFO  [http-8680]: FareQuoteImpl - FareQuoteImpl.getFare(JZA): exiting: 990.4628
2016/04/04 00:00:00 INFO  [http-8680]: FareQuoteImpl - FareQuoteImpl.getFare(JBU): exiting: 877.5927

今回、サーバのアクセスが急増していると仮定します。このアクセス急増の原因は複数、考えられます。
例えば、キャンペーンを打って同じページにアクセスが集中した、
あるいは、同じ人が目的を持って攻撃してきたのか、更に、特定のサーバにアクセスが偏ってしまったのか・・・。

このデータからアクセスの急増があるのかどうか、
そして、もし急増しているなら、その要因まで辿ってみたいと思います!

データの投入方法

データの入手方法を説明します。

公式サイトからデータをダウンロードして入手します。
ダウンロードしたファイルの中にLogstashとその設定ファイルが含まれています。
それを使うことで、Elasticsearchに投入できます。

データの投入はダウンロードファイルに含まれている「README.TXT」の指示に従ってできます。
「README.TXT」のcurlコマンドのポート番号や「logstash-farequote.conf」の
Elasticsearchのポート番号が9400番になっていることに注意が必要です。

Elasticsearchをデフォルトの設定で起動するとポート番号が9200番で起動します。
そのため、Elasticsearchのポート番号がcurlやLogstashで使用するポート番号と合わず、投入が失敗します。

また、Logstashの設定に書いてあるファイルパスを自分の環境に合わせて書き換える必要があります。

Jobの設定

Prelertのinfluencer検出機能を使って要因を調査しましょう。
まずは検索対象のindexとして「farequote」を選択します。

f:id:acro-engineer:20161022142014j:plain

次の画面の「name」と「description」は今回のindexと同じ「farequote」を入力します。

f:id:acro-engineer:20161022142020j:plain

「function」の項目は「count」、「byFieldName」の項目は「airline」を選択します。
これは、「airline」ごとに異常検知を行う設定です。
このように設定することで、どの「airline」のアクセス回数が急激に変化したかわかります。

f:id:acro-engineer:20161022142026j:plain

次に「bucketspan」を30minutesに設定します。
そしてここが今回の肝です!influencersを設定します。
今回は@version以外を選択します。

f:id:acro-engineer:20161119170827j:plain

最後にjobをSaveし、起動します。

Influencer検出機能の結果

Summary View

画像にある赤色のセルは異常度が高い箇所を示しています。

f:id:acro-engineer:20161119170945j:plain

また、次の画像はinfluencer検出機能の結果を示しています。
赤いセルが画像内の「AAL」、「American Airlines」の4月6日の12:00過ぎに見られます。
これは「AAL」、「American Airlines」の値が4月6日12:00過ぎに異常の要因として
検知されていることを示しています。

f:id:acro-engineer:20161119170952j:plain

Exproler

「Exproler」画面はSummaryで確認した異常傾向の詳細を確認できます。

「Anomalies」の項目は検出された要因(found for、influenced by)やその時間を
ジャーナル形式で表示できます。
「Anomalies」からは、「airline」と「name」属性ともに同じ箇所で判定できていることを確認できます。

f:id:acro-engineer:20161119171000j:plain

では、「AAL」と「American Airlines」のアクセス回数が実際にどうだったかを見てみましょう。

実際にどうだったのか

kibanaのVisualizationを使って次のグラフを書いてみました。
横軸を時刻(「@timestamp」)、縦軸がデータ数、それを「airline」属性で分割したグラフです。

f:id:acro-engineer:20161119181838j:plain

AAL」が16:00付近に増加していることがグラフを見てわかります。

また、「American Airlines」も同様に可視化してみました。
「name」属性でアクセス数を表示してみます。

f:id:acro-engineer:20161119181907j:plain

あ、あれ、名前が違うだけで同じグラフが見えますね。
そして、Prelertの検知がこれらのグラフから正しそうに見えますね!

もしかしたら、検出時刻付近で「American Airlines」、「AAL」に関係する
利用者に魅力的なキャンペーンを打ったのかもしれませんね!

このようにKibanaを使って目でも確かに確認ができますが
アラートの仕組み(Watcher)と組み合わされば、Prelertで自動で検出し、
通知する仕組みが作れるかもしれません!

最後に

Prelertを使って要因の調査をExampleから試してみました。
異常要因の調査に非常に役立つ感じがし、これがプログラミング不要で
挑戦できるのかが良い感じです!

Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【Elastic search 関連】
Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

【データ分析】
データ分析案件の急増に伴い実践的なデータ分析エンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com