Copy as Markdown[Open in ChatGPT](https://chatgpt.com/?q=Read%20https%3A%2F%2Fcoralogix.com%2Fdocs%2Fintegrations%2Fai-observability%2Fgoogle-adk.md%20and%20help%20me%20with%20my%20question%20about%20this%20Coralogix%20documentation%20page.)[Open in Claude](https://claude.ai/new?q=Read%20https%3A%2F%2Fcoralogix.com%2Fdocs%2Fintegrations%2Fai-observability%2Fgoogle-adk.md%20and%20help%20me%20with%20my%20question%20about%20this%20Coralogix%20documentation%20page.)

# Google ADK

Coralogix's AI Observability integration for [Google ADK (Agent Development Kit)](https://github.com/google/adk-python) provides production-ready tracing for agent workflows built on Gemini. Instrument your ADK agents with a single call to gain full visibility into prompts, completions, tool calls, and performance metrics.

## Requirements[​](#requirements "Direct link to Requirements")

* Python 3.10–3.13.
* Coralogix [API keys](https://coralogix.com/docs/docs/user-guides/account-management/api-keys/api-keys/.md).

## Installation[​](#installation "Direct link to Installation")

Run the following command.

```
pip install "llm-tracekit-google-adk"
```

## Authentication[​](#authentication "Direct link to Authentication")

Authentication data is passed during OTel Span Exporter definition:

1. Choose the
   <!-- -->
   ingress.:443
   <!-- -->
   endpoint that corresponds to your Coralogix [domain](https://coralogix.com/docs/docs/user-guides/account-management/account-settings/coralogix-domain/.md) using the domain selector at the top of the page.
2. Use your [customized API key](https://coralogix.com/docs/docs/user-guides/account-management/api-keys/api-keys/.md) in the authorization request header.
3. Provide the [application and subsystem names](https://coralogix.com/docs/docs/user-guides/account-management/account-settings/application-and-subsystem-names/.md).

```
from llm_tracekit.google_adk import setup_export_to_coralogix



setup_export_to_coralogix(

    coralogix_token=<your_coralogix_token>,

    coralogix_endpoint="ingress.eu2.coralogix.com:443",

    service_name="ai-service",

    application_name="ai-application",

    subsystem_name="ai-subsystem",

    capture_content=True,

)
```

Note

All of the authentication parameters can also be provided through environment variables (`CX_TOKEN`, `CX_ENDPOINT`, etc.).

## Usage[​](#usage "Direct link to Usage")

This section describes how to set up instrumentation for Google ADK.

### Set up tracing[​](#set-up-tracing "Direct link to Set up tracing")

**Automatic**

Use the `setup_export_to_coralogix` function to set up tracing and export traces to Coralogix. See the code snippet in the [Authentication](#authentication) section.

**Manual**

Alternatively, you can set up tracing manually.

```
from opentelemetry import trace

from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

from opentelemetry.sdk.resources import SERVICE_NAME, Resource

from opentelemetry.sdk.trace import TracerProvider

from opentelemetry.sdk.trace.export import SimpleSpanProcessor



tracer_provider = TracerProvider(

    resource=Resource.create({SERVICE_NAME: "ai-service"}),

)

exporter = OTLPSpanExporter()

span_processor = SimpleSpanProcessor(exporter)

tracer_provider.add_span_processor(span_processor)

trace.set_tracer_provider(tracer_provider)
```

### Instrument[​](#instrument "Direct link to Instrument")

To instrument all clients, call the `instrument` method.

```
from llm_tracekit.google_adk import GoogleADKInstrumentor



GoogleADKInstrumentor().instrument()
```

### Uninstrument[​](#uninstrument "Direct link to Uninstrument")

To uninstrument clients, call the `uninstrument` method.

```
GoogleADKInstrumentor().uninstrument()
```

### Full example[​](#full-example "Direct link to Full example")

```
import asyncio

from google.adk import Agent, Runner

from google.adk.sessions import InMemorySessionService

from google.genai import types

from llm_tracekit.google_adk import GoogleADKInstrumentor, setup_export_to_coralogix



# Optional: Configure sending spans to Coralogix

# Reads Coralogix connection details from the following environment variables:

# - CX_TOKEN

# - CX_ENDPOINT

setup_export_to_coralogix(

    service_name="ai-service",

    application_name="ai-application",

    subsystem_name="ai-subsystem",

    capture_content=True,

)



# Activate instrumentation

GoogleADKInstrumentor().instrument()





async def main():

    agent = Agent(

        name="MyAgent",

        model="gemini-2.0-flash",

        instruction="You are a helpful assistant.",

    )



    session_service = InMemorySessionService()

    runner = Runner(agent=agent, app_name="my_app", session_service=session_service)



    session = await session_service.create_session(app_name="my_app", user_id="user_1")



    async for event in runner.run_async(

        user_id="user_1",

        session_id=session.id,

        new_message=types.Content(role="user", parts=[types.Part(text="Hello!")]),

    ):

        if event.content and event.content.parts:

            for part in event.content.parts:

                if part.text:

                    print(part.text, end="")





if __name__ == "__main__":

    asyncio.run(main())
```

### Enable message content capture[​](#enable-message-content-capture "Direct link to Enable message content capture")

By default, message content — prompt contents, completions, function arguments, and return values — is not captured. To capture message content as span attributes:

* Pass `capture_content=True` when calling `setup_export_to_coralogix`.
* Set the environment variable `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT` to `true`.

Most Coralogix AI evaluations require message contents to function properly, so enabling message capture is strongly recommended.

## Semantic conventions[​](#semantic-conventions "Direct link to Semantic conventions")

| Attribute                                                                            | Type   | Description                                                                                                        | Example                                                                     |
| ------------------------------------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- |
| `gen_ai.prompt.<message_number>.role`                                                | string | Role of message author for user message `<message_number>`                                                         | `system`, `user`, `assistant`, `tool`                                       |
| `gen_ai.prompt.<message_number>.content`                                             | string | Contents of user message `<message_number>`                                                                        | `What's the weather in Paris?`                                              |
| `gen_ai.prompt.<message_number>.tool_calls.<tool_call_number>.id`                    | string | ID of tool call in user message `<message_number>`                                                                 | `call_O8NOz8VlxosSASEsOY7LDUcP`                                             |
| `gen_ai.prompt.<message_number>.tool_calls.<tool_call_number>.type`                  | string | Type of tool call in user message `<message_number>`                                                               | `function`                                                                  |
| `gen_ai.prompt.<message_number>.tool_calls.<tool_call_number>.function.name`         | string | The name of the function used in tool call within user message `<message_number>`                                  | `get_current_weather`                                                       |
| `gen_ai.prompt.<message_number>.tool_calls.<tool_call_number>.function.arguments`    | string | Arguments passed to the function used in tool call within user message `<message_number>`                          | `{"location": "Seattle, WA"}`                                               |
| `gen_ai.prompt.<message_number>.tool_call_id`                                        | string | Tool call ID in user message `<message_number>`                                                                    | `call_mszuSIzqtI65i1wAUOE8w5H4`                                             |
| `gen_ai.completion.<choice_number>.role`                                             | string | Role of message author for choice `<choice_number>` in model response                                              | `assistant`                                                                 |
| `gen_ai.completion.<choice_number>.finish_reason`                                    | string | Finish reason for choice `<choice_number>` in model response                                                       | `stop`, `tool_calls`, `error`                                               |
| `gen_ai.completion.<choice_number>.content`                                          | string | Contents of choice `<choice_number>` in model response                                                             | `The weather in Paris is rainy and overcast, with temperatures around 57°F` |
| `gen_ai.completion.<choice_number>.tool_calls.<tool_call_number>.id`                 | string | ID of tool call in choice `<choice_number>`                                                                        | `call_O8NOz8VlxosSASEsOY7LDUcP`                                             |
| `gen_ai.completion.<choice_number>.tool_calls.<tool_call_number>.type`               | string | Type of tool call in choice `<choice_number>`                                                                      | `function`                                                                  |
| `gen_ai.completion.<choice_number>.tool_calls.<tool_call_number>.function.name`      | string | The name of the function used in tool call within choice `<choice_number>`                                         | `get_current_weather`                                                       |
| `gen_ai.completion.<choice_number>.tool_calls.<tool_call_number>.function.arguments` | string | Arguments passed to the function used in tool call within choice `<choice_number>`                                 | `{"location": "Seattle, WA"}`                                               |
| `gen_ai.request.tools.<tool_number>.type`                                            | string | Type of tool entry in tools list                                                                                   | `function`                                                                  |
| `gen_ai.request.tools.<tool_number>.function.name`                                   | string | The name of the function to use in tool calls                                                                      | `get_current_weather`                                                       |
| `gen_ai.request.tools.<tool_number>.function.description`                            | string | Description of the function                                                                                        | `Get the current weather in a given location`                               |
| `gen_ai.request.user`                                                                | string | A unique identifier representing the end user (from the `user_id` passed to `session_service.create_session(...)`) | `user@company.com`                                                          |

## Next steps[​](#next-steps "Direct link to Next steps")

Once your integration is set up, explore the [AI Center Overview](https://coralogix.com/docs/docs/user-guides/ai/monitor/.md) to monitor performance, costs, quality issues, and security across all your AI applications — and to set up [Guardrails](https://coralogix.com/docs/docs/user-guides/ai/guardrails/.md) for real-time policy enforcement.
