Open Telemetry
Chronicle exports telemetry signals through the OpenTelemetry Protocol (OTLP). Telemetry is always enabled and configured via standard OpenTelemetry environment variables.
Signals
Section titled “Signals”Chronicle exports the following signals:
| Signal | Description |
|---|---|
| Metrics | Application and infrastructure metrics (event sequences, observers, .NET runtime) |
| Traces | Distributed traces for Chronicle operations (gRPC, HTTP, Orleans) |
| Logs | Structured application logs |
Configuration
Section titled “Configuration”Telemetry is configured using standard OpenTelemetry environment variables:
| Variable | Default | Description |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT | none | OTLP receiver endpoint (e.g. http://localhost:4317) |
OTEL_EXPORTER_OTLP_PROTOCOL | grpc | Export protocol: grpc or http/protobuf |
OTEL_EXPORTER_OTLP_HEADERS | none | Additional headers (e.g. API keys for cloud backends) |
OTEL_SERVICE_NAME | Chronicle | Service name reported to the telemetry backend |
When OTEL_EXPORTER_OTLP_ENDPOINT is not set, Chronicle does not export telemetry but the instrumentation is still active.
Local development with .NET Aspire Dashboard
Section titled “Local development with .NET Aspire Dashboard”The Kernel ships with a docker-compose.yml that starts the .NET Aspire Dashboard as a lightweight all-in-one OTLP receiver and telemetry viewer.
aspire-dashboard: image: mcr.microsoft.com/dotnet/aspire-dashboard:latest environment: - DOTNET_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS=true - ALLOW_UNSECURED_TRANSPORT=true ports: - 18888:18888 # dashboard UI - 4317:18889 # OTLP/gRPC receiverStart the services:
docker compose up -dThen set the endpoint environment variable before starting the Kernel:
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 dotnet runOpen the Aspire Dashboard at http://localhost:18888 to view metrics, traces, and logs.
Example: Prometheus and Grafana
Section titled “Example: Prometheus and Grafana”For production-grade metric collection, connect Chronicle to a Prometheus-compatible OTLP receiver (for example the OpenTelemetry Collector):
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317Example: cloud observability backends
Section titled “Example: cloud observability backends”Most cloud observability backends (Datadog, Honeycomb, Grafana Cloud, Azure Monitor) accept OTLP. Set the endpoint and any required authentication headers:
OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp.example.comOTEL_EXPORTER_OTLP_HEADERS=x-api-key=your-api-keyMetrics instrumented
Section titled “Metrics instrumented”Chronicle instruments the following meters:
| Meter | Description |
|---|---|
Cratis.Chronicle | Chronicle application metrics (events appended, observers, etc.) |
Microsoft.Orleans | Orleans distributed actor framework metrics |
Grpc.AspNetCore.Server | gRPC server request metrics |
| .NET runtime | GC, thread pool, and memory metrics from the .NET runtime |
Traces instrumented
Section titled “Traces instrumented”Chronicle traces the following activity sources:
| Source | Description |
|---|---|
Cratis.Chronicle | Chronicle internal operations |
Microsoft.Orleans.Runtime | Orleans runtime activities |
Microsoft.Orleans.Application | Orleans application activities |
| HTTP client | Outgoing HTTP requests |
| ASP.NET Core | Incoming HTTP and gRPC requests |
| gRPC client | Outgoing gRPC calls |