SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2017】セッションレポート(AD)

Elastic Stackをさらに活用しよう! X-PackのMachine Learningを組み合わせて「教師なし」の異常検知を実現【デブサミ2017】

【16-D-2】Elastic Stackを利用した異常検知

  • X ポスト
  • このエントリーをはてなブックマークに追加

 インターネットの利用が浸透するにつれ、適切な情報配信や不正を防ぐための施策はWebサービス継続に欠かせないものとなりつつある。そのためには、サーバーやネットワーク機器からのログ、およびWebサイトへのアクセスやログインといった稼働状況の効率的なモニターが欠かせない。その有効な手段として注目される「Elastic Stack」と機械学習を組み合わせた“スマートな検知”について、ElasticのSolutions Architectである大輪弘詳氏が解説した。

  • X ポスト
  • このエントリーをはてなブックマークに追加
Elastic Solutions Architect 大輪弘詳氏
Elastic Solutions Architect 大輪弘詳氏

「Elastic Stack」とは

 「Elastic Stack」とは、Webサービスの効率的な運営・管理を実現するオープンソースソフトウェア製品群だ。リアルタイム検索・分析エンジンの「Elasticsearch」、データ可視化ツールの「Kibana」、軽量のデータシッパー群である「Beats」、そして高機能なパイプラインデータ加工処理プログラムである「Logstash」によって構成されている。

Elastic Stack
Elastic Stack

Elasticsearch

 Elasticsearchは、容易なスケールアウトを前提として作られた検索エンジンである。JSONドキュメントにも対応し、JavaやJavaScriptはもちろん、PythonやPHP、C#など豊富なクライアントライブラリを提供している。RESTfulな操作をサポートし、HTTPに対応したクライアントで操作が可能だ。また、さまざまな検索方法をサポートしており、日本語の全文検索や地理情報、「Aggregation」と呼ばれる集計機能も持っている。例えば、最高値や最低値、平均などの計算を検索と同時に行うことができる。

Kibana

 Kibanaは、ElasticsearchのクエリやAggregationを用いてデータの中から“インサイト”を発見するためのツールだ。バーチャートや折れ線グラフ、地理情報を利用した分布図やヒストグラムなどをチャート化、ダッシュボードとしてまとめてリンクし、チームで共有することができる。また可視化だけでなく、Elastic Stackの統合的な運用管理ツールとしても利用できる。例えば、数値でエラーが多く発生しているところを発見して地図上に表示する、ということもできる。

Kibanaによるデータの可視化
Kibanaによるデータの可視化
エラーが多い場所を地図上に表示
エラーが多い場所を地図上に表示

Beats

 Beatsは複数形の「s」がついているように単機能な軽量のデータシッパー“群”で、データを収集してElasticsearchや「Elastic Cloud」などに送信する役割を持つ。「libbeat」という開発用ライブラリが提供され、コミュニティを通じて開発者が独自のBeatを開発することも活発に行われている。Elasticが開発した公式Beatは既存の4つに加え、新たにリモートからシステムの稼働状況を監視するための「Heartbeat」が加わった。

Logstash

 Logstashは、インプット・フィルター・アウトプットの3ステージで構成される高機能なパイプラインデータ処理プログラムだ。インプットではログやWebアプリケーションはもちろん、データストアやクラウドサービスからのデータなど、さまざまなソースから同時にイベントを取り込むことができる。SNSのストリームの取得やSalesforceとの連係も可能だ。フィルターでは、プレーンテキストを正規表現でパースしたり、XMLやCSVを解釈したり、外部のデータソース、主にElasticsearchをクエリして結果をパイプラインに出すこともできる。アウトプットの出力先はElasticsearchを基本としながらも、他のファイル出力にも対応しており、大規模環境ではApache Kafkaで一度キューイングしてロスを防ぐといった運用もされている。

Elastic Stackに多彩な付加価値を与える「X-Pack」

 Elastic StackはOSSのため無料で使用することができる。さらにサブスクプリクションを購入すると、「X-Pack」としてElastic Stackを拡張する「Security」「Alerting」「Monitoring」「Reporting」「Graph」などの付加機能が使用できるようになる。加えて、Elasticが2016年に買収した企業、Prelertが開発した機械学習機能も「Machine Learning」として近日中に追加される予定だ。

X-Pack
X-Pack

Security

 SecurityはElasticsearchの暗号化と認証、ロールベースのアクセス制御を提供する。Kibanaにログインダイアログを課すことができ、ネイティブ認証の他、LDAP、Active Directoryなどとの連係も可能だ。特に多数のユーザーを擁している場合や、センシティブなデータを活用しているケースでは必須の機能といえるだろう。

Alerting

 Alertingは「一定時間ごとにElasticsearchをクエリして何らかの値と比較し、変化があれば何らかのアクションを起こす」などの設定ができる。例えば「1分間に5回アクセスに失敗していれば、メールで通知する」といった具合だ。

Monitoring

 MonitoringはElasticsearchに関わるサーバーやストレージをモニターし、適切な運用を実現する。近年、「Elasticsearchが活用されすぎることによるパフォーマンスの低下」といったうれしい悲鳴も上がっており、大輪氏も「Elasticsearchを使っている方はぜひ活用してほしい」と勧める。

Reporting

 ReportingはKibanaのダッシュボードをPDF化する機能だ。便利な使い方として、Alertingと組み合わせた定期的なレポート送信や、異常を感知した時にPDFをメーリングリストに周知する方法などが紹介された。

Graph

 GraphはElasticsearchにインデックスされているデータの探索ツールである。例えば、クレジットカードの不正利用や社内のコミュニケーション分析、ネットワークのパケットからセキュリティインシデントを分析するなど、さまざまな用途に使われている。

 大量データの中から問題解決のヒントとして有意義な情報を得るために、これまでElastic StackはElasticsearchによる「検索」と「集計」、そしてKibanaを組み合わせた「可視化」を提供していた。さらに、Machine Learningが加わることによって可能性が広がっていく。

GUIベースでプログラミングレスに異常検知を実現するMachine Learning

 Machine Learningの最たる特徴は「教師なし」の学習が可能であることだ。「何が異常か」という判断ポイントについては人間が決定・設定する必要があるものの、各数値に対して「正常」「異常」とタグ付けを行う必要がなく、LOFの検知のようなパラメーター設定も不要だ。Kibanaのプラグインとして提供され、GUIベースで容易に設定ができる。

 「昼夜」や「1週間」というような時系列でのデータを扱って異常を検知するのが得意だ。過去のデータから予想して「予想モデル」を作り、その差異から異常を検知する。

Prelert
Prelert
ElasticのMachine Learningテクノロジー
ElasticのMachine Learningテクノロジー

 このMachine Learningの機械学習を用いた異常検知について、大輪氏は「実にさまざまな使い道があり、ビジネスによってさまざまな活用法がある。ぜひ皆さんの会社でも使えないか考えてみてほしい」と語る。

 例えばITオペレーションでのケース。多量のデータやログが流れ込む中で、「正常」か「異常」かを判断して見極めることは困難だ。しきい値の判断や、問題発生時の原因特定も難しいだろう。また、ITセキュリティにおいてもマルウェアが侵入したシステムや侵入路、影響範囲、そして潜在的脅威となる組織内部のなどを検知し、特定するのは至難の業だ。他にも「多種類の時系列データから異常を検知する」「機材のIoTによって工場が正常に稼働しているかどうかを検知する」など、「他と違うこと」を大量のデータから検知してその原因を突き止め、解決しなければいけないケースは多い。

 それでは、具体的にどうやって課題を解決するのか。Elastic StackでMachine Learningを活用し、異常を検知する方法について、大輪氏は2種類のデモンストレーションを行った。

デモ1:[IT オペレーション]ECサイトのトランザクション数の異常検知

 ECサイトへの1分ごとのトランザクション(購買件数)データをElasticsearchに記録して「タイムライン」機能で書き出すと、一定期間の増減を見ることができる。その中で、購入数が多い時間帯にブラウンアウト(瞬断)が発生したことを検知するにはどうすればいいのか。仮にしきい値を設けたとしても、夜間はしきい値より常に低いため、昼間のブラウンアウトを検知するのは難しくなる。また、昼夜のムービングアベレージとの比較では、ブラウンアウトは瞬時であるために平均値の差分が小さくなってしまう。そのため、時間の区切り方によっては埋没してしまう。

 そこでMachine Learningを使用して、夜の購買が少なく、昼の購買が多いというデータのパターンを認識。そのパターンとどれだけ隔たりがあるか、というアプローチを行う。パターン認識の単位である「バケットスパン」を5分間に設定したところ、明確にブラウンアウトが起きた箇所に対してアラートが上がった。ここでのポイントはバケットスパンの長さの設定であり、小さすぎると差異が大きくなるため異常でないのにエラーとして検知されてしまい、逆に大きすぎるとムービングアベレージ同様に差異が埋もれてしまう。

 今回のデモは「購買件数/分」について「少なすぎる」と異常検知するものだったが、他にも平均値や最大値・最低値の異常、地理情報の異常など、さまざまな項目を設定することができる。既にデータを持っている場合であれば、それをベースにして学習に活用できる上、もちろん導入後に学習したことも反映できる。さらに、学習する過程で検知した異常も報告される。

 また、Machine Learningは複数のデータを重ねて異常を検知することもできる。例えば、トランザクションの異常検知とネットワークのエラーに関する異常検知を重ねることで、「ネットワーク機器のトラブルによって、ブラウンアウトが発生した」などの原因究明にも役立つ。

デモ2:[ITセキュリティ]Webシステムにおける行動の異常検知

 続いて、ITセキュリティのデモンストレーションが行われた。アクセスログがElasticsearchに集約される環境下で、100回ログインに失敗し、2回成功したユーザーがいたとする。Machine Learningはそれを検知。そのユーザーのアクセスログに対して異常検知を行う。すると、そのユーザーは他のユーザーがアクセスしないイントラネットサーバーにアクセスしていたり、そこからクローラーで大量のドキュメントを取得していたり、外部にWebメールで配信したりしていることが分かる。

 このように、Machine Learningはデータに潜む行動モデルを教師なしで学習し、異常を検知する。つまり、しきい値を特に設定することなく、他のユーザーの行動モデルと比べて「特定のポートへのアクセスが多い」「何度もログインに失敗している」などの差異を検知し、それを異常と判断して自動的にアラートを出すことができる。

 現在、Machine Learningは、Prelertのベータ版として提供されている。2017年上半期のリリースを目標にElastic Stackとの強固なインテグレーションが進行中だ。大輪氏は「ベータ版は2週間利用することができる。ぜひともお手持ちのデータで試してみていただきたい」と述べ、セッションを締めくくった。

お問い合わせ

 Elastic Japan

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10083 2017/04/14 21:38

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング