5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Google Cloud] Compute Engine のアプリログを Cloud Logging 連携する際にハマったこと(プロキシ閉域環境)

5
Posted at

はじめに

Google Cloud の Compute Engine 上で動作するアプリケーションログを
Cloud Logging に連携しようとした際に、いくつかハマりどころがあったので共有します。


前提

今回開発を行った環境における制約を簡単に。

  • Compute Engine はクライアント社内ネットワーク内に閉じている
  • インターネットへの直接通信は禁止
  • GCP API 含め、すべて社内プロキシ経由でのみ通信可能

特に3つ目が重要で、通常であれば、

  • Ops Agent のインストール
  • ログ設定

だけで Cloud Logging に連携されますが、閉域 + プロキシ必須環境ではそのままでは動きません(でした)

本記事はこの前提環境での対応例になります。


やりたかったこと(ゴール)

Compute Engine 上で出力される以下のログを Cloud Logging に表示する。

/var/log/app/app.log

実施内容

① Ops Agent のインストール

対象VMに Ops Agent をインストール。
詳細は公式ドキュメント参照。
今回は閉域ネットワーク網内でのインストールだったため、個別インストールを行いました。
https://docs.cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation?hl=ja


② ログ収集設定

sudo vi /etc/google-cloud-ops-agent/config.yaml
logging:
  receivers:
    applog:
      type: files
      include_paths:
        - /var/log/app/app.log

  service:
    pipelines:
      app-pipeline:
        receivers: [applog]

③ プロキシ設定(最初に実施)

公式ドキュメントをベースに設定。

sudo vi /etc/systemd/system.conf
DefaultEnvironment="HTTP_PROXY=http://<proxy>:8080/" "HTTPS_PROXY=http://<proxy>:8080/" "NO_PROXY=http://metadata.google.internal/"

しかしここで問題発生

  • Ops Agent が正常に連携されない
  • app.log にログを吐き出してみたところ、Cloud Logging に連携されない

ハマったこと①:権限不足で API 実行エラー

■事象

[Network Check] Result: ERROR
[API Check] Result: FAIL
  • Cloud Monitoring 側でエージェント未検出

■設定確認

プロキシ設定を確認

sudo systemctl show google-cloud-ops-agent --property=Environment
Environment=

→ なるほど、プロキシにちゃんと設定できていないのか


■対応

Ops Agent 個別に systemd override を作成

sudo mkdir -p /etc/systemd/system/google-cloud-ops-agent.service.d
sudo vi /etc/systemd/system/google-cloud-ops-agent.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://<proxy>:8080/" "HTTPS_PROXY=http://<proxy>:8080/" "NO_PROXY=metadata.google.internal"
sudo systemctl daemon-reload
sudo systemctl restart google-cloud-ops-agent
  • curl では API 疎通 OK
    →プロキシ問題はクリアになったっぽい

が、Ops Agent は 依然として FAIL


■真の原因

/var/log/google-cloud-ops-agent/health-checks.log を確認

{"severity":"INFO","time":"2026-02-09T09:14:02Z","message":"rpc error: code = PermissionDenied desc = Permission monitoring.timeSeries.create denied (or the resource may not exist)."}

→サービスアカウントに以下の権限が不足していた

roles/monitoring.metricWriter

■対応

必要最小権限としてロールを付与

結果

Logging API response status: 200 OK
Monitoring API response status: 200 OK

→ Cloud Logging にログ出力成功


■ここまでの学び

  • プロキシ問題に見えて IAM が原因になるケースあり

手順に書いてなかったのに!と思いましたが、前提的な前置きでちゃんと書かれてました。
https://docs.cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation?hl=ja#before_you_begin
GCP のドキュメントを参考にする際は、権限、認可周りは前提にしれっと書いていたりするので、ちゃんと確認しなきゃダメだと反省しました。


ハマったこと②:子プロセスにプロキシが設定されていなかった

■事象

  • API Check:PASS
  • しかしログが出ない

■ログ

/var/log/google-cloud-ops-agent/subagents/logging-module.log
failed to flush chunk

→ ログ転送に失敗してリトライしている状態


■原因

Ops Agent は内部的に以下の構成

  • 親:google-cloud-ops-agent
  • 子:google-cloud-ops-agent-fluent-bit(ログ転送担当)

子プロセスにプロキシ設定が適用されていなかった


■確認

sudo systemctl show google-cloud-ops-agent-fluent-bit --property=Environment
Environment=

■対応

sudo mkdir -p /etc/systemd/system/google-cloud-ops-agent-fluent-bit.service.d
sudo vi /etc/systemd/system/google-cloud-ops-agent-fluent-bit.service.d/proxy.conf
[Service]
Environment=HTTP_PROXY=http://<proxy>:8080 HTTPS_PROXY=http://<proxy>:8080 NO_PROXY=metadata.google.internal
sudo systemctl daemon-reload
sudo systemctl restart google-cloud-ops-agent-fluent-bit

■結果

  • ログ転送成功
  • Cloud Logging に反映

■補足

  • 親サービスの設定をシンボリックリンクで流用可能
  • 二重管理を避ける運用が望ましい

■なぜ検証環境では問題なかったか

単純な凡ミス…

  • 検証環境:FWが緩く、Google Cloud と直接通信可能
  • 本番相当:プロキシ必須

おわりに

通常の GCP 環境であれば、

  • Ops Agent インストール
  • ログ設定

だけで Cloud Logging に連携されます。

しかし、閉域 + プロキシ必須環境では別物でした。

そして公式の手順書は隅々まで読みましょう(読んでも分からないことはある)

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?