このトピックでは、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 が提供する論理関数の使用
操作
関数
例
論理積
andop_and
op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))論理和
orop_or
op_or(op_le(v("age"), 18), op_gt(v("age"), 65))論理否定
notop_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"))存在確認
inop_in
op_in(v("result"), ["pass", "ok"])非存在確認
not inop_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 フィールドが存在し、その内容が数字のみで構成されている場合、イベントは破棄されます。