View a markdown version of this page

로그에 대한 경보 - Amazon CloudWatch

로그에 대한 경보

다음 두 가지 방법으로 로그 데이터를 모니터링하는 CloudWatch 경보를 생성할 수 있습니다.

  • 로그 경보 접근 방식 - 일정에 따라 CloudWatch Logs Insights 쿼리를 실행하고 집계된 결과를 임곗값과 직접 비교 평가하는 로그 경보를 생성합니다.

  • 지표 필터 접근 방식 - 로그 그룹에 지표 필터를 생성한 다음 결과 지표에 표준 지표 경보를 생성합니다.

로그 경보 생성

로그 경보 생성

CloudWatch Logs Insights 쿼리를 사용하여 로그 데이터를 직접 모니터링하는 CloudWatch 경보를 생성할 수 있습니다. 쿼리는 예약된 쿼리를 사용하여 일정에 따라 실행되며 경보는 집계된 결과를 임곗값을 기준으로 평가합니다. 로그 경보의 작동 방식에 대한 자세한 내용은 로그 경보 섹션을 참조하세요.

사전 조건

로그 경보를 생성하기 전에 CloudWatch Logs에 예약된 쿼리를 실행할 수 있는 권한을 부여하는 IAM 역할을 생성해야 합니다. Amazon SNS 알림에 로그 라인도 포함하려면 두 번째 역할을 생성해야 합니다.

참고

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는 콘솔 전용 API이며 AWS CLI 또는 SDK를 통해 사용할 수 없습니다. CloudTrail은 이 API를 데이터 이벤트로 로깅하므로 데이터 이벤트 로깅으로 추적을 구성하여 캡처해야 합니다.

콘솔을 사용하여 로그 경보 생성

이 섹션의 단계에서는 CloudWatch 콘솔을 사용하여 로그 경보를 생성하는 방법을 설명합니다. AWS CLI를 사용하여 로그 경보를 생성할 수도 있습니다. 자세한 내용은 AWS CLI를 사용하여 로그 경보 생성 섹션을 참조하세요.

로그 경보를 생성하려면 다음을 수행하세요.
  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 창에서 Alarms를 선택합니다.

  3. 경보 생성을 선택하세요.

  4. 데이터 소스에서 로그를 선택합니다.

  5. 로그 쿼리에서

    1. Log Analytics에서 쿼리 생성을 선택합니다. 그러면 쿼리를 빌드하는 로그 분석 페이지가 열립니다.

    2. 로그 분석 페이지에서 쿼리를 작성합니다. 완료되면 오른쪽 상단에서 경보로 계속을 선택하여 경보 콘솔로 돌아갑니다.

    3. 집계 표현식에서 쿼리 결과를 집계하여 경보 평가를 위한 숫자 값을 반환하는 방법을 지정합니다(예: count(*) 또는 avg(latency) by endpoint).

  6. 경보 조건에서

    1. 집계된 결과가...일 때마다에서 비교 연산자를 선택합니다.

    2. 기준...에 임곗값을 입력합니다.

    3. (선택 사항) 추가 구성에서

      1. 경보를 알릴 데이터 포인트를 수정하여 최근 N개의 쿼리 ALARM을 트리거하는 데 필요한 위반 결과 수를 지정합니다.

      2. 누락된 데이터 처리를 수정하여 누락된 데이터를 처리하는 방법을 지정합니다.

  7. 일정에서

    1. 평가 빈도에서 쿼리 실행 빈도를 선택합니다(예: 5분마다).

    2. 시작 시간 오프셋에서 각 쿼리 실행의 조회 기간을 지정합니다.

    3. 종료 시간 오프셋(선택 사항)에서 현재 시간을 기준으로 쿼리 시간 범위의 끝을 초 단위의 오프셋으로 지정합니다.

  8. IAM 권한에서

    1. 예약된 쿼리를 실행하는 데 필요한 역할을 지정합니다. 새로운 역할을 생성하거나 기존 역할을 사용하도록 선택할 수 있습니다.

  9. 다음을 선택합니다.

  10. 작업 구성에서 필요에 따라 작업과 알림을 구성합니다.

    1. Amazon SNS 이메일 알림에 경보 전환을 트리거하는 로그 라인을 포함하려면 작업에 쿼리 결과 포함에서 다음을 수행합니다.

      1. 쿼리 결과 수를 추가하여 포함할 로그 라인 수를 지정합니다.

      2. 필요한 쿼리 결과를 가져오는 데 사용되는 기존 역할을 생성하거나 선택합니다.

  11. 다음을 선택합니다.

  12. 이름 및 선택적 설명을 입력합니다(마크다운 지원).

  13. (선택 사항) 태그를 추가합니다.

  14. 다음을 선택합니다.

  15. 미리 보기 및 생성에서 구성을 검토하고 경보 생성을 선택합니다.

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 명령의 주요 파라미터를 설명합니다.

put-log-alarm 파라미터
파라미터 필수 설명
--alarm-name 경보의 이름입니다. UTF-8 문자만 포함되어야 합니다.
--comparison-operator 임곗값 평가를 위한 비교 연산자입니다. 유효한 값: GreaterThanThreshold, GreaterThanOrEqualToThreshold, LessThanThreshold, LessThanOrEqualToThreshold.
--threshold 비교할 숫자 임곗값입니다.
--query-results-to-evaluate 평가할 최근 쿼리 실행 횟수입니다(N 중 M에서 N).
--query-results-to-alarm ALARM 트리거에 필요한 위반 결과 수입니다(N 중 M에서 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 사용 설명서필터를 사용하여 로그 이벤트에서 지표 생성을 참조하세요. 로그 그룹 지표 필터를 기반으로 경보를 생성하려면 먼저 다음 작업을 완료해야 합니다.

로그 그룹 지표 필터를 기반으로 경보 생성
  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 로그를 선택한 다음, 로그 그룹을 선택합니다.

  3. 지표 필터가 포함된 로그 그룹을 선택합니다.

  4. Metric filters(지표 필터)를 선택합니다.

  5. 지표 필터 탭에서 경보의 기반으로 사용할 지표 필터의 확인란을 선택합니다.

  6. 경보 생성을 선택하세요.

  7. (선택 사항) Metric(지표)에서 Metric name(지표 이름), Statistic(통계) 및 Period(기간)를 편집합니다.

  8. 조건에서 다음을 지정합니다.

    1. 임곗값 유형에서 정적 또는 이상 탐지를 선택합니다.

    2. Whenever your-metric-name is . . .(your-metric-name이 다음과 같은 경우에 항상…)에서 Greater(보다 큼), Greater/Equal(보다 크거나 같음), Lower/Equal(보다 작거나 같음) 또는 Lower(보다 작음)를 선택합니다.

    3. than . . .(:)에 임곗값에 대한 숫자를 지정합니다.

  9. 추가 구성을 선택합니다.

    1. Data points to alarm(경보를 보낼 데이터 포인트)에서 경보가 ALARM 상태로 전환되도록 트리거하는 데이터 포인트 수를 지정합니다. 일치하는 값을 지정하면 해당 기간이 연속적으로 위반되는 경우 경보가 ALARM 상태가 됩니다. N개 중 M번째 경보를 생성하려면 두 번째 값에 대해 지정한 숫자보다 작은 값을 첫 번째 값에 지정합니다. 자세한 내용은 경보 평가 섹션을 참조하세요.

    2. Missing data treatment(누락된 데이터 처리)에서 경보가 평가될 때 누락된 데이터를 처리하는 방법을 지정하는 옵션을 선택합니다.

  10. 다음을 선택합니다.

  11. Notification(알림)에서 경보가 ALARM, OK 또는 INSUFFICIENT_DATA 상태일 때 알림을 보낼 Amazon SNS 주제를 지정합니다.

    1. (선택 사항) 동일한 경보 상태 또는 다른 경보 상태에 대해 여러 개의 알림을 보내려면 Add notification(알림 추가)을 선택합니다.

    2. (선택 사항) 알림을 보내지 않으려면 Remove(제거)를 선택합니다.

  12. 경보가 Auto Scaling, EC2, Lambda 또는 Systems Manager 작업을 수행하도록 하려면 해당 버튼을 선택하고 경보 상태와 수행할 작업을 선택합니다. Lambda 함수를 경보 작업으로 선택하는 경우 함수 이름 또는 ARN을 지정하고 필요에 따라 함수의 특정 버전을 선택할 수 있습니다.

    경보는 ALARM 상태가 될 때만 Systems Manager 작업을 수행할 수 있습니다. Systems Manager 작업에 대한 자세한 내용은 경보에서 OpsItem을 생성하도록 CloudWatch 구성인시던트 생성 단원을 참조하세요.

    참고

    SSM Incident Manager 작업을 수행하는 경보를 생성하려면 특정 권한이 있어야 합니다. 자세한 내용은 AWS Systems Manager Incident Manager의 자격 증명 기반 정책 예 단원을 참조하세요.

  13. Next를 선택하세요.

  14. 이름 및 설명에서, 경보에 대한 이름과 설명을 입력하세요. 이름에는 UTF-8 문자만 포함해야 하며 ASCII 제어 문자는 포함할 수 없습니다. 설명에 마크다운 서식을 포함할 수 있으며, 이는 CloudWatch 콘솔에서 경보 세부 정보 탭에만 표시됩니다. 마크다운은 런북이나 기타 내부 리소스에 대한 링크를 추가하는 데 유용할 수 있습니다.

  15. Preview and create(미리 보기 및 생성)에서 구성이 올바른지 확인한 다음 Create alarm(경보 생성)을 선택합니다.