アラートモニタリングルールでは、評価式の実行結果を使用して指定したトリガー条件が満たされているかどうかを確認します。 評価式の実行結果は、アラートの重大度を動的に評価するためにも使用されます。 指定されたクエリ文の結果が入力で、集合演算の結果フィールドは変数です。 評価式で指定された条件が 満たされ、連続するトリガーが指定されたしきい値に一致すると、アラートがトリガーされます。 このトピックでは、評価式の使用方法について説明します。

制限事項

アラートモニタリングルールで指定できる評価式には、以下の制限があります。
  • 負の数は括弧 ( )で囲む必要があります (例:x+(-100)<100)。
  • 数値は 64 ビット浮動小数点数に変換されます。 比較を使用すると、エラーが発生する可能性があります。
  • 変数名には英数字のみ使用でき、先頭は文字とする必要があります。
  • 評価式の長さは 1 ~ 128 文字です。
  • アラートは、指定された評価式の結果が true であり、かつ連続するトリガーが指定されたしきい値に一致した場合にのみトリガーされます。 たとえば、評価式が 100+100 の場合、 結果は 200 となり true ではないため、アラートはトリガーされません。
  • Log Service では、true および false の 2 つの単語は予約されています。 また、ドル記号 ($) およびピリオド (.) の 2 つの特殊文字も予約されています。これらの単語および文字を変数として使用することはできません。

構文

アラートモニタリングルールの評価式では、以下の構文タイプがサポートされています。
構文の種類 説明
算術演算子 加算 (+)、減算 (-)、乗算 (*)、除算 (/)、剰余 (%) 演算子がサポートされています。

+-*/%

  • x * 100 + y > 200
  • x % 10 > 5
比較演算子 より大きい (>)、以上 (> =)、より小さい (<)、以下 (<=)、等しい (==)、等しくない (!=)、正規表現と一致 (=~)、および正規表現と不一致 (!~).
  • 正規表現のバックスラッシュ (\) はエスケープする必要があります。
  • 正規表現 2 (RE 2) の構文が使用されます。 詳細は、「構文」をご参照ください。
  • x >= 0
  • x < 100
  • x <= 100
  • x == 100
  • x == "foo"
  • 正規表現に一致:x =~ "\\w +"
論理演算子 AND (&&) および OR (||) 演算子がサポートされています。
  • x >= 0 && y <= 100
  • x > 0 || y >0
否定演算子 否定演算子 (!) がサポートされています。 !(a < 1 && a > 100)
数値定数 数値定数がサポートされています。 Log Service では数値定数が 64 ビット浮動小数点数に変換されます。 x > 100
文字列定数 文字列定数がサポートされています。 文字列定数の書式は '文字列' です(例:'string')。 foo == 'String'
ブール定数 ブール定数がサポートされています。 有効な値は、true および false です。 (x > 100) == true
括弧 括弧 () は、標準の優先順位に関係なく、トリガー条件の括弧で囲まれた部分を囲まれていない部分の前に評価するために使用します。 x * (y + 100) > 100
contains 関数 contains 関数を使用して、文字列に部分文字列が含まれているかどうかを確認できます。 例えば、contains(foo, 'hello'),を実行して true が返された場合、文字列 foo に部分文字列 hello が含まれていることを示しています。 contains(foo, 'hello')

集合演算の結果を評価する

Log Service では、複数の集合を関連付けたモニタリングがサポートされ、最大で 3 つの集合演算結果を評価できます。 詳細については、「複数集合の演算」をご参照ください。

評価式では変数も使用できます。 詳細については、「評価式を使用したトリガー条件の指定」をご参照ください。

演算方法

  • Log Service では、すべての数値が 64 ビット浮動小数点数に変換されます。
  • 文字列定数は、 '文字列'"文字列" のように、一重引用符 ( ') または二重引用符 (")で囲む必要があります。
  • ブール値は、true および false です。
演算子 演算方法
変数間の演算 文字列でない定数と変数の演算 文字列定数と変数の演算
加算演算子 (+)、減算演算子 (-)、乗算演算子 (*)、除算演算子 (/)、および剰余演算子(%) 算術演算子が適用される前に、左右のオペランドは 64 ビット浮動小数点数に変換されます。 算術演算子が適用される前に、左右のオペランドは 64 ビット浮動小数点数に変換されます。 サポートされていません。
比較演算子:

より大きい (>)、以上 (> =)、より小さい (<)、以下 (<=)、等しい (==)、および、等しくない (!=)

Log Service は、優先順位に並び替えられた以下の比較ルールを使用します。
  1. 左右のオペランドは 64 ビット浮動小数点数に変換され、数値順に比較されます。 変換に失敗した場合、次の優先順位の操作が実行されます。
  2. 左と右のオペランドは文字列に変換され、辞書式順序に基づいて比較されます。
左右のオペランドは 64 ビット浮動小数点数に変換され、数値順に比較されます。 左と右のオペランドは文字列に変換され、辞書式順序に基づいて比較されます。
一致演算子:

正規表現に一致 (=~) および正規表現と不一致 (!~)

一致演算子の適用前に、左右のオペランドは文字列に変換されます。 サポートされていません。 一致演算子の適用前に、左右のオペランドは文字列に変換されます。
論理演算子:

AND (&&) および OR (||)

左右のオペランドは部分式である必要があり、演算の結果はブール値である必要があります。 (評価式の例:$0.success_ratio < 90 && $1.average_upstream_response_time(s) > 60) 左右のオペランドは部分式である必要があり、演算の結果はブール値である必要があります。 (評価式の例:$0.success_ratio < 90 && $1.average_upstream_response_time(s) > 60) 左右のオペランドは部分式である必要があり、演算の結果はブール値である必要があります。 (評価式の例:$0.success_ratio < 90 && $1.average_upstream_response_time(s) > 60)
否定演算子 (!) 指定するオペランドは部分式である必要があり、演算の結果はブール値である必要があります。 (評価式の例:!($0.success_ratio < 90))

この演算子は、集合演算の結果フィールドではサポートされていません。

指定するオペランドは部分式である必要があり、演算の結果はブール値である必要があります。 (評価式の例:!($0.success_ratio < 90))

この演算子は、集合演算結果フィールドではサポートされていません。

指定するオペランドは部分式である必要があり、演算の結果はブール値である必要があります。 (評価式の例:!($0.success_ratio < 90))

この演算子は、集合演算の結果フィールドではサポートされていません。

contains 関数 contains 関数の実行前に、左右のオペランドは文字列に変換されます。 サポートされていません。 contains 関数の実行前に、左右のオペランドは文字列に変換されます。
括弧() 括弧 () は、標準の優先順位に関係なく、トリガー条件の括弧で囲まれた部分を囲まれていない部分の前に評価するために使用されます。 括弧 () は、標準の優先順位に関係なく、トリガー条件の括弧で囲まれた部分を囲まれていない部分の前に評価するために使用されます。 括弧 () は、標準の優先順位に関係なく、トリガー条件の括弧で囲まれた部分を囲まれていない部分の前に評価するために使用されます。

  • 例 1: リクエストの成功率が 90% 未満で、応答時間が 60 秒を超え 15 分以内 (相対) の場合、アラートを生成します。 この場合、評価式は $0.success_ratio < 90 && $1.avg request_time\(s\) > 60 となります。 下図に必要な設定を示します。 例 1
  • 例 2: 15 分間に発生した HTTP ステータスコード 500 の回数が 10 回を超えた場合、アラートをトリガーします。 この場合、評価式は status == 500 && total > 10 となります。 下図に必要な設定を示します。 例 2