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 :

ExigenceComment
GOOGLE_CLOUD_PROJECTDéfini sur le projet qui reçoit (et auquel est facturée) la télémétrie
Identifiantsgcloud auth application-default login localement, ou un compte de service associé lors du déploiement
APIActiver API de télémétrie (telemetry.googleapis.com) sur le projet
IAMLe 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 :

AttributSource
service.nameK_SERVICE, sinon GOOGLE_CLOUD_AGENT_ENGINE_ID, sinon l’argument service_name
gcp.project_idGOOGLE_CLOUD_PROJECT (omis lorsqu’il n’est pas dĂ©fini)
cloud.platformgcp.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 :

ChampContenu
timestampHeure de l’évĂ©nement au format RFC 3339
severityDEBUG / INFO / WARNING / ERROR (trace et debug de traçage correspondent tous deux à DEBUG, warn correspond à WARNING)
messageLe message d’évĂ©nement
targetLa cible de traçage
logging.googleapis.com/traceprojects/{project}/traces/{trace_id} de l’intervalle OpenTelemetry actif
logging.googleapis.com/spanIdID d’intervalle de l’intervalle OpenTelemetry actif
logging.googleapis.com/trace_sampledDĂ©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

CheminSignauxInfrastructure supplémentaireAuthentification
init_with_gcpTraces + journaux JSON sur stdoutAucuneADC dans le processus
Side-car du collecteurTraces + métriques (+ journaux via le collecteur)Conteneur du collecteurADC dans le collecteur
  • 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
Télémétrie vers Google Cloud - Documentation ADK-Rust | ADK-Rust