アラートルールでは、評価式の実行結果を使用して、アラートをトリガーする条件が満たされているかどうかを確認し、アラートの動的重要度を評価します。このトピックでは、評価式の使用方法について説明します。
概要
アラートルールでは、クエリ文の結果を入力として指定し、セット操作の結果のフィールドを変数として指定できます。評価式が true を返した場合、アラートがトリガーされます。
制限事項
アラートルールで指定できる評価式には、次の制限事項があります。
負の数は丸括弧 () で囲む必要があります。例:
x+(-100)<100。数値は 64 ビットの浮動小数点数に変換されます。比較で数値を使用すると、エラーが発生する可能性があります。たとえば、2 つの数値を比較して、それらが等しいかどうかを確認できます。
変数名には英字と数字のみを含めることができ、先頭は英字である必要があります。
評価式の長さは 1~128 文字である必要があります。
アラートは、評価式が true を返し、トリガー条件が満たされる連続回数が [連続トリガーのしきい値] パラメーターの値に達した場合にのみトリガーされます。たとえば、評価式が
100+100の場合、計算結果は 200 であり、true ではありません。この場合、アラートはトリガーされません。true、false、ドル記号 ($)、ピリオド (.) は評価式の予約語です。予約語を変数として使用することはできません。
構文
次の表に、アラートルールの評価式でサポートされている構文のタイプを示します。
フィールド名は、結果セットで返されるフィールドの名前です。フィールド名には文字列を使用することを推奨します。数字のみを含むフィールド名や、特殊文字を含むフィールド名は使用しないことを推奨します。特殊文字にはパーセント記号 (%) が含まれます。フィールド名に特殊文字または数字のみが含まれる場合、フィールド名は角括弧 [] で囲む必要があります。例:
[5xx percentage (%)] > 20[404] > 20
構文タイプ | 演算子 | 操作方法 | 例 | ||
変数間の操作 | 非文字列定数と変数の間の操作 | 文字列定数と変数の間の操作 | |||
算術演算子 | 加算 (+)、減算 (-)、乗算 (*)、除算 (/)、剰余 (%) | 算術演算子が適用される前に、左オペランドと右オペランドは 64 ビットの浮動小数点数に変換されます。 | 算術演算子が適用される前に、左オペランドと右オペランドは 64 ビットの浮動小数点数に変換されます。 | サポートされていません。 |
|
比較演算子 | 比較演算子: より大きい (>)、以上 (>=)、より小さい (<)、以下 (<=)、等しい (==)、等しくない (!=) | Simple Log Service は、次の優先順位でソートされた比較ルールを使用します。
| 左オペランドと右オペランドは 64 ビットの浮動小数点数に変換されてから比較されます。 | 左オペランドと右オペランドは文字列に変換され、アルファベット順で比較されます。 |
|
正規表現演算子: 正規表現一致 (=~) および正規表現不一致 (!~) 説明
| 正規表現演算子が適用される前に、左オペランドと右オペランドは文字列に変換されます。 | サポートされていません。 | 正規表現演算子が適用される前に、左オペランドと右オペランドは文字列に変換されます。 | 正規表現一致: | |
論理演算子 | 論理演算子: AND (&&) および OR (||) | 左オペランドと右オペランドはサブ式である必要があり、操作の結果はブール値である必要があります。たとえば、評価式は | 左オペランドと右オペランドはサブ式である必要があり、操作の結果はブール値である必要があります。たとえば、評価式は | 左オペランドと右オペランドはサブ式である必要があり、操作の結果はブール値である必要があります。たとえば、評価式は |
|
NOT 演算子 | NOT 演算子 (!) | 必須のオペランドはサブ式である必要があり、操作の結果はブール値である必要があります。たとえば、評価式は この演算子をセット操作の結果のフィールドに直接使用することはできません。 | 必須のオペランドはサブ式である必要があり、操作の結果はブール値である必要があります。たとえば、評価式は この演算子をセット操作の結果のフィールドに直接使用することはできません。 | 必須のオペランドはサブ式である必要があり、操作の結果はブール値である必要があります。たとえば、評価式は この演算子をセット操作の結果のフィールドに直接使用することはできません。 |
|
contains 関数 | contains 関数 | contains 関数が実行される前に、左オペランドと右オペランドは文字列に変換されます。 | サポートされていません。 | contains 関数が実行される前に、左オペランドと右オペランドは文字列に変換されます。 |
|
丸括弧 | 丸括弧 () | 丸括弧 () は、計算における標準の優先順位をオーバーライドするために使用されます。 | 丸括弧 () は、計算における標準の優先順位をオーバーライドするために使用されます。 | 丸括弧 () は、計算における標準の優先順位をオーバーライドするために使用されます。 |
|
セット操作結果の評価
Simple Log Service は、最大 3 つのデータセットの関連モニタリングをサポートし、セット操作の結果を評価します。
セット操作の結果
アラートルールでは、クエリ文の結果を入力として指定し、セット操作の結果のフィールドを変数として指定して、アラートをトリガーできるかどうかを評価できます。セット操作の詳細については、「複数のクエリ分析結果の関連付け」をご参照ください。次の表に、セット操作の結果を示します。
クエリと分析の結果に対して実行されたセット操作の結果が評価されます。セット操作には、CROSS JOIN および LEFT JOIN 操作が含まれます。
クエリと分析の結果に重複フィールドが含まれていない場合、フィールドにプレフィックスを追加することなく、評価式でフィールドを参照できます。プレフィックスには、$0、$1、$2 があります。例:
name == 'sls'。クエリと分析の結果に重複フィールドが含まれている場合、フィールドにプレフィックスを追加することで、評価式でフィールドを参照できます。プレフィックスには、$0、$1、$2 があります。例:
$0.name == 'sls' || $1.name == 'ecs'。
カテゴリ | サブカテゴリ | 説明 |
ログ | SELECT を含まないクエリ文 | 検索文のみを使用してログをクエリします。 トリガー条件の評価式を指定する際に、クエリ結果に含まれるフィールドを参照できます。 |
SELECT * FROM log を含むクエリ文 | トリガー条件の評価式を指定する際に、[分析機能を有効にする] がオンになっているフィールドを参照できます。 | |
SELECT * FROM (SELECT...) を含むクエリ文 | トリガー条件の評価式を指定する際に、指定された SELECT サブクエリに含まれるフィールドを参照できます。 | |
メトリック | SELECT promql(...) を含むクエリ文 | promql_query(string) および promql_query_range(string, string) 関数は、常に metric、labels、time、value の各フィールドを返すことができます。Simple Log Service は、マップ形式の labels フィールドを展開します。 トリガー条件の評価式を指定する際に、metric、labels、time、value の各フィールドを参照できます。labels フィールドのサブフィールドも参照できます。 |
SELECT a, b FROM (SELECT promql(...)) を含むクエリ文 | トリガー条件の評価式を指定する際に、[分析機能を有効にする] がオンになっているフィールドを参照できます。 | |
SELECT * FROM log を含むクエリ文 | トリガー条件の評価式を指定する際に、[分析機能を有効にする] がオンになっているフィールドを参照できます。 | |
リソースデータ | なし | リソースデータのフィールドの値は、文字列、浮動小数点数、または数値型にすることができます。JSON 型はサポートされていません。 トリガー条件の評価式を指定する際に、リソースデータのフィールドの ID を参照できます。 |
トリガー条件の設定
トリガー条件では、評価式を使用してセット操作の結果を評価します。評価式が true を返した場合、アラートがトリガーされます。トリガー条件は、次のオプションをサポートしています。
-
[データが返される]:セット操作結果の行数を確認します。少なくとも 1 行が返された場合に条件が満たされます。

-
クエリ結果の行数: 結果セットの行数を確認します。サポートされている演算子は、「より大きい」、「より小さい」、「等しい」です。行数が指定された条件を満たすと、条件が成立します。たとえば、結果セットに 4 行が含まれ、トリガー条件が [クエリ結果の行数 > 10] の場合、条件は満たされず、アラートは生成されません。

-
[データが式に一致する]:セット操作結果の行の内容を確認します。少なくとも 1 行の内容が評価式に一致する場合に条件が満たされます。たとえば、結果セットに 1 行 (pv=900) が含まれ、トリガー条件が [データが式に一致する]、pv > 1000 の場合、条件は満たされず、アラートは生成されません。

-
[クエリ結果に含まれ、かつ一致する]:セット操作結果の行数と内容の両方を確認します。特定数の行が評価式に一致する場合にのみアラートがトリガーされます。たとえば、結果セットに 4 行 (pv=900、pv=1100、pv=1200、pv=1001) があり、トリガー条件が [クエリ結果に含まれ、かつ一致する] > 3、pv > 1000 の場合、条件は満たされ、アラートが生成されます。

例
例 1
15 分間の期間内に、リクエスト成功率が 90% 未満で、リクエストの平均応答時間が 60 秒を超える場合、アラートがトリガーされます。設定の詳細:
[クエリ統計]:
s0:リクエスト成功率を計算します。これは success_ratio で示されます。クエリ文:
* | select round(sum(if(status < 300, 1, 0)) * 100.0 / count(1) , 2) as success_ratio。s1:1 分あたりのリクエストの平均応答時間を計算します。クエリ文:
* | select date_format(date_trunc('minute',__time__), '%m-%d %H:%i') as t,avg(request_time) as "Average response time(s)" group by t order by t asc limit 2000
トリガー条件: 評価式は $0.success_ratio < 90 && $1.[Average response time(s)] > 60 と設定されています。

例 2
15 分間の期間内に、HTTP ステータスコード 500 が返される回数が 10 回を超えた場合、アラートがトリガーされます。設定の詳細:
[クエリ統計]:各状態コードの発生回数をカウントします。クエリ文:* | select status, COUNT(*) as total group by status
トリガー条件:評価式は次のように設定されます。status == 500 && total > 10
