Elastic Common Schemaについて
ECS(Elastic Common Schema)はElasticsearchのデータを一貫した方法で構造化し、カスタマイズにも対応する新しい仕様基準です。ECSの導入で、多様なソースのデータを分析することが可能になります。ECSを使用して、ダッシュボードや機械学習ジョブといった分析コンテンツをより広範に適用したり、検索をより厳密に設定することができ、フィールド名も覚えやすくなります。
Common Schemaを使う理由
インタラクティブな分析(例:検索、ドリルダウン、ピボット、可視化)を行う場合にも、自動化された分析(例:アラート、機械学習による異常検知)を行う場合にも、データは統一された方法で分析する必要があります。しかし同じソースから来るデータでない限り、フォーマットはバラバラになります。具体的には、次のような不統一です。
- 異なるデータタイプ(例:ログ、メトリック、APM、フロー、コンテクスチュアルデータ)
- さまざまなベンダーを使う混成環境
- 類似しているが異なるデータソース(例:Auditbeat、Cylance、Taniumといった複数のエンドポイントデータソース)
たとえば「複数のソースから取得されたデータで、特定のユーザーを検索する」という状況を考えてみましょう。たった1つのフィールドを検索するにも、user
、username
、nginx.access.user_name
、login
といった複数のフィールド名を考慮する必要が生じます。このデータについてドリルダウンやピボットを実行するとなれば、さらに処理は複雑になります。さらに可視化やアラート、機械学習ジョブといった分析コンテンツを開発するとしたらどうでしょうか?新しいデータソースを取り込むたびに複雑になり、重複も生じてしまいます。
Elastic Common Schemaとは?
ECSはElasticsearchに投入されるデータ用に、一般的なドキュメントフィールドを定義するオープンソースの仕様基準です。ECSはデータモデリングの統一化をサポートし、双方向性と自動化の2つの手法で多様なソースから一元的にデータを分析できるように設計されています。
ECSの特長として、分類に特化した予測性と、カスタムユースケースに対応する包括的な仕様による汎用性の両方を兼ね備えていることがあります。ECSの分類基準は、フィールドのデータ要素を次の3つのレベルに配置します。
レベル | 説明 | おすすめの使い方 |
ECS Core Field | 定義された一連のECSのトップレベルオブジェクトの下にある、完全定義された一連のフィールド名 | 多くのユースケースに共通するフィールドであり、ここから作業を開始します |
ECS Extended Field | 同じ一連のECSのトップレベルオブジェクトの下にある、部分定義された一連のフィールド名 | Extended Fieldはより限定的なユースケースに適用したり、ユースケースに応じて自由に解釈して使用することができます |
Custom Field | ECSのフィールドやオブジェクトと競合せず、ユーザーが供給する一連の非ECSのトップレベルオブジェクトの下にある、一連の定義されない、かつ無名のフィールド | ECSに一致するフィールドがない場合に追加するフィールドです。データをECSに移行する際などに、元のイベントフィールドのコピーを保持することもできます。 |
Elastic Common Schemaを活用する
活用事例1:パース
次のApacheログでECSを使用してみます。
10.42.42.42 - - [07/Dec/2018:11:05:07 +0100] "GET /blog HTTP/1.1" 200 2571 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
このメッセージをECSにマッピングすると、ログのフィールドは次のように整理されます。
フィールド名 | 値 | メモ |
@timestamp | 2018-12-07T11:05:07.000Z | |
ecs.version | 1.0.0 | |
event.dataset | apache.access | |
event.original | 10.42.42.42 - - [07/Dec ... | 監査目的の完全で、無修正のログ |
http.request.method | get | |
http.response.body.bytes | 2571 | |
http.response.status_code | 200 | |
http.version | 1.1 | |
host.hostname | webserver-blog-prod | |
message | "GET /blog HTTP/1.1" 200 2571 | ログビューアーに簡潔に表示させる、イベント重要情報のテキスト表現 |
service.name | Company blog | ユーザーがこのサービスにつけるカスタム名 |
service.type | apache | |
source.geo.* | 緯度経度情報のためのフィールド | |
source.ip | 10.42.42.42 | |
url.original | /blog | |
user.name | - | |
user_agent.* | ユーザーエージェントを記述するフィールド |
上に示されているように、生のログはECSのevent.original
フィールドに保存されて、監査ユースケースをサポートしています。説明をシンプルにするため、この事例では監視エージェント( agent.*
の下にあります)に関する詳細と、ホスト(host.*
の下にあります)、その他いくつかのフィールドの情報の一部を省略しています。より完全な再現については、こちらのJSONイベント事例をご覧ください。
活用事例2:検索
特定のIPのアクティビティを、ある完全なWebスタック全体で調査してみます。このWebスタックの構成は、Palo Alto Networks Firewall、HAProxy(Logstashで処理)、Apache(Beatsモジュールを使用)、Elastic APM、さらにSuricata IDS(カスタム、独自のEVE JSONフォーマットを使用)です。
ECSを使用する前にこのIPを検索すると、次のように表示されるかもしれません。
src:10.42.42.42 OR client_ip:10.42.42.42 OR apache2.access.remote_ip:10.42.42.42 OR context.user.ip:10.42.42.42 OR src_ip:10.42.42.42
すべてのソースをECSにマッピングした後のクエリは、ずっとシンプルになります。
source.ip:10.42.42.42
活用事例3:可視化
ECSの実力は、複数の異なるデータソースからデータを統一された方法で正規化する場面で特に発揮されます。Webスタックの脅威を監視するとき、たいていの場合はネットワークデータの複数のソースを使用します。ここでは境界上のPalo Alto Next-Gen FirewallとSuricata IDSのイベントとアラートを使用しています。Kibanaで一元的に可視化でき、ベンダーを問わずドリルダウンとピボットを実行できるようなやり方でsource.ip
とnetwork.direction
フィールドから各メッセージを抽出するには、どうすればよいでしょうか?もちろん答えはECSです。ECSを使わない場合に比べて、一元化された監視を大幅に簡単に実現できます。
Elastic Common Schemaのメリット
ECSの導入により、検索、ドリルダウン、ピボット、データ可視化、機械学習ベースの異常検知、アラートを含む、Elastic Stackの分析全体の様式を統一することができます。完全に組み込めば、非構造化と構造化の両方のクエリパラメーター能力を活用して検索することが可能になります。またECSは、1つのベンダーを異なるデバイスで使用している、あるいはデータソースの種類が全く異なるといった条件にかかわらず、異なるデータソースのデータを自動的に関連付ける機能をスムーズに実現します。
さらにECSは、分析コンテンツの開発時間も短縮します。組織に新しいデータソースが加わるたびに検索やダッシュボードを新規に作成する必要がなくなり、既存の検索やダッシュボードを使用し続けることができます。ECSを使えば、Elasticやパートナー、オープンソースプロジェクトなど、ECSを使用する他のパーティーから環境に直接分析コンテンツを導入することも簡単になります。
インタラクティブな分析も手軽になります。ECSでは、データソースごとに異なる設定ではなく、1つの設定だけを使用するため、一般的に使用されるフィールド名を覚えておくことも簡単です。ECSでは(いくつかの例外はありますが)、シンプルで標準的な名付け方法に従った仕様基準なので、フィールド名を忘れる可能性も減少します。
ECSを導入したくない場合は?問題ありません。必要なときはいつでも使うことができ、必要なければ使わなくても大丈夫です!
Elastic Common Schemaを使いはじめる
ECSはGitHub repoに公開されており、レビュー可能です。現在はBeta2で、まもなく一般公開への移行を予定しています。Apache 2.0オープンソースライセンス下で公開されており、Elasticの広範なコミュニティで幅広く導入できるようになっています。
魔法みたいな機能なの?あらゆるスキーマと同様、ECSの実装も手軽ではありません。もしすでにElasticsearchのインデックステンプレートを設定して、LogstashやElasticsearchのIngestノードでいくつかの機能変換を記述したことがあれば、こちらの作業もイメージできるかもしれません。Elastic Beatsモジュールの今後のバージョンはデフォルトでECSフォーマットのイベントを提供するようになる予定です。これにより、移行もスムーズになります。第一弾として、こちらの新しいAuditbeat向けのシステムモジュールは新仕様となっています。
ECSについては、Elastic Common Schema(ECS)ウェビナーでも詳しくご紹介しています。ぜひご覧ください。今後のブログ記事では、データをECS(スキーマに定義されていないフィールドを含む)にマッピングする方法や、ECSの統合戦略についてお伝えする予定です。