Logging のクエリ言語のトラブルシューティング

このドキュメントでは、Logging のクエリ言語の使用時に発生する可能性のある一般的な問題について説明します。

構文の問題

クエリの式に問題がある場合は、次の点を確認してください。

  • クエリが構文ルールに従っていて、かっこや引用符が正しく対応しているか確認します。

  • ログエントリのフィールド名が正しく入力されているか確認します。

  • ブール演算子が大文字で入力されているか確認します(ANDORNOT)。

  • JSON の null 値を表すために、[NULL_VALUE][json-null] を使用していることを確認します。

  • グローバル制限または比較の右辺として使用されているブール式が、かっこで囲まれ明確になっているか確認します。たとえば、次の 2 つのクエリは同じように見えますが、実際は異なります。

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • 引用符で囲まれていないテキストに特殊文字を含めることはできません。正しいかわからない場合は、二重引用符を使用してください。たとえば次の例では、組み込みの部分文字列演算子(:)が使用されているため、最初の比較は誤りです。この比較は引用符で囲む必要があります。

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • Google Cloud CLI では、フィルタを二重引用符で囲む必要があります。gcloud logging コマンドで特殊文字をエスケープするために二重引用符を使用するには、フィルタ全体を単一引用符で囲みます。

    gcloud logging read 'resource.type=gce_instance AND jsonPayload.message="Stopped Unattended Upgrades Shutdown."'
    gcloud logging read 'timestamp>="2020-06-17T21:00:00Z"'
    

  • Any メッセージ タイプに関連付けられたフィールドでフィルタすると、value フィールドが自動的に走査されます。そのため、クエリには、value を含めないでください。

    たとえば、AuditLog メッセージの Status フィールドには、型が google.protobuf.Anydetails フィールドがあります。details フィールドをクエリするには、フィルタを指定するときに value フィールドを省略します。

    • 推奨事項

      protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
      
    • Don't

      protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"