Home / Docs / Telemetry

Telemetry

Telemetry

FabrCore includes comprehensive OpenTelemetry instrumentation across server and client packages for full observability of your AI agent systems.

OpenTelemetry Setup

Program.cs — Full Telemetry
builder.Services.AddOpenTelemetry()
    .WithTracing(tracing => tracing
        .AddSource("FabrCore.Sdk.*")
        .AddSource("FabrCore.Host.*")
        .AddSource("FabrCore.Client.*"))
    .WithMetrics(metrics => metrics
        .AddMeter("FabrCore.Sdk.*")
        .AddMeter("FabrCore.Host.*")
        .AddMeter("FabrCore.Client.*"));

Metrics

Server Metrics

WebSocket (FabrCore.Host.WebSocket)

MetricTypeDescription
fabrcore.websocket.connections.acceptedCounterWebSocket connections accepted
fabrcore.websocket.connections.rejectedCounterWebSocket connections rejected
fabrcore.websocket.sessions.createdCounterWebSocket sessions created
fabrcore.websocket.messages.receivedCounterMessages received via WebSocket
fabrcore.websocket.messages.sentCounterMessages sent via WebSocket

Agent Grain (FabrCore.Host.AgentGrain)

MetricTypeDescription
fabrcore.agent.configuredCounterAgents configured
fabrcore.agent.messages.processedCounterMessages processed
fabrcore.agent.message.durationHistogramMessage processing duration
fabrcore.agent.errorsCounterErrors by type

SDK (FabrCore.Sdk.FabrCoreAgentProxy)

MetricTypeDescription
fabrcore.sdk.agent_proxy.initializedCounterAgents initialized
fabrcore.sdk.agent_proxy.message.durationHistogramMessage processing time
fabrcore.sdk.agent_proxy.errorsCounterError count by type

Client Metrics

Connection (FabrCore.Client.Connection)

MetricTypeDescription
fabrcore.client.connection.retriesCounterConnection retry attempts
fabrcore.client.connection.successCounterSuccessful connections
fabrcore.client.connection.failuresCounterFailed connections

API Client (FabrCore.Client.FabrHostApiClient)

MetricTypeDescription
fabrcore.api_client.requestsCounterAPI requests made
fabrcore.api_client.errorsCounterAPI errors
fabrcore.api_client.request.durationHistogramAPI request duration

Client Agent Proxy (FabrCore.Client.FabrCoreClientAgentProxy)

MetricTypeDescription
fabrcore.client.agent_proxy.initializedCounterAgent proxy initializations
fabrcore.client.agent_proxy.messages.processedCounterMessages processed
fabrcore.client.agent_proxy.message.durationHistogramMessage processing time
fabrcore.client.agent_proxy.errorsCounterAgent proxy errors

Distributed Tracing

Activity Sources

SourceOperations
FabrCore.Sdk.FabrCoreAgentProxyInitialize, OnMessage, OnEvent, GetHealth, FlushState
FabrCore.Sdk.FabrCoreChatClientServiceGetChatClient, FetchModelConfig, FetchApiKey
FabrCore.Client.ClientContextContext operations
FabrCore.Client.ClientContextFactoryFactory operations
FabrCore.Client.DirectMessageSenderDirect messaging operations
FabrCore.Client.FabrCoreClientAgentProxyAgent proxy operations
FabrCore.Client.ExtensionsClient configuration and setup
FabrCore.Client.ConnectionOrleans connection lifecycle
FabrCore.Client.FabrHostApiClientHTTP API client operations

Structured Logging

Use the built-in logger in your agents for structured logging that integrates with OpenTelemetry:

Structured Logging in Agents
public override async Task<AgentMessage> OnMessage(AgentMessage message)
{
    logger.LogInformation(
        "Processing message from {FromHandle}",
        message.FromHandle);

    try
    {
        // Process message
    }
    catch (Exception ex)
    {
        logger.LogError(ex,
            "Error processing message {MessageId}",
            message.Id);
        throw;
    }
}
Trace Correlation

FabrCore propagates TraceId across agent boundaries via the AgentMessage.TraceId property. This enables end-to-end distributed tracing across multi-agent workflows.

Tool Invocation Logging

Use Microsoft.Extensions.AI's UseLogging() middleware to capture tool invocations, arguments, and results through the standard ILogger pipeline:

Enabling Tool Call Logging
var chatClient = new ChatClientBuilder(innerClient)
    .UseLogging(loggerFactory)
    .Build();

This logs tool names, arguments, results, and duration through your existing logging infrastructure — no custom log aggregation agents needed. Combine with your observability stack (Application Insights, Seq, ELK, Grafana) for production monitoring.

Health Endpoints

FabrCore exposes diagnostics endpoints for monitoring. Combine these with ASP.NET Core health checks for Kubernetes probes and alerting:

EndpointReturns
GET /fabrcoreapi/diagnostics/agentsAll registered agents with status
GET /fabrcoreapi/diagnostics/agents/statisticsTotal, active, deactivated counts
GET /fabrcoreapi/discoveryAvailable agents, plugins, and tools
GET /fabrapi/Agent/health/{handle}Per-agent health (Basic, Detailed, Full)

ASP.NET Core Health Check Integration

Program.cs — Health Checks
// Register health checks that query FabrCore diagnostics
builder.Services.AddHealthChecks()
    .AddCheck<FabrCoreAgentHealthCheck>("fabrcore-agents");

var app = builder.Build();

// Map the standard health endpoint
app.MapHealthChecks("/health");

This integrates with Kubernetes liveness/readiness probes, Azure App Service health checks, and standard monitoring infrastructure.

Documentation