Log Serviceを使用すると、ダッシュボードのグラフに基づいてアラートルールを設定し、サービスのステータスをリアルタイムで監視できます。
クエリの時間範囲とチェック頻度を指定する
指定されたクエリステートメントは、指定された時間範囲に基づいて指定された間隔で実行され、データのクエリと分析が行われます。 Log Serviceは、クエリと分析の結果に基づいて、トリガー条件が満たされているかどうかを確認します。 トリガー条件が満たされると、アラートがトリガーされます。
アラートルールを作成するときは、Check Frequencyパラメーターの値とは異なる時間範囲を指定することを推奨します。 Check Frequencyパラメーターの値と同じ時間範囲を指定した場合、一部のデータのクエリに失敗することがあります。 次の例では、この問題が発生する理由を説明します。 この例では、時間範囲は1分 (相対) に設定され、チェック頻度パラメータは固定間隔1分に設定されています。
Log Serviceにデータが書き込まれた後、特定の期間が経過すると、Log Serviceのデータを照会できます。 ほとんどの場合、期間は3秒未満続きますレイテンシのため、一部のデータが見つからない場合があります。 たとえば、アラートルールは12:03:30に実行され、時間範囲は1分 (相対) に設定されます。これは、時間範囲が [12:02:30, 12:03:30) であることを示します。 Log Service に 12:03:29 に書き込まれたログは、12:03:30 の時点ではクエリできない場合があります。
重複したアラートや欠落したアラートがないなど、アラートの正確性に対する高い要件がある場合は、時間範囲をより早い期間に設定できます。 たとえば、アラートルールが12:03:30に実行された場合、時間範囲を10秒前の [12:02:20,12:03:20) に設定できます。 このように設定することで、インデックス作成の遅延によって発生するアラートの欠落を防止できます。
リアルタイムパフォーマンスの要件が高い場合は、開始時刻がアラートルールが実行される時刻より前の期間に時間範囲を設定することを推奨します。 これにより、重複するアラートに関係なく、アラートがトリガーされたときにアラート通知を受信できます。 たとえば、アラートルールが12:03:30に実行された場合、時間範囲を [12:02:20,12:03:30) に設定できます。
同じ分内の異なる時点で生成されたログが同時に書き込まれると、問題が発生する可能性があります。 この場合、後のログのインデックスは、前のログの時点に書き込まれてもよい。 この問題の原因は、Log Service がインデックスの作成に使用する方法にあります。 たとえば、アラートルールは12:03:30に実行され、時間範囲は1分 (相対) に設定されます。 時間範囲は [12:02:30, 12:03:30) です。 12:02:50 に複数のログエントリが書き込まれ、これらのエントリが 12:02:20 や 12:02:50 など、同じ分の異なる時点で生成されている場合、 この場合、これらのログエントリのインデックスは12:02:20に書き込まれます。 ただし、これにより、時間範囲 [12:02:30,12:03:30) 内でログエントリを照会できないという問題が発生する可能性があります。
重複したアラートや欠落したアラートがないなど、アラートの正確性に対する高い要件がある場合は、時間範囲を時間枠に設定できます。 たとえば、期間を 1 分 (時間枠)、5 分 (時間枠)、または 1 時間 (時間枠) に設定します。 次に、Check Frequencyパラメーターを同じ期間 (1分、5分、1時間など) に設定できます。
リアルタイムパフォーマンスの要件が高い場合は、時間範囲を特定の期間に設定することを推奨します。 特定の期間には、少なくとも現在時刻の1分前を含める必要があります。 これにより、重複するアラートに関係なく、アラートがトリガーされたときにアラート通知を受信できます。 たとえば、アラートルールは12:03:30に実行されます。 時間範囲を90分 (相対) に設定した場合、時間範囲が [12:02:00,12:03:30) であることを示します。 次に、Check Frequencyパラメータを固定間隔1分に設定できます。
クエリ結果に基づいてアラートをトリガーするアラートルールを設定する
クエリ結果に基づいてアラートをトリガーするようにアラートルールを設定する場合、トリガー条件を指定して特定のフィールドが存在するかどうかを確認できます。 このように、クエリの返された結果が空でない場合、アラートルールのトリガー条件が満たされます。
たとえば、ログにclient_ip: 192.0.2.1
キーと値のペアが含まれている場合にアラートをトリガーするようにアラートルールを設定できます。 次の図に示すように、アラートルールを設定できます。 詳細については、「アラートルールの設定」をご参照ください。 この例では、クエリによって返される各ログにclient_ipフィールドが含まれ、フィールドの値は空ではありません。 この場合、client_ipフィールドが空でない場合、アラートがトリガーされます。
分析結果に基づいてアラートをトリガーするアラートルールを設定する
ほとんどの場合、アラートルールは分析結果に基づいて設定されます。 たとえば、ERRORキーワードを含むログの数が指定されたしきい値に達したときにアラートをトリガーするようにアラートルールを設定できます。 次の図に示すように、アラートルールを設定できます。 詳細については、「アラートルールの設定」をご参照ください。
複数のチャートを関連付ける
ダッシュボードのグラフに基づいてアラートルールを設定すると、Log Serviceでは1〜3つのクエリ結果と分析結果を同時に関連付けることができます。
各クエリの時間範囲は互いに競合しません。
複数のグラフを関連付ける場合は、${シリアル番号}.{フィールド名} 構文を使用して、クエリおよび分析結果のフィールドを参照する必要があります。 たとえば、トリガー条件は
$0.pv > 100000 && $1.uv < 1000
に設定されます。 トリガー条件では、$0はチャート0を示し、$1はチャート1を示します。 詳細については、「グラフのシリアル番号を表示する方法」をご参照ください。.複数の条件を2つのアンパサンド (&&) で区切る必要があります。たとえば、
pv % 100 > 0 && uv > 0
です。
異なる時間範囲で生成された複数のクエリおよび分析結果に基づいてアラートをトリガーするようにアラートルールを設定します。
たとえば、過去15分以内のpvフィールドの値が100000より大きく、過去1時間以内のuvフィールドの値が1000より小さい場合にアラートをトリガーするようにアラートを設定できます。 次の図に示すように、アラートルールを設定できます。 詳細については、「アラートルールの設定」をご参照ください。
チャートに基づいてアラートをトリガーするようにアラートルールを設定します。 もう1つの関連するグラフは、アラートルールに基づいてトリガーされるアラートの詳細を提供します。
たとえば、ログレベルがERRORであるログエントリの数が指定されたしきい値に達したときにアラートをトリガーするようにアラートルールを設定できます。 また、ログレベルがERRORのログを含むアラート通知を受信する必要があります。 次の図に示すように、アラートルールを設定できます。 詳細については、「アラートルールの設定」をご参照ください。
アラート通知でログレベルがERRORのログを表示する場合は、通知内容を次の値に設定します。
${results[1].RawResultsAsKv}
アラートの抑制
アラートルールのトリガー条件が満たされている場合、一定期間内に複数のアラート通知を受け取ることがあります。 データジッタによって引き起こされる誤ったアラートと重複したアラートを防ぐために、トリガーのしきい値と通知間隔のパラメーターを設定してアラートを抑制できます。 詳細については、「アラートルールの設定」をご参照ください。
連続トリガーのしきい値を指定します。
アラートは、連続したチェック期間中に指定されたトリガー条件が満たされた場合にのみトリガーされます。
たとえば、Check Frequencyパラメータは固定間隔1分に設定され、Trigger Thresholdパラメータは5に設定されます。 この場合、アラート通知は、5回の連続チェック期間中に指定されたトリガー条件が5回満たされた場合にのみ送信されます。 トリガー条件が満たされない場合、アラートはトリガーされません。
アラート通知の送信間隔を指定します。
チェック頻度が短い間隔に設定されている場合、通知間隔パラメーターを設定して、アラート通知が送信される最小間隔を指定できます。 これにより、頻繁なアラート通知が防止されます。 たとえば、Check FrequencyパラメータはFixed Interval 1 Minutesに設定され、Notification Intervalパラメータは30Minutesに設定されます。 この場合、アラートがトリガーされても、前のアラート通知が送信されてから30分以内にアラート通知は送信されません。
テンプレート変数の使用
アラートルールの通知方法を設定するときは、テンプレート変数を使用できます。 Content と Subject のパラメーターを指定する場合、${fieldName} 構文を使用してテンプレート変数を参照できます。 Log Serviceがアラート通知を送信すると、Log ServiceはContentおよびSubjectパラメーターで参照されているテンプレート変数を実際の値に置き換えます。 たとえば、Log Serviceは ${Project} をアラートルールが属するプロジェクトの名前に置き換えます。 詳細については、「テンプレート変数」をご参照ください。
${fieldName} 構文を使用して、プロジェクト、AlertName、またはダッシュボード変数を参照できます。 これらの変数は大文字と小文字を区別しません。
アラートがトリガーされると、毎回アラート情報が自動的に生成され、Results フィールドに保存されます。 Resultsフィールドの値は配列です。 配列内の各要素は、トリガーされたアラートに関連付けられたチャートに対応します。 ほとんどの場合、配列には1つの要素しか含まれません。 詳細については、「アラートルール評価ログのフィールド」をご参照ください。 次のメソッドを使用して、Results配列のフィールドを参照できます。
配列型のフィールドは、${fieldName[{index}]} 形式で参照されます。 {index} は、0から始まる配列の下付き文字を示します。 たとえば、${results[0]} は、Results配列の最初の要素が参照されていることを示します。
オブジェクトタイプのフィールドは、${object.key} 形式で参照されます。 たとえば、${results[0].StartTimeTs} は1542453580のタイムスタンプを示します。
説明クエリ結果には、RawResultsとFireResultのフィールドのみが含まれます。 これらのフィールドでは大文字と小文字が区別されます。 他のフィールドは大文字と小文字を区別しません。
{ "EndTime": "2006-01-02 15:04:05", "EndTimeTs": 1542507580, "FireResult": { "__time__": "1542453580", "field": "value1", "count": "100" }, "FireResultAsKv": "[field:value1,count:100]", "Truncated": false, "LogStore": "test-logstore", "Query": "* | SELECT field, count(1) group by field", "QueryUrl": "http://xxxx", "RawResultCount": 2, "RawResults": [ { "__time__": "1542453580", "field": "value1", "count": "100" }, { "__time__": "1542453580", "field": "value2", "count": "20" } ], "RawResultsAsKv": "[field:value1,count:100],[field:value2,count:20]", "StartTime": "2006-01-02 15:04:05", "StartTimeTs": 1542453580 }
アラートがトリガーされない問題のトラブルシューティング
アラートルールを設定した後、アラートログを使用して、アラートがトリガーされないという問題をトラブルシューティングできます。 詳細については、「アラートルールの評価結果の表示」をご参照ください。 ログフィールドの詳細は、「アラートルール評価ログのフィールド」をご参照ください。