로그에서 AWS Glue for Ray 오류 해결 - AWS Glue

로그에서 AWS Glue for Ray 오류 해결

AWS Glue를 사용하면 작업 실행 중에 Ray 프로세스에서 생성된 로그에 액세스할 수 있습니다. Ray 작업에서 오류나 예상치 못한 동작이 발생하는 경우 먼저 로그에서 정보를 수집하여 오류의 원인을 파악합니다. 대화형 세션에 대해서도 유사한 로그를 제공합니다. 세션 로그는 /aws-glue/ray/sessions 접두사와 함께 제공됩니다.

작업이 실행되면 로그 라인이 CloudWatch에 실시간으로 전송됩니다. 실행을 완료한 후 인쇄 명령문이 CloudWatch 로그에 추가됩니다. 로그는 작업 실행 후 2주 동안 보관됩니다.

Ray 작업 로그 검사

작업이 실패하면 작업 이름과 작업 실행 ID를 수집합니다. 이러한 항목은 AWS Glue 콘솔에서 찾을 수 있습니다. 작업 페이지로 이동한 다음 Runs(실행) 탭으로 이동합니다. Ray 작업 로그는 다음과 같은 전용 CloudWatch 로그 그룹에 저장됩니다.

  • /aws-glue/ray/jobs/script-log/ - 기본 Ray 스크립트에서 내보낸 로그를 저장합니다.

  • /aws-glue/ray/jobs/ray-monitor-log/ - Ray autoscaler 프로세스에서 내보낸 로그를 저장합니다. 이러한 로그는 헤드 노드에 대해 생성되며 다른 워커 노드에 대해서는 생성되지 않습니다.

  • /aws-glue/ray/jobs/ray-gcs-logs/ - 글로벌 제어 스토어(GCS) 프로세스에서 생성된 로그를 저장합니다. 이러한 로그는 헤드 노드에 대해 생성되며 다른 워커 노드에 대해서는 생성되지 않습니다.

  • /aws-glue/ray/jobs/ray-process-logs/ - 헤드 노드에서 실행되는 다른 Ray 프로세스(주로 대시보드 에이전트)에서 생성된 로그를 저장합니다. 이러한 로그는 헤드 노드에 대해 생성되며 다른 워커 노드에 대해서는 생성되지 않습니다.

  • /aws-glue/ray/jobs/ray-raylet-logs/ - 각 raylet 프로세스에서 생성된 로그를 저장합니다. 이러한 로그는 헤드 노드를 포함하여 각 워커 노드에 대해 단일 스트림으로 수집됩니다.

  • /aws-glue/ray/jobs/ray-worker-out-logs/ - 클러스터의 각 작업자에 대한 stdout 로그를 저장합니다. 이러한 로그는 헤드 노드를 포함한 각 워커 노드에서 생성됩니다.

  • /aws-glue/ray/jobs/ray-worker-err-logs/ - 클러스터의 각 작업자에 대한 stderr 로그를 저장합니다. 이러한 로그는 헤드 노드를 포함한 각 워커 노드에서 생성됩니다.

  • /aws-glue/ray/jobs/ray-runtime-env-log/ - Ray 설정 프로세스에 대한 로그를 저장합니다. 이러한 로그는 헤드 노드를 포함한 각 워커 노드에서 생성됩니다.

Ray 작업 오류 해결

Ray 로그 그룹의 구성을 이해하고 오류 해결에 도움이 되는 로그 그룹을 찾으려면 Ray 아키텍처에 대한 배경 정보를 알고 있으면 도움이 됩니다.

AWS Glue ETL에서 작업자는 인스턴스에 해당합니다. AWS Glue 작업에 대한 작업자를 구성할 때 해당 작업 전용 인스턴스의 유형과 수량을 설정합니다. Ray에서는 작업자라는 용어를 다양한 방식으로 사용합니다.

Ray에서는 헤드 노드와 워커커 노드를 사용하여 Ray 클러스터 내에서 인스턴스의 책임을 구분합니다. Ray 워커 노드는 분산 계산 결과를 얻기 위해 계산을 수행하는 여러 액터 프로세스를 호스팅할 수 있습니다. 함수의 복제본을 실행하는 액터를 복제본이라고 합니다. 복제본 액터를 작업자 프로세스라고도 합니다. 복제본은 클러스터를 조정하기 위한 추가 프로세스를 실행하기 때문에 헤드라고 하는 헤드 노드에서도 실행될 수 있습니다.

계산에 기여하는 각 액터는 자체 로그 스트림을 생성합니다. 이를 통해 다음과 같은 몇 가지 인사이트를 얻을 수 있습니다.

  • 로그를 내보내는 프로세스 수가 작업에 할당된 작업자 수보다 많을 수 있습니다. 각 인스턴스의 각 코어에는 주로 액터가 있습니다.

  • Ray 헤드 노드는 클러스터 관리 및 시작 로그를 내보냅니다. 반면 Ray 워커 노드는 수행된 작업에 대한 로그만 내보냅니다.

Ray 아키텍처에 대한 자세한 내용은 Ray 설명서의 아키텍처 백서를 참조하세요.

문제 영역: Amazon S3 액세스

작업 실행 실패 메시지를 확인합니다. 충분한 정보가 제공되지 않는 경우 /aws-glue/ray/jobs/script-log/ 섹션을 확인하세요.

문제 영역: PIP 종속성 관리

/aws-glue/ray/jobs/ray-runtime-env-log/을 검토합니다.

문제 영역: 메인 프로세스의 중간 값 검사

기본 스크립트에서 stderr 또는 stdout에 쓰고 /aws-glue/ray/jobs/script-log/에서 로그를 검색합니다.

문제 영역: 하위 프로세스의 중간 값 검사

remote 함수에서 stderr 또는 stdout에 씁니다. 그런 다음 /aws-glue/ray/jobs/ray-worker-out-logs/ 또는 /aws-glue/ray/jobs/ray-worker-err-logs/에서 로그를 검색합니다. 함수가 복제본에서 실행되었을 수 있으므로 원하는 출력을 찾기 위해 여러 로그를 검사해야 할 수 있습니다.

문제가 있는 영역: 오류 메시지에서 IP 주소 해석

특정 오류 상황에서는 작업에서 IP 주소가 포함된 오류 메시지를 생성할 수 있습니다. 이러한 IP 주소는 임시 주소이며 클러스터에서 노드를 식별하고 노드 사이에서 통신하는 데 사용됩니다. 노드의 로그는 IP 주소를 기반으로 고유한 접미사를 사용하는 로그 스트림에 게시됩니다.

CloudWatch에서는 이 접미사를 식별하여 로그를 필터링해 이 IP 주소에 특정한 로그를 검사할 수 있습니다. 예를 들어 주어진 FAILED_IPJOB_RUN_ID에 대해 다음을 사용해 접미사를 식별할 수 있습니다.

filter @logStream like /JOB_RUN_ID/ | filter @message like /IP-/ | parse @message "IP-[*]" as ip | filter ip like /FAILED_IP/ | fields replace(ip, ":", "_") as uIP | stats count_distinct by uIP as logStreamSuffix | display logStreamSuffix