このトピックでは、アラートルールにおけるトリガー条件の構文について説明します。
アラートルールのトリガー条件内では、変数を使用してログフィールドを参照できます。Simple Log Service は、アラートルールに指定されたクエリ文に基づいてログクエリを実行し、そのクエリ結果がトリガー条件を満たすかどうかを評価します。トリガー条件が満たされた場合、アラートがトリガーされます。
制限事項
トリガー条件に関する以下の制限事項があります。
負の数値は括弧 () で囲む必要があります(例:x+(-100)<100)。
数値はすべて 64 ビット浮動小数点数に変換されるため、比較を含むアラートルールの評価結果が不正確になる可能性があります。
変数名には英字と数字のみを使用でき、先頭文字は英字である必要があります。
トリガー条件の長さは 1~128 文字である必要があります。
アラートルールが複数のチャートに関連付けられている場合、各アラートルール評価時に複数のクエリが実行され、複数セットのログエントリがクエリ結果として返されます。Simple Log Service は、各セットから 1 つのログエントリを選択し、選択されたログエントリの組み合わせがトリガー条件を満たすかどうかをチェックします。各アラートルール評価において、Simple Log Service は最大 1,000 のログエントリの組み合わせをチェックします。いずれかの組み合わせがトリガー条件を満たした場合、アラートがトリガーされます。
アラートルールに関連付けられるチャートまたはクエリ文の最大数は 3 つです。
トリガー条件の評価結果が true の場合、トリガー条件が満たされたことを意味し、アラートがトリガーされます。たとえば、トリガー条件が 100+100 の場合、結果は 200 となり、アラートはトリガーされません。
Simple Log Service では、true および false の 2 つの単語と、ドル記号 ($) およびピリオド (.) の 2 つの特殊文字が予約されています。これらの単語および特殊文字は変数として使用できません。
構文
以下の表に、トリガー条件で使用される構文を示します。
構文タイプ | 操作 | 説明 |
算術演算子 | 加算 (+)、減算 (-)、乗算 (*)、除算 (/)、剰余 (%) 演算子をサポートします。
|
|
比較演算子 | 次の 8 種類の比較演算子をサポートします:より大きい (>)、以上 (>=)、未満 (<)、以下 (<=)、等しい (==)、等しくない (!=)、マッチ (=~)、非マッチ (!~)。 説明
|
|
論理演算子 | AND (&&) 演算子および OR (||) 演算子をサポートします。 |
|
NOT 演算子 | NOT 演算子 (!) をサポートします。 | !(a < 1 && a > 100) |
数値定数 | 数値定数をサポートします。Simple Log Service は、数値定数を 64 ビット浮動小数点数に変換します。 | x > 100 |
文字列定数 | 'String' 形式の文字列定数をサポートします(例:'string')。 | foo == 'string' |
ブール定数 | true および false をサポートします。 | (x > 100) == true |
括弧 | 括弧 () をサポートします。括弧を使用すると、標準の優先順位をオーバーライドし、Simple Log Service にトリガー条件の括弧で囲まれた部分を囲まれていない部分よりも先に評価させることができます。 | x * (y + 100) > 100 |
contains 関数 | contains 関数をサポートします。contains 関数は、文字列に部分文字列が含まれているかどうかをチェックします。たとえば、foo 変数が参照する文字列に hello という部分文字列が含まれている場合、contains(foo, 'hello') は true を返します。 | contains(foo, 'hello') |
複数のチャートに関連付けられたアラートルールのトリガー条件
構文
アラートルールは複数のクエリ文に関連付けることができます。トリガー条件内で変数を使用してクエリ文の結果からフィールドを参照する場合は、$N.fieldname 形式で、クエリ文のシリアル番号を変数のプレフィックスとして指定する必要があります。クエリ文のシリアル番号は、そのクエリ結果をプロットするチャートのシリアル番号と同じです。詳細については、「チャートのシリアル番号の確認方法」をご参照ください。N の値の範囲は 0~2 です(各アラートルールに関連付けられるクエリ文の最大数は 3 つのため)。たとえば、$0.foo は、最初のクエリ文の結果から foo フィールドの値を参照します。アラートルールが 1 つのクエリ文のみに関連付けられている場合は、トリガー条件内でプレフィックスを指定する必要はありません。
評価
アラートルールの評価中に、複数のクエリが実行され、クエリ結果として複数セットのログエントリが返された場合、Simple Log Service はトリガー条件で参照されているフィールドを含むクエリ結果のみを使用します。たとえば、3 セットのログエントリが返されたとします。最初のセットのログエントリ数は z、2 番目のセットのログエントリ数は y、3 番目のセットのログエントリ数は z です。トリガー条件が $0.foo > 100 && $1.bar < 100 の場合、Simple Log Service はアラートルールの評価中に最初のセットと 2 番目のセットのみを使用します。Simple Log Service は、この 2 つのセットからそれぞれ 1 つのログエントリを選択し、選択されたログエントリの組み合わせがトリガー条件を満たすかどうかをチェックします。Simple Log Service は x × y の組み合わせをチェックします。x × y の結果が 1,000 を超える場合、Simple Log Service は 1,000 の組み合わせのみをチェックします。いずれかの組み合わせがトリガー条件を満たす場合、Simple Log Service はアラートをトリガーします。
演算子の実装
Simple Log Service は、すべての数値を 64 ビット浮動小数点数に変換します。
文字列定数は、シングルクォーテーション ('') またはダブルクォーテーション ("") で囲む必要があります(例:'string' または "string")。
ブール値には true および false が含まれます。
演算子 | 実装 | ||
変数間の操作 | 非文字列定数と変数間の操作 | 文字列定数と変数間の操作 | |
算術演算子:加算 (+)、減算 (-)、乗算 (*)、除算 (/)、剰余 (%) | 算術演算子を適用する前に、左オペランドおよび右オペランドは 64 ビット浮動小数点数に変換されます。 | サポートされていません。 | |
比較演算子: より大きい (>)、以上 (>=)、未満 (<)、以下 (<=)、等しい (==)、等しくない (!=) | Simple Log Service は、以下の優先順位で比較ルールを適用します。
| 左オペランドおよび右オペランドを 64 ビット浮動小数点数に変換し、数値順に従って比較します。 | 左オペランドおよび右オペランドを文字列に変換し、辞書式順序に従って比較します。 |
正規表現演算子: 正規表現マッチ (=~) および正規表現非マッチ (!~) | マッチング演算子を適用する前に、左オペランドおよび右オペランドは文字列に変換されます。 | サポートされていません。 | マッチング演算子を適用する前に、左オペランドおよび右オペランドは文字列に変換されます。 |
論理演算子: AND (&&) および OR (||) | 論理演算子はログフィールドに直接適用できません。左オペランドおよび右オペランドは条件式である必要があります。論理演算子が返す結果のデータの型はブール値です。 | ||
NOT 演算子 (!) | NOT 演算子はログフィールドに直接適用できません。右オペランドは条件式である必要があります。NOT 演算子が返す結果のデータの型はブール値です。 | ||
contains という名前の関数 | contains 関数を実行する前に、入力パラメーターは文字列に変換されます。 | サポートされていません。 | contains 関数を実行する前に、入力パラメーターは文字列に変換されます。 |
括弧 () | 括弧は、標準の優先順位をオーバーライドし、Simple Log Service にトリガー条件の括弧で囲まれた部分を囲まれていない部分よりも先に評価させるために使用されます。 | ||
使用例
-
例 1:相対的な 1 日間の期間内においてタスクの成功率が 90% を下回り、かつ遅延時間が 60 秒を超えた場合にアラートをトリガーします。アラート名を タスク遅延アラート に設定し、2 つのチャートを関連付けます。チャート 0 の名前は タスク成功率 で、クエリ文は
* | select round(sum(case when code = 200 then 1 else 0 end) * 100.0 / count(*), 2) as success、クエリ時間範囲は 1 日 (相対) です。チャート 1 の名前は 遅延状況 で、クエリ文はdelay > 0 | select time_series(__time__, '10m', '%m-%d %H:%i', '0') as time, round(avg(delay)/100, 3) as delay group by time order by time limit 14400、クエリ時間範囲は 1 日 (相対) です。評価間隔を固定間隔の 15 分に設定し、トリガー条件を$0.success < 90 && $1.delay > 60に設定します。 -
例 2:15 分以内にステータスコード 500 が 10 回発生した場合にアラートをトリガーします。アラート名を 500 ステータスコードアラート に設定します。チャート 0(名前:レスポンスステータス分布)を関連付け、クエリ文を
* | SELECT status, COUNT(*) as total GROUP BY status、クエリ時間範囲を 15 分 (相対) に設定します。評価間隔を固定間隔の 15 分に設定し、トリガー条件を$0.status == 500 && $0.total > 10に設定します。 -
例 3:1 時間以内に処理レートが 1 秒あたり 1,000 エントリを下回った場合にアラートをトリガーします。アラート名を 低データ処理レートアラート に設定します。チャート 0(名前:処理レート (lines/s))を関連付け、クエリ文を
__topic__: __etl-log-status__ AND __tag__: __schedule_type__: Resident and event_id: "shard_worker:metrics:checkpoint" | select time_series(__time__, '1m', '%y/%m/%d %H:%i', '0') as dt, round(sum("progress.accept") / 60.0, 3) as "accept", round(sum("progress.dropped") / 60.0, 3) as "dropped", round(sum("progress.delivered") / 60.0, 3) as "delivered", round(sum("progress.failed") / 60.0, 3) as "failed" group by dt order by dt asc limit 10000、クエリ時間範囲を 1 時間 (相対) に設定します。評価間隔を固定間隔の 1 時間に設定し、トリガー条件を$0.accept < 1000に設定します。