WorkflowForge.Extensions.Observability.OpenTelemetry
2.0.0
dotnet add package WorkflowForge.Extensions.Observability.OpenTelemetry --version 2.0.0
NuGet\Install-Package WorkflowForge.Extensions.Observability.OpenTelemetry -Version 2.0.0
<PackageReference Include="WorkflowForge.Extensions.Observability.OpenTelemetry" Version="2.0.0" />
<PackageVersion Include="WorkflowForge.Extensions.Observability.OpenTelemetry" Version="2.0.0" />
<PackageReference Include="WorkflowForge.Extensions.Observability.OpenTelemetry" />
paket add WorkflowForge.Extensions.Observability.OpenTelemetry --version 2.0.0
#r "nuget: WorkflowForge.Extensions.Observability.OpenTelemetry, 2.0.0"
#:package WorkflowForge.Extensions.Observability.OpenTelemetry@2.0.0
#addin nuget:?package=WorkflowForge.Extensions.Observability.OpenTelemetry&version=2.0.0
#tool nuget:?package=WorkflowForge.Extensions.Observability.OpenTelemetry&version=2.0.0
WorkflowForge.Extensions.Observability.OpenTelemetry
<p align="center"> <img src="https://raw.githubusercontent.com/animatlabs/workflow-forge/main/icon.png" alt="WorkflowForge" width="120" height="120"> </p>
Distributed tracing extension for WorkflowForge with OpenTelemetry integration for comprehensive observability.
Dependency Isolation
This extension internalizes OpenTelemetry with ILRepack. This means:
- Reduced dependency conflicts for OpenTelemetry
- Public APIs stay WorkflowForge/BCL only
- Microsoft/System assemblies remain external
Installation
dotnet add package WorkflowForge.Extensions.Observability.OpenTelemetry
Requires: .NET Standard 2.0 or later
Quick Start
using WorkflowForge.Extensions.Observability.OpenTelemetry;
using OpenTelemetry;
using OpenTelemetry.Trace;
// Configure OpenTelemetry
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("WorkflowForge")
.AddConsoleExporter()
.AddJaegerExporter(options =>
{
options.AgentHost = "localhost";
options.AgentPort = 6831;
})
.Build();
// Create foundry with tracing
using var foundry = WorkflowForge.CreateFoundry("TracedWorkflow");
var tracer = tracerProvider.GetTracer("WorkflowForge");
// Operations will create spans
await smith.ForgeAsync(workflow, foundry);
Key Features
- Distributed Tracing: Track workflows across services
- Automatic Spans: Operation-level span creation
- Context Propagation: W3C Trace Context support
- Multiple Exporters: Jaeger, Zipkin, Console, OTLP
- Rich Metadata: Operation names, durations, results
- Full OpenTelemetry API: Access entire ecosystem
Configuration
Programmatic
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("WorkflowForge")
.AddConsoleExporter()
.AddJaegerExporter(options =>
{
options.AgentHost = "localhost";
options.AgentPort = 6831;
})
.Build();
using var foundry = WorkflowForge.CreateFoundry("TracedWorkflow");
var tracer = tracerProvider.GetTracer("WorkflowForge");
await smith.ForgeAsync(workflow, foundry);
See Configuration Guide for complete options.
Exporters
Jaeger
.AddJaegerExporter(options =>
{
options.AgentHost = "localhost";
options.AgentPort = 6831;
})
Zipkin
.AddZipkinExporter(options =>
{
options.Endpoint = new Uri("http://localhost:9411/api/v2/spans");
})
OTLP (OpenTelemetry Protocol)
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("http://localhost:4317");
})
Console (Development)
.AddConsoleExporter()
Span Structure
WorkflowForge creates the following span hierarchy:
Workflow: OrderProcessing
├─ Operation: ValidateOrder (12µs)
├─ Operation: ChargePayment (145µs)
├─ Operation: ReserveInventory (87µs)
└─ Operation: CreateShipment (234µs)
Each span includes:
- Operation name
- Duration
- Success/failure status
- Custom tags (workflow properties)
- Error details (if failed)
Custom Spans
using var span = tracer.StartActiveSpan("CustomOperation");
span.SetAttribute("order.id", orderId);
span.SetAttribute("customer.id", customerId);
try
{
// ... operation logic ...
span.SetStatus(Status.Ok);
}
catch (Exception ex)
{
span.SetStatus(Status.Error);
span.RecordException(ex);
throw;
}
Context Propagation
WorkflowForge automatically propagates trace context across:
- Operations within a workflow
- Nested workflows
- HTTP calls (with propagation headers)
- Message queues (with context metadata)
Visualization
View traces in:
- Jaeger UI: http://localhost:16686
- Zipkin UI: http://localhost:9411
- Application Insights: Azure Portal
- Grafana Tempo: Grafana dashboard
Documentation
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- WorkflowForge (>= 2.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Major release v2.0.0:
- Dependencies internalized via ILRepack (where applicable)
- Users can avoid third-party version conflicts
- ISystemTimeProvider integrated for testability
- Enhanced documentation and samples
- Enterprise-ready for production workflows