すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:基本構文

最終更新日:Sep 12, 2026

このトピックでは、Simple Log Service (SLS) のドメイン固有言語 (DSL) の基本構文について説明します。

コメント

構文を説明するコメントを追加するには、行をシャープ記号 (#) で始めます。次に例を示します。

# ログのデフォルトトピックを設定します。これは行頭のコメントです。
e_set("__topic__", "access_log")   # ログのデフォルトトピックを設定します。これは行末のコメントです。

改行

関数呼び出しのパラメーターリストが長すぎる場合は、改行を追加できます。

  • 関数呼び出しでカンマ (,) を使用している場合、その直後で改行できます。

  • 文字列が長すぎて改行が必要な場合は、バックスラッシュ (\) を使用できます。

例:

e_set("__topic__", "v1",
        "type", "v2",       # パラメーターがコンマ (,) で区切られている場合は、直接改行を追加できます。
        "length", 100)
e_set("__topic__", "this is a very long long long .........." \
                            "......long text")  # バックスラッシュ (\) を使用して改行します。

関数の呼び出し方法

  • 基本的な呼び出し

    e_set("abc", "xyz")
    説明

    データ変換文を作成する際は、入力パラメーターのデータ型と数が、関数の構文と一致している必要があります。

  • 基本的な可変長引数の呼び出し

    str_replace(value, old [,new [,count] ]) 
    説明

    関数のパラメーターに角括弧 ([]) が含まれている場合、new や count のように角括弧内にあるパラメーターはオプションです。これらはキーワード引数として呼び出すことはできず、指定された順序で呼び出す必要があります。

    # 無効な例
    str_replace("a-b-c", "-", new='%')
    str_replace("a-b-c", "-", new='%', count=1)
    # 有効な例
    str_replace("a-b-c", "-", '%')
    str_replace("a-b-c", "-", '%', 2)
  • キーワード引数の呼び出し

    デフォルト値を持つパラメーターはキーワード引数です。たとえば、e_set("abc", "xyz", mode="fill") の mode はキーワード引数です。

    • 一部の関数では、特定の条件下でキーワード引数に値を渡す必要があります。詳細については、各関数のパラメーターの説明をご参照ください。

    • キーワード引数に値を渡すには、mode=... の形式を使用します。

    • キーワード引数が複数ある場合、指定する順序は関係ありません。たとえば、e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|") は e_csv("data", ["f1", "f2", "f3"], quote="|", sep='#') と同じです。

    説明

    関数呼び出しでは、キーワード引数は常に、キーワード引数以外のパラメーターの後に指定する必要があります。

  • ネストされた関数呼び出し

    ある関数の戻り値を別の関数のパラメーターとして使用できます。データ型が一致することを確認してください。例:

    e_set("abc", v("xyz"))
    e_set("abc", str_lower(v("xyz")))
  • 可変長引数

    一部の関数は可変長引数をサポートしています。v("f1", ....) は、v("f1", "f2", "f3") のように、複数のパラメーターを渡せることを示します。

    キーワード引数を渡す場合は、最後に配置する必要があります。例: v("f1", "f2", "f3", "f4", mode="fill")

演算子

  • 比較演算子

    SLS DSL の標準モードでは、>、<、>=、<=、!=、== などの比較演算子を使用できます。SLS が提供する比較関数を使用して、同じ効果を得ることもできます。

    • 比較演算子の直接使用

      # 以下の例は、比較演算子の使用方法を示しています。比較結果が True の場合、ログは破棄されます。
      e_if(3 > 2, DROP)       # 3 が 2 より大きい場合、ログは破棄されます。
      e_if(3 < 2, DROP)       # 3 が 2 より小さい場合、ログは破棄されます。
      e_if(3 >= 2, DROP)      # 3 が 2 以上の場合、ログは破棄されます。
      e_if(3 <= 2, DROP)      # 3 が 2 以下の場合、ログは破棄されます。
      e_if(3 == 2, DROP)      # 3 が 2 と等しい場合、ログは破棄されます。
      e_if(3 != 2, DROP)      # 3 が 2 と等しくない場合、ログは破棄されます。
      e_if(1 < 2 < 3, DROP)   # 2 が 1 より大きく、かつ 3 より小さい場合、ログは破棄されます。
      e_if(0 < ct_int(v('x')) < 100, DROP) # x フィールドの値が 0 より大きく、かつ 100 より小さい場合、ログは破棄されます。
    • SLS が提供する比較関数の使用

      操作

      関数

      例

      等しい ==

      op_eq

      op_eq(v("name"), "田中太郎")

      等しくない !=

      op_ne

      op_ne(v("name"), "田中太郎")

      より大きい >

      op_gt

      op_gt(ct_int(v("age")), 18)

      以上 >=

      op_ge

      op_ge(ct_int(v("age")), 18)

      より小さい <

      op_lt

      op_lt(ct_int(v("age")), 18)

      以下 <=

      op_le

      op_le(ct_int(v("age")), 18)

  • 論理演算子

    SLS DSL の標準モードでは、 and、or、not などの論理演算子を使用できます。SLS が提供する論理関数を使用して、同じ効果を得ることもできます。

    • 論理演算子の直接使用

      # 以下の例は、論理演算子の使用方法を示しています。論理演算の結果が True の場合、ログは破棄されます。
      e_if(True and False, DROP)     # 結果は False です。
      e_if(True or False, DROP)      # 結果は True です。
      e_if(True and not False, DROP) # 結果は True です。
      e_if(3 > 2 and 1 < 3, DROP)    # 結果は True です。
      e_if(ct_int(v('x')) > 100 or ct_int(v('y')) < 100, DROP) # x フィールドの値が 100 より大きい、または y フィールドの値が 100 より小さい場合。
    • SLS が提供する論理関数の使用

      操作

      関数

      例

      論理積 and

      op_and

      op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))

      論理和 or

      op_or

      op_or(op_le(v("age"), 18), op_gt(v("age"), 65))

      論理否定 not

      op_not

      op_not(op_gt(v("age"), 18))

  • その他の演算子

    以下の演算子は、SLS DSL の標準モードでは直接使用できません。SLS では、同等の処理を行うための関数が提供されています。

    操作

    関数

    例

    加算 +

    op_add

    op_add(v("age"), 2)

    減算 -

    op_sub

    op_sub(v("age"), 2)

    乗算 *

    op_mul

    op_mul(v("size"), 2)

    べき乗 **

    op_pow

    op_pow(v("size"), 2)

    切り捨て除算 //

    op_div_floor

    op_div_floor(v("bytes"), 1024)

    剰余演算 %

    op_mod

    op_mod(v("age"), 10)

    否定 -

    op_neg

    op_neg(v("profit"))

    存在確認 in

    op_in

    op_in(v("result"), ["pass", "ok"])

    非存在確認 not in

    op_not_in

    op_not_in(v("result"), ["pass", "ok"])

    文字列スライス [ ...]

    op_slice

    op_slice(v("message"), 0, 20)

    a フィールドの値を 3600*6 に設定する例を次に示します。

    # * 
    e_set("a", 3600 * 6)           # 無効
    e_set("a", op_mul(3600, 6))    # 有効
    
    # /
    e_set("bytes_kb", v("bytes") / 1024)                 # 無効
    e_set("bytes_kb", op_div_floor(v("bytes"), 1024))    # 有効

真偽値評価

一部の関数は条件を受け取り、その条件の値に基づいて後続のロジックを決定します。この条件には、静的フィールドまたは式の戻り値を指定できます。

SLS DSL は、あらゆるデータ型の評価をサポートしています。次の表では、さまざまなデータ型における true と false の評価条件を説明します。

データ型

True になる条件

False になる条件

ブール値

True, true

False, false

None

該当なし

常に False

数値

0 または 0.0 ではない

0 または 0.0

文字列

空ではない

空の文字列

バイト列

空ではない

空のバイト列

タプル

空ではない

空のタプル

リスト

空ではない

空のリスト

辞書

空ではない

空の辞書

テーブル

存在する場合

null オブジェクト (None)

日時

存在する場合

null オブジェクト (None)

イベントが破棄される例は次のとおりです。

e_if(True, DROP)                     # 入力が True の場合、イベントは破棄されます。
e_if(1, DROP)                        # 入力が 1 の場合、イベントは破棄されます。
e_if(v("abc"), DROP)                 # abc フィールドが存在し、空でない場合、イベントは破棄されます。
e_if(str_isdigit(v("abc")), DROP)    # abc フィールドが存在し、その内容が数字のみで構成されている場合、イベントは破棄されます。