ログに対するアラーム
ログデータをモニタリングする CloudWatch アラームは、次の 2 つの方法で作成できます。
-
ログアラームアプローチ — スケジュールに従って CloudWatch Logs Insights クエリを実行し、しきい値に対して集計結果を直接評価するログアラームを作成します。
-
メトリクスフィルターアプローチ — ロググループにメトリクスフィルターを作成し、結果のメトリクスに標準メトリクスアラームを作成します。
ログアラームの作成
ログアラームの作成
CloudWatch Logs Insights クエリを使用してログデータを直接モニタリングする CloudWatch アラームを作成できます。このクエリはスケジュールされたクエリを使用してスケジュールに従って実行され、アラームはしきい値に対して集計結果を評価します。ログアラームの仕組みの詳細については、「ログアラーム」を参照してください。
前提条件
ログアラームを作成する前に、スケジュールされたクエリを実行するためのアクセス許可を CloudWatch Logs に付与する IAM ロールを作成する必要があります。Amazon SNS 通知にもログ行を含める場合は、2 つ目のロールを作成する必要があります。
注記
CloudWatch コンソールからログアラームを作成する場合、コンソールがこれらのロールの作成に役立ちます。
スケジュールされたクエリ実行ロール
スケジュールされたクエリ実行ロールにより、CloudWatch Logs はユーザーに代わってクエリを実行できます。このロールは、すべてのログアラームがスケジュールされたクエリを実行するために必要です。このロールは logs.amazonaws.com サービスプリンシパルを信頼する必要があります。
次の例は、スケジュールされたクエリ実行ロールの信頼ポリシーを示しています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
以下の例に示しているのは、アクセス許可ポリシーです。クエリがターゲットとするロググループ ARN に対して、Resource をスコープします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:StartQuery", "logs:StopQuery", "logs:GetQueryResults", "logs:DescribeLogGroups" ], "Resource": "arn:aws:logs:region:account-id:log-group:your-log-group:*" } ] }
ログ行ロール (オプション)
ログ行ロールを使用すると、CloudWatch は Amazon SNS 電子メール通知のログ行を取得できます。このロールは ActionLogLineCount を 0 より大きい値に設定した場合にのみ必要です。このロールは cloudwatch.amazonaws.com サービスプリンシパルを信頼する必要があります。
次の例は、ログ行ロールに必要な信頼ポリシーを示しています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
次の例は、ログ行ロールに必要なアクセス許可ポリシーを示しています。ログ行を取得するには、logs:GetQueryResults アクセス許可が必要です。クエリがターゲットとするロググループ ARN に対して、Resource をスコープします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:GetQueryResults" ], "Resource": "arn:aws:logs:region:account-id:log-group:your-log-group:*" } ] }
注記
CloudWatch コンソールでログアラームクエリ結果を表示するには、コンソールにアクセスする IAM ユーザーまたはロールに logs:GetScheduledQueryData アクセス許可が必要です。これはコンソール専用の API であり、AWS CLI や SDK からは利用できません。CloudTrail はこの API をデータイベントとしてログに記録するため、データイベントのログ記録を使用してキャプチャするように証跡を設定する必要があります。
コンソールを使用したログアラームの作成
このセクションのステップでは、CloudWatch コンソールを使用してログアラームを作成する方法について説明します。ログアラームは AWS CLI を使用して作成することもできます。詳細については、「AWS CLI を使用したログアラームの作成」を参照してください。
ログアラームを作成するには
-
CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/
を開いてください。 -
ナビゲーションペインで、[Alarms] を選択します。
-
[アラームの作成] を選択します。
-
[データソース] で [ログ] を選択します。
-
[ログクエリ]:
-
[ログ分析でクエリを作成する] を選択します。これにより、クエリを構築するログ分析ページが開きます。
-
[ログ分析] ページで、クエリを記述します。完了したら、右上の [アラームに進む] を選択してアラームコンソールに戻ります。
-
[集計式] では、クエリ結果を集計してアラーム評価の数値を返す方法を指定します (例:
count(*)またはavg(latency) by endpoint)。
-
-
[アラーム条件]:
-
[集計結果が次の場合は常に…] で比較演算子を選択します。
-
[限界] にしきい値を入力します。
-
(オプション) [その他の設定] :
-
[アラームへのデータポイント] を変更して、最後の N クエリのうち
ALARMをトリガーするために必要な違反結果の数を指定します。 -
[欠落データの処理] を変更して、欠落データの処理方法を指定します。
-
-
-
[スケジュール]:
-
[評価頻度] で、クエリが実行される頻度 (5 分ごとなど) を選択します。
-
[開始時刻オフセット] で、各クエリ実行のルックバックウィンドウを指定します。
-
[終了時刻オフセット] (オプション) で、クエリ時間範囲の終了を現在の時刻からの秒単位のオフセットとして指定します。
-
-
[IAM アクセス許可]:
-
スケジュールされたクエリの実行に必要なロールを指定します。新しいロールを作成するか、既存のロールを使用するかを選択できます。
-
-
[次へ] を選択します。
-
[アクションの設定] で、必要に応じて通知とアクションを設定します。
-
Amazon SNS 電子メール通知にアラーム移行をトリガーするログ行を含めるには、[アクションにクエリ結果を含める] で次の設定を行います。
-
[クエリ結果の数] を追加して、含めるログ行の数を指定します。
-
必要なクエリ結果を取得するために使用する既存のロールを作成または選択します。
-
-
-
[次へ] を選択します。
-
[名前] とオプションの [説明] を入力します (Markdown をサポート)。
-
(オプション) タグを追加します。
-
[次へ] を選択します。
-
[プレビューと作成] で設定内容が正しいことを確認した上で、[アラームの作成] を選択します。
AWS CLI を使用したログアラームの作成
AWS CLI put-log-alarm コマンドを使用してログアラームを作成できます。
次の例では、ロググループのエラー数をモニタリングし、5 回のクエリ実行のうち 3 回でカウントが 100 を超えると ALARM 状態に移行するというログアラームを作成します。
aws cloudwatch put-log-alarm \ --alarm-name "HighErrorCount" \ --alarm-description "Alarm when error count exceeds 100" \ --comparison-operator GreaterThanThreshold \ --threshold 100 \ --query-results-to-evaluate 5 \ --query-results-to-alarm 3 \ --treat-missing-data missing \ --alarm-actions "arn:aws:sns:region:account-id:topic-name" \ --scheduled-query-configuration '{ "QueryString": "fields @timestamp, @message | filter @message like /ERROR/", "LogGroupIdentifiers": ["/aws/lambda/my-function"], "ScheduledQueryRoleARN": "arn:aws:iam::account-id:role/ScheduledQueryRole", "AggregationExpression": "count(*)", "ScheduleConfiguration": { "ScheduleExpression": "rate(10 minutes)", "StartTimeOffset": 600 } }' \ --action-log-line-count 5 \ --action-log-line-role-arn "arn:aws:iam::account-id:role/LogLineRole"
次の表では put-log-alarm コマンドの主要パラメータについて説明します。
| Parameter | 必須 | 説明 |
|---|---|---|
--alarm-name |
あり | アラームの名前。UTF-8 文字のみを使用しなければなりません。 |
--comparison-operator |
あり | しきい値の比較演算子。有効な値は、GreaterThanThreshold、GreaterThanOrEqualToThreshold、LessThanThreshold、LessThanOrEqualToThreshold です。 |
--threshold |
あり | しきい値は比較対象の数値です。 |
--query-results-to-evaluate |
あり | 評価する最近のクエリ実行の数 (M-out-of-N の N)。 |
--query-results-to-alarm |
あり | ALARM をトリガーするために必要な違反結果の数 (M-out-of-N の M)。 |
--treat-missing-data |
なし | 欠落データを処理する方法。有効な値: missing (デフォルト)、notBreaching、breaching、ignore |
--scheduled-query-configuration |
あり | クエリ文字列、ロググループ識別子、スケジュールされたクエリロール ARN、集計式、スケジュール設定などのクエリ設定。 |
--action-log-line-count |
なし | Amazon SNS 電子メール通知に含めるログ行の数 (0 ~ 50)。デフォルトは 0 です。 |
--action-log-line-role-arn |
なし | cloudwatch.amazonaws.com を信頼する IAM ロールの ARN。action-log-line-count が 0 より大きい場合は必須。 |
AWS CloudFormation を使用したログアラームの作成
AWS::CloudWatch::LogAlarm リソースタイプを使用して、AWS CloudFormation テンプレートでログアラームを作成できます。
次のサンプルテンプレートでは、エラー数をモニタリングするログアラームを作成します。
AWSTemplateFormatVersion: '2010-09-09' Resources: HighErrorCountAlarm: Type: AWS::CloudWatch::LogAlarm Properties: AlarmName: HighErrorCount AlarmDescription: Alarm when error count exceeds 100 ComparisonOperator: GreaterThanThreshold Threshold: 100 QueryResultsToEvaluate: 5 QueryResultsToAlarm: 3 TreatMissingData: missing ActionLogLineCount: 5 ActionLogLineRoleArn: !GetAtt LogLineRole.Arn ScheduledQueryConfiguration: QueryString: "fields @timestamp, @message | filter @message like /ERROR/" LogGroupIdentifiers: - /aws/lambda/my-function ScheduledQueryRoleARN: !GetAtt ScheduledQueryRole.Arn AggregationExpression: "count(*)" ScheduleConfiguration: ScheduleExpression: "rate(10 minutes)" StartTimeOffset: 600 AlarmActions: - !Ref AlarmSNSTopic
ロググループのメトリクスフィルターに基づく CloudWatch アラームの作成
このセクションの手順では、ロググループのメトリクスフィルターに基づいてアラームを作成する方法について説明します。メトリクスフィルターを使用すると、データが CloudWatch に送信された時に、ログデータの用語やパターンを検索することができます。詳細については、「Amazon CloudWatch Logs ユーザーガイド」の「フィルターを使用したログイベントからのメトリクスの作成」を参照してください。ロググループのメトリクスフィルターに基づいてアラームを作成する前に、次のアクションを完了する必要があります。
-
ロググループを作成します。詳細については、「Amazon CloudWatch Logs ユーザーガイド」の「ロググループとログストリームの操作」を参照してください。
-
メトリクスのフィルターを作成します。詳細については、「Amazon CloudWatch Logs ユーザーガイド」の「ロググループのメトリクスフィルターの作成」を参照してください。
ロググループのメトリクスフィルターに基づいてアラームを作成するには
-
CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/
を開いてください。 -
ナビゲーションペインで、[Logs] (ログ)、[Log groups] (ロググループ) の順に選択します。
-
メトリクスフィルターを含むロググループを選択します。
-
[Metric filters] (メトリクスフィルター) を選択します。
-
メトリクスフィルタータブで、アラームのベースにするメトリクスフィルターのボックスを選択します。
-
[アラームの作成] を選択します。
-
(オプション) [Metric] (メトリクス) で、[Metric name] (メトリクス名)、[Statistic] (統計)、および [Period] (期間) を編集します。
-
[Conditions (条件)] で、次のように指定します。
-
[Threshold type] (しきい値の種類) で、[Static] (静的) または [Anomaly detection].(異常検出) を選択します。
-
[Whenever
your-metric-nameis. . .] (your-metric-name が次の場合) で、[Greater] (より大きい)、[Greater/Equal] (以上)、[Lower/Equal] (以下) または [Lower] (より低い) から選択します。 -
[than . . .] (次と比較) の場合は、しきい値の数値を指定します。
-
-
[Additional configuration (追加設定)] を選択します。
-
[Data points to alarm] (アラームを発生させるデータポイント) で、
ALARM状態に移行するアラームをトリガーするデータポイントの数を指定します。一致する値を指定した場合、該当する連続した期間でしきい値を超過すると、アラームがALARM状態に移行します。N 個中 M 個のアラームを作成するには、2 番目の値よりも小さい数字を最初の値に指定します。詳細については、「アラーム評価」を参照してください。 -
[Missing data treatment] (欠落データの処理) で、アラームが評価される際の欠落データの処理方法を指定するオプションを選択します。
-
-
[次へ] を選択します。
-
[Notification] (通知) で、アラームが
ALARM、OK、またはINSUFFICIENT_DATA状態の時に通知するための Amazon SNS トピックを指定します。-
(オプション) 同じアラーム状態または異なるアラーム状態について複数の通知を送信するには、[Add notification] (通知の追加)を選択します。
-
(オプション) アラームの通知を送信しない場合は、[削除] を選択します。
-
-
アラームに伴って Auto Scaling、EC2、Lambda、または Systems Manager アクションを実行するには、該当するボタンを選択し、アラーム状態と実行するアクションを選択します。Lambda 関数をアラームアクションとして選択する場合、関数名または ARN を指定し、オプションで関数の特定のバージョンを選択できます。
アラームは、ALARM 状態になったときにのみ、Systems Manager のアクションを実行できます。Systems Manager のアクションの詳細については、「アラームから OpsItems を作成するように CloudWatch を設定する」および「Incident creation」を参照してください。
注記
SSM Incident Manager アクションを実行するアラームを作成するには、特定のアクセス許可が必要です。詳細については、AWS Systems Manager Incident Manager のアイデンティティベースのポリシーの例を参照してください。
-
[次へ] を選択します。
-
[名前と説明] にアラームの名前と説明を入力します。アラーム名には UTF-8 文字のみを使用する必要があり、ASCII 制御文字は使用できません。説明にはマークダウン形式を含めることができます。マークダウン形式は、CloudWatch コンソールのアラームの [詳細] タブにのみ表示されます。マークダウンは、ランブックや他の内部リソースへのリンクを追加するのに役立ちます。
-
[Preview and create] (プレビューと作成) で、設定が正しいことを確認し、[Create alarm] (アラームの作成) を選択します。