From c6c841fc7c11dcda5929bdeafa867af0b20c1892 Mon Sep 17 00:00:00 2001 From: Stefan Prisca Date: Fri, 8 May 2020 14:25:20 +0200 Subject: [PATCH] add simple demo for connecting to collector --- example/otel-collector/main.go | 54 +++++++++++ example/otel-collector/otel-coll.yaml | 125 ++++++++++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 example/otel-collector/main.go create mode 100644 example/otel-collector/otel-coll.yaml diff --git a/example/otel-collector/main.go b/example/otel-collector/main.go new file mode 100644 index 000000000..f65489430 --- /dev/null +++ b/example/otel-collector/main.go @@ -0,0 +1,54 @@ +package main + +import ( + "context" + "fmt" + "log" + "time" + + "go.opentelemetry.io/otel/api/global" + "go.opentelemetry.io/otel/exporters/otlp" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + "google.golang.org/grpc" +) + +func main() { + exp, err := otlp.NewExporter(otlp.WithInsecure(), + otlp.WithGRPCDialOption(grpc.WithBlock())) + if err != nil { + log.Fatalf("Failed to create the collector exporter: %v", err) + } + if err = exp.GetLastConnectError(); err != nil { + log.Fatalf("Failed to create the collector exporter: %v", err) + } + + defer func() { + + _ = exp.Stop() + }() + + tp, _ := sdktrace.NewProvider( + sdktrace.WithConfig(sdktrace.Config{DefaultSampler: sdktrace.AlwaysSample()}), + sdktrace.WithBatcher(exp, // add following two options to ensure flush + sdktrace.WithScheduleDelayMillis(5), + sdktrace.WithMaxExportBatchSize(1), + )) + if err != nil { + log.Fatalf("error creating trace provider: %v\n", err) + } + + global.SetTraceProvider(tp) + tracer := global.Tracer("test-tracer") + + // Then use the OpenTelemetry tracing library, like we normally would. + ctx, span := tracer.Start(context.Background(), "CollectorExporter-Example") + defer span.End() + + for i := 0; i < 10; i++ { + _, iSpan := tracer.Start(ctx, fmt.Sprintf("Sample-%d", i)) + <-time.After(6 * time.Second) + iSpan.End() + } + + // exp.ExportSpan(ctx, span) +} diff --git a/example/otel-collector/otel-coll.yaml b/example/otel-collector/otel-coll.yaml new file mode 100644 index 000000000..1708042de --- /dev/null +++ b/example/otel-collector/otel-coll.yaml @@ -0,0 +1,125 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector-conf + labels: + app: opentelemetry + component: otel-collector-conf +data: + otel-collector-config: | + receivers: + otlp: {} + processors: + queued_retry: + num_workers: 16 + queue_size: 10000 + retry_on_failure: true + batch: + send_batch_size: 1024 + timeout: 5s + extensions: + health_check: {} + exporters: + jaeger: + endpoint: "simplest-collector.default.svc.cluster.local:14250" # Replace with a real endpoint. + service: + extensions: [health_check] + pipelines: + traces/2: + receivers: [otlp] + processors: [] + exporters: [jaeger] +--- +apiVersion: v1 +kind: Service +metadata: + name: otel-collector + labels: + app: opencensus + component: otel-collector +spec: + ports: + - name: otlp # Default endpoint for Opencensus receiver. + port: 55680 + protocol: TCP + targetPort: 55680 + - name: metrics # Default endpoint for querying metrics. + port: 8888 + selector: + component: otel-collector + type: + NodePort +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: otel-collector + labels: + app: opentelemetry + component: otel-collector +spec: + selector: + matchLabels: + app: opentelemetry + component: otel-collector + minReadySeconds: 5 + progressDeadlineSeconds: 120 + replicas: 1 #TODO - adjust this to your own requirements + template: + metadata: + annotations: + prometheus.io/path: "/metrics" + prometheus.io/port: "8888" + prometheus.io/scrape: "true" + labels: + app: opentelemetry + component: otel-collector + spec: + containers: + - command: + - "/otelcol" + - "--config=/conf/otel-collector-config.yaml" +# Memory Ballast size should be max 1/3 to 1/2 of memory. + - "--mem-ballast-size-mib=683" + env: + - name: GOGC + value: "80" + image: otel/opentelemetry-collector-dev:latest + name: otel-collector + resources: + limits: + cpu: 1 + memory: 2Gi + requests: + cpu: 200m + memory: 400Mi + ports: + - containerPort: 55680 # Default endpoint for otlp receiver. + - containerPort: 8888 # Default endpoint for querying metrics. + volumeMounts: + - name: otel-collector-config-vol + mountPath: /conf +# - name: otel-collector-secrets +# mountPath: /secrets + livenessProbe: + httpGet: + path: / + port: 13133 # Health Check extension default port. + readinessProbe: + httpGet: + path: / + port: 13133 # Health Check extension default port. + volumes: + - configMap: + name: otel-collector-conf + items: + - key: otel-collector-config + path: otel-collector-config.yaml + name: otel-collector-config-vol +# - secret: +# name: otel-collector-secrets +# items: +# - key: cert.pem +# path: cert.pem +# - key: key.pem +# path: key.pem