Port 4317 is the OpenTelemetry Protocol (OTLP) gRPC port. Applications instrumented with OpenTelemetry export traces, metrics, and logs to an OTel Collector on port 4317 (gRPC) or port 4318 (HTTP). OTLP is the standard telemetry data format for the OpenTelemetry ecosystem, supported by Jaeger, Tempo, Prometheus, and most observability vendors.
Port Number
4317
Protocol
TCP
Service
OpenTelemetry Protocol gRPC
Range
IANA Registered (1024–49151)
Check if OTLP gRPC receiver is responding (shows registered services)
grpcurl -plaintext localhost:4317 listTest OTLP HTTP endpoint (4318) reachability
curl -v http://localhost:4318/v1/traces -d '{}'OTel Collector's own metrics – count of received spans
curl -s http://localhost:8888/metrics | grep otelcol_receiver_accepted_spansCollector health check extension (must be enabled in config)
curl -s http://localhost:13133/ | jq .OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
docker run -p 4317:4317 otel/opentelemetry-collectorOpenTelemetry was formed in 2019 by merging OpenTracing and OpenCensus (both CNCF projects). OTLP (OpenTelemetry Protocol) was designed as a unified wire format for traces, metrics, and logs. Port 4317 was registered with IANA for OTLP gRPC in 2021. The OTel Collector (Golang) acts as a vendor-neutral pipeline agent. OpenTelemetry reached stable status for traces (2022), metrics (2023), and logs (2024).
When should I use 4317 (gRPC) vs 4318 (HTTP)?
Use 4317 (gRPC) for production workloads: it supports streaming, bidirectional communication, efficient binary encoding (protobuf), and connection multiplexing. Use 4318 (HTTP/protobuf or HTTP/JSON) when gRPC is blocked (browser apps, environments with HTTP-only proxies) or for debugging (JSON payload is human-readable). Performance difference is minimal for most workloads.
How do I add authentication to the OTel Collector?
In collector config: receivers.otlp.protocols.grpc.tls (server cert + CA for mTLS), or use the bearertokenauth extension with a shared token. For Kubernetes: deploy with service mesh (Istio) for automatic mTLS, or use the k8s RBAC authenticator extension. The headers_setter processor can inject auth for exporters. Production: always use mTLS between SDKs and Collector.