事象
- ローカルの Claude Code → GLB → Cloud Run 上の OTel Collector → telemetry.googleapis.com の構成でテレメトリ送信を試した。
- Collector のログに以下のエラーが継続的に出て、ログが破棄されていた。
code = InvalidArgumentdesc = Failed to parse attribute value to int64: ... string_value: "connected" / "failed"
原因
- Google Cloud Telemetry API は、OTLP ログの属性キー
status を LogEntry.httpRequest.status(数値)にマップする予約キーとして扱う。 - Claude Code の
claude_code.mcp_server_connection イベントは仕様上 status 属性に "connected" / "failed" / "disconnected" の文字列を入れる。 - 両者の命名が衝突し、GCP 側で数値パースに失敗 → 該当リクエストのログが丸ごと破棄されていた。
対処
- Collector の logs パイプラインに transform プロセッサを追加し、エクスポート前に
status 属性を mcp.connection.status にリネームして GCP のマッピング対象から外す。 - 値そのものは文字列として保持されるため、Cloud Logging でも引き続き参照可能。
学び・今後の注意
- OTel の attribute キーは自由に命名できるが、GCP Telemetry API 側に予約キー(status, latency, http.response.status_code, code.function.number など)が存在し、型解釈の衝突が起きうる。
- OTel ドキュメントの「承認済みのタイプ: 文字列、整数」は「任意の文字列 OR 整数」ではなく「数字を表す文字列 OR 整数」の意味だった。
- 計装側(Claude Code など)を直せない場合は、中継する Collector 側で吸収するのが現実解。
- 新たに
Failed to parse attribute value to int64 を観測したら、衝突キーを特定して同じ要領でリネームルールを追加していく。
参考