stuff
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
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")
|
||||
}
|
||||
Reference in New Issue
Block a user