翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EMR ログを CloudWatch Logs に発行する
概要:
Amazon EMR on EC2 は Amazon CloudWatch Logs とのネイティブ統合を提供するため、クラスターログを CloudWatch に直接送信できます。この機能を使用すると、ログ管理が簡素化され、モニタリング、トラブルシューティング、分析のために EMR クラスターログへの一元化されたアクセスが提供されます。
CloudWatch ログ記録を有効にすると、EMR クラスターから CloudWatch ロググループに自動的にログをキャプチャしてストリーミングできます。これには、ステップ実行ログ、Spark ドライバーログ、Spark エグゼキュターログが含まれ、クラスターオペレーションとアプリケーション動作を包括的に可視化できます。
CloudWatch ログ記録機能は、Amazon EMR リリース 7.11.0 以降で使用でき、クラスターの作成時に MonitoringConfigurationパラメータを使用して設定されます。有効にすると、ログは生成されたときに CloudWatch に自動的にストリーミングされ、CloudWatch コンソールまたは API を介してログデータにほぼリアルタイムでアクセスできます。
前提条件
EMR クラスターの CloudWatch ログ記録を有効にする前に、次の前提条件を満たしていることを確認してください。
-
Amazon EMR リリース: クラスターは Amazon EMR リリース 7.11.0 以降を使用する必要があります。
-
CloudWatch エージェントアプリケーション: Amazon CloudWatch エージェントはクラスターにインストールする必要があります。
-
IAM アクセス許可: クラスターの EC2 インスタンスプロファイルには、必要な CloudWatch Logs アクセス許可が必要です。
-
VPC エンドポイント (プライベートサブネットの場合): クラスターがプライベートサブネットにある場合は、CloudWatch Logs の VPC エンドポイントを設定する必要があります。
権限
CloudWatch エージェントには、ロググループの作成、ログストリームの作成、CloudWatch Logs へのログイベントの書き込みに特定の AWS Identity and Access Management(IAM) アクセス許可が必要です。これらのアクセス許可は、EMR クラスターで使用される Amazon EC2 インスタンスプロファイルにアタッチする必要があります。
必要な IAM ポリシー
Amazon EMR の EC2 インスタンスプロファイルに次のポリシーを追加して、必要なアクセス許可を付与します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:CreateLogStream", "logs:CreateLogGroup" ], "Resource": "*", "Sid": "AllowCWACloudWatchLogs" } ] }
ポリシーのアタッチ
このポリシーを EMR の EC2 インスタンスプロファイルにアタッチするには:
-
[IAM console] (IAM コンソール) に入ります。
-
EMR クラスターで使用されるインスタンスプロファイルを見つけます。通常は です
EMR_EC2_DefaultRole。 -
新しいインラインポリシーを作成するか、上記のアクセス許可を持つカスタマー管理ポリシーをアタッチします。
-
ポリシーの変更を保存します。
Amazon EMR の IAM ロールの詳細については、「Amazon EMR 管理ガイド」の「Configure IAM roles for Amazon EMR permissions to AWS services and resources」を参照してください。
CloudWatch ログ記録の設定
新しい EMR クラスターの作成時に CloudWatch ログ記録を有効にするには、 AWS マネジメントコンソール AWS CLI、、または AWS SDKsを使用します。設定は MonitoringConfigurationパラメータで指定します。
AWS マネジメントコンソールの使用
コンソールから CloudWatch ログ記録を使用してクラスターを作成するには:
-
AWS EMR コンソール
に移動します。 -
[クラスターを作成] を選択します。
-
名前とアプリケーションで、7.11.0 以降の Amazon EMR リリースを選択します。
-
アプリケーションバンドルで、インストールするアプリケーションを選択し、Amazon CloudWatch Agent が選択に含まれていることを確認します。
-
クラスターログで、クラスター固有のログを Amazon CloudWatch に発行するオプションを選択します。
-
(オプション) 次の設定を行います。
-
ロググループ名 - カスタムロググループ名。デフォルトは
/aws/emr/{cluster_id}です。 -
ログストリームプレフィックス - ログストリーム名のプレフィックス デフォルトは です
empty。 -
CloudWatch KMS キー - ログ暗号化用の KMS キー ARN (オプション)。
-
ログタイプ - キャプチャするログタイプを選択します (デフォルト: step および Spark ドライバー)
-
-
残りのクラスター設定を完了します。
-
[クラスターを作成] を選択します。
クラスターを作成したら、クラスター管理 → Amazon CloudWatch のログ送信先にある EMR クラスターの詳細ページから Amazon CloudWatch Logs リンクにアクセスできます。
の使用 AWS CLI
create-cluster コマンド AWS CLI で を使用して CloudWatch ログ記録を有効にできます。CloudWatch エージェントは --applicationsパラメータに含める必要があり、ログ記録は --monitoring-configurationパラメータを使用して設定されます。
例: デフォルト設定
EMR はステップログと Spark ドライバーログのみを自動的にキャプチャし、デフォルトのロググループに送信します。
aws emr create-cluster \ --name "EMR cluster with CloudWatch Logs" \ --release-label emr-7.11.0 \ --applications Name=Spark Name=AmazonCloudWatchAgent \ --instance-type m7g.2xlarge \ --instance-count 3 \ --use-default-roles \ --monitoring-configuration '{ "CloudWatchLogConfiguration": { "Enabled": true } }'
デフォルト設定を使用する場合:
-
ロググループ名:
/aws/emr/{cluster_id}({cluster_id}は自動的にクラスター ID に置き換えられます)。 -
ログストリームプレフィックス: 空 (プレフィックスなし)。
-
ログタイプ:
STEP_LOGSとSPARK_DRIVERが有効で、それぞれSTDOUTと の両方をキャプチャしますSTDERR。 -
暗号化: カスタマーマネージドキーなし (デフォルトでは CloudWatch サーバー側の暗号化を使用)
例: カスタム設定
この例では、特定のロググループ名、KMS 暗号化、および選択的ログタイプを使用したカスタム設定を示します。
aws emr create-cluster \ --name "EMR cluster with custom CloudWatch Logs" \ --release-label emr-7.11.0 \ --applications Name=Spark Name=AmazonCloudWatchAgent \ --instance-type m7g.2xlarge \ --instance-count 3 \ --use-default-roles \ --monitoring-configuration '{ "CloudWatchLogConfiguration": { "Enabled": true, "LogGroupName": "/my-company/emr/production", "LogStreamNamePrefix": "cluster-prod", "EncryptionKeyArn": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012", "LogTypes": { "STEP_LOGS": ["STDOUT", "STDERR"], "SPARK_DRIVER": ["STDOUT", "STDERR"], "SPARK_EXECUTOR": ["STDERR", "STDOUT"] } } }'
この設定では、次のようになります。
-
カスタムロググループ にログを作成します
/my-company/emr/production。 -
すべてのログストリーム名の前に を付けます
cluster-prod。 -
指定された KMS キーを使用してログを暗号化します。
-
ステップログ、Spark ドライバーログ、Spark エグゼキュターログなど、すべてのログタイプをキャプチャします。
Amazon EMR AWS CLI で を使用する方法の詳細については、AWS CLI 「EMR の コマンドリファレンス」を参照してください。
設定リファレンス
CloudWatchLogConfiguration パラメータ
CloudWatchLogConfigurationv オブジェクトは、次のパラメータをサポートしています。
| パラメータ | タイプ | 必須 | 説明 |
|---|---|---|---|
Enabled |
ブール値 | はい | CloudWatch ログ記録を有効にするtrueには、 に設定します。を に設定falseして無効にします。 |
LogGroupName |
String | 不可 | CloudWatch ロググループ名。デフォルト: /aws/emr/{cluster_id} |
LogStreamNamePrefix |
String | 不可 | ログストリーム名のプレフィックス。デフォルト: 空の文字列 |
EncryptionKeyArn |
String | 不可 | ログ暗号化用の KMS キーの ARN。指定しない場合、ログは CloudWatch サーバー側の暗号化によって暗号化されます。 |
LogTypes |
オブジェクト | 不可 | キャプチャするログタイプを指定します。デフォルト: STDOUT STEP_LOGS と STDERR を持つ 型と SPARK_DRIVER型。 |
ログタイプ
Amazon EMR は 3 つのログタイプをサポートし、それぞれが標準出力と標準エラーストリームの両方をキャプチャします。
| ログのタイプ | 説明 | 使用可能なストリーム |
|---|---|---|
STEP_LOGS |
ステップコントローラーログを含む EMR ステップ実行ログ | STDOUT, STDERR |
SPARK_DRIVER |
Spark アプリケーションからの Apache Spark ドライバーログ | STDOUT, STDERR |
SPARK_EXECUTOR |
ワーカーノードからの Apache Spark エグゼキュターログ | STDOUT, STDERR |
デフォルトのログタイプ設定
LogTypes パラメータを指定しない場合、EMR は次のデフォルト設定を使用します。
"LogTypes": { "STEP_LOGS": ["STDOUT", "STDERR"], "SPARK_DRIVER": ["STDOUT", "STDERR"] }
カスタムログタイプの設定
LogTypes パラメータを明示的に指定することで、キャプチャするログタイプをカスタマイズできます。たとえば、ステップログのみをキャプチャするには:
"LogTypes": { "STEP_LOGS": ["STDOUT", "STDERR"] }
または、Spark ドライバーから標準エラーのみをキャプチャします。
"LogTypes": { "SPARK_DRIVER": ["STDERR"] }
ロググループとストリームの命名
CloudWatch はログをロググループとログストリームに整理します。
-
ロググループ: 同じ保持、モニタリング、アクセスコントロール設定を共有するログストリームのコレクション。
-
デフォルト名:
/aws/emr/{cluster_id} -
カスタム名: 指定した有効な CloudWatch ロググループ名。
-
-
ログストリーム: 単一のソースからの一連のログイベント。
-
命名パターン:
-
ステップログ:
{prefix}/steps/{step_id}/{file_name}。 -
Spark ドライバーとエグゼキュターのログ:
{prefix}/applications/{application_id}/{container_id}/{file_name}
-
-
例:
-
/steps/s-ABCDEFG123456/stdout -
cluster-prod/steps/s-ABCDEFG123456/stderr -
/applications/application_1234567890_0001/container_1234567890_0001_01_000001/stdout
-
-
を使用したログの暗号化 AWS KMS
AWS Key Management Service (KMS) を使用して、保管中の CloudWatch ログを暗号化できます。暗号化を有効にするには:
-
EMR クラスターと同じ AWS リージョンに KMS キーを作成または識別します。
-
KMS キーポリシーが CloudWatch Logs サービスにキーの使用を許可していることを確認します。
-
EncryptionKeyArnパラメータを に追加しますCloudWatchLogConfiguration。
CloudWatch Logs データの暗号化の詳細については、「 を使用して CloudWatch Logs のログデータを暗号化 AWS Key Management Serviceする」を参照してください。
KMS 暗号化の例
{ "CloudWatchLogConfiguration": { "Enabled": true, "EncryptionKeyArn": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012" } }
CloudWatch でのログの表示
CloudWatch ログ記録を有効にしてクラスターを実行したら、CloudWatch コンソールまたは API を使用してログを表示および分析できます。
EMR コンソールからのログへのアクセス
クラスターログにすばやくアクセスするには、EMR コンソールから直接行います。
-
Amazon EMR コンソールに移動します。
-
クラスターリストからクラスターを選択します。
-
クラスターの詳細ページで、クラスター管理セクションを見つけます。
-
Amazon CloudWatch の ログ送信先 リンクをクリックします。
このリンクをクリックすると、クラスターのロググループにフィルタリングされた CloudWatch Logs コンソールに直接移動します。
CloudWatch コンソールからのログへのアクセス
CloudWatch でログに手動で移動するには:
-
CloudWatch コンソール
を開きます。 -
ナビゲーションペインで、[ロググループ] を選択します。
-
ロググループを検索する (デフォルト:
/aws/emr/{cluster_id}またはカスタムロググループ名) -
ロググループを選択して、使用可能なログストリームを表示します。
-
ログストリームを選択して、ログイベントを表示します。
CloudWatch Logs の使用の詳細については、Amazon CloudWatch Logs ユーザーガイドを参照してください。
考慮事項
CloudWatch エージェントの動作
Amazon CloudWatch エージェントは、メトリクスとログ記録機能の両方を提供します。
-
CloudWatch エージェントのみ ( なし
MonitoringConfiguration) を有効にすると、CloudWatch メトリクスのみが CloudWatch に発行されます。ログは送信されません。 -
CloudWatch ログ記録を有効にするには、CloudWatch エージェントアプリケーションと で
MonitoringConfigurationパラメータの両方が必要ですCloudWatchLogConfiguration。これにより、メトリクスとログ記録を一緒に行うことができます。
CloudWatch ログ記録のみの有効化 (CloudWatch メトリクスの無効化)
CloudWatch ログ記録を有効にし、メトリクス収集機能を無効にしたい場合は、メトリクスのエクスポートを停止するように CloudWatch エージェントを設定できます。クラスター設定に次の分類を追加します。
[ { "Classification": "emr-metrics", "Properties": {}, "Configurations": [ { "Classification": "emr-system-metrics", "Properties": {}, "Configurations": [] } ] } ]
CloudWatch メトリクスの詳細については、Amazon CloudWatch でメトリクスをモニタリングする」を参照してください。
既知の制限事項
- ログのアップロード中のデータポイントのメトリクス:
-
CloudWatch ログ記録がアクティブな場合、ログアクティビティが高い期間、特にステップ送信中に CloudWatch メトリクスデータに時折ギャップが発生することがあります。これは、EMR インスタンスコントローラーが CloudWatch エージェントを再起動して、ステップの送信時に新しいログ設定を適用し、メトリクス収集を一時的に中断するために発生します。これはログ配信やクラスター機能には影響しません。
プライベートサブネットの要件
プライベートサブネット内の EMR クラスターの CloudWatch Logs にログを発行するには、CloudWatch Logs VPC エンドポイントを作成してクラスターの VPC に関連付けます。
CloudWatch Logs エンドポイントの詳細については、 AWS 全般のリファレンスガイドのAmazon CloudWatch Logs エンドポイントとクォータ」を参照してください。
コストについて
CloudWatch Logs の料金は、以下に基づいています。
-
データ取り込み: CloudWatch に取り込まれたログデータの量
-
ストレージ: 保持設定に基づいて保存されるログデータの量
-
データ分析: CloudWatch Logs Insights を使用して実行されるクエリ
以下を実行してコストを最適化します。
-
ロググループに適切なログ保持期間を設定します。
-
選択ログタイプを使用して、必要なログのみをキャプチャします。
-
長期的なログストレージに Amazon S3 ログ記録を低コストで使用することを検討してください。
現在の料金情報については、Amazon CloudWatch の料金」を参照してください。
その他のリソース
-
Amazon CloudWatch でメトリクスをモニタリングする - CloudWatch メトリクス収集に関する情報
-
Amazon EMR の IAM ロールの設定 - EMR クラスターの IAM ロールの設定
-
Amazon CloudWatch Logs ユーザーガイド - CloudWatch Logs 機能の完全なガイド
-
AWS CLI EMR のコマンドリファレンス - CLI リファレンスドキュメント