こんにちはElastic Certified Engineerのノムラです。
昨日、Elastic Stackの7.9がリリースされました。
今回も魅力的な機能が追加されました。
そこで、追加された機能のうち特に面白いと思う機能をご紹介します!
EQL(Event Query Language)
エンタープライズライセンスで利用可能となったSIEM向けの新機能です。
ネットワークログやシステムログのような時系列データに対して、マルウェア等の侵入から感染、不正操作までの一連のイベントを簡単に検索可能とします。
www.elastic.co
検索方法
マルウェアが侵入、インストールされたケースを想定し検索を実行します。
以下のような独自クエリで検索が可能となります。
GET /my-index-000001/_eql/search { "query": """ sequence [ process where process.name == "regsvr32.exe" ] [ file where (file.size > 0 and stringContains(file.name, "scrobj.dll")) ] """ }
条件として、通常のmatch検索だけでなく、sizeの指定やstringContains等のメソッドが利用可能です。
またsequenceを利用することで、検索時の条件を時系列の順に指定可能です。
上記では、
1ドキュメント目:process.nameが"regsvr32.exe"であるドキュメントを検索
2ドキュメント目:fileフィールドのsizeパラメータが0より大きく、かつfile.nameフィールドの値に"scrobj.dll"を含むドキュメントを検索
と各シーケンス毎に条件を指定しています。
検索結果
検索結果は以下です
{ "is_partial": false, "is_running": false, "took": 60, "timed_out": false, "hits": { "total": { "value": 1, "relation": "eq" }, "sequences": [ { "events": [ { "_index": "my-index-000001", "_id": "OQmfCaduce8zoHT93o4H", "_version": 1, "_seq_no": 3, "_primary_term": 1, "_score": null, "_source": { "@timestamp": "2099-12-07T11:07:09.000Z", "event": { "category": "process", "id": "aR3NWVOs", "sequence": 4 }, "process": { "pid": 2012, "name": "regsvr32.exe", "command_line": "regsvr32.exe /s /u /i:https://...RegSvr32.sct scrobj.dll", "executable": "C:\\Windows\\System32\\regsvr32.exe" } } }, { "_index": "my-index-000001", "_id": "yDwnGIJouOYGBzP0ZE9n", "_version": 1, "_seq_no": 4, "_primary_term": 1, "_score": null, "_source": { "@timestamp": "2099-12-07T11:07:10.000Z", "event": { "category": "file", "id": "tZ1NWVOs", "sequence": 5 }, "process": { "pid": 2012, "name": "regsvr32.exe", "executable": "C:\\Windows\\System32\\regsvr32.exe" }, "file": { "path": "C:\\Windows\\System32\\scrobj.dll", "name": "scrobj.dll" } } } ] } ] } }
既存のQuery DSLでは実現できない、時系列の順(マルウェアの侵入から不正操作までの順)で条件を指定して検索できるのはかなり便利な機能だと思います。
Data Streams
BASICライセンスから利用可能な時系列データの読み書きを簡単に管理することができる機能です。
Data Stream機能を利用することで、1インデックスの作成単位の設定(年月日、サイズ)をILM画面から設定可能となります。
www.elastic.co
特徴
通常、時系列ログを扱うときには複数のインデックスを作る必要があり、管理が複雑化していました。
例えば、「index-a-202008」「index-a-202009」「index-a-202010」... と月毎にインデックスを作成していました。
DataStreamを利用すると、単一のインターフェースを提供し、インデックス名を意識せず単一の名前で扱うことができます。
またインデックスの作成単位や、そのローテート期間等の管理をGUIから一括で行うことが可能です。
利用方法
利用方法は以下です
インデックスの作成単位を設定する
下記の設定では、25GB毎に新しいインデックスを作成するように定義しています
PUT /_ilm/policy/my-data-stream-policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "25GB" } } } } } }
Index Templateを定義する
SettingsにLife Cycle Policyを定義します。
PUT /_index_template/my-data-stream-template { "index_patterns": [ "my-data-stream*" ], "data_stream": { }, "priority": 200, "template": { "settings": { "index.lifecycle.name": "my-data-stream-policy" } } }
Data Streamを作成する
「my-data-stream-alt」が読み書きの指定対象となります。
PUT /_data_stream/my-data-stream-alt
運用がかなり楽になりそうな機能だと思っており、是非実際に導入してみたい機能です。
Wildcard Datatypeの追加
最後は、Wildcard Datatypeです。
7.9から追加された新しいデータ型でWildcard検索の高速化に利用可能なデータ型です。
特にカーディナリティが高いフィールドに対して、Wildcard Query、Regexp Queryを利用する際、このWildcard Datatypeを利用することで従来のText、Keyword型よりもかなり高速に検索できるそうです。
利用方法
以下のようにIndex Mappingのデータ型にWildcard Datatypeを指定することで、利用可能です
PUT my-index-000001 { "mappings": { "properties": { "my_wildcard": { "type": "wildcard" } } } } PUT my-index-000001/_doc/1 { "my_wildcard" : "This string can be quite lengthy" } POST my-index-000001/_doc/_search { "query": { "wildcard" : { "value": "*quite*lengthy" } } }
より詳細が知りたい方は、昨日投稿されたElastic社のブログも参考になると思います。
www.elastic.co
最後に
今回も内容が濃いリリースでした。
特に、最近のリリースからは
・SIEM
・データ加工を簡単にする
という部分に力を注いでいるように感じます。
ますます便利になるElasticStackを引き続き使い倒していきたいです!
Acroquest Technologyでは、キャリア採用を行っています。
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- Elasticsearch等を使ったデータ収集/分析/可視化
- マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com