このドキュメントでは、転送と保存に関する一般的な問題と、Google Cloud コンソールを使用して構成の誤りや予期しない結果を表示する方法、トラブルシューティングする方法について説明します。
ログデータの表示に関する一般的な情報については、シンクのエクスポート先のログを表示するをご覧ください。
ログ転送のトラブルシューティング
このセクションでは、ログエントリの転送時に発生する一般的な問題のトラブルシューティング方法について説明します。
宛先に不要なログエントリが含まれている
宛先に転送されたログエントリを表示したところ、宛先に不要なログエントリが含まれていました。
この状態を解決するには、ログエントリを宛先に転送するシンクの除外フィルタを更新します。除外フィルタを使用すると、選択したログエントリが宛先に転送されなくなります。
たとえば、組織内のログエントリを宛先に転送する集約シンクを作成するとします。特定のプロジェクトのログエントリを宛先に転送しない場合は、次の除外フィルタをシンクに追加します。
logName:projects/PROJECT_ID
論理 OR 演算子を使用して logName
句を結合することで、複数のプロジェクトのログを除外することもできます。
宛先にログエントリがない
シンク関連の最もよくある問題は、シンクの宛先にログエントリがないように見えることです。
エラーが生成されていないものの、宛先でログエントリにアクセスしようとすると使用できないことがあります。シンクがログエントリを正しく転送していない可能性がある場合は、シンクのシステム ログベースの指標を確認します。
exports/byte_count
: 転送されたログエントリのバイト数。exports/log_entry_count
: 転送されたログエントリの数。exports/error_count
: 転送できなかったログエントリの数。
指標には、シンク名と宛先名でカウントを記録するラベルがあるため、シンクがログエントリを正常に転送しているかどうかがわかります。指標の表示方法の詳細については、ログベースの指標の概要をご覧ください。
シンクの指標が、シンクが想定どおりに機能していないことを示している場合、考えられる理由と対処方法は次のとおりです。
レイテンシ
シンクを作成または更新してから一致するログエントリが受信されていません。新しいログエントリのみが転送されます。
1 時間ほど待ってから、もう一度宛先を確認してください。
一致するログエントリの到着が遅れています。
宛先でログエントリが表示されるまでに時間がかかることがあります。遅れて到着するログエントリは、Cloud Storage バケットをエクスポート先として構成したシンクで特によく見られます。数時間後にもう一度宛先を確認してください。
スコープやフィルタが正しく表示されない
ログバケットに保存されているログエントリの表示に使用しているスコープが間違っています。
次のように、1 つ以上のログビューに検索範囲を限定します。
ログ エクスプローラを使用している場合は、[範囲を絞り込む] ボタンを使用します。
gcloud CLI を使用している場合は、
gcloud logging read
コマンドを使用して--view=AllLogs
フラグを追加します。
シンクのエクスポート先でデータを選択して表示するために使用する期間が短すぎます。
シンクの宛先のデータを選択する際に使用する期間を広げてみてください。
シンクフィルタのエラー
シンクのフィルタが間違っていて、宛先に表示されるはずのログエントリをキャプチャしていません。
Google Cloud コンソールで、[ログルーター] を使用してシンクのフィルタを編集します。正しいフィルタが入力されていることを確認するには、[シンクを編集] パネルで [ログをプレビュー] を選択します。これにより、フィルタが事前に入力された状態で、ログ エクスプローラが新しいタブで開きます。シンクの表示と管理の手順については、シンクを管理するをご覧ください。
エラーを確認する
サポートされているシンクの宛先ごとに、Logging は不適切な構成のシンクのエラー メッセージを返します。
シンク関連のエラーを表示するには、いくつかの方法があります。これらの方法については、次のセクションで説明します。
- シンク用に生成されたエラーログを表示する。
- シンクエラーの通知をメールで受信する。このメールの送信者は
logging-noreply@google.com
です。
エラーログ
シンク関連のエラーを詳細に検査する場合、シンクによって生成されたエラー ログエントリを表示することをおすすめします。ログエントリの表示の詳細については、ログ エクスプローラを使用してログを表示するをご覧ください。
ログ エクスプローラのクエリエディタ ペインで次のクエリを使用して、シンクのエラーログを確認できます。Logging API と gcloud CLI でも同じクエリが機能します。
クエリをコピーする前に、変数 SINK_NAME をトラブルシューティングするシンクの名前に置き換えます。シンクの名前は、 Google Cloud コンソールの [ログルーター] ページで確認できます。
logName:"logging.googleapis.com%2Fsink_error"
resource.type="logging_sink"
resource.labels.name="SINK_NAME"
たとえば、シンクの名前が my-sink-123
の場合、ログエントリは次のようになります。
{
errorGroups: [
0: {
id: "COXu96aNws6BiQE"
}]
insertId: "170up6jan"
labels: {
activity_type_name: "LoggingSinkConfigErrorV2"
destination: "pubsub.googleapis.com/projects/my-project/topics/my-topic"
error_code: "topic_not_found"
error_detail: ""
sink_id: "my-sink-123"
}
logName: "projects/my-project/logs/logging.googleapis.com%2Fsink_error"
receiveTimestamp: "2024-07-11T14:41:42.578823830Z"
resource: {
labels: {
destination: "pubsub.googleapis.com/projects/my-project/topics/my-topic"
name: "my-sink-123"
project_id: "my-project"
}
type: "logging_sink"
}
severity: "ERROR"
textPayload: "Cloud Logging sink configuration error in my-project, sink my-sink-123: topic_not_found ()"
timestamp: "2024-07-11T14:41:41.296157014Z"
}
LogEntry
フィールド labels
とそのネストされた Key-Value 情報は、シンクのエラーソースの特定に役立ちます。これには、影響を受けるリソース、影響を受けるシンク、エラーコードが含まれます。labels.error_code
フィールドにはエラーの簡単な説明が含まれているので、シンクのどのコンポーネントを再構成する必要があるかがわかります。
このエラーを解決するには、シンクを編集します。たとえば、[ログルーター] ページを使用してシンクを編集できます。
メール通知
重要な連絡先は、 Google Cloud プロジェクトまたはその親リソースの技術通知カテゴリに割り当てられた連絡先に、シンク構成エラーのメール通知を送信します。リソースに技術通知の連絡先が構成されていない場合、そのリソースの IAM プロジェクト オーナー roles/owner
として示されているユーザーがメール通知を受け取ります。
このメールには次の情報が含まれます。
- リソース ID: シンクが構成されている Google Cloud プロジェクトまたは他のGoogle Cloud リソースの名前。
- シンク名: 構成エラーを含むシンクの名前。
- シンクの宛先: シンクの転送先のフルパス。例:
pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
- エラーコード: エラーカテゴリの簡単な説明。例:
topic_not_found
- エラーの詳細: エラーに関する詳細情報(根本的なエラーのトラブルシューティングに関する推奨事項など)。
このメールの送信者は logging-noreply@google.com
です。
シンクを表示して管理するには、[ログルーター] ページを使用します。
リソースに適用されるシンク構成エラーが、Cloud Logging sink configuration error
としてリストに表示されます。各エラーには、障害のあるシンクによって生成された、いずれかのログエントリへのリンクが含まれます。根本的なエラーを詳しく調べるには、エラーログをご覧ください。
シンクエラーの種類
以下のセクションでは、シンク関連のエラーのさまざまなカテゴリとそのトラブルシューティング方法について説明します。
正しくない宛先
シンクを設定した後、Logging がログエントリを転送しようとしたときに宛先が見つからないという構成エラーが表示される場合は、次の理由が考えられます。
シンクの構成に、指定したシンクの宛先でのスペルミスやその他のフォーマット エラーが含まれています。
既存の宛先を適切に指定するには、シンクの構成を更新する必要があります。
指定した宛先が削除された可能性があります。
別の既存の宛先を使用するか、同じ名前で宛先を再作成するようにシンクの構成を変更できます。
このような種類の問題を解決するには、シンクを編集します。たとえば、[ログルーター] ページを使用してシンクを編集できます。
シンクは、宛先が検出されるとログエントリの転送を開始し、フィルタに一致する新しいログエントリが Logging で受信されます。
シンクの問題の管理
シンクを無効にして、ログバケットへのログエントリの保存を停止してもログエントリが転送されている場合は、シンクへの変更が適用されるまで数分待ちます。
権限に関する問題
シンクがログエントリを転送しようとしたときに、シンクの宛先に適切な IAM 権限がない場合、シンクがエラーを報告します。これにより、ログエントリを確認して、そのエントリをスキップできます。
シンクを作成するときは、シンクのサービス アカウントに適切な宛先の権限が付与されている必要があります。 Google Cloud コンソールで同じGoogle Cloud プロジェクトのシンクを作成すると、通常、 Google Cloud コンソールによってこれらの権限が自動的に割り当てられます。別のGoogle Cloud プロジェクトでシンクを作成するか、gcloud CLI や Logging API を使用してシンクを作成する場合は、権限を手動で構成する必要があります。
シンクの権限関連のエラーが発生した場合は、必要な権限を追加するか、別の宛先を使用するようにシンクを更新します。これらの権限を更新する方法については、宛先の権限をご覧ください。
シンクを作成してから、シンクの新しいサービス アカウントを使用して宛先への書き込みを許可するまで、若干の遅延が発生します。権限が修正され、フィルタに一致する新しいログエントリが Logging によって受信されると、シンクはログエントリの転送を開始します。
組織のポリシーに関する問題
ログエントリを転送しようとしたときに、Logging がシンクの宛先への書き込みを制限する組織のポリシーが存在する場合、シンクは選択した宛先に転送できず、エラーを報告します。
組織のポリシーに関連するエラーが表示された場合は、次の操作を行います。
宛先の組織のポリシーを更新して、シンクによるログエントリの転送をブロックする制約を削除します。これは、組織のポリシーを更新するために適切な権限があることを前提とします。
リソース ロケーションの制限(
constraints/gcp.resourceLocations
)が存在するかどうかを確認します。この制約により、データが保存できるロケーションが決まります。また、一部のサービスは、ログシンクに影響する可能性のある制約をサポートしています。たとえば、Pub/Sub の宛先を選択する際に適用される制限事項がいくつかあります。適用される可能性のある制約の一覧については、組織のポリシーの制約をご覧ください。手順については、ポリシーの作成と編集をご覧ください。
組織のポリシーを更新できない場合は、[ログルーター] ページでシンクを更新して、ポリシーに準拠した宛先を使用します。
組織のポリシーがシンクによる宛先への書き込みをブロックしなくなり、フィルタに一致する新しいログエントリが Logging によって受信されると、シンクはログエントリの転送を開始します。
暗号鍵に関する問題
Cloud Key Management Service で管理されている、またはユーザーによって管理されている鍵を使用してシンクの宛先でデータを暗号化している場合は、関連するエラーが表示される可能性があります。以下では、考えられる問題と解決方法について説明します。
Cloud KMS 鍵を含む Google Cloud プロジェクトに対して課金が有効になっていない。
正しい宛先でシンクが正常に作成された場合でも、このエラー メッセージは、鍵を含む Google Cloud プロジェクトに関連付けられた有効な請求先アカウントがない場合に表示されます。
鍵を含む Google Cloud プロジェクトにリンクされた有効な請求先アカウントがあることを確認してください。請求先アカウントがGoogle Cloud プロジェクトにリンクされていない場合は、その Google Cloud プロジェクトの課金を有効にするか、有効な請求先アカウントがリンクされている Google Cloud プロジェクトに含まれる Cloud KMS 鍵を使用します。
Cloud KMS 鍵が見つからない。
データを暗号化するように構成された Cloud KMS 鍵を含む Google Cloud プロジェクトが見つかりません。
既存のGoogle Cloud プロジェクトに含まれている有効な Cloud KMS 鍵を使用してください。
Cloud KMS 鍵のロケーションが、宛先のロケーションと一致しない。
Cloud KMS 鍵を含む Google Cloud プロジェクトが宛先のリージョンとは異なるリージョンにある場合、暗号化は失敗し、シンクの宛先にデータは転送されません。
リージョンがシンクの宛先と一致する Google Cloud プロジェクトに含まれる Cloud KMS 鍵を使用します。
暗号鍵によるシンクのサービス アカウントへのアクセスが拒否された。
シンクが正しいサービス アカウント権限を指定して正常に作成された場合でも、シンクの宛先がサービス アカウントにデータの暗号化または復号を行うための十分な権限を付与しない暗号鍵を使用している場合に、このエラー メッセージが表示されます。
宛先で使用される鍵について、シンクの
writerIdentity
フィールドで指定されたサービス アカウントに Cloud KMS 暗号鍵の暗号化 / 復号のロールを付与します。また、Cloud KMS API が有効になっていることを確認してください。
割り当ての問題
シンクがログエントリを書き込むと、宛先に固有の割り当てが、シンクが作成されたGoogle Cloud プロジェクトに適用されます。割り当ての上限に達すると、シンクは宛先へのログエントリの転送を停止します。
たとえば、BigQuery にデータを転送する際に、データセット内の特定のテーブルに対してテーブルごとのストリーミング挿入の割り当てを超過したことを示すエラーが表示されることがあります。この場合、シンクが多すぎるログエントリを短時間で転送している可能性があります。この考えは、Pub/Sub トピックなどのサポートされている他のシンクの宛先にも適用されます。
割り当ての上限に達した問題を解決するには、シンクのフィルタを更新してログエントリの数を減らすことで、転送されるログデータの量を減らします。その場合、フィルタの sample
関数を使用して、ログエントリの総数の割合を選択します。
割り当てが使用可能な場合、シンクはログエントリをシンクの宛先に転送します。
ログエントリを転送する際に適用される上限の詳細については、適切な宛先の割り当て情報をご覧ください。
一般的なシンクエラーのタイプに加えて、宛先固有の最も一般的なエラータイプとその修正方法は次のとおりです。
Cloud Storage への転送エラー
ログエントリを Cloud Storage に転送する際に最もよくあるエラーは次のとおりです。
遅れて到着するログエントリ:
転送されたログエントリは、1 時間ごとにまとめて Cloud Storage バケットに保存されます。最初のエントリが表示されるまでに 2~3 時間かかることがあります。
転送されたログのファイル シャードに
An
(Append)という接尾辞が付いている場合は、遅れて到着したログエントリが含まれています。Cloud Storage の宛先で停電が発生した場合、Cloud Logging は停電が終わるまでデータを保護します。
宛先に適切な権限を付与できない。
- ログシンクのサービス アカウントに正しい権限が付与されていることを確認します。詳細については、このドキュメントの権限に関する問題のセクションをご覧ください。
BigQuery への転送エラー
ログエントリを BigQuery に転送する際に最もよくあるエラーは次のとおりです。
無効なテーブル スキーマ:
BigQuery データセット内のテーブルにストリーミングされたログエントリが、現在のテーブルのスキーマと一致しません。一般的な問題としては、異なるデータ型のログエントリを転送して、スキーマの不一致が発生することがあります。たとえば、ログエントリのフィールドの 1 つが整数値で、スキーマで対応する列が文字列型になっている場合があります。
ログエントリがテーブル スキーマと一致することを確認します。エラーの原因を修正したら、現在のテーブルの名前を変更して、Logging で再度テーブルを作成します。
BigQuery は、テーブルへのネストされたデータの読み込みをサポートしています。ただし、Logging からデータを読み込む場合、列のネストの深さは最大 13 レベルに制限されます。
BigQuery はスキーマの不一致を識別すると、対応するデータセット内にテーブルを作成し、エラー情報を保存します。テーブル名はテーブルのタイプによって決まります。日付別テーブルの場合、命名形式は
export_errors_YYYYMMDD
です。パーティション分割テーブルの場合、命名形式はexport_errors
です。エラーテーブルのスキーマと、今後のフィールド タイプの不一致を防ぐ方法については、スキーマの不一致をご覧ください。ログエントリが、許可されている期間に含まれていない。
分割された BigQuery テーブルにストリーミングされたログエントリが、許可されている期間に含まれていません。BigQuery では、許可された期間とかけ離れているログエントリを受け入れません。
それらのログエントリを Cloud Storage に転送し、BigQuery 読み込みジョブを使用するようにシンクを更新できます。詳細については、BigQuery のドキュメントをご覧ください。
データセットで、ログシンクに関連するサービス アカウントによる書き込みが許可されていない。
正しいサービス アカウント権限でシンクが正常に作成されている場合でも、シンクの宛先を含む Google Cloud プロジェクトに関連付けられた有効な請求先アカウントがないと、このエラー メッセージが表示されます。
Google Cloud プロジェクトにリンクされている請求先アカウントがあることを確認します。請求先アカウントがシンクの宛先のGoogle Cloud プロジェクトにリンクされていない場合は、その Google Cloud プロジェクトの課金を有効にするか、シンクの宛先を更新して、有効な請求先アカウントがリンクされたGoogle Cloud プロジェクトに宛先があるようにします。
データセットに重複するログエントリが含まれている。
再試行や構成ミスなどにより、BigQuery へのログエントリのストリーミングに失敗すると、ログエントリが重複することがあります。Cloud Logging は、クエリ時に、同じ
timestamp
とinsertId
を持つログエントリの重複排除を行います。BigQuery では、重複するログエントリが除外されません。BigQuery で重複するログエントリを無視するには、クエリに
SELECT DISTINCT
句を含めます。例:
SELECT DISTINCT insertId, timestamp FROM TABLE_NAME
ログエントリは、Cloud Logging のインシデント後にバックフィルされます。
Logging は、Cloud Logging のインシデントで BigQuery へのログデータの転送が妨げられたときに発生するバックフィル オペレーションの一環として、
backfill_
接頭辞を持つテーブルを自動的に生成します。backfill_
接頭辞のテーブルには、インシデントの期間中に BigQuery に転送されるすべてのログエントリが含まれます。これらのテーブルには、シンクによって指定されたテーブルに正常に転送されたログエントリが含まれている場合があります。重複データを回避するには、バックフィル テーブルのデータを元のテーブルに統合してから、バックフィル テーブルを削除することをおすすめします。
Cloud Logging バケットへの転送エラー
シンクで除外したログエントリがログ エクスプローラで表示されることがあります。次のいずれかの条件が満たされている場合、これらのログエントリが引き続き表示されます。
ログエントリが生成された Google Cloud プロジェクトでクエリを実行している。
これを修正するには、正しいGoogle Cloud プロジェクトでクエリを実行していることを確認します。
除外されたログエントリが複数のログバケットに送信された。除外するつもりだった同じログのコピーが表示される。
この問題を修正するには、[ログルーター] ページでシンクを調べて、他のシンクのフィルタにログエントリが含まれていないことを確認します。
ログエントリが送信されたログバケット内のビューへのアクセス権がある。この場合、デフォルトでこれらのログエントリが表示されます。
ログ エクスプローラにこれらのログエントリが表示されないようにするには、ソースの Google Cloud プロジェクトまたはバケットに検索範囲を絞り込みます。
ログの保存に関するトラブルシューティング
このバケットを削除できません。なぜですか?
バケットを削除するには、次の操作を行います。
バケットの削除に適切な権限があることを確認します。必要な権限のリストについては、IAM によるアクセス制御をご覧ください。
バケットの属性を一覧表示して、バケットがロックされているかどうかを確認します。バケットがロックされている場合は、バケットの保持期間を確認します。ロックされたバケットを削除するには、そのバケット内のすべてのログがバケットの保持期間を満たしている必要があります。
ログバケットにリンクされた BigQuery データセットがないことを確認します。リンクされたデータセットがあるログバケットは削除できません。
リンクされたデータセットがあるログバケットに対して
delete
コマンドを実行すると、次のエラーが表示されます。FAILED_PRECONDITION: This bucket is used for advanced analytics and has an active link. The link must be deleted first before deleting the bucket
ログバケットに関連付けられたリンクを一覧表示するには、[
gcloud logging links list
][link-list] コマンドを実行するか、projects.locations.buckets.links.list
API メソッドを実行します。
どのサービス アカウントがバケットにログを転送するのですか?
ログをバケットに転送する IAM 権限がサービス アカウントにあるかどうかを確認するには、次の操作を行います。
-
Google Cloud コンソールで [IAM] ページに移動します。
このページを検索バーで検索する場合は、小見出しが「IAM と管理」の結果を選択します。
[権限] タブで、ロール別に表示します。Google Cloud プロジェクトに関連付けられたすべての IAM ロールとプリンシパルを含む表が表示されます。
表の [フィルタ] テキスト ボックス filter_list に「ログバケット書き込み」と入力します。
ログバケット書き込みのロールを持つプリンシパルが表示されます。プリンシパルがサービス アカウントの場合、その ID には文字列
gserviceaccount.com
が含まれます。省略可: Google Cloud プロジェクトにログを転送できないようにサービス アカウントを削除する場合は、サービス アカウントのチェックボックス check_box_outline_blank をオンにして、[削除] をクリックします。
ログが _Default
シンクから除外されていても Google Cloud プロジェクトのログが表示されるのはなぜですか?
組織全体のログを集約する一元化された Google Cloud プロジェクトのログバケットでログを表示している可能性があります。
ログ エクスプローラを使用してこれらのログにアクセスしていて、_Default
シンクから除外したログが表示される場合は、ビューがGoogle Cloud プロジェクト レベルに設定されている可能性があります。
この問題を解決するには、[範囲を絞り込む] メニューで [ログビュー] を選択し、Google Cloud プロジェクトの _Default
バケットに関連付けられているログビューを選択します。これで、除外されたログが表示されなくなります。