Google Cloud को टेलीमेट्री

gcp सुविधा adk-telemetry से सीधे Google Cloud Observability (Cloud Trace) में ट्रेस निर्यात करती है और संरचित JSON लॉग लिखती है, जिन्हें Cloud Logging मूल रूप से पार्स करता है — severity, message और trace correlation सहित।

सुविधा सक्षम करें

[dependencies]
adk-telemetry = { version = "2.1.0", features = ["gcp"] }

या umbrella crate के माध्यम से (gcp-telemetry भी gemini-agent-platform meta-feature का हिस्सा है):

[dependencies]
adk-rust = { version = "2.1.0", features = ["minimal", "gcp-telemetry"] }

Google Cloud में सीधा निर्यात

init_with_gcp gRPC के माध्यम से https://telemetry.googleapis.com में spans निर्यात करता है और प्रत्येक request को Application Default Credentials (ADC) से बनाए गए Bearer token के साथ-साथ x-goog-user-project header द्वारा प्रमाणित करता है। एक background task हर पाँच मिनट में token को फिर से बनाता है, इसलिए लंबे समय तक चलने वाले agents token की अवधि समाप्त होने के बाद भी निर्यात करते रहते हैं।

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(())
}

आवश्यकताएँ:

आवश्यकतातरीका
GOOGLE_CLOUD_PROJECTउस प्रोजेक्ट पर सेट करें जो टेलीमेट्री प्राप्त करता है (और जिसका बिल आता है)
क्रेडेंशियलस्थानीय रूप से gcloud auth application-default login, या परिनियोजित किए जाने पर संलग्न सर्विस अकाउंट
APIप्रोजेक्ट पर Telemetry API (telemetry.googleapis.com) सक्षम करें
IAMप्रिंसिपल को telemetry.traces.write अनुमति (roles/telemetry.tracesWriter) की आवश्यकता है

नोट: यह पथ केवल ट्रेस निर्यात करता है। मेट्रिक्स को नीचे दिए गए कलेक्टर साइडकार के माध्यम से रूट करें।

GCP संसाधन पहचान

init_with_gcp उन पर्यावरण चर से OpenTelemetry संसाधन विशेषताएँ प्राप्त करता है जिन्हें प्लेटफ़ॉर्म परिनियोजित कंटेनरों में सेट करता है:

विशेषतास्रोत
service.nameK_SERVICE, अन्यथा GOOGLE_CLOUD_AGENT_ENGINE_ID, अन्यथा service_name तर्क
gcp.project_idGOOGLE_CLOUD_PROJECT (सेट न होने पर छोड़ दिया जाता है)
cloud.platformgcp.agent_engine जब GOOGLE_CLOUD_AGENT_ENGINE_ID सेट है

GOOGLE_CLOUD_AGENT_ENGINE_ID वह केवल संख्यात्मक इंजन ID है जिसे Vertex AI Agent Engine परिनियोजित कंटेनरों में सेट करता है। gcp.agent_engine OpenTelemetry की प्रमाणिक cloud.platform वैल्यू है (जिसे अक्टूबर 2025 में upstream में जोड़ा गया था)।

अपने स्वयं के पाइपलाइन को संयोजित करने के लिए यही पहचान सुविधा standalone रूप में भी उपलब्ध है:

use adk_telemetry::gcp_resource_attributes;

let attributes = gcp_resource_attributes("my-agent");

Cloud Logging के लिए संरचित JSON लॉगिंग

init_json_logging stdout में प्रति पंक्ति एक JSON ऑब्जेक्ट लिखता है, इसलिए Cloud Logging severity और trace फ़ील्ड को अपारदर्शी टेक्स्ट payload के रूप में दिखाने के बजाय पार्स करता है। init_with_gcp उसी फ़ॉर्मैट को स्वचालित रूप से इंस्टॉल करता है।

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(())
}

उत्सर्जित फ़ील्ड:

फ़ील्डसामग्री
timestampRFC 3339 इवेंट समय
severityDEBUG / INFO / WARNING / ERROR (ट्रेसिंग trace और debug दोनों DEBUG पर मैप होते हैं, warn WARNING पर मैप होता है)
messageइवेंट संदेश
targetट्रेसिंग लक्ष्य
logging.googleapis.com/traceसक्रिय OpenTelemetry स्पैन से projects/{project}/traces/{trace_id}
logging.googleapis.com/spanIdसक्रिय OpenTelemetry स्पैन की स्पैन ID
logging.googleapis.com/trace_sampledसैंपलिंग निर्णय
(इवेंट और स्पैन फ़ील्ड)प्रत्येक फ़ील्ड एक टाइप किए गए JSON मान के रूप में

ट्रेस सहसंबंध फ़ील्ड के लिए उसी सब्सक्राइबर में एक OpenTelemetry लेयर और GOOGLE_CLOUD_PROJECT की आवश्यकता होती है — init_with_gcp दोनों प्रदान करता है, जिससे लॉग प्रविष्टियाँ Cloud Trace पैनल में इनलाइन दिखाई देती हैं।

विकल्प: साइडकार के रूप में OTLP Collector

जब सीधे API एक्सेस उपलब्ध न हो — या जब आपको मेट्रिक्स की भी आवश्यकता हो — तब एक OpenTelemetry Collector को साइडकार के रूप में चलाएँ और मानक OTLP exporter को उसकी ओर निर्देशित करें:

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(())
}

Google Cloud को अग्रेषित करने वाला Collector कॉन्फ़िगरेशन (otel-collector-config.yaml, contrib distribution से googlecloud exporter का उपयोग करते हुए):

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]

विकास के लिए इसे स्थानीय रूप से चलाएँ:

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

पथ चुनना

मार्गसंकेतअतिरिक्त अवसंरचनाप्रमाणीकरण
init_with_gcpstdout पर ट्रेस + JSON लॉगकोई नहींप्रक्रिया में ADC
कलेक्टर साइडकारट्रेस + मेट्रिक्स (+ कलेक्टर के माध्यम से लॉग)कलेक्टर कंटेनरकलेक्टर में ADC