Skip to content

Commit 93e6647

Browse files
authored
Document TraceLens setup (#2286)
1 parent 2161555 commit 93e6647

File tree

4 files changed

+94
-0
lines changed

4 files changed

+94
-0
lines changed

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
6565
<PackageVersion Include="OpenTelemetry" Version="1.12.0" />
6666
<PackageVersion Include="OpenTelemetry.Api" Version="1.12.0" />
67+
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.12.0" />
6768
<PackageVersion Include="OpenTelemetry.Exporter.Jaeger" Version="1.5.1" />
6869
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.12.0" />
6970
<PackageVersion Include="OpenTelemetry.Exporter.Prometheus" Version="1.3.0-rc.2" />
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<OutputType>Exe</OutputType>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<LangVersion>10</LangVersion>
6+
</PropertyGroup>
7+
<ItemGroup>
8+
<ProjectReference Include="..\..\src\Proto.OpenTelemetry\Proto.OpenTelemetry.csproj" />
9+
</ItemGroup>
10+
<ItemGroup>
11+
<PackageReference Include="Microsoft.Extensions.Logging.Console" />
12+
<PackageReference Include="OpenTelemetry" />
13+
<PackageReference Include="OpenTelemetry.Exporter.Console" />
14+
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
15+
</ItemGroup>
16+
</Project>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using System;
2+
using System.Diagnostics;
3+
using System.Threading.Tasks;
4+
using Microsoft.Extensions.Logging;
5+
using OpenTelemetry;
6+
using OpenTelemetry.Metrics;
7+
using OpenTelemetry.Resources;
8+
using OpenTelemetry.Trace;
9+
using Proto;
10+
using Proto.OpenTelemetry;
11+
12+
// Configure logging so Proto.Actor writes to the console
13+
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
14+
Log.SetLoggerFactory(loggerFactory);
15+
16+
// Export spans and metrics to the console and an OTLP collector (e.g., TraceLens)
17+
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
18+
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("ActorOpenTelemetrySample"))
19+
.AddProtoActorInstrumentation()
20+
.AddConsoleExporter()
21+
.AddOtlpExporter()
22+
.Build();
23+
24+
using var meterProvider = Sdk.CreateMeterProviderBuilder()
25+
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("ActorOpenTelemetrySample"))
26+
.AddProtoActorInstrumentation()
27+
.AddConsoleExporter()
28+
.AddOtlpExporter()
29+
.Build();
30+
31+
var system = new ActorSystem(ActorSystemConfig.Setup().WithMetrics());
32+
33+
// Simple actor that prints its trace id
34+
var props = Props.FromFunc(ctx =>
35+
{
36+
if (ctx.Message is string msg)
37+
{
38+
Console.WriteLine($"[actor] received '{msg}' traceId={Activity.Current?.TraceId}");
39+
}
40+
41+
return Task.CompletedTask;
42+
}).WithTracing();
43+
44+
var pid = system.Root.Spawn(props);
45+
var tracedRoot = system.Root.WithTracing();
46+
47+
using var rootActivity = new ActivitySource(Proto.ProtoTags.ActivitySourceName).StartActivity("root");
48+
tracedRoot.Send(pid, "hello");
49+
50+
// Flush telemetry before exiting
51+
tracerProvider.ForceFlush();
52+
meterProvider.ForceFlush();
53+
54+
Console.WriteLine("Press enter to exit");
55+
Console.ReadLine();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Actor OpenTelemetry
2+
3+
Demonstrates Proto.Actor tracing and metrics using OpenTelemetry with console exporters. The sample runs a single actor system and prints spans and counters directly to the console, so no external collector is required. It also sends telemetry to an OTLP collector on `localhost:4317`, which can be visualized with [TraceLens](https://tracelens.io).
4+
5+
## Run
6+
7+
```bash
8+
DOTNET_ReadyToRun=0 dotnet run --project examples/actor.open-telemetry
9+
```
10+
11+
The program sends a message to an instrumented actor. The console output shows the trace identifier for the message and periodic dumps of Proto.Actor metrics.
12+
13+
## Visualize with TraceLens
14+
15+
Start TraceLens via Docker Compose to explore the emitted spans and counters:
16+
17+
```bash
18+
curl -L https://raw.githubusercontent.com/asynkron/TraceLens/main/docker-compose.yml -o docker-compose.yml
19+
docker compose up
20+
```
21+
22+
With TraceLens running, execute the example again. Open http://localhost:5001 to inspect traces and metrics.

0 commit comments

Comments
 (0)