CloudWatch에서 구독 필터를 사용하여 로그 전송 실패 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon CloudWatch에서 구독 필터를 사용하여 로그 전송 실패 문제를 해결하려고 합니다.

간략한 설명

스트리밍을 시작할 때 CloudWatch Logs 지표를 검사하여 필터 패턴이 정확하고 수신 로그 이벤트와 일치하는지 확인하십시오. 문제 해결을 위해 검토해야 할 가장 일반적인 지표는 다음과 같습니다.

  • ForwardedBytes: 구독 대상으로 전달된 로그 이벤트의 볼륨(압축된 바이트)입니다.
  • ForwardedLogEvents: 구독 대상에 전달된 로그 이벤트 수입니다.
  • DeliveryErrors: 구독 대상에 데이터를 전달할 때 CloudWatch Logs에서 오류를 수신한 로그 이벤트의 수입니다.
  • DeliveryThrottling: 구독 대상으로 데이터를 전달할 때 CloudWatch Logs가 제한되었음을 나타내는 로그 이벤트 수입니다.

참고: 대상 서비스에서 스로틀링 또는 서비스 오류 등과 같이 재시도 가능한 오류를 수신하면 CloudWatch Logs는 24시간 동안 데이터 전송을 시도합니다. AccessDenied 또는 ResourceNotFound 오류와 같이 재시도 가능한 오류가 아닌 경우에는 CloudWatch Logs에서 더 이상 전송을 시도하지 않습니다.

해결 방법

사용하는 대상 서비스를 기반으로 구독 필터를 사용하여 로그 전송 실패 문제를 해결하십시오.

Amazon Kinesis Data Streams

Amazon Kinesis Data Streams에 대한 구독 필터를 사용하여 로그 전송 실패 문제를 해결하려면 다음 작업을 완료하십시오.

  • Kinesis 데이터 스트림이 활성 상태인지 확인합니다. 상태를 보려면 Kinesis 콘솔 또는 DescribeStream API 호출을 사용하십시오.

  • CloudWatch 로그 그룹과 Kinesis 데이터 스트림이 동일한 AWS 리전에 있는지 확인합니다.

  • 구독 필터에 연결된 AWS Identity and Access Management(IAM) 역할을 확인합니다. 데이터를 스트림에 배치하는 데 필요한 권한이 CloudWatch Logs에 있는지 확인하십시오. 다음은 역할 권한 정책의 예입니다.
    참고: example-region을 해당 리전으로 바꾸고, example-account-id를 AWS 계정 ID로 바꾸고, example-stream-name을 스트림 이름으로 바꾸십시오.

    {  
      "Statement": [{  
        "Effect": "Allow",  
        "Action": "kinesis:PutRecord",  
        "Resource": "arn:aws:kinesis:example-region:example-account-id:stream/example-stream-name"  
      }]  
    }
  • IAM 역할이 적절한 신뢰 정책으로 구성되어 있는지 확인합니다. 다음은 신뢰 정책의 예입니다.
    참고: example-region를 해당 리전으로 바꾸고 example-account-id를 계정 ID로 바꾸십시오.

    {  
      "Statement": {  
        "Effect": "Allow",  
        "Principal": {  
          "Service": "logs.region.amazonaws.com"  
        },  
        "Action": "sts:AssumeRole",  
        "Condition": {  
          "StringLike": {  
            "aws:SourceArn": "arn:aws:logs:example-region:example-account-id:*"  
          }  
        }  
      }  
    }
  • 전용 Kinesis 데이터 스트림이 있는 경우 스트림의 지표를 확인하여 제대로 작동하는지 확인합니다. 자세한 내용은 Amazon CloudWatch를 통한 Amazon Kinesis Data Streams 서비스 모니터링을 참조하십시오.

  • 교차 계정 로깅에 문제가 있는 경우 CloudWatch에서 교차 계정 로깅 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

Amazon Data Firehose

Amazon Data Firehose에 대한 구독 필터를 사용하여 로그 전송 실패 문제를 해결하려면 다음 작업을 완료하십시오.

  • Firehose 스트림이 활성 상태인지 확인합니다. 상태를 보려면 Kinesis 콘솔 또는 DescribeDeliveryStream API 호출을 사용하십시오. 데이터 변환 기능을 사용하는 경우에는 지정된 AWS Lambda 함수가 있는지 확인하십시오.

  • Firehose 지표를 확인하여 데이터가 Firehose로 스트리밍되고 있는지 확인합니다. IncomingBytes, IncomingRecords, DataReadFromKinesisStream.BytesDataReadFromKinesisStream.Records와 같은 지표를 확인하십시오.

  • Firehose에서 데이터를 수신하지 못하는 경우 API 수준 CloudWatch 지표를 확인합니다. 이 문제는 업스트림에서 발생할 수 있습니다. PutRecordPutRecordBatch와 같은 API는 데이터를 Firehose로 전송하며 정확하게 호출되어야 합니다.

  • 오류 로그를 확인하여 전송이 실패한 이유에 대한 세부 정보를 검토합니다. 관련 IAM 정책에 logs:PutLogEvents 권한이 포함되어 있는지 확인하십시오. 다음은 logs:PutLogEvents 권한이 있는 IAM 정책의 예입니다.
    참고: example-region를 해당 리전으로 바꾸고 example-account-id를 계정 ID로 바꾸십시오.

    {  
        "Sid": "",  
        "Effect": "Allow",  
        "Action": [  
            "logs:PutLogEvents"  
        ],  
        "Resource": [  
            "arn:aws:logs:example-region:example-account-id:log-group:/aws/kinesisfirehose/Delivery_Stream:log-stream:*",  
            "arn:aws:logs:example-region:example-account-id:log-group:%FIREHOSE_POLICY_TEMPLATE_PLACEHOLDER%:log-stream:*"  
        ]  
    }
  • Firehose 스트림에 연결된 IAM 역할에 CloudWatch Logs가 데이터를 저장하도록 허용할 수 있는 적절한 권한이 있는지 확인합니다. 다음은 권한 정책의 예입니다.
    참고: example-region을 해당 리전으로 바꾸고, example-account-id를 계정 ID로 바꾸고, example-stream-name을 스트림 이름으로 바꾸십시오.

    {  
      "Statement": [{  
        "Effect": "Allow",  
        "Action": "firehose:PutRecord",  
        "Resource": "arn:aws:firehose:example-region:example-account-id:deliverystream/example-stream-name"  
      }]  
    }
  • IAM 역할이 적절한 신뢰 정책으로 구성되어 있는지 확인합니다. 다음은 신뢰 정책의 예입니다.
    참고: example-region를 해당 리전으로 바꾸고 example-account-id를 계정 ID로 바꾸십시오.

    {  
      "Statement": {  
        "Effect": "Allow",  
        "Principal": { "Service": "logs.amazonaws.com" },  
        "Action": "sts:AssumeRole",  
        "Condition": {   
             "StringLike": {   
                 "aws:SourceArn": "arn:aws:example-region:example-account-id:*"  
             }   
         }  
      }  
    }
  • 교차 계정 로깅에 문제가 있는 경우 CloudWatch에서 교차 계정 로깅 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

  • 여러 대상과 관련된 문제는 Amazon Data Firehose 문제 해결을 참조하십시오.

Lambda

Lambda에 대한 구독 필터를 사용하여 로그 전송 실패 문제를 해결하려면 다음 작업을 완료하십시오.

  • CloudWatch Logs에 함수 실행 권한을 부여하는 데 필요한 리소스 기반 정책이 Lambda 함수에 있는지 확인합니다. 다음은 정책 명령문의 예입니다.
    참고: example-region, example-account-id, example-lambda-function, example-log-name을 해당 리전, 계정 ID, Lambda 함수 및 로그 이름으로 바꾸십시오. 

    "Statement": [  
        {  
          "Sid": "",  
          "Effect": "Allow",  
          "Principal": {  
            "Service": "logs.amazonaws.com"  
          },  
          "Action": "lambda:InvokeFunction",  
          "Resource": "arn:aws:lambda:example-region:example-account-id:function:example-lambda-function",  
          "Condition": {  
            "StringEquals": {  
              "AWS:SourceAccount": "example-account-id"  
            },  
            "ArnLike": {  
              "AWS:SourceArn": "arn:aws:logs:example-region:example-account-id:log-group:example-log-name:*"  
            }  
          }  
        }  
      ]
  • 다음 역할 정책을 사용하여 lambda.amazonaws.com에 대한 신뢰 관계를 갖는 IAM 역할이 Lambda 함수에 있는지 확인합니다.

    "Statement": [  
        {  
            "Effect": "Allow",  
            "Principal": {  
            "Service": "lambda.amazonaws.com"  
            },  
            "Action": "sts:AssumeRole"  
        }  
    ]

OpenSearch Service

Amazon OpenSearch Service에 대한 구독 필터를 사용하여 로그 전송 실패 문제를 해결하려면 다음 작업을 완료하십시오.

관련 정보

CloudWatch 콘솔을 사용하여 Kinesis에 대한 구독 필터를 생성 및 구성하고 문제를 해결하려면 어떻게 해야 합니까?

Amazon Data Firehose와 Amazon S3 간의 데이터 전송 실패 문제를 해결하려면 어떻게 해야 합니까?

Lambda 함수를 호출하도록 CloudWatch 구독 필터를 구성하려면 어떻게 해야 합니까?

AWS 공식
AWS 공식업데이트됨 10달 전