• まずはJSONで出す
tracing = "0.1.37"
tracing-subscriber = { version = "0.3.16", features = ["json"] }
 
tracing_subscriber::fmt()
    .json()
    .with_max_level(tracing::Level::INFO)
    .init();
go install github.com/equinix-labs/otel-cli@latest
 
otel-cli exec --name "test" --protocol grpc --endpoint http://localhost:4317 --verbose --tp-print echo 1
1
# trace id: 8aaf4d2ca62204f400ae88705fa55afb
#  span id: 8430124b37cd2a50
TRACEPARENT=00-8aaf4d2ca62204f400ae88705fa55afb-8430124b37cd2a50-01
otel-collector-1  | 2024-11-30T09:34:29.355Z    error   internal/queue_sender.go:92     Exporting failed. Dropping data.        {"kind": "exporter", "data_type": "traces", "name": "otlp", "error": "not retryable error: Permanent error: rpc error: code = Unimplemented desc = unknown service opentelemetry.proto.collector.trace.v1.TraceService", "dropped_items": 1}
otel-collector-1  | go.opentelemetry.io/collector/exporter/exporterhelper/internal.NewQueueSender.func1
otel-collector-1  |     go.opentelemetry.io/collector/exporter@v0.114.0/exporterhelper/internal/queue_sender.go:92
otel-collector-1  | go.opentelemetry.io/collector/exporter/internal/queue.(*Consumers[...]).Start.func1
otel-collector-1  |     go.opentelemetry.io/collector/exporter@v0.114.0/internal/queue/consumers.go:43
  • otel-collector-config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        # ref: https://github.com/open-telemetry/opentelemetry-rust/issues/861#issuecomment-2408304710
        endpoint: 0.0.0.0:4317
 
exporters:
  debug:
  otlp:
    endpoint: jaeger:5000
    tls:
      insecure: true
 
processors:
  batch:
 
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp, debug]
 
  • compose.yaml
services:
  jaeger:
    image: "jaegertracing/all-in-one:latest"
    ports:
      - "5000:5000" # gRPC server
      - "16686:16686" # Web UI
    environment:
      - COLLECTOR_OTLP_ENABLED=true
    command:
      # ref: https://zenn.dev/hkdord/articles/oss-reading-jaeger
      - "--collector.otlp.grpc.host-port=5000"
    networks:
      - langfuse-network
  otel-collector:
    image: otel/opentelemetry-collector:latest
    restart: always
    command: ["--config=/etc/otel-collector-config.yaml", ""]
    volumes:
      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
    ports:
      - "4317:4317"
    networks:
      - langfuse-network
    depends_on:
      - jaeger
 
networks:
  langfuse-network:
    driver: bridge
 

参考文献