このトピックでは、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.