本ページでは、LOG ドメイン固有言語 (DSL) のデータ構造について説明します。

基本的なデータ構造

次の表で基本的なデータ構造について説明します。

データ型 説明
Integer 1、2、3、4 などの整数。 フィールドに割り当てたり、パラメーター値として渡すことができます。

たとえば、e_set("f1", 100) 関数は f1 フィールドの値を 100 に設定します。

Float 1.5 や 2.3 などの浮動小数点数。 フィールドに割り当てたり、パラメーター値として渡すことができます。

たとえば、e_set("f1", 1.5) 関数は f1 フィールドの値を 1.5 に設定します。

String 文字列は複数の形式で表せます。 以下に例を示します。
  • "abc"'abc' と等しいです。 文字列に二重引用符 (") が含まれる場合、'abc"xyz' の形式で記述します。 また、バックスラッシュ (\) を使用して、二重引用符をエスケープします。"abc\"xyz"というように記述します。 'abc"xyz' と比べると、"abc\"xyz" は比較的冗長です。
  • バックスラッシュは、(\) 特殊文字をエスケープするためにも使用できます。 たとえば、"\\abc\\xyz"\abc\xyz 文字列を指します。
  • r"\\10.64.1.1\share\folder" および "\\\\10.64.1.1\\share\\folder" は両方とも同じで、\\10.64.1.1\share\folder 文字列を指します。
  • マルチバイト文字列は Unicode でエンコードされます。 たとえば、漢字 2 文字で構成される文字列 は 2 です。
  • 正規表現は文字列として表されます。
e_search 関数で使用される文字列は、単一引用符 (') ではなく、二重引用符 (") で囲む必要があります。 たとえば、e_search("domain: '/url/test.jsp'") は間違った形式です。 正しい形式は e_search('domain: "/url/test.jsp"') です。
Byte 例: b'abc'。 バイトは、文字列とは異なる形式でメモリにエンコードされます。 いくつかの特殊な関数で受け渡しに使用されます。
None None および null のどちらも NULL 値を示します。 関数の名前付きパラメーターの多くで、特定のデフォルトの動作を示すために、デフォルト値として None が使用されます。
None または null は空の文字列を意味しません。
List リストは配列とも呼ばれます (例: [1, 2, 3, 4])。
  • 一部の関数ではリストをパラメーターとして受け取ります。たとえば、e_dict_map("dict data", ["f1", "f2", "f3"], ...) です。
  • 一部の関数は結果としてリストを返します。 たとえば、配列を抽出する json_select 関数を呼び出すと、リストが返されます。
Tuple 例: (1, 2, 3, 4)。 一部の関数はパラメーターとしてタプルを受け取ります。 タプルはリストに似ています。
Dictionary {"key": "value", "k2": "v2", ...} 形式のキーと値のペアのコレクションです。 キーは通常、一意の文字列であり、値は任意のデータ型にすることができます。 キーと値のペアは、順序付けされていない方法でハッシュテーブルに格納されます。
  • イベントは特別な辞書です。
  • 一部の関数は、特定の形式で辞書を受け取ることができます。たとえば、{"key": [1,2, 3], "ke": {"k3": "va3"} } です。
  • 辞書の構造は、フィールドを辞書にマッピングするための入力データとしても使用されます。
Boolean 例: TrueFalsetrue、 および false
Table 行と列で構成される構造です。 外部リソースから複数の行で構成される区切り付きデータを読み込むことにより、テーブルを構築できます。 Relational Database Service (RDS) データベースまたはログストアから複数の列で構成されるデータを読み込んで、テーブルを構築することもできます。 テーブルは、マッピングやエンリッチメントなどの高度な操作で使用されます。
Datetime object 日付と時刻を示すメモリオブジェクトです。 UNIX タイムスタンプまたはフォーマットされた時間文字列に変換できます。 dt_ 関数に渡して処理することができます。

イベントの構造とフィールド

イベントの構造とフィールドは次のとおりです。
  • 基本構造

    イベントはデータ処理機能の辞書構造で処理されます。たとえば、{"__topic__": "access_log", "content": "....."} です。

    辞書のキーと値は、ログのフィールドと値に対応しています。

    イベントのキーと値は文字列で表され、キーは一意である必要があります。
  • メタフィールド
    LOG DSL は以下のメタフィールドをサポートしています。
    • __time__: Log Service がログを受信した時刻。 値は、UNIX 時間標準に従う整数文字列です。 UTC 1970 年 1 月 1 日 木曜日 00:00:00 から経過した秒数を示します。
    • __topic__: ログのトピック。 トピックは、ログストア内のログをグループ化するために使用されます。 ログの書き込み時に指定でき、照会時にフィルターとして機能します。
    • __source__: ログのソース。 たとえば、このフィールドの値は、ログを生成するサーバーの IP アドレスにすることができます。
  • 時間フィールドの変更
    __time__ フィールドの値を変更すると、ログのイベント時間を変更できます。 日付と時刻の関数を使用して、__time__ フィールドでより多くの操作を実行できます。
    ログの __time__ フィールドが削除された場合、ログが処理されるときのシステム時刻が、宛先のログストアにログが書き込まれる際の新しいイベント時刻として使用されます。
  • タグ
    タグは、ログのフィールドを区別するために使用されます。 タグの形式は __tag__: name です。
    • ソースログストアでパブリック IP アドレスを記録する機能が有効になっている場合、ログには __tag__:__receive_time__ というタグが含まれています。
    • Container Service のログには、多くのコンテナー関連のタグが含まれています (例: __tag__:__container_name__)。
    • タグは追加および変更できます。 たとえば、e_set("__tag__:type", "access_log") 関数を呼び出すことで、type という名前のタグを追加できます。
  • 割り当て中の型自動変換
    イベントのキーと値は文字列として表されます。 したがって、フィールドに値を割り当てると、値は自動的に文字列に変換されます。 例:
    e_set("v1", 12.3)
    e_set("v2", True)
    上記の値を呼び出すと、v1 フィールドは文字列 12.3 に設定され、v2 フィールドは文字列 true に設定されます。
    次の表に、さまざまなデータ型の変換例を示します。
    データ型 ターゲットタイプ ターゲット値
    Integer 1 String "1"
    Float 1.2 String "1.2"
    Boolean True String "true"
    Byte b"123" UTF-8 でエンコードされた文字列 "123"
    Tuple

    例 1: (1, 2, 3)

    例 2: ("a", 1)

    リストを表す文字列

    例 1: "[1, 2, 3]"

    例 2: "[\"a\", 1]"

    List

    例 1: [1,2,3]

    例 2: ["a", 1]

    String

    例 1: "[1, 2, 3]"

    例 2: "[\"a\", 1]"

    Dictionary {"1":2, "3":4} String "{\"1\": 2, \"3\": 4}"
    Date and time datetime(2018, 10, 10, 10, 10, 10) ISO 形式で時間を表す文字列 2018-10-10 10:10:10

識別子

データ処理機能は、フィールド名または値を表す識別子を提供します。 識別子を使用して、コードを簡略化したり、コードを理解しやすくしたりできます。
識別子 データ型 同等
true Boolean True
false Boolean False
null None None
F_TAGS String tag フィールドを表す正規表現: "__tag__: +"
F_META String tag__topic__、および __source__ フィールドを表す正規表現: __tag__:.+|__topic__|__source__
F_TIME String __time__
F_PACK_META String pack meta フィールドを表す正規表現: "__pack_meta__|__tag__:__pack_id__"
F_RECEIVE_TIME String "__tag__:__receive_time__"

JSON オブジェクト

JSON オブジェクトは、JSON 式関数 json_select および json_parse によって返されます。 オブジェクトは基本的なデータ構造で表されます。 詳細については、「基本的なデータ構造」をご参照ください。 次の表は、文字列がどのように JSON オブジェクトに変換されるかを示しています。
文字列 JSON オブジェクト データ型
1 1 Integer
1.2 1.2 Float
true True Boolean
false False Boolean
"abc" "abc" String
null None None
["v1", "v2", "v3"] ["v1", "v2", "v3"] List
["v1", 3, 4.0] ["v1", 3, 4.0] List
{"v1": 100, "v2": "good"} {"v1": 100, "v2": "good"} Dictionary
{"v1": {"v11": 100, "v2": 200}, "v3": "good"} {"v1": {"v11": 100, "v2": 200}, "v3": "good"} Dictionary