【レポート】X-Pack新機能 : Machine Learning ワークショップに参加してきました

こんにちは、藤本です。

昨日 Elastic 社が開催した X-Pack新機能 : Machine Learning ワークショップに参加してきましたのでレポートします。

会場

会場は Elastic 社のオフィスがあるグランキューブのセミナールームでした。

IMG_2111

アジェンダ

  1. Elastic Stack のための Machine Learning
  2. Elastic Stack 5.4 の新機能
  3. Elastic が提供するサービス

Elastic Stack のための Machine Learning

今回セミナーのメインコンテンツとなる Machine Learning を大輪様よりご紹介いただきました。

スライド

Elastic Stack

Elastic 社の主要 OSS プロダクトの総称です。現在は 4つのプロダクトがあります。

  • Kibana
  • Elasticsearch
  • Logstash
  • Beats

X-Pack

Elastic Stack をより便利に機能拡張するサブスクリプション型プロダクトです。

  • Security
    Elasticsearch、Kibana に認証機能を付与する。Active Directory とか外部認証とも連携可能。

  • Alerting
    Elasticsearch のデータからイベントを検知して、通知する

  • Monitoring
    Elastic Stack のメトリクスを監視する

  • Reporting
    Kibana で可視化した情報を PDF 化。Alerting と連携することで定期的にレポートを送付することも可能

  • Graph
    Elasticsearch のデータの関係性を可視化する

  • Machine Learning
    今回リリースされた Machine Learning はこの X-Pack の一機能として追加されました。サブスクリプションは Platinum のみで利用できる予定だそうです。

Machine Learning による異常検知

今までも Kibana により Elasticsearch にインデキシングされたデータを可視化することで様々な分析・解析を行うことができました。ただし、今あるデータを視て分析・解析することが目的であり、異常を検知するためには常にブラウザを視ている必要があり、現実的ではありません。また異常検知の方法として、従来の監視装置により、しきい値を定めてしきい値を超えたことを異常と判断して通知することは一般的です。しかし、例えば、時間帯によって、曜日によって、データの推移が変わっていた時にしきい値だけで異常値を発見することはできるでしょうか?例えば、ウェブサイトで日中帯はアクセスが多く、深夜帯はアクセスが少ない場合に深夜帯のアクセス増加や、日中帯のアクセス現象を判断することは難しいです。

X-Pack の Machine Learning

X-Pack の Machine Learning は「教師なし」機械学習です。Elasticsearch にインデキシングされたデータから自動でモデルを作成します。従来のようにしきい値を設定しなくとも、学習したモデルから異常値を検知することができます。

今回は 3つのユースケースの Machine Learning の利用例をご紹介いただきました。

時系列のメトリック

単一、もしくは複数の時系列のメトリックから異常値を検知します。例えば、上でも話にあげた Web サイトのアクセス数で考えてみます。日中帯はアクセス数が多く、夜間帯はアクセスが減少します。モデルを作成することで時間帯毎の値の範囲を学習します。例えば、アクセスが多いはずの日中帯のアクセス数が夜間帯ぐらいのアクセスしかない場合に異常として検知することができます。どこかのネットワーク異常などを疑うことができます。

他にも、上記例ではアクセス数という単一のメトリックを例に挙げましたが、複数のメトリクスの例として、複数台の Web サーバ群からCPU使用率をモデルを作成することで異常が発生している一台の Web サーバを発見することができます。

デモ

Elastic ブログにエントリされている下記をデモしていただきました。詳細はブログエントリをご参照ください。

わずかな設定で時系列のタクシー乗車数からモデルを作成し、異常値を発見することができました。11月24日が普段の乗車数より少ないということで異常値として検知しています。

はぐれ者(Outliers in population)

異常な行動をしている者を検知します。例えば、Web サイトの送信元 IPアドレスとアクセス状況から異常なアクセスを検知します。通常のユーザーの場合は多くても一分間で10アクセスとかだと思います。それが一分間で100アクセスとかであれば、攻撃者や、ボットのアクセスだと判断できるのではないでしょうか。ステータスコードを見ても通常の Web サイトであればステータスコードは 200 が多いでしょう。ボットが色々なURLをクロールすると、302とか、404とかが増えます。

デモ

Web サーバのアクセスログから不正なアクセスをしている攻撃者を検出するというデモでした。

特定の送信元 IPアドレスから短時間で多くのアクセスを検知しています。またこれを深掘りすることでこの攻撃者が/wp-login.phpに多くアクセスしているということを知ることもできます。

稀有な非構造メッセージ

ログメッセージから異常なメッセージを見つけます。例えば、ログメッセージから異常を検知するのに特定のキーワードを設定して、メッセージにそのキーワードが含まれていたら通知するような監視は一般的です。ただ、エラーログでも定期的に検知するエラーメッセージで様子見でよいものなのか、初めて検知したエラーメッセージでちゃんと調べないといけないメッセージなのか、というのはあるのではないでしょうか? Machine Learning を利用することでそのような初めて出力されたメッセージを検知することができます。

デモ

ログから初めて検知したメッセージを検知するというデモでした。

構成

Machine Learning が動作する環境は Elasticsearch クラスタのノード役割として指定します。Master ノード、Data ノードなどといったノードタイプの一つとして。負荷の観点から専用ノードを立てることを推奨しているようです。データが増えると Machine Learning ノードも増やす。台数算出の一つの指標の参考値として、1,000 - 100,000 のメトリック毎に 1ノード。

今後

Elastic は初めて触る方でも簡単に始められるようにレシピという名前でユースケースに応じた設定が使えるプリセットを用意するようです。

本セッションのまとめ・所感

私自身機械学習をよく分かっておらず、縁遠い存在かと思っていましたが、データさえあれば、X-Pack の Machine Learning を利用すれば、簡単に体験することができそうです。今回ご紹介いただいたデモもデータは用意されていて、ブログエントリを辿れば簡単に試せそうなので一度体験して理解を深めたいと思いました。また試してみたらブログを書いてみようかと思います。

Elastic Stack 5.4 の新機能

Elastic Stack 5.0 からの新機能の紹介がありました。

Elastic Stack

5.0 から各種プロダクトのバージョン番号、リリース日が統一されました。Compatibility が分かりやすくなった。

Elasticsearch

  • Ingest Node
    Elasticsearch 側でデータの加工を前処理できるようになった。ログメッセージのパースとか、IPアドレスから緯度・軽度を割り当てたりとか。

  • range field
    数値や時間をレンジ指定でインデキシング、クエリができる。今まで And や Or で頑張ってたクエリも簡単に。例えば、ランチの時間やホテルの予約などの期間のデータを期間でクエリできる。

  • keyworn normalizer
    not analyzed な Keyword フィールドも正規化できる。

  • Cluster optimizations
    クラスタ、ノード、シャードのステータスを知ることができる

Kibana

  • Console in Kibana
    4 系までプラグインとして提供されていた Sense が Kibana 5.0 から標準実装に。Kibana の画面から Elasticsearch クエリを発行して、結果を見ることができる。サジェストされる。

  • Tile Service
    Elastic 社が提供するタイルサービスを利用可能になった。無償のベーシックライセンスでズームレベルを上げることができる。

  • 新しい Visualization

    • タグクラウド
    • Hearmap
  • Time Series Visual Builder
    5.4.0 の新機能。Timelion ではない新しい Time Series。Timelion のように記述式ではなく、GUI で設定可能。

  • Kibana、Logstash の監視
    X-Pack のモニタリングで Kibana、Logstash を監視できるようになった

  • i18N 対応(まだ)
    Kibana が待望の多言語対応可能になるようです。JSON 形式で置き換え可能になる予定?

Beat

  • Filebeat Modules
    今まで Filebeat はテキストファイルを読み取って送信することしかできなかった。Kibana で可視化するためにはいくつかの設定が必要だった。Filebeat Modules は Ingest Node の設定や、インデックステンプレートの設定、ダッシュボードの設定を自動で行ってくれるのでログファイルがあれば、簡単に Kibana で可視化できる。

  • Heartbeat
    死活監視を担う新しい Beat がリリース。

  • Metricbeat
    モジュール数が 17 まで増えた。JMX や、Docker も監視可能。

Logstash

  • ディスクパーシステンス
    5.1.1 からベータとしてリリースされたディスク永続化機能が 5.4.0 から GA としてリリースされました。本番環境でも安心して使えますね。

  • モニタリング API
    Logstash パイプラインをプラグイン単位で処理数、処理時間などを API で取得可能になりました。

  • Grok パーサーの GUI設定(まだ)
    パーサーの記述を Kibana で入力でき、確認できるようになる予定?

本セッションのまとめ・所感

また新機能も新しいバージョンがリリースされると一通り眺めてはいますが、改めて見ると、5.0.0 GA がリリースされて半年ちょっとですが、多くの新機能がリリースされています。更に今回紹介されたのは新機能ばかりで継続的なパフォーマンス改善や、Kibana の UI 改善なども多く行われています。本当に追いかけていて楽しいプロダクトです。これからもブログ頑張ります!