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

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

Sumo Logic

CSE Automation で Slack 連携してみた

Sumo Logic

Sumo Logic アカウントを持っていないユーザへのダッシュボードの共有方法は?

Sumo Logic

Sumo Logic ダッシュボードやフォルダ共有について

Log Mapping をAPIで登録してみた