Télémétrie vers Google Cloud
La fonctionnalitĂ© gcp de adk-telemetry exporte directement les traces vers Google Cloud Observability (Cloud Trace) et Ă©crit des journaux JSON structurĂ©s que Cloud Logging analyse nativement â gravitĂ©, message et corrĂ©lation des traces inclus.
Activer la fonctionnalité
[dependencies]
adk-telemetry = { version = "2.1.0", features = ["gcp"] }
Ou via le crate umbrella (gcp-telemetry fait également partie de la méta-fonctionnalité gemini-agent-platform) :
[dependencies]
adk-rust = { version = "2.1.0", features = ["minimal", "gcp-telemetry"] }
Export direct vers Google Cloud
init_with_gcp exporte les spans vers https://telemetry.googleapis.com via gRPC, en authentifiant chaque requĂȘte avec un jeton Bearer gĂ©nĂ©rĂ© Ă partir des Application Default Credentials (ADC), ainsi quâun en-tĂȘte x-goog-user-project. Une tĂąche en arriĂšre-plan gĂ©nĂšre un nouveau jeton toutes les cinq minutes ; les agents de longue durĂ©e continuent ainsi Ă exporter les donnĂ©es mĂȘme aprĂšs lâexpiration du jeton.
use adk_telemetry::init_with_gcp;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Requires GOOGLE_CLOUD_PROJECT and Application Default Credentials.
init_with_gcp("my-agent").await?;
// Your agent code here
adk_telemetry::shutdown_telemetry();
Ok(())
}
Prérequis :
| Exigence | Comment |
|---|---|
GOOGLE_CLOUD_PROJECT | Défini sur le projet qui reçoit (et auquel est facturée) la télémétrie |
| Identifiants | gcloud auth application-default login localement, ou un compte de service associé lors du déploiement |
| API | Activer API de télémétrie (telemetry.googleapis.com) sur le projet |
| IAM | Le principal nĂ©cessite lâautorisation telemetry.traces.write (roles/telemetry.tracesWriter) |
Remarque : Ce chemin exporte uniquement les traces. Acheminez les métriques via le sidecar du collecteur ci-dessous.
Détection des ressources GCP
init_with_gcp dĂ©rive les attributs de ressource OpenTelemetry Ă partir des variables dâenvironnement dĂ©finies par la plateforme dans les conteneurs dĂ©ployĂ©s :
| Attribut | Source |
|---|---|
service.name | K_SERVICE, sinon GOOGLE_CLOUD_AGENT_ENGINE_ID, sinon lâargument service_name |
gcp.project_id | GOOGLE_CLOUD_PROJECT (omis lorsquâil nâest pas dĂ©fini) |
cloud.platform | gcp.agent_engine lorsque GOOGLE_CLOUD_AGENT_ENGINE_ID est défini |
GOOGLE_CLOUD_AGENT_ENGINE_ID est lâidentifiant numĂ©rique brut du moteur que Vertex AI Agent Engine dĂ©finit dans les conteneurs dĂ©ployĂ©s. gcp.agent_engine est la valeur canonique cloud.platform issue des conventions sĂ©mantiques OpenTelemetry (ajoutĂ©e en amont en octobre 2025).
La mĂȘme dĂ©tection est disponible de maniĂšre autonome pour composer votre propre pipeline :
use adk_telemetry::gcp_resource_attributes;
let attributes = gcp_resource_attributes("my-agent");
Journalisation JSON structurée pour Cloud Logging
init_json_logging Ă©crit un objet JSON par ligne sur la sortie standard, afin que Cloud Logging analyse les champs de gravitĂ© et de trace au lieu dâafficher des charges utiles textuelles opaques. init_with_gcp installe automatiquement le mĂȘme format.
use adk_telemetry::init_json_logging;
fn main() -> Result<(), Box<dyn std::error::Error>> {
init_json_logging()?;
tracing::info!(user.id = "u1", "request handled");
Ok(())
}
Champs émis :
| Champ | Contenu |
|---|---|
timestamp | Heure de lâĂ©vĂ©nement au format RFC 3339 |
severity | DEBUG / INFO / WARNING / ERROR (trace et debug de traçage correspondent tous deux à DEBUG, warn correspond à WARNING) |
message | Le message dâĂ©vĂ©nement |
target | La cible de traçage |
logging.googleapis.com/trace | projects/{project}/traces/{trace_id} de lâintervalle OpenTelemetry actif |
logging.googleapis.com/spanId | ID dâintervalle de lâintervalle OpenTelemetry actif |
logging.googleapis.com/trace_sampled | DĂ©cision dâĂ©chantillonnage |
| (champs dâĂ©vĂ©nement et de span) | Chaque champ sous forme de valeur JSON typĂ©e |
Les champs de corrĂ©lation des traces nĂ©cessitent une couche OpenTelemetry dans le mĂȘme subscriber et GOOGLE_CLOUD_PROJECT â init_with_gcp fournit les deux, ce qui fait apparaĂźtre les entrĂ©es de journal directement dans le panneau Cloud Trace.
Solution de repli : OTLP vers un sidecar Collector
Lorsque lâaccĂšs direct Ă API nâest pas disponible â ou lorsque vous avez Ă©galement besoin de mĂ©triques â exĂ©cutez un Collector OpenTelemetry en tant que sidecar et pointez lâexportateur OTLP standard vers celui-ci :
use adk_telemetry::init_with_otlp;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
init_with_otlp("my-agent", "http://localhost:4317")?;
// Your agent code here
adk_telemetry::shutdown_telemetry();
Ok(())
}
Configuration du Collector pour transfĂ©rer les donnĂ©es vers Google Cloud (otel-collector-config.yaml, Ă lâaide de lâexportateur googlecloud de la distribution contrib) :
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
processors:
batch:
send_batch_size: 200
timeout: 5s
resourcedetection:
detectors: [env, gcp]
exporters:
googlecloud:
project: my-project
service:
pipelines:
traces:
receivers: [otlp]
processors: [resourcedetection, batch]
exporters: [googlecloud]
metrics:
receivers: [otlp]
processors: [resourcedetection, batch]
exporters: [googlecloud]
Exécutez-le localement pour le développement :
docker run --rm -p 4317:4317 \
-v ./otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml \
-v ~/.config/gcloud:/root/.config/gcloud \
otel/opentelemetry-collector-contrib:latest
Choisir une approche
| Chemin | Signaux | Infrastructure supplémentaire | Authentification |
|---|---|---|---|
init_with_gcp | Traces + journaux JSON sur stdout | Aucune | ADC dans le processus |
| Side-car du collecteur | Traces + métriques (+ journaux via le collecteur) | Conteneur du collecteur | ADC dans le collecteur |
Documentation associée
- Télémétrie - Configuration de base de la télémétrie et assistants de spans
- Déploiement - Configuration de la télémétrie en production