Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DEVELOPING.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ For go services, use the go modules file to replace our beeline (and optionally
```txt
module main

go 1.14
go 1.24

replace github.com/honeycombio/beeline-go => /home/paul/projects/beeline-go

Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ The idea is to use these to test compatibility between various types of services
The motivating use case is testing trace context header compatibility between Honeycomb and OpenTelemetry.

**.NET**
- [frontend](/dotnet/frontend) using [Honeycomb.OpenTelemetry](https://github.com/honeycombio/honeycomb-opentelemetry-dotnet)
- [message-service](/dotnet/message-service) using [Honeycomb.OpenTelemetry](https://github.com/honeycombio/honeycomb-opentelemetry-dotnet)
- [frontend](/dotnet/frontend) using [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-dotnet)
- [message-service](/dotnet/message-service) using [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-dotnet)
- [name-service](/dotnet/name-service) using [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-dotnet)
- [year-service](/dotnet/year-service) using [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-dotnet)

Expand All @@ -37,13 +37,13 @@ The motivating use case is testing trace context header compatibility between Ho
- [frontend](/golang/frontend) using [opentelemetry-go](https://github.com/open-telemetry/opentelemetry-go)
- [message-service](/golang/message-service) using [beeline-go](https://github.com/honeycombio/beeline-go)
- [name-service](/golang/name-service) using [opentelemetry-go](https://github.com/open-telemetry/opentelemetry-go)
- [year-service](/golang/year-service) using [honeycomb-opentelemetry-go](https://github.com/honeycombio/honeycomb-opentelemetry-go)
- [year-service](/golang/year-service) using [opentelemetry-go](https://github.com/open-telemetry/opentelemetry-go)

**Java**
- [frontend](/java/frontend) using [opentelemetry-javaagent](https://github.com/open-telemetry/opentelemetry-java-instrumentation)
- [message-service](/java/message-service) using [honeycomb-opentelemetry-javaagent](https://github.com/honeycombio/honeycomb-opentelemetry-java)
- [name-service](/java/name-service) using [honeycomb-opentelemetry-javaagent](https://github.com/honeycombio/honeycomb-opentelemetry-java)
- [year-service](/java/year-service) using [honeycomb-opentelemetry-skd](https://github.com/honeycombio/honeycomb-opentelemetry-java)
- [message-service](/java/message-service) using [opentelemetry-javaagent](https://github.com/open-telemetry/opentelemetry-java-instrumentation)
- [name-service](/java/name-service) using [opentelemetry-javaagent](https://github.com/open-telemetry/opentelemetry-java-instrumentation)
- [year-service](/java/year-service) using [opentelemetry-javaagent](https://github.com/open-telemetry/opentelemetry-java-instrumentation)

**Node**
- [frontend](/node/frontend) using [opentelemetry-js](https://github.com/open-telemetry/opentelemetry-js)
Expand All @@ -54,7 +54,7 @@ The motivating use case is testing trace context header compatibility between Ho
**Python**
- [frontend](/python/frontend) using [beeline-python](https://github.com/honeycombio/beeline-python)
- [message-service](/python/message-service) using [opentelemetry-python](https://github.com/open-telemetry/opentelemetry-python)
- [name-service](/python/name-service) using [honeycomb-opentelemetry](https://github.com/honeycombio/honeycomb-opentelemetry-python)
- [name-service](/python/name-service) using [opentelemetry-python](https://github.com/open-telemetry/opentelemetry-python)
- [year-service](/python/year-service) using [beeline-python](https://github.com/honeycombio/beeline-python)

**Ruby**
Expand Down
4 changes: 2 additions & 2 deletions docker-compose.java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ services:
image: hnyexample/message-java
environment:
<<: *common-env
SERVICE_NAME: message-java
OTEL_SERVICE_NAME: message-java
ports:
- 9000:9000

Expand All @@ -41,7 +41,7 @@ services:
image: hnyexample/name-java
environment:
<<: *common-env
SERVICE_NAME: name-java
OTEL_SERVICE_NAME: name-java
ports:
- 8000:8000

Expand Down
6 changes: 3 additions & 3 deletions dotnet/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ This is a .NET implementation of the example greeting service; 4 microservices t

You'll note that instrumentation is done differently depending on the project:

* `frontend` is a service built with .NET 6 that uses [Honeycomb.OpenTelemetry](https://www.nuget.org/packages/Honeycomb.OpenTelemetry), our distribution of the .NET OpenTelemetry SDK. Configuration is simpler when you use this package.
* `message-service` is a service built with .NET 5 that uses the Honeycomb.OpenTelemetry distribution.
* `year-service` is a service built as a minimal .NET 6 API that uses the standard OpenTelemetry libraries to configure instrumentation. It's more lines of code.
* `frontend` is a service built with .NET 6 that uses the standard OpenTelemetry libraries to configure instrumentation.
* `message-service` is a service built with .NET 5 that uses the standard OpenTelemetry libraries.
* `year-service` is a service built as a minimal .NET 6 API that uses the standard OpenTelemetry libraries to configure instrumentation.
* `name-service` is a service built with .NET 5 that uses the standard OpenTelemetry libraries.

The goal here is to demonstrate that you can configure instrumentation in several ways with .NET but still send data to Honeycomb.
37 changes: 29 additions & 8 deletions dotnet/frontend/Program.cs
Original file line number Diff line number Diff line change
@@ -1,24 +1,45 @@
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using OpenTelemetry.Logs;
using OpenTelemetry.Exporter;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
builder.Services.AddHttpClient();
var honeycombOptions = builder.Configuration.GetHoneycombOptions();
builder.Services.AddOpenTelemetry().WithTracing(otelBuilder =>
const string telemetrySourceName = "honeycomb.examples.frontend-service-dotnet";

var resourceBuilder = ResourceBuilder.CreateDefault()
.AddService(builder.Configuration.GetValue<string>("Otlp:ServiceName"))
.AddEnvironmentVariableDetector();

var configureOtlpExporter = (OtlpExporterOptions options) =>
{
otelBuilder
.AddHoneycomb(honeycombOptions)
.AddCommonInstrumentations()
.AddAspNetCoreInstrumentationWithBaggage();
});
builder.Services.AddSingleton(TracerProvider.Default.GetTracer(honeycombOptions.ServiceName));
options.Endpoint = new Uri(builder.Configuration.GetValue<string>("Otlp:Endpoint"));
var apiKey = builder.Configuration.GetValue<string>("Otlp:ApiKey");
var dataset = builder.Configuration.GetValue<string>("Otlp:Dataset");
options.Headers = $"x-honeycomb-team={apiKey},x-honeycomb-dataset={dataset}";
};

builder.Services.AddOpenTelemetry()
.WithTracing(options => options
.SetResourceBuilder(resourceBuilder)
.AddSource(telemetrySourceName)
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter(configureOtlpExporter));

builder.Logging.AddOpenTelemetry(options => options
.SetResourceBuilder(resourceBuilder)
.AddOtlpExporter(configureOtlpExporter)
);

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSingleton(TracerProvider.Default.GetTracer(builder.Configuration.GetValue<string>("Otlp:ServiceName")));

var app = builder.Build();

Expand Down
2 changes: 1 addition & 1 deletion dotnet/frontend/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
}
},
"AllowedHosts": "*",
"Honeycomb": {
"Otlp": {
"ServiceName": "frontend-dotnet",
"Endpoint": "https://api.honeycomb.io",
"ApiKey": "",
Expand Down
8 changes: 5 additions & 3 deletions dotnet/frontend/frontend.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Honeycomb.OpenTelemetry" Version="1.3.1" />
<PackageReference Include="Honeycomb.OpenTelemetry.CommonInstrumentations" Version="0.27.0-beta" />
<PackageReference Include="Honeycomb.OpenTelemetry.Instrumentation.AspNetCore" Version="0.27.0-beta" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.4.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.4.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs" Version="1.4.0-rc.4" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.4.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.0.0-rc9.14" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.0.0-rc9.14" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>

Expand Down
30 changes: 20 additions & 10 deletions dotnet/message-service/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using Honeycomb.OpenTelemetry;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using StackExchange.Redis;
using System;
Expand All @@ -13,6 +13,8 @@ namespace message_service
{
public class Startup
{
public const string TelemetrySourceName = "honeycomb.examples.message-service-dotnet";

public Startup(IConfiguration configuration)
{
Configuration = configuration;
Expand All @@ -29,16 +31,24 @@ public void ConfigureServices(IServiceCollection services)
c.SwaggerDoc("v1", new OpenApiInfo { Title = "message_service", Version = "v1" });
});

HoneycombOptions honeycombOptions = Configuration.GetHoneycombOptions();
services.AddOpenTelemetry().WithTracing(otelBuilder =>
{
otelBuilder
.AddHoneycomb(honeycombOptions)
.AddCommonInstrumentations()
.AddAspNetCoreInstrumentation();
});
services.AddSingleton(TracerProvider.Default.GetTracer(honeycombOptions.ServiceName));
services.AddOpenTelemetry()
.WithTracing((builder => builder
.SetResourceBuilder(ResourceBuilder.CreateDefault()
.AddService(this.Configuration.GetValue<string>("Otlp:ServiceName"))
.AddEnvironmentVariableDetector()
)
.AddSource(TelemetrySourceName)
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri(Configuration.GetValue<string>("Otlp:Endpoint"));
var apiKey = Configuration.GetValue<string>("Otlp:ApiKey");
var dataset = Configuration.GetValue<string>("Otlp:Dataset");
options.Headers = $"x-honeycomb-team={apiKey},x-honeycomb-dataset={dataset}";
})));

services.AddSingleton(TracerProvider.Default.GetTracer(this.Configuration.GetValue<string>("Otlp:ServiceName")));
var redisConfigString = Environment.GetEnvironmentVariable("REDIS_URL");
if (string.IsNullOrWhiteSpace(redisConfigString))
{
Expand Down
2 changes: 1 addition & 1 deletion dotnet/message-service/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
}
},
"AllowedHosts": "*",
"Honeycomb": {
"Otlp": {
"ServiceName": "message-dotnet",
"Endpoint": "https://api.honeycomb.io",
"ApiKey": "",
Expand Down
5 changes: 3 additions & 2 deletions dotnet/message-service/message-service.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Honeycomb.OpenTelemetry" Version="1.3.1" />
<PackageReference Include="Honeycomb.OpenTelemetry.CommonInstrumentations" Version="0.27.0-beta" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.4.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.4.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.5.0-alpha.2" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.0.0-rc9.14" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.0.0-rc9.14" />
<PackageReference Include="StackExchange.Redis" Version="2.6.111" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion go-auto-instrumented/go.mod
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module go-auto-instrumented

go 1.18
go 1.24

require github.com/gorilla/mux v1.8.0
2 changes: 1 addition & 1 deletion go-uninstrumented/go.mod
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module go-auto-instrumented

go 1.18
go 1.24

require github.com/gorilla/mux v1.8.0
67 changes: 22 additions & 45 deletions golang/go.mod
Original file line number Diff line number Diff line change
@@ -1,63 +1,40 @@
module github.com/honeycombio/example-greeting-service

go 1.18
go 1.24

require (
github.com/honeycombio/beeline-go v1.11.1
github.com/honeycombio/honeycomb-opentelemetry-go v0.7.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0
go.opentelemetry.io/otel v1.18.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0
go.opentelemetry.io/otel/sdk v1.16.0
go.opentelemetry.io/otel/trace v1.18.0
google.golang.org/grpc v1.56.3
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0
go.opentelemetry.io/otel v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0
go.opentelemetry.io/otel/sdk v1.37.0
go.opentelemetry.io/otel/trace v1.37.0
google.golang.org/grpc v1.74.2
)

require (
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect
github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 // indirect
github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 // indirect
github.com/felixge/httpsnoop v1.0.3 // indirect
github.com/go-logr/logr v1.2.4 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
github.com/honeycombio/libhoney-go v1.18.0 // indirect
github.com/honeycombio/otel-config-go v1.10.0 // indirect
github.com/klauspost/compress v1.15.15 // indirect
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
github.com/sethvargo/go-envconfig v0.9.0 // indirect
github.com/shirou/gopsutil/v3 v3.23.4 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
github.com/tklauser/numcpus v0.6.0 // indirect
github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
go.opentelemetry.io/contrib/instrumentation/host v0.42.0 // indirect
go.opentelemetry.io/contrib/instrumentation/runtime v0.42.0 // indirect
go.opentelemetry.io/contrib/propagators/b3 v1.17.0 // indirect
go.opentelemetry.io/contrib/propagators/ot v1.17.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.39.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.39.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.39.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.16.0 // indirect
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0 // indirect
go.opentelemetry.io/otel/metric v1.18.0 // indirect
go.opentelemetry.io/otel/sdk/metric v0.39.0 // indirect
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect
google.golang.org/protobuf v1.33.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/otel/metric v1.37.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
golang.org/x/net v0.43.0 // indirect
golang.org/x/sys v0.35.0 // indirect
golang.org/x/text v0.28.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250811230008-5f3141c8851a // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250811230008-5f3141c8851a // indirect
google.golang.org/protobuf v1.36.7 // indirect
gopkg.in/alexcesaro/statsd.v2 v2.0.0 // indirect
)
Loading