OpenTelemetry Collector deployment, instrumentation (Java/Python/Node.js/.NET/Go), and OTTL pipeline transforms for Coralogix — coralogix exporter config, Helm chart selection, Kubernetes topology, ECS/EKS/GKE deployments, SDK setup, APM transactions, and OTTL cardinality/PII/routing.
98
97%
Does it follow best practices?
Impact
99%
1.13xAverage score across 81 eval scenarios
Advisory
Suggest reviewing before use
When exporting directly from the SDK (not via a collector), the required endpoint format depends on the language:
Java and .NET — the SDK's URI parser requires a full URI with https:// scheme:
https://ingress.<region>.coralogix.com:443Python and Node.js — the standard Coralogix gRPC form is bare host:port:
ingress.<region>.coralogix.com:443The OpenTelemetry gRPC exporter spec also requires SDKs to accept https://host:port.
So https://ingress.<region>.coralogix.com:443 is valid for Python and Node.js gRPC,
but prefer the bare form in generated Coralogix examples.
Go — WithEndpoint uses bare host:port with no scheme or path:
ingress.<region>.coralogix.com:443Use credentials.NewTLS(nil) with Go gRPC exporters. Do not pass https:// to
WithEndpoint; use WithEndpointURL only when intentionally using a full URL option.
TLS is always enabled on port 443. Do not use http:// for direct Coralogix export — all
Coralogix OTLP endpoints require TLS.
For HTTP/protobuf exporters (e.g. Node.js @opentelemetry/exporter-trace-otlp-proto),
append the signal path:
https://ingress.<region>.coralogix.com:443/v1/traces
https://ingress.<region>.coralogix.com:443/v1/metrics
https://ingress.<region>.coralogix.com:443/v1/logsEvery generated direct-export setup must show these required environment variables. Choose the block that matches the language and protocol:
gRPC — Java and .NET (full URI with https:// scheme required):
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingress.<CORALOGIX_REGION>.coralogix.com:443"
export OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
export OTEL_SERVICE_NAME="<SERVICE_NAME>"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=<CX_APPLICATION_NAME>,cx.subsystem.name=<CX_SUBSYSTEM_NAME>"gRPC — Python, Node.js, and Go (bare host:port; no https:// for Go WithEndpoint):
export OTEL_EXPORTER_OTLP_ENDPOINT="ingress.<CORALOGIX_REGION>.coralogix.com:443"
export OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
export OTEL_SERVICE_NAME="<SERVICE_NAME>"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=<CX_APPLICATION_NAME>,cx.subsystem.name=<CX_SUBSYSTEM_NAME>"Python env var exception: Authorization=Bearer%20<CORALOGIX_API_KEY> (URL-encoded space).
HTTP/protobuf — all languages (base URL only; SDK auto-appends /v1/traces etc.):
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingress.<CORALOGIX_REGION>.coralogix.com:443"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
export OTEL_SERVICE_NAME="<SERVICE_NAME>"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=<CX_APPLICATION_NAME>,cx.subsystem.name=<CX_SUBSYSTEM_NAME>"Do NOT include /v1/traces in OTEL_EXPORTER_OTLP_ENDPOINT — the SDK appends the signal
path automatically for HTTP/proto, so including it results in double-pathing
(/v1/traces/v1/traces). Use signal-specific OTEL_EXPORTER_OTLP_TRACES_ENDPOINT if you
need to set the full URL explicitly.
| Region name | Domain | OTLP gRPC endpoint |
|---|---|---|
| US1 | us1.coralogix.com | ingress.us1.coralogix.com:443 |
| US2 | us2.coralogix.com | ingress.us2.coralogix.com:443 |
| EU1 | eu1.coralogix.com | ingress.eu1.coralogix.com:443 |
| EU2 | eu2.coralogix.com | ingress.eu2.coralogix.com:443 |
| AP1 | ap1.coralogix.com | ingress.ap1.coralogix.com:443 |
| AP2 | ap2.coralogix.com | ingress.ap2.coralogix.com:443 |
| AP3 | ap3.coralogix.com | ingress.ap3.coralogix.com:443 |
How to find your region: Your Coralogix platform URL shows the region — e.g.
https://dashboard.eu2.coralogix.com → region is eu2, domain is eu2.coralogix.com,
OTLP endpoint is ingress.eu2.coralogix.com:443.
Legacy endpoint aliases (old shipper configs only — redirect new setups to the regional form):
| Legacy endpoint | Maps to region |
|---|---|
ingress.coralogix.com | EU1 |
ingress.coralogix.us | US1 |
ingress.cx498.coralogix.com | US2 |
ingress.coralogix.in | AP1 |
ingress.coralogixsg.com | AP2 |
If a user shows one of these hostnames, identify their region and replace with ingress.<region>.coralogix.com:443.
All direct OTLP export to Coralogix requires a Send-Your-Data API key passed as an OTLP header:
Authorization=Bearer <CORALOGIX_API_KEY>The key is found in the Coralogix platform under Settings → Users and Teams → API Keys. Only Send-Your-Data keys work for telemetry ingestion. Team keys and personal keys do not.
Environment variable (Java, Node.js, Go, most gRPC SDK env config):
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
export OTEL_SERVICE_NAME="<SERVICE_NAME>"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=<CX_APPLICATION_NAME>,cx.subsystem.name=<CX_SUBSYSTEM_NAME>"Python — URL encoding required in env vars:
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer%20<CORALOGIX_API_KEY>"
export OTEL_SERVICE_NAME="<SERVICE_NAME>"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=<CX_APPLICATION_NAME>,cx.subsystem.name=<CX_SUBSYSTEM_NAME>"Note: %20 = space between Bearer and the key value.
Java — env var or JVM system property:
# env var
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
# or JVM property
-Dotel.exporter.otlp.headers="Authorization=Bearer <CORALOGIX_API_KEY>"Go — programmatic (headers map):
headers: map[string]string{"Authorization": "Bearer " + token}.NET — programmatic (OTLP options):
options.Endpoint = new Uri("https://ingress.<CORALOGIX_REGION>.coralogix.com:443");
options.Protocol = OtlpExportProtocol.Grpc;
options.Headers = $"Authorization=Bearer {config.ApiKey}";When calling the Coralogix OTLP endpoint directly, you may pass application and subsystem names as OTLP headers in addition to resource attributes. Both mechanisms work; resource attributes are the standard approach:
| Header | Purpose |
|---|---|
CX-Application-Name | Alternative to cx.application.name resource attribute |
CX-Subsystem-Name | Alternative to cx.subsystem.name resource attribute |
Prefer setting these as resource attributes (cx.application.name, cx.subsystem.name)
in the SDK — they propagate to all signals. Header-based values only reach the signals on
that specific exporter.
The OTel Collector's coralogix exporter uses domain: eu2.coralogix.com (bare hostname,
no ingress. prefix, no port). SDK endpoints use ingress. prefix and port 443. The
required format varies by language and protocol.
| Shipper | Format | Example |
|---|---|---|
| OTel SDK direct gRPC (Python, Node.js) | Prefer ingress.<region>.coralogix.com:443; https://host:port also accepted | ingress.eu2.coralogix.com:443 |
OTel SDK direct gRPC (Go WithEndpoint) | ingress.<region>.coralogix.com:443 | ingress.eu2.coralogix.com:443 |
| OTel SDK direct gRPC (Java, .NET) | https://ingress.<region>.coralogix.com:443 | https://ingress.eu2.coralogix.com:443 |
| OTel SDK direct HTTP/protobuf | https://ingress.<region>.coralogix.com:443/v1/<signal> | https://ingress.eu2.coralogix.com:443/v1/traces |
OTel Collector coralogix exporter | domain: <region>.coralogix.com | domain: eu2.coralogix.com |
When using AWS PrivateLink, replace ingress.<region> with ingress.private.<region>:
ingress.private.eu2.coralogix.com:443evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
scenario-19
scenario-20
scenario-21
scenario-22
scenario-23
scenario-24
scenario-25
scenario-26
scenario-27
scenario-28
scenario-29
scenario-30
scenario-31
scenario-32
scenario-33
scenario-34
scenario-35
scenario-36
scenario-37
scenario-38
scenario-39
scenario-40
scenario-41
scenario-42
scenario-43
scenario-44
scenario-45
scenario-46
scenario-47
scenario-48
scenario-49
scenario-50
scenario-51
scenario-52
scenario-53
scenario-54
scenario-55
scenario-56
scenario-57
scenario-58
scenario-59
scenario-60
scenario-61
scenario-62
scenario-63
scenario-64
scenario-65
scenario-66
scenario-67
scenario-68
scenario-69
scenario-70
scenario-71
scenario-72
scenario-73
scenario-74
scenario-75
scenario-76
scenario-77
scenario-78
scenario-79
scenario-80
scenario-81
skills
opentelemetry
opentelemetry-collector
references
opentelemetry-instrumentation
opentelemetry-ottl