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-log4j: 接頭辞を使用して、クラスタに Spark ロギングレベルを設定します。

  • 例: 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 ロガーのレベルを WARNcom.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.configurationfile:<name> として参照)にダウンロードします。

Logging の Dataproc ジョブのログ

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

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

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

Console

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 ストレージ データを保護する鍵を管理するをご覧ください。

次のステップ