Skip to content

Commit 23fc37b

Browse files
committed
Simplify OTel setup by setting more env variables ourselves
1 parent 14b5af6 commit 23fc37b

6 files changed

Lines changed: 20 additions & 32 deletions

File tree

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"dockerComposeFile": "docker-compose.yml",
44
"service": "app",
55
"workspaceFolder": "/workspace",
6-
"forwardPorts": [5432, 6379],
6+
"forwardPorts": [5432, 6379, 18888],
77
"features": {
88
"ghcr.io/azure/azure-dev/azd:latest": {},
99
"ghcr.io/devcontainers/features/azure-cli:latest": {}

.devcontainer/docker-compose.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ services:
88
command: sleep infinity
99
environment:
1010
- OTEL_EXPORTER_OTLP_ENDPOINT=http://aspire-dashboard:18889
11+
- OTEL_EXPORTER_OTLP_PROTOCOL=grpc
1112

1213
db:
1314
image: pgvector/pgvector:pg17

.env.sample

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ GITHUB_TOKEN=YOUR-GITHUB-PERSONAL-ACCESS-TOKEN
1212
# Configure for Redis (used by agent_history_redis.py, defaults to dev container Redis):
1313
REDIS_URL=redis://localhost:6379
1414
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
15+
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
16+
# Or use console exporters instead of OTLP:
17+
# ENABLE_CONSOLE_EXPORTERS=true
1518
# Configure for Azure AI Search (used by agent_knowledge_aisearch.py):
1619
AZURE_SEARCH_ENDPOINT=https://YOUR-SEARCH-SERVICE.search.windows.net
1720
AZURE_SEARCH_KNOWLEDGE_BASE_NAME=YOUR-KB-NAME

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ The Aspire Dashboard runs automatically as a service alongside the dev container
200200
2. Run the example:
201201
202202
```sh
203-
uv run agent_otel_aspire.py
203+
uv run examples/agent_otel_aspire.py
204204
```
205205
206206
3. Open the dashboard at <http://localhost:18888> and explore:

examples/agent_otel_aspire.py

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from datetime import datetime, timezone
66
from typing import Annotated
77

8-
from agent_framework import ChatAgent
8+
from agent_framework import Agent, tool
99
from agent_framework.observability import configure_otel_providers
1010
from agent_framework.openai import OpenAIChatClient
1111
from azure.identity.aio import DefaultAzureCredential, get_bearer_token_provider
@@ -20,18 +20,8 @@
2020
logger = logging.getLogger(__name__)
2121
logger.setLevel(logging.INFO)
2222

23-
# Configure OpenTelemetry export to the Aspire Dashboard (if endpoint is set)
24-
otlp_endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
25-
if otlp_endpoint:
26-
os.environ.setdefault("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc")
27-
os.environ.setdefault("OTEL_SERVICE_NAME", "agent-framework-demo")
28-
configure_otel_providers(enable_sensitive_data=True)
29-
logger.info(f"OpenTelemetry export enabled — sending to {otlp_endpoint}")
30-
else:
31-
logger.info(
32-
"Set OTEL_EXPORTER_OTLP_ENDPOINT in .env to export telemetry to the Aspire Dashboard. "
33-
"Use http://aspire-dashboard:18889 in Codespaces/Dev Containers or http://localhost:4317 locally."
34-
)
23+
# Configure OpenTelemetry based on environment variables
24+
configure_otel_providers(enable_sensitive_data=True)
3525

3626
# Configure OpenAI client based on environment
3727
load_dotenv(override=True)
@@ -58,6 +48,7 @@
5848
)
5949

6050

51+
@tool
6152
def get_weather(
6253
city: Annotated[str, Field(description="City name, spelled out fully")],
6354
) -> dict:
@@ -72,6 +63,7 @@ def get_weather(
7263
return random.choice(weather_options)
7364

7465

66+
@tool
7567
def get_current_time(
7668
timezone_name: Annotated[str, Field(description="Timezone name, e.g. 'US/Eastern', 'Asia/Tokyo', 'UTC'")],
7769
) -> str:
@@ -81,9 +73,9 @@ def get_current_time(
8173
return f"The current time in {timezone_name} is approximately {now.strftime('%Y-%m-%d %H:%M:%S')} UTC"
8274

8375

84-
agent = ChatAgent(
76+
agent = Agent(
8577
name="weather-time-agent",
86-
chat_client=client,
78+
client=client,
8779
instructions="You are a helpful assistant that can look up weather and time information.",
8880
tools=[get_weather, get_current_time],
8981
)

examples/spanish/agent_otel_aspire.py

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from datetime import datetime, timezone
66
from typing import Annotated
77

8-
from agent_framework import ChatAgent
8+
from agent_framework import Agent, tool
99
from agent_framework.observability import configure_otel_providers
1010
from agent_framework.openai import OpenAIChatClient
1111
from azure.identity.aio import DefaultAzureCredential, get_bearer_token_provider
@@ -20,18 +20,8 @@
2020
logger = logging.getLogger(__name__)
2121
logger.setLevel(logging.INFO)
2222

23-
# Configura la exportación de OpenTelemetry al Aspire Dashboard (si el endpoint está configurado)
24-
otlp_endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
25-
if otlp_endpoint:
26-
os.environ.setdefault("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc")
27-
os.environ.setdefault("OTEL_SERVICE_NAME", "agent-framework-demo")
28-
configure_otel_providers(enable_sensitive_data=True)
29-
logger.info(f"Exportación OpenTelemetry habilitada — enviando a {otlp_endpoint}")
30-
else:
31-
logger.info(
32-
"Configura OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 en .env"
33-
" para exportar telemetría al Aspire Dashboard"
34-
)
23+
# Configura OpenTelemetry (lee OTEL_EXPORTER_OTLP_* y ENABLE_CONSOLE_EXPORTERS del entorno)
24+
configure_otel_providers(enable_sensitive_data=True)
3525

3626
# Configura el cliente para usar Azure OpenAI, GitHub Models u OpenAI
3727
load_dotenv(override=True)
@@ -58,6 +48,7 @@
5848
)
5949

6050

51+
@tool
6152
def get_weather(
6253
city: Annotated[str, Field(description="City name, spelled out fully")],
6354
) -> dict:
@@ -72,6 +63,7 @@ def get_weather(
7263
return random.choice(weather_options)
7364

7465

66+
@tool
7567
def get_current_time(
7668
timezone_name: Annotated[
7769
str, Field(description="Timezone name, e.g. 'US/Eastern', 'America/Mexico_City', 'UTC'")
@@ -83,9 +75,9 @@ def get_current_time(
8375
return f"La hora actual en {timezone_name} es aproximadamente {now.strftime('%Y-%m-%d %H:%M:%S')} UTC"
8476

8577

86-
agent = ChatAgent(
78+
agent = Agent(
8779
name="weather-time-agent",
88-
chat_client=client,
80+
client=client,
8981
instructions="Eres un asistente útil que puede consultar información del clima y la hora.",
9082
tools=[get_weather, get_current_time],
9183
)

0 commit comments

Comments
 (0)