Dataproc のログ

Dataproc ジョブとクラスタのログは、Cloud Logging で表示、検索、フィルタ、アーカイブを行えます。

コンポーネントのロギングレベル

クラスタを作成するときに、Spark、Hadoop、Flink などの Dataproc コンポーネントのロギングレベルを、コンポーネント固有の log4j クラスタ プロパティhadoop-log4j など)で設定します。クラスタベースのコンポーネントのロギングレベルは、YARN ResourceManager などのサービス デーモンと、クラスタ上で実行されるジョブに適用されます。

Presto コンポーネントなどのコンポーネントに対して log4j プロパティがサポートされていない場合は、コンポーネントの log4j.properties ファイルまたは log4j2.properties ファイルを編集する初期化アクションを記述します。

ジョブ固有のコンポーネントのロギングレベル: ジョブを送信するときに、コンポーネントのロギングレベルを設定することもできます。これらのロギングレベルはジョブに適用され、クラスタの作成時に設定されたロギングレベルよりも優先されます。詳細については、クラスタ プロパティとジョブ プロパティの比較をご覧ください。

Spark および Hive コンポーネント バージョンのロギングレベル:

Spark 3.3.X と Hive 3.X のコンポーネントは log4j2 プロパティを使用しますが、以前のバージョンのコンポーネントは log4j プロパティを使用します(Apache Log4j2 を参照)。クラスタで Spark のロギングレベルを設定するには、spark-log4j: 接頭辞を使用します。

  • 例: log4j.logger.org.apache.spark を設定する Spark 3.1 を使用する Dataproc イメージ バージョン 2.0

    gcloud dataproc clusters create ... \
        --properties spark-log4j:log4j.logger.org.apache.spark=DEBUG
    
  • 例: logger.sparkRoot.level を設定する Spark 3.3 を使用する Dataproc イメージ バージョン 2.1

    gcloud dataproc clusters create ...\
        --properties spark-log4j:logger.sparkRoot.level=debug
    

ジョブドライバのロギングレベル

Dataproc はジョブドライバ プログラムに対してデフォルトのロギングレベル INFO を使用します。gcloud dataproc jobs submit --driver-log-levels フラグを使用すると、1 つ以上のパッケージに対してこの設定を変更できます。

例:

Cloud Storage ファイルを読み取る Spark ジョブを送信するときに、DEBUG ロギングレベルを設定します。

gcloud dataproc jobs submit spark ...\
    --driver-log-levels org.apache.spark=DEBUG,com.google.cloud.hadoop.gcsio=DEBUG

例:

root ロガーレベルを WARN に、com.example ロガーレベルを INFO に設定します。

gcloud dataproc jobs submit hadoop ...\
    --driver-log-levels root=WARN,com.example=INFO

Spark エグゼキュータのロギングレベル

Spark エグゼキュータのロギングレベルを構成するには:

  1. log4j 構成ファイルを準備し、Cloud Storage にアップロードする

  2. ジョブを送信するときに、構成ファイルを参照します。

    例:

    gcloud dataproc jobs submit spark ...\
        --file gs://my-bucket/path/spark-log4j.properties \
        --properties spark.executor.extraJavaOptions=-Dlog4j.configuration=file:spark-log4j.properties
    

Spark が Cloud Storage のプロパティ ファイルを、-Dlog4j.configuration 内の file:<name> として参照されるジョブのローカル作業ディレクトリにダウンロードします。

Logging の Dataproc ジョブのログ

ロギングで Dataproc ジョブドライバのログを有効にする方法については、Dataproc ジョブの出力とログをご覧ください。

Logging のジョブのログにアクセスする

Dataproc のジョブログにアクセスするには、Logs Explorergcloud logging コマンド、または Logging API を使用します。

コンソール

Cloud Dataproc ジョブリソースの下に、Dataproc ジョブドライバと YARN コンテナのログが一覧表示されます。

例: 次の内容を指定してログ エクスプローラ クエリを実行した後のジョブドライバのログ。

  • リソース: Cloud Dataproc Job
  • ログ名: dataproc.job.driver

例: 次の内容を指定してログ エクスプローラ クエリを実行した後の YARN コンテナログ。

  • リソース: Cloud Dataproc Job
  • ログ名: dataproc.job.yarn.container

gcloud

ジョブのログエントリは、gcloud logging read コマンドを使用して読み取ることが可能です。リソース引数は引用符("...")で囲む必要があります。次のコマンドでは、返されたログエントリをクラスタラベルでフィルタリングします。

gcloud logging read \
    "resource.type=cloud_dataproc_job \
    resource.labels.region=cluster-region \
    resource.labels.job_id=my-job-id"

出力例(一部):

jsonPayload:
  class: org.apache.hadoop.hdfs.StateChange
  filename: hadoop-hdfs-namenode-test-dataproc-resize-cluster-20190410-38an-m-0.log
  ,,,
logName: projects/project-id/logs/hadoop-hdfs-namenode
---
jsonPayload:
  class: SecurityLogger.org.apache.hadoop.security.authorize.ServiceAuthorizationManager
  filename: cluster-name-dataproc-resize-cluster-20190410-38an-m-0.log
  ...
logName: projects/google.com:hadoop-cloud-dev/logs/hadoop-hdfs-namenode

REST API

Logging REST API を使用してログエントリを一覧表示できます(entries.list をご覧ください)。

Logging の Dataproc クラスタログ

Dataproc では、次の Apache Hadoop、Spark、Hive、Zookeeper などの Dataproc クラスタログを Cloud Logging にエクスポートします。

ログタイプ ログ名 説明
マスター デーモンのログ hadoop-hdfs
hadoop-hdfs-namenode
hadoop-hdfs-secondary namenode
hadoop-hdfs-zkfc
hadoop-yarn-resourcemanager
hadoop-yarn-timelineserver
hive-metastore
hive-server2
mapred-mapred-historyserver
zookeeper
Journal node
HDFS namenode
HDFS secondary namenode
Zookeeper failover controller
YARN resource manager
YARN timeline server
Hive metastore
Hive server2
Mapreduce job history server
Zookeeper server
ワーカー デーモンのログ hadoop-hdfs-datanode
hadoop-yarn-nodemanager
HDFS datanode
YARN nodemanager
システムログ autoscaler
google.dataproc.agent
google.dataproc.startup
Dataproc オートスケーラー ログ
Dataproc エージェント ログ
Dataproc 起動スクリプトログ + 初期化アクションログ

Cloud Logging でクラスタログにアクセスする

Dataproc クラスタのログにアクセスするには、Logs Explorergcloud logging コマンド、または Logging API を使用します。

Console

次のクエリを実行して、ログ エクスプローラでクラスタログを表示します。

  • リソース: Cloud Dataproc Cluster
  • ログ名: log name

gcloud

クラスタのログエントリは、gcloud logging read コマンドを使用して読み取ることが可能です。リソース引数は引用符("...")で囲む必要があります。次のコマンドでは、返されたログエントリをクラスタラベルでフィルタリングします。

gcloud logging read <<'EOF'
    "resource.type=cloud_dataproc_cluster
    resource.labels.region=cluster-region
    resource.labels.cluster_name=cluster-name
    resource.labels.cluster_uuid=cluster-uuid"
EOF

出力例(一部):

jsonPayload:
  class: org.apache.hadoop.yarn.server.resourcemanager.ResourceTrackerService
  filename: hadoop-yarn-resourcemanager-cluster-name-m.log
  ...
logName: projects/project-id/logs/hadoop-yarn-resourcemanager
---
jsonPayload:
  class: org.apache.hadoop.yarn.server.resourcemanager.ResourceTrackerService
  filename: hadoop-yarn-resourcemanager-component-gateway-cluster-m.log
  ...
logName: projects/project-id/logs/hadoop-yarn-resourcemanager

REST API

Logging REST API を使用してログエントリを一覧表示できます(entries.list をご覧ください)。

権限

Logging にログを書き込むには、Dataproc VM サービスアカウントに logging.logWriter ロール IAM ロールが必要です。デフォルトの Dataproc サービス アカウントは、このロールを持っています。カスタム サービス アカウントを使用する場合は、このロールをサービス アカウントに割り当てる必要があります。

ログの保護

Logging のログは保存時にデフォルトで暗号化されます。顧客管理の暗号鍵(CMEK)を有効にして、ログを暗号化できます。CMEK のサポートの詳細については、ログルーター データを保護する鍵を管理するLogging ストレージ データを保護する鍵を管理するをご覧ください。

次のステップ