Skip to content

[Observability] Enable default secret store for agent configuration #310

@CasperGN

Description

@CasperGN

To externalize some of the agent configuration, similarly to #309 we should implement an agent-runtime which maps to statestore for runtime configuration and agent-secretstore which maps to a secret store.
This store could potentially hold API keys etc however the initial use-case sought is to allow easy OTel setup following the below structure:

Image

The goal is to limit Agent configuration (if the standard configuration is found to:

from dapr_agents.observability import DaprAgentsInstrumentor

agent = DurableAgent(
    name="Agent",
    role="Agent",
    goal="Some awesome goal"
    instructions=[
        ...
    ],
    tools=[..] + agent_tools,
    llm=OpenAIChatClient(model="gpt-5-2025-08-07", api_key=os.getenv("OPENAI_API_KEY")),
)  

instrumentor = DaprAgentsInstrumentor()
instrumentor.instrument()

Today tracing + logging setup requires a lot of boilerplate:

from opentelemetry import trace
from opentelemetry import _logs
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.zipkin.json import ZipkinExporter
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, ConsoleLogRecordExporter
from dapr_agents.observability import DaprAgentsInstrumentor

agent = DurableAgent(
    name="Agent",
    role="Agent",
    goal="Some awesome goal"
    instructions=[
        ...
    ],
    tools=[..] + agent_tools,
    llm=OpenAIChatClient(model="gpt-5-2025-08-07", api_key=os.getenv("OPENAI_API_KEY")),
)  

logger_provider = LoggerProvider()
log_processor = BatchLogRecordProcessor(ConsoleLogRecordExporter())
logger_provider.add_log_record_processor(log_processor)
_logs.set_logger_provider(logger_provider)
resource = Resource(attributes={"service.name": "agent"})
tracer_provider = TracerProvider(resource=resource)
zipkin_exporter = ZipkinExporter(endpoint="http://localhost:9411/api/v2/spans")
span_processor = BatchSpanProcessor(zipkin_exporter)
tracer_provider.add_span_processor(span_processor)
trace.set_tracer_provider(tracer_provider)
instrumentor = DaprAgentsInstrumentor()
instrumentor.instrument(tracer_provider=tracer_provider, logger_provider=logger_provider, skip_dep_check=True)

Metadata

Metadata

Assignees

Labels

Projects

Status

We're Working On It

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions