Amazon EMR 애플리케이션 로그를 CloudWatch로 푸시하려면 어떻게 해야 합니까?

4분 분량
0

Amazon EMR 애플리케이션 로그를 Amazon EMR 버전 5.30.0 이상용 Amazon CloudWatch로 푸시하고 싶습니다.

간략한 설명


CloudWatch 에이전트를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 지표와 로그를 수집할 수 있습니다. 그런 다음 Amazon EMR 클러스터 인스턴스를 구성하여 CloudWatch에 애플리케이션 로그를 게시합니다.

해결 방법

전제 조건:

CloudWatch 에이전트 구성 파일을 생성합니다.

구성 파일 생성

Amazon EMR 인스턴스에서 특정 애플리케이션 로그를 푸시하려면 다음 예제 중 하나를 사용하여 구성 파일을 생성하십시오.

모든 노드의 YARN 애플리케이션에 대한 로그 푸시

다음 샘플 구성 파일은 각 Amazon EMR 인스턴스에서 컨테이너 로그를 푸시합니다.

{
    "agent": {
            "metrics_collection_interval": 300,
            "run_as_user": "yarn"
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                    "file_path": "/var/log/hadoop-yarn/containers/application_*/container*/*",
                     "log_group_name": "/emr/applications/",
                     "log_stream_name": "{instance_id}-{ip_address}",
                     "publish_multi_logs" : true
                    }
                ]
            }
        }
    }
}

참고: /var/log/hadoop-yarn/containers/application_*/container*/*를 파일 경로 위치로 바꾸십시오.

프라이머리 노드의 YARN 및 Hive 서버 2 애플리케이션에 대한 로그 푸시

다음 샘플 구성 파일은 EMR 프라이머리 노드에서 Yarn 리소스 관리자 로그와 Hive 서버 로그를 푸시합니다.

{
    "agent": {
            "metrics_collection_interval": 300,
            "run_as_user": "hadoop"
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                    "file_path": "/mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-*",
                    "log_group_name": "/emr/master/logs",
                    "log_stream_name": "{instance_id}-{ip_address}-resourcemanager.log"
                    },
                    {
                    "file_path": "/mnt/var/log/hive/hive-server2.log",
                    "log_group_name": "/emr/master/logs",
                    "log_stream_name": "{instance_id}-{ip_address}-hive-server2.log"
                    }
                ]
            }
        }
    }
}

참고: /mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-*를 파일 경로 위치로 바꾸십시오.

S3 버킷에 구성 파일 업로드

Amazon Simple Storage Service(Amazon S3) 버킷에 구성 파일을 업로드합니다.

참고: Amazon EMR 클러스터에는 S3 버킷에 액세스할 수 있는 AWS Identity and Access Management(IAM) 권한이 있어야 합니다.

Amazon EMR 시작

Amazon EMR 부트스트랩 작업의 일부로 다음 스크립트를 실행하여 CloudWatch 에이전트를 구성하고 CloudWatch 에이전트 프로세스를 시작합니다.

# == Install CloudWatch Agent ==
echo "=================== BootstrapActions: Install CloudWatch Agent ==================="

sudo yum install amazon-cloudwatch-agent -y
sudo amazon-linux-extras install collectd -y

# Copy config file on the instance
sudo aws s3 cp s3://<your-s3-path>/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json

# Start the agent with the created config file
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

# Status CW Agent
echo "Status CW Agent"
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

참고: s3://<your-s3-path>/config.json을 환경 경로로 바꾸십시오.

(선택 사항) 스파크 애플리케이션 제출

예제 애플리케이션 로그를 생성하려면 Amazon EMR 클러스터 리더 노드에서 다음 명령을 실행하여 스파크 애플리케이션을 시작합니다.

spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10

CloudWatch 콘솔을 사용하여 CloudWatch Logs 모니터링

  1. CloudWatch 콘솔을 엽니다.
  2. 탐색 창의 Logs(로그)에서 Log groups(로그 그룹)을 선택합니다.
  3. 구성 파일을 기반으로 보려는 로그 그룹을 선택합니다.
  4. 위 예제의 샘플 config.json 파일을 사용하는 경우 다음 작업 중 하나를 완료하십시오.
    애플리케이션 로그를 보려면 /emr/applications를 선택합니다.
    리더 로그를 보려면 /emr/master/logs를 선택합니다.

참고: CloudWatch 이벤트 로그는 로그 그룹에 보존 정책을 구성할 때만 자동으로 삭제됩니다. 보존 설정을 구성하여 비용을 최적화할 수도 있습니다. 자세한 내용은 CloudWatch Logs의 로그 데이터 보존 변경을 참조하십시오.

(선택 사항) Systems Manager를 사용하여 Amazon EMR에 CloudWatch 에이전트 설치

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

AWS Systems Manager를 사용하여 에이전트 파일 콘텐츠를 저장합니다. 그런 다음 CloudWatch 에이전트를 시작할 때 Systems Manager 파일을 참조하십시오.

  1. Systems Manager 콘솔 또는 AWS CLI를 사용하여 Systems Manager 파라미터를 생성합니다. 그런 다음 에이전트 파일 콘텐츠를 저장합니다. 다음 예제에서는 AWS CLI를 사용하여 파라미터를 생성합니다.

    aws ssm put-parameter \
         --name "AmazonCloudWatch-Config.json" \
         --value "{
                     "agent": {
                             "metrics_collection_interval": 300,
                             "run_as_user": "yarn"
                     },
                     "logs": {
                        "logs_collected": {
                            "files": {
                                "collect_list": [
                                    {
                                    "file_path": "/var/log/hadoop-yarn/containers/application_*/container*/*",
                                    "log_group_name": "/emr/applications/",
                                    "log_stream_name": "{instance_id}",
                                    "publish_multi_logs" : true
                                    }
                                ]
                            }
                        }
                     }
             }" \
         --type String

    참고: /var/log/hadoop-yarn/containers/application_*/container*/*를 파일 경로 위치로 바꾸십시오. 위 예제에서 구성 파일은 각 Amazon EMR 인스턴스의 컨테이너 로그를 푸시합니다. System Manager 파라미터에 대한 자세한 내용은 Systems Manager 파라미터 생성을 참조하십시오.

  2. 파라미터를 참조하도록 부트스트랩 작업 스크립트를 업데이트합니다.

    # Start the agent with the created config file
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c ssm:AmazonCloudWatch-Config.json

관련 정보

부트스트랩 작업 조건부 실행

프라이머리 노드의 로그 파일 보기

CloudWatch 에이전트를 다른 사용자로 실행

CloudWatch Logs로 전송된 로그 데이터 보기

Amazon EMR 클러스터 인스턴스에서 사용자 지정 지표를 수집하여 CloudWatch에서 모니터링하려면 어떻게 해야 합니까?

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음