225 lines
5.9 KiB
Go
225 lines
5.9 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"go.opentelemetry.io/collector/pdata/pcommon"
|
|
"go.opentelemetry.io/collector/pdata/plog"
|
|
"go.opentelemetry.io/collector/pdata/pmetric"
|
|
"go.opentelemetry.io/otel"
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
|
|
"go.opentelemetry.io/otel/sdk/resource"
|
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
|
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
|
|
"go.opentelemetry.io/otel/trace"
|
|
)
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
|
|
fmt.Println("Testing OTLP Debug Receiver...")
|
|
fmt.Println("Make sure the receiver is running on ports 8080 (HTTP) and 4317 (gRPC)")
|
|
fmt.Println()
|
|
|
|
// Test HTTP endpoint
|
|
fmt.Println("Testing HTTP endpoint...")
|
|
testHTTPTraces(ctx)
|
|
|
|
time.Sleep(1 * time.Second)
|
|
|
|
// Test gRPC endpoint
|
|
fmt.Println("Testing gRPC endpoint...")
|
|
testGRPCTraces(ctx)
|
|
|
|
time.Sleep(1 * time.Second)
|
|
|
|
// Test HTTP metrics
|
|
fmt.Println("Testing HTTP metrics...")
|
|
testHTTPMetrics()
|
|
|
|
time.Sleep(1 * time.Second)
|
|
|
|
// Test HTTP logs
|
|
fmt.Println("Testing HTTP logs...")
|
|
testHTTPLogs()
|
|
|
|
fmt.Println()
|
|
fmt.Println("Test completed! Check the receiver logs and web interface at http://localhost:8080")
|
|
fmt.Println("You should see traces, metrics, and logs from both HTTP and gRPC clients.")
|
|
}
|
|
|
|
func testHTTPTraces(ctx context.Context) {
|
|
// Create OTLP HTTP exporter
|
|
exporter, err := otlptracehttp.New(ctx,
|
|
otlptracehttp.WithEndpoint("localhost:8080"),
|
|
otlptracehttp.WithInsecure(),
|
|
)
|
|
if err != nil {
|
|
log.Fatalf("failed to create HTTP exporter: %v", err)
|
|
}
|
|
|
|
// Create tracer provider
|
|
tp := sdktrace.NewTracerProvider(
|
|
sdktrace.WithBatcher(exporter),
|
|
sdktrace.WithResource(resource.NewWithAttributes(
|
|
semconv.SchemaURL,
|
|
semconv.ServiceNameKey.String("test-client-http"),
|
|
semconv.ServiceVersionKey.String("1.0.0"),
|
|
)),
|
|
)
|
|
defer func() {
|
|
if err := tp.Shutdown(ctx); err != nil {
|
|
log.Printf("failed to shutdown tracer provider: %v", err)
|
|
}
|
|
}()
|
|
|
|
otel.SetTracerProvider(tp)
|
|
|
|
// Create tracer
|
|
tracer := tp.Tracer("test-tracer")
|
|
|
|
// Create some sample spans
|
|
for i := 0; i < 3; i++ {
|
|
_, span := tracer.Start(ctx, fmt.Sprintf("http-test-span-%d", i),
|
|
trace.WithAttributes(
|
|
attribute.String("test.key", fmt.Sprintf("test-value-%d", i)),
|
|
attribute.Int("test.number", i),
|
|
),
|
|
)
|
|
|
|
// Add an event
|
|
span.AddEvent("test event", trace.WithAttributes(
|
|
attribute.String("event.key", "event.value"),
|
|
))
|
|
|
|
// Simulate some work
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
span.End()
|
|
}
|
|
|
|
// Force flush
|
|
if err := tp.ForceFlush(ctx); err != nil {
|
|
log.Printf("failed to flush: %v", err)
|
|
}
|
|
|
|
fmt.Println("HTTP traces sent successfully")
|
|
}
|
|
|
|
func testGRPCTraces(ctx context.Context) {
|
|
// Create OTLP gRPC exporter
|
|
exporter, err := otlptracegrpc.New(ctx,
|
|
otlptracegrpc.WithEndpoint("localhost:4317"),
|
|
otlptracegrpc.WithInsecure(),
|
|
)
|
|
if err != nil {
|
|
log.Fatalf("failed to create gRPC exporter: %v", err)
|
|
}
|
|
|
|
// Create tracer provider
|
|
tp := sdktrace.NewTracerProvider(
|
|
sdktrace.WithBatcher(exporter),
|
|
sdktrace.WithResource(resource.NewWithAttributes(
|
|
semconv.SchemaURL,
|
|
semconv.ServiceNameKey.String("test-client-grpc"),
|
|
semconv.ServiceVersionKey.String("1.0.0"),
|
|
)),
|
|
)
|
|
defer func() {
|
|
if err := tp.Shutdown(ctx); err != nil {
|
|
log.Printf("failed to shutdown tracer provider: %v", err)
|
|
}
|
|
}()
|
|
|
|
otel.SetTracerProvider(tp)
|
|
|
|
// Create tracer
|
|
tracer := tp.Tracer("test-tracer-grpc")
|
|
|
|
// Create some sample spans
|
|
for i := 0; i < 3; i++ {
|
|
_, span := tracer.Start(ctx, fmt.Sprintf("grpc-test-span-%d", i),
|
|
trace.WithAttributes(
|
|
attribute.String("test.key", fmt.Sprintf("grpc-test-value-%d", i)),
|
|
attribute.Int("test.number", i*10),
|
|
),
|
|
)
|
|
|
|
// Add an event
|
|
span.AddEvent("grpc test event", trace.WithAttributes(
|
|
attribute.String("grpc.event.key", "grpc.event.value"),
|
|
))
|
|
|
|
// Simulate some work
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
span.End()
|
|
}
|
|
|
|
// Force flush
|
|
if err := tp.ForceFlush(ctx); err != nil {
|
|
log.Printf("failed to flush: %v", err)
|
|
}
|
|
|
|
fmt.Println("gRPC traces sent successfully")
|
|
}
|
|
|
|
func testHTTPMetrics() {
|
|
md := pmetric.NewMetrics()
|
|
resourceMetrics := md.ResourceMetrics().AppendEmpty()
|
|
resourceMetrics.Resource().Attributes().PutStr("service.name", "test-client-metric")
|
|
scopeMetrics := resourceMetrics.ScopeMetrics().AppendEmpty()
|
|
scopeMetrics.Scope().SetName("test-meter")
|
|
metric := scopeMetrics.Metrics().AppendEmpty()
|
|
metric.SetName("test_counter")
|
|
gauge := metric.SetEmptyGauge()
|
|
dataPoint := gauge.DataPoints().AppendEmpty()
|
|
dataPoint.SetIntValue(42)
|
|
dataPoint.Attributes().PutStr("test.key", "test-value")
|
|
marshaler := &pmetric.ProtoMarshaler{}
|
|
buf, err := marshaler.MarshalMetrics(md)
|
|
if err != nil {
|
|
log.Printf("failed to marshal metrics: %v", err)
|
|
return
|
|
}
|
|
resp, err := http.Post("http://localhost:8080/v1/metrics", "application/x-protobuf", bytes.NewReader(buf))
|
|
if err != nil {
|
|
log.Printf("failed to post metrics: %v", err)
|
|
return
|
|
}
|
|
resp.Body.Close()
|
|
fmt.Println("HTTP metrics sent successfully")
|
|
}
|
|
|
|
func testHTTPLogs() {
|
|
ld := plog.NewLogs()
|
|
resourceLogs := ld.ResourceLogs().AppendEmpty()
|
|
resourceLogs.Resource().Attributes().PutStr("service.name", "test-client-log")
|
|
scopeLogs := resourceLogs.ScopeLogs().AppendEmpty()
|
|
scopeLogs.Scope().SetName("test-logger")
|
|
logRecord := scopeLogs.LogRecords().AppendEmpty()
|
|
logRecord.Body().SetStr("test log message")
|
|
logRecord.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
|
|
logRecord.Attributes().PutStr("test.key", "test-value")
|
|
marshaler := &plog.ProtoMarshaler{}
|
|
buf, err := marshaler.MarshalLogs(ld)
|
|
if err != nil {
|
|
log.Printf("failed to marshal logs: %v", err)
|
|
return
|
|
}
|
|
resp, err := http.Post("http://localhost:8080/v1/logs", "application/x-protobuf", bytes.NewReader(buf))
|
|
if err != nil {
|
|
log.Printf("failed to post logs: %v", err)
|
|
return
|
|
}
|
|
resp.Body.Close()
|
|
fmt.Println("HTTP logs sent successfully")
|
|
}
|