Compute Engine VMのgce_workload_cert_refreshプロセスで404エラー

記事タイトルとURLをコピーする

G-gen の高井(Peacock)です。Compute Engine (GCE) VM に Ops エージェントのインストールを試みた際、gce_workload_cert_refresh というプロセスから HTTP 404 エラーがログに出力され Ops エージェントのインストールが失敗する事象について、その原因と対処法を解説します。本記事ではまず Ops エージェントについて簡単に触れ、その後に具体的なエラーと対処法を説明します。

Ops エージェントとは

Ops エージェント(Ops Agent)は、Compute Engine インスタンスやオンプレミスサーバーからログと指標(メトリクス)を収集し、Google Cloud の Cloud Logging と Cloud Monitoring に送信するための統合エージェントです。主な機能は以下の通りです。

ログ収集
アプリケーションログ、システムログなど、様々なソースからログを収集し、Cloud Logging へ送信します。これにより、ログの一元管理、検索、分析、アラート設定などが可能になります。

指標収集
メモリ使用量、ディスク I/O といったシステム指標や、Apache、MySQL、Nginx などのサードパーティアプリケーションの指標を収集し、Cloud Monitoring へ送信します。これにより、システムのパフォーマンス監視、ダッシュボード作成、アラート設定などができます。

Ops エージェントを利用することで、オブザーバビリティ(可観測性)の向上に繋がり、システム運用における問題の早期発見や原因究明を効率化できます。

事象

Compute Engine VM(Debian 系、2024 年 6 月当時の OS イメージ)に Ops エージェントのインストールを試みた際、以下のようなエラーログが繰り返し出力され、Ops エージェントのインストールが失敗しました。

gce_workload_cert_refresh[PID]: YYYY/MM/DD hh:mm:ss: Error getting config status, workload certificates may not be configured: HTTP 404

このエラーは、⁠gce_workload_cert_refresh というプロセスが、ワークロード証明書の設定ステータスを取得しようとして失敗していることを示しています。

原因

このエラーの原因は、Ops エージェントのインストール時に有効化される gce-workload-cert-refresh.timer という systemd ユニットが、VM 上でワークロード間の認証機能の設定状況を確認しようとすることにあります。

具体的には、このタイマーは定期的に(デフォルトでは 10分ごと)、インスタンスメタデータサーバーの特定のエンドポイント(http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status)にアクセスします。しかし、ワークロード間の認証機能が VM で有効になっていない場合、このメタデータエンドポイントは存在しません。そのため、メタデータサーバーは HTTP ステータスコード 404(Not Found)を返します。これがエラーログとして記録されます。

実際に、影響を受けている VM から以下のコマンドを実行すると、404 エラーが返されることが確認できます。

curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"

レスポンス例

<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style></style>
(中略)
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>That’s an error.</ins>
<p>The requested URL <code>/computeMetadata/v1/instance/gce-workload-certificates/config-status</code> was not found on this server. <ins>That’s all we know.</ins>

ワークロード間の認証機能(正式には「Compute Engine 間の認証に mTLS を使用する」などと呼ばれる機能)は、VM インスタンス間で相互 TLS(mTLS)認証を確立するためのものです。 この機能は、記事執筆時点(2025年5月)では pre-GA ステージ(プレビュー)として提供されています。

そのため、明示的にこの機能を有効化していない限り、多くの環境ではこのエラーが発生する可能性があります。

対処法

ワークロード間の認証機能を利用する予定がない場合、エラー出力を停止するために、systemd ユニット gce-workload-cert-refresh.timer を停止し、無効化することが最も簡単な対処法です。具体的には、以下の systemctl コマンドを VM 上で実行します。

sudo systemctl stop gce-workload-cert-refresh.timer
sudo systemctl disable gce-workload-cert-refresh.timer

この対処により、gce-workload-cert-refresh プロセスによる定期的なメタデータサーバーへのアクセスがなくなり、結果として HTTP 404 エラーログの出力も停止し、エージェントがインストールできるようになります。

前述の通りワークロード間の認証機能は pre-GA ステージであり、特定のユースケースでのみ利用される機能のため、このタイマーを無効化しても Ops エージェントの基本的な監視機能や他の VM の動作に影響はありません。

将来的にワークロード間の認証機能を利用する必要が生じた場合は、該当ユニットを再有効化できます。

sudo systemctl enable gce-workload-cert-refresh.timer
sudo systemctl start gce-workload-cert-refresh.timer

Peacock (高井 陽一)(記事一覧)

クラウドソリューション部 カスタマーサポート課

2022年12月より入社。普段は Google Cloud の技術サポートや Terraform などによる IaC の推進を行なっている。また、プライベートでは PyCon JP 2022, 2023(APAC) にて副座長など、カンファレンスのスタッフとしても活動している。趣味はカメラ・スキー・クラシック音楽など。