基本構文と言語構成要素

構成要素構文・記法
tag という名前の予約属性またはタグtag (プレフィックスは不要)
attr という名前の属性@attr (プレフィックス @ を使用)
field という名前の計算フィールド#field (プレフィックス # を使用)
文字列リテラル (引用)
例: text または Quoted "text"
"text"
"Quoted \"text\""
(ログ検索構文が適用されます)
数値リテラル (数字)
例: ten
10
xy というパラメーターを持つ func という名前の関数 func(x, y)
演算子
例: xy というオペランドを持つバイナリ演算子 *
x*y

演算子

利用可能な演算子 (優先順)

演算子説明
()グループ化または関数の呼び出し
!NOT-論理否定または算術否定
^%べき乗、剰余
*/乗算、除算
+-加算、減算
<<=>>=未満、以下、超、以上
==!=一致、不一致
&&AND論理積
||, OR論理和

関数

利用可能な関数は以下のカテゴリーに分類されています。

算術演算

abs(num 数値)

数値の絶対値を返します。

計算式結果
あるログイベントが次の属性を持つ場合:
- @client_latency = 2
- @server_latency = 3
#discrepancy = abs(@client_latency - @server_latency)#discrepancy = 1

ceil(num 数値)

数値を最も近い整数に切り上げます。

計算式結果
あるログイベントが次の属性を持つ場合:
@value = 2.2
#rounded_up = ceil(@value)#rounded_up = 3

floor(num 数値)

数値を最も近い整数に切り下げます。

計算式結果
あるログイベントが次の属性を持つ場合:
@value = 9.99
#rounded_down = floor(@value)#rounded_down = 9

max(num 数値, [ num 数値, ...])

数値の集合から最大値を見つけます。

計算式結果
あるログイベントが次の属性を持つ場合:
@CPU_temperatures = [-1, 1, 5, 5]
#highest_temp = max(@CPU_temperatures)#highest_temp = 5

min(num 数値, [num 数値, ...])

数値の集合から最小値を見つけます。

計算式結果
あるログイベントが次の属性を持つ場合:
@CPU_temperatures = [-1, 1, 5, 5]
#lowest_temp = min(@CPU_temperatures)#lowest_temp = -1

round(num 数値, int 四捨五入する桁数)

数値を丸めます。オプションで、小数点以下の桁数を指定することもできます。

計算式結果
あるログイベントが次の属性を持つ場合:
@value = -1234.01
#rounded_to_tens = round(@value, -1)#rounded_to_tens = -1230

文字列

concat(str 文字列 [str 文字列, expr 値, ...])

複数の値を 1 つの文字列に結合します。

計算式結果
あるログイベントが次の属性を持つ場合:
- @city = “Paris”
- @country = “France”
#region = concat(@city, ", ", @country)#region = “Paris, France”

lower(str 文字列)

文字列を小文字に変換します。

計算式結果
あるログイベントが次の属性を持つ場合:
@first_name = “Bob”
#lower_name = lower(@first_name)#lower_name = “bob”

left(str 文字列, int 文字数)

文字列の先頭からテキストの一部を取り出します。

計算式結果
あるログイベントが次の属性を持つ場合:
@price = “USD10.50”
#currency = left(@price, 3)#currency = “USD”

proper(str 文字列)

文字列を単語の先頭だけ大文字にし、それ以外を小文字に変換します。

計算式結果
あるログイベントが次の属性を持つ場合:
@address = “123 main st”
#formatted_address = proper(@address)#formatted_address = “123 Main St”

split_before(str 文字列, str 区切り文字, int 区切り文字の出現回数)

文字列中の特定のパターンより前の部分のテキストを取り出します。

計算式結果
あるログイベントが次の属性を持つ場合:
@url = "www.example.com/path/to/split"
#url_extraction = split_before(@url, "/", 1)#url_extraction = "www.example.com/path"
#url_extraction = split_before(@url, "/", 2)#url_extraction = "www.example.com/path/to"

split_after(str 文字列, str 区切り文字, int 区切り文字の出現回数)

文字列中の特定のパターンより後の部分のテキストを取り出します。

計算式結果
あるログイベントが次の属性を持つ場合:
@url = "www.example.com/path/to/split"
#url_extraction = split_after(@url, "/", 0)#url_extraction = "path/to/split"
#url_extraction = split_after(@url, "/", 1)#url_extraction = "to/split"

substring(str 文字列, int 開始位置, int 取り出す長さ)

文字列の途中からテキストの一部を取り出します。

計算式結果
あるログイベントが次の属性を持つ場合:
@price = “USD10.50”
#dollar_value = substring(@price, 2, 2)#dollar_value = “10”

right(str 文字列, int 文字数)

文字列の末尾からテキストの一部を取り出します。

計算式結果
あるログイベントが次の属性を持つ場合:
@price = “USD10.50”
#cent_value = right(@price, 2)#cent_value = “50”

textjoin(str 区切り文字, bool 空の文字列を無視するかどうか, str 文字列 [str 文字列, expr 値, ...])

複数の値を、区切り文字を挟みながら 1 つの文字列に結合します。

計算式結果
あるログイベントが次の属性を持つ場合:
- @city = “Paris”
- @country = “France”
#region = textjoin(", ", "false", @city, @country)#region = “Paris, France”

upper(str 文字列)

文字列を大文字に変換します。

計算式結果
あるログイベントが次の属性を持つ場合: @first_name = “Bob”#upper_name = upper(@first_name)#upper_name = “BOB”

論理関数

if(expr 条件, expr 真の場合, expr 偽の場合)

条件を評価し、それに応じた値を返します。

計算式結果
あるログイベントが次の属性を持つ場合:
- @location = “Paris, France”
- @home = “New York, USA”
#abroad = if(@location == @home, "false", "true")#abroad = “true”

is_null(expr 値)

属性または式が null かどうかを調べます。

計算式結果
あるログイベントが次の属性を持つ場合:
- @users_online = 5
- @max_capacity = 0
is_null(@users_online / @max_capacity)“true”

参考資料

お役に立つドキュメント、リンクや記事: