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

コメント

行コメントは先頭に番号記号 (#) を付けます。 例:
# Set the default topic. (This is a comment placed at the beginning of a step.)
e_set("__topic__", "access_log")   # Set the default topic. (This is a comment placed at the end of a step.)

行の折り返し

関数のパラメーターリストが 1 行に収まらない場合は、パラメーターリストを分割する必要がある場合があります。 パラメーターリストにコンマ (,) が含まれていれば、コンマ (,) の後でリストを分けます。 文字列が長すぎる場合は、バックスラッシュ (\) で分割し、その文字列が次の行に続いていることを示します。 例
e_set("__topic__", "v1",
        "type", "v2",       # Break after a comma.
        "length", 100)
e_set("__topic__", "this is a very long long long..." \
                            "...long text")

関数の呼び出し

  • 基本的な関数の呼び出し
    例:
    e_set("abc", "xyz")
    関数に渡すパラメーターの数は、関数に定義されたパラメーターの数と同じでなければなりません。
  • 名前付きパラメーター
    デフォルト値を持つパラメーターは、名前付きパラメーターと呼ばれます。 たとえば、関数 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")

演算子

標準モードの LOG DSLは、演算子を直接使用することはできません。 関数を使用することで、対応する演算を実装できます。
演算 関数
加算 (+) 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(["pass", "ok"], v("result"))
非存在チェック (not in) op_not_in op_in(["pass", "ok"], v("result"))
論理積 AND (and) op_and op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))
論理和 OR (or) op_or op_or(op_le(v("age"), 18), op_gt(v("age"), 65))
否定 NOT (not) op_not op_not(op_gt(v("age"), 18))
等号 (==) op_eq op_eq(v("name"), "xiao ming")
不等号 (!=) op_ne op_ne(v("name"), "xiao ming")
大なり (>) op_gt op_gt(ct_int(v("age")), )
以上 (>=) 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)
文字列の切り取り [ ...] op_slice op_slice(v("message"), 0, 20)
例:
# * 
e_set("a", 3600 * 6)    # Wrong
e_set("a", op_mul(3600, 6))    # Correct

# /
e_set("bytes_kb", v("bytes") / 1024)    # Wrong
e_set("bytes_kb", op_div_floor(v("bytes"), 1024))    # Correct

真偽判定

一部の関数は、条件が true か false かをチェックすることにより、イベント処理ロジックを決定します。 条件は、固定値または式関数によって返される値にすることができます。

LOG DSL は、次の表に記載されている規則に従って、すべてのデータ型の真偽判定をサポートしています。
データ型 True False
Boolean True または true False または false
None - 常に false
Number 0 や 0.0 以外 0 または 0.0
String 空でない
Byte 空でない
Tuple 空でない
List 空でない
Dictionary 空でない
Table オブジェクトが存在する 値が NULL (None) である
Datetime オブジェクトが存在する 値が NULL (None) である
次の関数は、条件に基づいてイベントを破棄します。
e_if(True, DROP)      # Discard all events.
e_if(1, DROP)       # Discard all events.
e_if(v("abc"), DROP)      # Discard an event if the abc field exists and is not empty.
e_if(str_isdigit(v("abc")), DROP) # Discard an event if the abc field exists and consists of only digits.