Log Mapping をAPIで登録してみた

 2024.01.22  AI

こんにちは(‾◡◝)

技術統括部のAIです。ただの人間です。

今回はCSEの機能であるLog Mappingをcurlコマンドを使ってAPIで追加する方法をご紹介します。
もちろんSumo社が事前に定義したものはたくさんありますが、例えばZoomのLog Mappingがないため自分で設定しないといけない場合もあると思います。

今回は新しく「ai_test_01」というLog Mappingを追加する方法を説明します。

 

そもそもLog Mappingとは?

Log Mappingとは、CIPからCSEに送られるメッセージから抽出されたキーと値のペアからRecordを構築する方法をCSEに指示するプロセスになります。
これは正規化や標準化などNormalizationと呼ぶこともあります。

どのLog Mappingを使ってどのメッセージを処理するかを識別するために、Log Mappingごとにベンダー名、製品名、メッセージ形式およびイベントIDなどを指定します。

例えば、ユーザ名をベンダAのメッセージでは「user」、ベンダBのメッセージでは「user_name」と定義されている場合、CSEにメッセージを取り込む際にユーザ名を「username」に標準化します。

Log Mappingを使うことにより、形式の異なるメッセージをCSEに取り込んでも標準化された値でSignalやInsightが生成することができます。

事前準備

APIでLog Mappingを追加する際に必要な情報は以下の2点です。

  • Access Key
  • JSONファイル

まずAccess Keyは[ログインユーザー名] -> [Preferences] -> [+ Add Access Key]から作成することができます。
Keyは生成時のみ表示されるため、必ずメモに残してください。1-1-1

次に追加したいLog Mappingの内容をJSONファイルにまとめます。
※1ファイルで追加できるLog Mappingは1つのみとなるため、複数追加したい場合は複数のJSONファイルをご準備ください。

Log Mappingを追加する上で必要な項目は、以下のヘルプページに記載された内容を参照して追加したい内容をまとめたJSONファイルを事前に準備しています。
https://api.jp.sumologic.com/docs/sec/#operation/CreateLogMapping

アスタリスク(*)が付いた項目に設定値がないと、crulコマンドを実行後にエラーとなってしまうので、ご注意ください。

サンプルJSONファイル

今回使うJSONファイルは以下のように作っています。
使用する前にコメントアウト( // )部分は削除してくださいね。

{
  "fields": {
  "name": "ai_test_01", // Log Mappingの名前
  "fields": [ // 複数設定する場合は、以下の{}をカンマでつなげて追記
      {
      "name": "test0-1", // 標準化した後の値
      "value": "test01a", // 標準化する前の値
        "valueType": null,
        "skippedValues": null,
        "lookup": null,
      "defaultValue": "aaa", // 標準化する前のキーのデフォルト値
        "format": null,
        "caseInsensitive": null,
        "alternateValues": null,
        "timeZone": null,
        "splitDelimiter": null,
        "splitIndex": null,
        "fieldJoin": null,
        "joinDelimiter": null,
        "formatParameters": null
      }
    ],
    "skippedValues": null,
    "structuredFields": {
    "logFormat": "JSON", // 対象メッセージのフォーマット
      "vendor": "Zoom", // 対象メッセージのベンダー名
      "product": "Zoom", // 対象メッセージの製品名
      "eventIdPattern": "_default_"
    },
  "structuredInputs": [ // WebUIの[IF INPUT MATCHES] 部分に表示
      {
        "logFormat": "JSON",
        "vendor": "Zoom",
        "product": "Zoom",
        "eventIdPattern": "_default_"
      }
    ],
    "recordType": "Audit", // レコードタイプの設定
  "productGuid": "7205db83-88e8-4074-8288-136a6c493d69", // WebUIの[THEN CREATE RECORD] 部分に表示
    "relatesEntities": true,
  "enabled": true // Log Mappingの有効化
  }
}

※[productGuid]ですが、ベンダー名と製品名の決まったペアIDを指定しなければいけません。
※ヘルプページに記載がないため、記事公開時点ではAPIでLog Mapping情報を取得し、指定したいIDを見つける必要があります。

追加用テンプレート

Log Mappingを追加するために以下のテンプレートを使います。
curl -u "<accessId>:<accessKey>" -X POST -H <REQUEST BODY SCHEMA> -T <JSON file> <API Endpoint/PATH>

  • <accessId> ★
    事前準備で作成したAccess ID
  • <accessKey> ★
    事前準備で作成したAccess Key
  • <REQUEST BODY SCHEMA>
    JSONファイルを利用するため、"Content-Type: application/json" を使います
  • <JSON file> ★
    使用するJSONファイルの名前(例:log_mapping_test01.json)
  • <API Endpoint/PATH>
    https://api.jp.sumologic.com/api/sec/v1/log-mappings を使います

※★はお客様によって書き換えていただく部分です。

上記を組み合わせると、以下のようなコマンドになります。
※Access IDとKeyはマスクしているため、環境にあわせて書き換えてください。

curl -u "XXX:xxx" -X POST -H "Content-Type: application/json" -T log_mapping_test01.json https://api.jp.sumologic.com/api/sec/v1/log-mappings

こちらを使ってLog Mappingを追加していきます!

API実行

コマンドプロンプトを起動し、使用するJSONファイルがあるディレクトリに移動します。
C:\Users\ai>cd "Desktop\sumoAPI\log mapping"

C:\Users\ai\Desktop\sumoAPI\log mapping>dir
2024/01/22  10:36    <DIR>          .
2024/01/22  10:36    <DIR>          ..
2024/01/22  10:38             1,039 log_mapping_test01.json

前節のコマンドを実行し成功すると、JSONファイルの中身が出力されます。
C:\Users\ai\Desktop\sumoAPI\log mapping>
curl -u "XXX:xxx" -X POST -H "Content-Type: application/json" -T log_mapping_test01.json https://api.jp.sumologic.com/api/sec/v1/log-mappings

{"data": {"id": "da53627b-911b-45a5-8cc8-146f2853cdb1", "name": "ai_test_01", "source": "user", "skippedValues": [",", "-"], "fields": [{"name": "test0-1", "value": "test01a", "valueType": null, "skippedValues": null, "lookup": null, "defaultValue": "aaa", "format": null, "caseInsensitive": null, "alternateValues": null, "timeZone": null, "splitDelimiter": null, "splitIndex": null, "fieldJoin": null, "joinDelimiter": null, "formatParameters": null}], "enabled": true, "relatesEntities": true, "unstructuredFields": null, "structuredInputs": [{"vendor": "Zoom", "product": "Zoom", "eventIdPattern": "_default_", "logFormat": "JSON"}], "recordType": "Audit", "productGuid": "7205db83-88e8-4074-8288-136a6c493d69"}, "errors": []}

C:\Users\ai\Desktop\sumoAPI\log mapping>

追加に失敗すると以下のようなログが出力されますので、JSONファイルの中身やAccess IDとKeyの組み合わせに問題ないかをご確認ください。
C:\Users\ai\Desktop\sumoAPI\log mapping>
curl -u "XXX:xxx" -X POST -H "Content-Type: application/json" -T log_mapping_test01.json https://api.jp.sumologic.com/api/sec/v1/log-mappings

<!doctype html>
<html lang=en>
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>

実行結果の確認

CSE画面から[LogMappings]タブをクリックします。10-1-2

一覧画面から、今回追加した「ai_test_01」が確認できます。
12-2

名前をクリックすると詳細が表示されますので、JSONファイルの内容が正しく登録されていることを確認します。
11-3

まとめ

このようにAPIを使ってLog Mappingを追加することができました!

テンプレートを少し変えるだけでLog Mappingの一覧を取得したり、設定値の更新ができますので、ぜひご活用ください。


RECENT POST「Sumo Logic」の最新記事


Sumo Logic

【第2弾】 Sumo Logic 可視化サービス Terilogy Blend for Cato Networksリリース

Sumo Logic

Sumo LogicのAutomation機能でSlackにメンションするメッセージを送ってみた

Sumo Logic

Sumologicで目にするOpen Telemetry Collectorとは(中編)

Sumo Logic

Sumologicで目にするOpen Telemetry Collectorとは(前編)

Log Mapping をAPIで登録してみた