Sumo Logic の Lookup Table の作成方法・検索での使い方・テーブルデータの自動更新方法について

本ブログは "クラスメソッド DevOps・セキュリティ Advent Calendar 2023" の14日目の記事です。Lookup Tables はあらかじめ用意しておいたデータを参照してログ検索を強化することが出来ます。今回は Lookup Tables の作成方法・ユースケース・自動更新方法をご紹介します!
2023.12.14

Lookup Teble は、Sumo Logic 内にホストされるデータテーブルです。 ログ検索の際にこのテーブルのフィールドを参照してその中のデータを値として取得できます。

Lookup Table の作成

Lookup Table は UI でテーブルを作成した後で、参照する実際のデータを追加することで利用できるようになります。 実際のデータは.csv ファイルか、クエリを使って追加・更新することが出来ます。

テーブルを作成する

ライブラリ > Add New > New Lookup で新規作成できます。

以下の作成画面が表示されます。テーブル名として Name や テーブルの説明で Discription を入力します。

その他に以下も選択します。

  • Set a TTL(Time To Live) for table entries
  • テーブルデータの TTL を設定できます。Yes を選択し、1日と設定すると1日間更新されていないデータを削除します。データを常に最新の状態に更新することが出来る場合に選択してください。

  • Choose a size limit handling option
  • Lookup Table には、テーブルごとに最大 100MB までのデータ制限があります。もし、データが 100MB に達した場合の操作を選択できます。
    Stop Incoming Data:新しいデータが追加されなくする。
    Delete Old Data:最終更新時間が古いものから削除して、新しいデータを追加する。

  • Create Lookup Table
  • どのように Lookup Table を作成するか選択します。Upload File を選択すると .csv ファイルを Sumo Logic にアップロードしてフィールド名と値を保存させることが出来ます。テーブル作成の段階で.csv ファイルを使う方が効率がいいので、Upload File の手順を紹介します。もし、UI で作成する場合は、Create Schema only を選択してください。

Upload File > Upload でファイル選択画面が表示されますので、用意していた .CSV ファイルをアップロードします。

ちなみに以下のような .csv ファイルを用意しました。(左上から詰めて最初の行にフィールド名、そのフィールド名の下に値を入れます。)

アップロードすると以下の様に表示してくれます。フィールドにデータが入っていることが確認できました。

  • FIELDS
  • ログ検索時に参照するフィールド名になります。

  • PRIMARY KEY FIELD(S)
  • ログ検索で参照したいフィールドには PRIMARY KEY を指定する必要があります。また、Lookup Teble の作成には必ず1つの PRIMARY KEY を選択する必要があります。

  • SAMPLE DATA
  • ログ検索で参照されるフィールド内のデータです。

ここまででテーブルの作成は完了しました。参考元:Create a Lookup Table | Sumo Logic Docs

これでログ検索時に Lookup Table を使用することが出来るのですが、PATH が必要になりますので、確認方法を記載しておきます。

エクスプローラ > 検索バーを選択 > Lookup Tables ですべての Lookup Table を表示する。

対象の Lookup Table にカーソルを合わせてメニューボタンから Copy path to clipboard を選択すると PATH をコピーできます。

それでは実際の使い方を見ていきましょう。

Lookup Table の検索方法

クエリを使って以下のことが出来ます。

  • Lookup Table の中身を確認
  • ログ検索結果を Lookup Table に保存
  • ログ検索結果と突合

順番に見ていきましょう。

Lookup Table の中身を確認

Lookup Table の設定画面では。最大10件までしか表示できないので、一覧表示したい場合にはログ検索で cat 演算子を使って確認します。

構文は以下になります。

cat path: "Lookup Table のパス"

実際に先ほど作成したテーブルを見てみますと、以下の様に Messages タブで確認することが出来ます。

参考元:cat Search Operator | Sumo Logic Docs

ログ検索結果を Lookup Table に保存させる

ログ検索で抽出したフィールドとその値を更新したり、新たに追加する場合に使用してください。

構文は以下になります。

save [append] path: "Lookup Table のパス"

append はオプションでして、新しいフィールドとその値を対象の Lookup Table に保存します。

append オプションが無い場合は、既存のフィールドの値を更新します。

なにもデータが入っていない ec2host テーブルを作成してみました。ここに新しくデータを追加してみます。

以下の様にクエリを書いています。

_sourceCategory="AWSEC2/WindowsSarver"
| parse "<Computer>*</Computer>" as ec2_host // ここでパースしたデータを新しく保存します。
| save append path://"/Library/Users/SakumaShogo/ec2host"

実行すると以下の様に確認のポップが出ます。

Google 翻訳:このクエリを実行してもよろしいですか?これを行うと、要求に応じてデータがファイル/ビューに保存されます。これにより、ビュー内に重複レコードが作成されたり、ファイル内のデータ (既に存在する場合) が上書きされる可能性があります。

"Run" を押下した後テーブルを確認してみると、以下のようにすぐ更新されていることが確認できました。

参考元:save Search Operator | Sumo Logic Docs

ログ検索結果と突合させる

Lookup Table を参照して、ログ検索結果と突合させるために "lookup" というクエリ演算子が用意されています。

構文は以下になります。

lookup テーブルのフィールド名 from path: "Lookup Table のパス" on ログ検索で使用しているフィールド名=突合するためのテーブルのフィールド名

そしたら、先ほど save 演算子で作成した ec2host という Lookup Table を使って検索結果とマッチするか確認してみます。

以下のクエリを作成しました。

_sourceCategory="AWSEC2/WindowsSarver"
| parse "<Computer>*</Computer>" as host_server // host_server というフィールドを作成
| lookup ec2_host as aaa from path://"/Library/Users/SakumaShogo/ec2host" on ec2_host=host_server
// 3行目の "ec2_host=host_server" で突合させています。

※ Lookup Table 作成時の PRIMARY KEY について補足です。もし、ログ検索時に突合する対象の Lookup Table のフィールドが PRIMARY KEY になっていない場合、以下のエラーが表示されます。

英文:You can only perform a lookup using fields defined as primary keys. If the key consists of multiple fields, use all of the primary key fields in the lookup.

Google翻訳:主キーとして定義されたフィールドを使用した検索のみを実行できます。キーが複数のフィールドで構成されている場合は、ルックアップですべての主キー フィールドを使用します。

今回のクエリの場合は、"ec2_host=host_server" の "ec2_host" の部分が Lookup Table のフィールドでして、PRIMARY KEY を設定しているのでログ検索で突合させることができています。

そして結果としては、以下の様にマッチしたログが表示されています。

参考元:lookup Search Operator | Sumo Logic Docs

Lookup Table を自動更新する

最後に Lookup Table を定期的に自動更新する方法です。こちらは、常に新しいデータを Lookup Table に保持させたい場合に使用してください。

結論、Scheduled Search を使用してデータの定期更新を実現させます。

まずはクエリを作成します。補足ですが、save 演算子は "ログ検索" で Lookup Table にデータを保存する時にだけ使用できるため、必要ありません。Scheduled Search を使用する場合は、UI 操作で定期保存の設定が出来ます。

_sourceCategory="AWSEC2/WindowsSarver"
| parse "<Computer>*</Computer>" as ec2_host // ここでパースしたデータを新しく保存します。

クエリが作成出来たら、次は Scheduled Search の設定を行います。ログ検索画面右のメニューを開き、Save As.. を選択します。

すると以下の Save Item 画面が表示されますので、ログ検索の名前を入力します。※ 集計を行わないログ検索の場合は、Auto Parse が使えません。という警告メッセージが出ます。今回の場合は集計をしませんので、Search Mode を Manual に変更します。次に左下の Schedule this search を選択して自動更新の期間を設定していきます。

今回は、毎日 12:00 にクエリを実行させるようにしました。

Send Notfication を Every time a Search is complete にすると、Scheduled Search 機能で検索されたタイミングで Lookup Table に保存させるようになります。

次に Lookup Path で、対象の Lookup Table を選択します。

そしたら、Save operation method で、Full Replace(すべで置き換え)か、Merge(すべて統合)を選択して、Save で完了です。

参考元:Save to Lookup | Sumo Logic Docs

ユースケース

以下の様なデータを Sumo Logic の LookupTable に保存させ、ログ検索で突合させるたり出来ます。

  • 許容している IP アドレスのリスト
  • ユーザ情報・ドメインのリスト
  • 資産情報(インベントリ)のリスト

例えば「退職した特定のユーザの認証情報が残っていないか」や「資産 PC に別のユーザがログインしていないか」などをログ検索で突合して異常を把握・検知出来ます。

逆に Sumo Logic からの Output としては以下のユースケースも考えられます。

  • ログ検索で突合させた結果、マッチ "しない" Entity が結果に出力された時にアラートを発報
  • Lookup Table を自動定期更新することで、最新のリストを .csv でダウンロード

まとめ

いかがでしたでしょうか? Lookup Table ではユーザの "保有している情報" を使ってログ検索で異常を発見することが出来ます。 他にもアラートの発報で迅速な対応に繋げたり、ダッシュボードとして可視化しておけばいつでもモニタリングすることが出来ます。

ぜひ LookupTable の活用をご検討いただければと思います。皆様の一助になれば幸いです。