概要

ダイナミックインスツルメンテーション式言語は、ログプローブメッセージテンプレート、メトリクスプローブ式、スパンタグ値、およびプローブ条件を定式化するのに役立つ言語です。一般的なプログラミング言語から構文要素を借用していますが、独自のルールもあります。この言語では、オブジェクト内のローカル変数、メソッドパラメーター、ネストされたフィールドにアクセスでき、比較演算子および論理演算子の使用をサポートしています。

例えば、count(myCollection) をメトリクス式として使用すると、コレクションのサイズからヒストグラムを作成することができます。メトリクス式は数値として評価されなければなりません。

ログテンプレートとタグの値では、式はテンプレートの静的な部分とブラケットで区切られます。例えば、User name is {user.name} です。ログテンプレート式は任意の値で評価することができます。もし、式の評価に失敗した場合は、UNDEFINED に置き換えられます。

プローブ条件はブール値で評価されなければなりません。例: startsWith(user.name, "abc")len(str) > 20 または a == b

一般的に、式言語は以下をサポートしています。

  • オブジェクト内のローカル変数、メソッドのパラメーター、深くネストされたフィールドや属性へのアクセス。
  • 比較演算子 (<>>=<===!=) を使って、変数、フィールド、定数を比較。例: localVar1.field1.field2 != 15
  • 論理演算子 (&&||not または !) を使って複雑なブール値を構築。
  • null リテラル (Python の nil に相当) を使用。

以下はサポートしていません

  • メソッドの呼び出し。ダイナミックインスツルメンテーションは副作用のあるコードの実行を許可しません。しかし、private フィールドに直接アクセスすることはできます。
  • このページで説明されている以外のネイティブプログラミング言語の構文。

以下のセクションでは、ダイナミックインスツルメンテーション式言語がサポートする変数と 操作について説明します。

コンテキスト変数

キーワード説明
@return戻り値へのアクセスを提供します
@duration呼び出し実行期間へのアクセスを提供します
@itコレクションの反復操作における現在値へのアクセスを提供します

文字列演算子

演算子説明
isEmpty(value_src)データの有無をチェックします。文字列の場合は len(str) == 0 と等価です。コレクションの場合は count(myCollection) == 0 と等価です。isEmpty("Hello") -> False
len(value_src)文字列の長さを取得します。len("Hello") -> 5
substring(value_src, startIndex, endIndex)部分文字列を取得します。substring("Hello", 0, 2) -> "He"
startsWith(value_src, string_literal)文字列が与えられた文字列リテラルで始まるかどうかをチェックします。startsWith("Hello", "He") -> True
endsWith(value_src, string_literal)文字列が与えられた文字列リテラルで終わるかどうかをチェックします。endsWith("Hello", "lo") -> True
contains(value_src, string_literal)文字列が文字列リテラルを含むかどうかをチェックします。contains("Hello", "ll") -> True
matches(value_src, string_literal)文字列が文字列リテラルとして指定された正規表現にマッチするかどうかをチェックします。matches("Hello", "^H.*o$") -> True

コレクション演算子

以下の例では、[1,2,3] として定義された myCollection という変数を使用しています。

演算子説明
any(value_src, {predicate})コレクション内に、与えられた述語を満たす要素が少なくとも 1 つあるかどうかをチェックします。現在の要素には @it 参照でアクセスします。any(myCollection, @it > 2) -> True
all(value_src, {predicate})コレクション内のすべての要素が指定された述語を満たすかどうかをチェックします。現在の要素には @it 参照でアクセスします。all(myCollection, @it < 4) -> True
filter(value_src, {predicate})述語を使ってコレクションの要素をフィルターします。現在の要素には @it 参照でアクセスします。filter(myCollection, @it > 1) -> [2,3]
len(value_src)コレクションサイズを取得します。len(myCollection) -> 3
[ n ]コレクションの場合、コレクション内の n 番目のアイテムを返します。マップと辞書の場合、キー n に対応する値を返します。項目が存在しない場合、式はエラーを返します。myCollection[1] -> 2