このトピックでは、インメモリ テーブルを構成する手順について説明します。インメモリ テーブルを構成する場合、テーブルへの入力用のCSVファイルをアップロードします。このテーブルをエンリッチメント ソースとしてルールに設定することができます。設定したルールによってアラートが生成されると、ESAはインメモリ テーブルから関連する情報を取得し、アラートに付加します。
たとえば、ユーザがフリーウェアのダウンロードを試みたときにそれを検出し、そのユーザのユーザIDをアラートで通知するようルールを構成することができます。氏名、役職、オフィス所在地、従業員番号などの詳細情報を含んだインメモリ テーブルから、このユーザの追加情報を取得して、アラートに付加することができます。
インメモリ テーブルは軽量なデータを取り扱う場合に最適です。簡単に設定でき、データベースよりもメンテナンスの手間がかかりません。たとえば、AllTech Companyという小さな会社があるとします。規模が小さいため、システム管理者はCSVファイルで従業員情報を管理できます。このAllTechが大企業に成長したときには、管理者は外部データベースをエンリッチメント ソースとして構成し、そのデータベースをルールに関連づける必要が出てきます。
前提条件
CSVファイルの列名に空白文字は使えません。
たとえば、Last_Nameは正しいですが、Last Nameは正しくありません。
.CSVファイルの先頭には、フィールドとタイプを定義するヘッダー行を追加する必要があります。
たとえば、address stringは、フィールドをaddressと定義し、タイプをstringと定義しています。
以下に、有効な.CSVファイルを.CSVとテーブルの形式で示します。
手順
アドホック インメモリ テーブルの構成
- 構成>[ESAルール]に移動します。
[構成]ビューが表示され、[ESAルール]タブが開きます。 - [設定]タブをクリックします。
- [オプション]パネルで、[エンリッチメント ソース]を選択します。
- [エンリッチメント ソース]セクションで、
>[インメモリ テーブル]
をクリックします。
- インメモリ テーブルを記述するには、次の手順を実行します。
- [アドホック]を選択します。
- デフォルトで、[有効化]が選択されています。ルールにインメモリ テーブルを追加すると、アラートにはインメモリ テーブルのデータが付加されます。
ルールをインメモリ テーブルに追加しても、アラートに情報を付加しない場合には、チェックボックスをオフにします。 - [ユーザ定義テーブル名]フィールドに、インメモリ テーブル構成の名前(Student Informationなど)を入力します。
- アラートに追加するエンリッチメントの情報を説明する場合には、[説明]に次のような説明を記入します。
例:アラートをRollnoでグループ化するとき、このエンリッチメントによって名前や点数などの生徒の情報を付加します。
- [インポート データ]フィールドで、インメモリ テーブルにデータをフィードするCSVファイルを選択します。
- EPLクエリを記述して、高度なインメモリ テーブルの構成を定義する場合は、[エキスパート モード]を選択します。
[テーブル列]が[クエリ]フィールドに置換されます。 - [テーブル列]セクションで、
をクリックして、列をインメモリ テーブルに追加します。
- [インポート データ]フィールドで有効なファイルが選択されている場合は、自動的に列にデータが入力されます。
注:[エキスパート モード]を選択した場合には、[テーブル列]ではなく、[クエリ]フィールドが表示されます。
- [キー]ドロップダウン メニューで、エンリッチメントとしてCSVベースのインメモリ テーブルを使用する場合に、受信イベントとインメモリ テーブルを結合するデフォルトのキーとして使用するフィールドを選択します。デフォルトでは最初の列が選択されています。また、エンリッチメント ソースでインメモリ テーブルを開き、後からキーを変更することもできます。
- [最大行数]ドロップダウン メニューで、個々のインスタンスがインメモリ テーブルに格納できる行数を選択します。
- ESAサービスが停止した場合に、サービスの再開時にテーブルのデータを再投入するには、[永続的]を選択して、インメモリ テーブルをディスクに保存します。
- [保存ファイル形式]フィールドで、次のいずれかを実行します。
- バイナリ形式でファイルを保存する場合は、[オブジェクト]を選択します。
- テキスト形式でファイルを保存する場合は、[JSON]を選択します。
デフォルトでは、[オブジェクト]が選択されています。
- [保存]をクリックします。
アドホック インメモリ テーブルが構成されました。これをエンリッチメントまたはルール条件の一部としてルールに追加することができます。「ルールへのエンリッチメントの追加」を参照してください。
インメモリ テーブルを追加すると、エンリッチメントとして、またはルール条件の一部としてルールに追加できます。たとえば、次のルールでは、インメモリ テーブルをルール条件の中でホワイトリストとして使用しています。また、インメモリ テーブルに含まれるusr_dstの詳細情報をアラートの付加情報として設定しています。
このルールでは、インメモリ テーブルをホワイトリスト ルール条件として使用しています。
次に、User_listインメモリ テーブルをアラートのエンリッチメントとして設定しています。
つまり、User_listインメモリ テーブルは、ホワイトリストの作成に使用されると同時に、アラートがトリガーされた場合は、アラートのデータに付加するエンリッチメントとしても使用されています。
繰り返しインメモリ テーブルの追加
- 構成>[ESAルール]に移動します。
[構成]ビューが表示され、[ESAルール]タブが開きます。 - [設定]タブをクリックします。
- [オプション]パネルで、[エンリッチメント ソース]を選択します。
-
>[インメモリ テーブル]をクリックします。
- インメモリ テーブルを記述するには、次の手順を実行します。
- [繰り返し]をクリックします。
- デフォルトで、[有効化]が選択されています。ルールにインメモリ テーブルを追加すると、アラートにはインメモリ テーブルのデータが付加されます。
ルールをインメモリ テーブルに追加しても、アラートに情報を付加しない場合には、チェックボックスをオフにします。 - [ユーザ定義テーブル名]フィールドに、インメモリ テーブル構成の名前(Student Informationなど)を入力します。
- アラートに追加するエンリッチメントの情報を説明する場合には、[説明]に次のような説明を記入します。
例:アラートをRollnoでグループ化するとき、このエンリッチメントによって名前や点数などの生徒の情報を付加します。
- インメモリ テーブルにデータをフィードするCSVファイルのURLを入力します。[確認]をクリックして、リンクを検証し、CSVファイルの列を設定します。 プラスまたはマイナス ボタンを使用して列を追加または削除できます。
- プロキシ経由でサーバにアクセスする必要がある場合には、[プロキシを使用]を選択します。
- ログインが必要な場合には、[認証情報]を選択します。
- [繰り返し間隔]では、ESAが最新のCSVファイルを確認する間隔を指定します。
- [キー]ドロップダウン メニューで、エンリッチメントとしてCSVベースのインメモリ テーブルを使用する場合に、受信イベントとインメモリ テーブルを結合するデフォルトのキーとして使用するフィールドを選択します。デフォルトでは最初の列が選択されています。また、エンリッチメント ソースでインメモリ テーブルを開き、後からキーを変更することもできます。
- [最大行数]ドロップダウン メニューで、個々のインスタンスがインメモリ テーブルに格納できる行数を選択します。
- ESAサービスが停止した場合に、サービスの再開時にテーブルのデータを再投入するには、[永続的]を選択して、インメモリ テーブルをディスクに保存します。
- [保存ファイル形式]フィールドで、次のいずれかを実行します。
- バイナリ形式でファイルを保存する場合は、[オブジェクト]を選択します。
- テキスト形式でファイルを保存する場合は、[JSON]を選択します。
デフォルトでは、[オブジェクト]が選択されています。
- [保存]をクリックします。
繰り返しインメモリ テーブルが構成されました。これをエンリッチメントまたはルール条件の一部としてルールに追加することができます。「ルールへのエンリッチメントの追加」を参照してください。
エンリッチメント ソースとしてのEsperクエリの構成
「エキスパート モード」を使用すると、Esperクエリに基づいてエンリッチメント ソースまたは名前付きウィンドウを作成できます。これにより、コンテンツをより詳細に制御し、より動的なコンテンツを作成することができます。これを行う場合、EPLクエリはイベント ストリームから対象の状態を収集するために、名前付きウィンドウを構築します。
ワークフロー
次に、名前付きウィンドウを使用してクエリを作成するためのワークフローを示します。
- イベントがEsperエンジンに送信されます。
- EPLクエリが生成されます。
- アラートがトリガーされます。
- クエリにより、イベントと名前付きウィンドウの間に接続があるかどうかが確認されます。
- 接続がある場合、名前付きウィンドウにデータを投入するクエリが実行され、投入されます。
- 名前付きウィンドウのコンテンツがアラート コンテンツに追加され、(設定に応じて)送信または表示されます。
前提条件
- EPLステートメントで使用されるメタがデータ内に存在する必要があります。
- 正しい形式のEPLステートメントを作成する必要があります。
手順
EPLクエリを使用したインメモリ テーブルの構成
- 構成>[ESAルール]に移動します。
[構成]ビューが表示され、[ルール]タブが開きます。 - [設定]タブをクリックします。
- [オプション]パネルで、[エンリッチメント ソース]を選択します。
- [エンリッチメント ソース]セクションで、
>[インメモリ テーブル]
をクリックします。
- [アドホック]のチェックボックスをオンにします。
デフォルトで、[有効化]が選択されています。ルールにインメモリ テーブルを追加すると、アラートにはインメモリ テーブルのデータが付加されます。 - [ユーザ定義テーブル名]フィールドに、インメモリ テーブルの名前を入力します。
- アラートに追加するエンリッチメントについて説明する場合は、[説明]フィールドに情報を入力します。
この説明は[エンリッチメント ソース]ビューからエンリッチメントのリストを表示するときに表示されるため、ベスト プラクティスとして詳細な説明を入力することをお勧めします。これにより、他のユーザがエンリッチメント ソースの定義を開いて調べなくても、コンテンツトを理解することができます。 - EPLクエリを記述して、高度なインメモリ テーブルの構成を定義する場合は、[エキスパート モード]を選択します。
[テーブル列]が[クエリ]フィールドにより置換されます。 - ESAサービスが停止した場合に、サービスの再開時にテーブルのデータを再投入するには、[永続的]を選択して、インメモリ テーブルをディスクに保存します。
- [クエリ]フィールドにEPLクエリを入力します。クエリは正しい形式で記述する必要があります。また、フィールドに入力する前にテストすることをお勧めします。
- [保存]をクリックします。
例
たとえば、5回のログイン試行失敗後のログイン成功を検索するルールを作成したとします。このルールがトリガーされた場合に、最後にログインが成功したときのユーザに関する情報が通知に含まれるようにします。このエンリッチメントを通知に追加するには、受信イベントからデータを投入するストリーム ベースのインメモリ ルックアップ テーブルを作成して、IPアドレスとそのIPアドレスから最後にログインしたユーザのマッピングを管理します。これを行うには、クエリをソースとして使用するエンリッチメントを作成します。
ステップ1.ルールの作成
まず、相関ルールを作成する必要があります。この例では、失敗と成功のルール条件を作成し、ip_srcでグループ化します。
このルール条件を記述するには、次のステートメントを作成します。
ステップ2. エンリッチメントの作成
ルールを作成したら、通知出力に追加するためのエンリッチメントを作成する必要があります。上述のステップに従ってエンリッチメントを作成し、Last_Logonという名前を付けて、次のクエリを追加します。
create window LastLogon.std:unique(ip_src) as (ip_src string, user_dst string);
insert into LastLogon select ip_src, user_dst from CoreEvent
where ec_activity='Logon' and ec_outcome='Success';
エンリッチメントは、次のようになります。
ステップ3. ルールへのエンリッチメントの追加
基本ルールとエンリッチメントを作成したので、エンリッチメントをルールに追加し、ルールのメタにエンリッチメントを結合する(接続する)必要があります。
Login_Failure_Followed_by_Successルールを開いて、編集します。
エンリッチメントを追加すると、ルールを保存することができます。
ルールがトリガーされると、ESAがエンリッチメントのクエリを実行し、名前付きウィンドウにデータを投入します。名前付きウィンドウ内のデータが結合条件と一致する場合、通知の設定に応じてメール、SNMP、Syslog、スクリプトの出力にデータが追加されます。