Cloud Logging でのエラーログの表示

このページでは、DICOM インポート リクエストと FHIR インポート/エクスポート リクエストで発生したエラーのログを Google Cloud のオペレーション スイートで表示する方法について説明します。

ログ

以下の各リクエストでトリガーされたエラーは、Cloud Loggingに記録されます。

Pub/Sub メッセージを Pub/Sub にパブリッシュできない場合もエラーが記録されます。詳細については、Pub/Sub 通知のトラブルシューティングをご覧ください。

ロギングは自動的に行われるため、有効にする必要はありません。1 つまたはすべてのモニタリング対象リソースに対して Cloud Logging を無効にするには、ログの除外をご覧ください。

ログの表示

すべてのログを表示するには、ログビューアに移動します。エラー ステータスのオペレーションのログを表示するには、ヘルスケア ブラウザの [オペレーション] タブでオペレーションの詳細アイコンをクリックし、[Stackdriver で詳細を表示] をクリックします。

ログのフィルタリング

ストアのタイプ(DICOM または FHIR ストア)、リージョン、データセットでログをフィルタリングできます。

たとえば、FHIR ストアのログを表示するには、最初のリストの [ラベルまたはテキスト検索] で [Healthcare FHIR ストア] をクリックします。リソースタイプで検索することもできます。たとえば、healthcare_dicom_store を検索すると、resource.typehealthcare_dicom_store に設定されたオペレーションに対して生成されたすべてのログが表示されます。

ログフィールドには UTF-8 エンコードが適用されます。UTF-8 以外の文字は疑問符に置き換えられます。

ログビューアの詳細については、ログの表示をご覧ください。

Cloud Logging を使用したエラーイベントの発見

Cloud Logging を使用して、エラーの原因となっているイベントの監査ログを見つけることもできます。監査ログでエラーイベントを見つける方法は次のとおりです。

  1. Cloud Logging で原因となったオペレーションを検索します。

  2. オペレーションのログの詳細を使用して、特定のコマンドを再実行します。

  3. 対応するイベントの監査ログを表示します。監査ログの詳細については、Cloud 監査ログの表示をご覧ください。

ログの内容

Cloud Healthcare API のログエントリには、リクエストをデバッグするための次の種類の情報が含まれています。

  • 重大度、プロジェクト ID、プロジェクト番号、タイムスタンプなどの一般的な情報。
  • jsonPayload には、エントリの実際の本文が含まれます。このフィールドには、エラーコード、エラー メッセージ、インポートがエラーになったソースファイルの名前が含まれます。
  • operation には、エラーが発生したオペレーションのタイプと ID が含まれます。
  • resource には、エラーに関連する場所、データセット、DICOM または FHIR ストアが含まれます。

エラーの数がしきい値を超えると、Cloud Logging に表示されるエラーの数が制限されます。しきい値は、入力のサイズに基づいて動的に計算されます。

ログの保存場所

Google Cloud のオペレーション スイートはリージョン別のプロダクトではありません。Google Cloud のオペレーション スイートに書き込まれたログは、DICOM ストアや FHIR ストアとは異なるリージョンに保存できます。

サンプル DICOM インポートログ エントリ

次のサンプルログ エントリは、gs://DICOM_FILENAME.dcmprojects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID にインポートしようとしたときに発生した empty DICOM instance found エラーを示しています。

 jsonPayload: {
  @type:  "type.googleapis.com/google.cloud.healthcare.logging.ImportDicomLogEntry"
  error: {
   code:  3
   message:  "empty DICOM instance found"
  }
  source:  "gs://DICOM_FILENAME.dcm"
 }
 logName:  "projects/PROJECT_ID/logs/healthcare.googleapis.com%2Foperations"
 operation: {
  id:  "PROJECT_ID"
  producer:  "import_dicom"
 }
 receiveTimestamp:  "TIMESTAMP"
 resource: {
  labels: {
   dataset_id:  "DATASET_ID"
   dicom_store_id:  "DICOM_STORE_ID"
   location:  "LOCATION"
   project_id:  "PROJECT_ID"
  }
  type:  "healthcare_dicom_store"
 }
 severity:  "ERROR"
 timestamp:  "TIMESTAMP"

FHIR インポートログ エントリの例

次のサンプルログ エントリは、gs://FHIR_FILENAME.ndjsonprojects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStore/FHIR_STORE_ID にインポートしようとしたときに発生した cannot import resource エラーを示しています。

 jsonPayload: {
  @type:  "type.googleapis.com/google.cloud.healthcare.logging.ImportFhirLogEntry"
  error: {
   code:  3
   message:  "cannot import resource Patient/PATIENT_ID, conflicting resource already exists"
  }
  source:  "gs://FHIR_FILENAME.ndjson"
 }
 logName:  "projects/PROJECT_ID/logs/healthcare.googleapis.com%2Foperations"
 operation: {
  id:  "PROJECT_ID"
  producer:  "import_fhir"
 }
 receiveTimestamp:  "TIMESTAMP"
 resource: {
  labels: {
   dataset_id:  "DATASET_ID"
   fhir_store_id:  "FHIR_STORE_ID"
   location:  "LOCATION"
   project_id:  "PROJECT_ID"
  }
  type:  "healthcare_fhir_store"
 }
 severity:  "ERROR"
 timestamp:  "TIMESTAMP"

DICOM 匿名化ログエントリの例

次のサンプルログエントリは、データセット projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID の DICOM インスタンス INSTANCE_ID を匿名化しようとしたときに発生した cannot de-identify dicom instance エラーを示しています。

 jsonPayload: {
  @type:  "type.googleapis.com/google.cloud.healthcare.logging.DeidentifyLogEntry"
  error: {
   code:  2
   message:  "Failed to process instance INSTANCE_ID"
  }
  resourceName:  "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID"
 }
 logName:  "projects/PROJECT_ID/logs/healthcare.googleapis.com%2Fdeidentify_dataset"
 operation: {
  id:  "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
  producer:  "healthcare.googleapis.com/DeidentifyDataset"
 }
 receiveTimestamp:  "TIMESTAMP"
 resource: {
  labels: {
   dataset_id:  "DATASET_ID"
   location:  "LOCATION"
   project_id:  "PROJECT_ID"
  }
  type:  "healthcare_dataset"
 }
 severity:  "ERROR"
 timestamp:  "TIMESTAMP"

次のステップ