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
Use these templates when generating a final user-facing instrumentation answer. Choose the appropriate template based on the request type.
Use for: "How do I instrument my X app with OpenTelemetry to send to Coralogix?"
Assumptions
<language><traces | metrics | logs | all><auto | programmatic | manual><direct to Coralogix | via OTel Collector><region> (e.g. eu2)<framework if known>Required inputs (use placeholders)
CORALOGIX_API_KEY — Send-Your-Data API key from Settings → API Keys<SERVICE_NAME> — your service name (appears in APM service map)<CX_APPLICATION_NAME> — Coralogix application name (groups services)<CX_SUBSYSTEM_NAME> — Coralogix subsystem name (refines routing)Install reference
https://opentelemetry.io/docs/languages/<language>/getting-started/ for SDK installation.Environment variables
# All required env vars with placeholders
# HTTP/protobuf — base URL only; SDK auto-appends /v1/traces, /v1/metrics, /v1/logs
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingress.<CORALOGIX_REGION>.coralogix.com:443"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
# gRPC endpoint: standard bare form for Python/Node.js/Go; Java/.NET use https://host:port
# export OTEL_EXPORTER_OTLP_ENDPOINT="ingress.<CORALOGIX_REGION>.coralogix.com:443"
# Python exception: URL-encode the space in env-var headers
# 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>"Code / config snippet
# Minimal working example — copy, paste, replace placeholdersRun command
# How to start the instrumented applicationValidation steps
Security reminders
CORALOGIX_API_KEY value to source control. Use a secrets manager or env var.Use for: "Review my OTel instrumentation code" or "What am I missing?"
Review findings for <language> instrumentation
| Item | Status | Notes |
|---|---|---|
| OTLP endpoint format | ✅ / ❌ | gRPC Java/.NET: https://ingress.<region>.coralogix.com:443 (URI required); gRPC Python/Node.js: prefer ingress.<region>.coralogix.com:443, but https://host:port is accepted; Go WithEndpoint: bare host:port only; HTTP/proto: https://ingress.<region>.coralogix.com:443/v1/<signal> |
| Auth header present | ✅ / ❌ | Authorization=Bearer <key>; Python env vars require Authorization=Bearer%20<key> |
cx.application.name set | ✅ / ❌ | Required resource attribute |
cx.subsystem.name set | ✅ / ❌ | Required resource attribute |
service.name set | ✅ / ❌ | Required for APM service map |
| CoralogixTransactionSampler | ✅ / ❌ / N/A | Required for APM Transactions view |
| Protocol matches exporter | ✅ / ❌ | gRPC vs HTTP/proto |
| No hardcoded secrets | ✅ / ❌ | Keys should be in env vars |
| Telemetry quality | ✅ / ❌ | Low-cardinality span names, bounded metric attributes, no sensitive data, structured logs with trace/span correlation |
Issues found
<specific issue and fix><specific issue and fix>Corrected snippet
# Corrected minimal working codeUse for: "I'm not seeing any traces / metrics / logs in Coralogix."
Troubleshooting: missing <signal> from <language> app
Load troubleshooting.md for the full symptom table. Quick checklist:
troubleshooting.md for per-language instructions.OTEL_EXPORTER_OTLP_ENDPOINT set to https://ingress.<region>.coralogix.com:443/v1/traces for HTTP/protobuf or ingress.<region>.coralogix.com:443 for gRPC?OTEL_EXPORTER_OTLP_HEADERS contain Authorization=Bearer <key>?%20 not space)?ingress.<region>.coralogix.com:443?"none")?Use these as the basis for Template 1 answers. Replace eu2 with the user's actual region.
All examples send traces only (direct to Coralogix, gRPC). Enable metrics/logs by changing
the exporter env vars per the language reference.
export JAVA_TOOL_OPTIONS="-javaagent:/path/to/opentelemetry-javaagent.jar"
export OTEL_TRACES_EXPORTER="otlp"
export OTEL_METRICS_EXPORTER="none"
export OTEL_LOGS_EXPORTER="none"
export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="grpc"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingress.eu2.coralogix.com:443"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
export OTEL_SERVICE_NAME="order-service"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=ecommerce,cx.subsystem.name=orders"
java -jar myapp.jarValidation: Coralogix UI → Explore → Tracing (look for [otel.javaagent ...] log line at startup).
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer%20<CORALOGIX_API_KEY>"
export OTEL_EXPORTER_OTLP_ENDPOINT="ingress.eu2.coralogix.com:443"
export OTEL_TRACES_EXPORTER="otlp_proto_grpc"
export OTEL_SERVICE_NAME="order-service"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=ecommerce,cx.subsystem.name=orders"
opentelemetry-instrument python app.pyNote: %20 in OTEL_EXPORTER_OTLP_HEADERS is the URL-encoded space — required for Python env var auth. Do not use %20 in programmatic code.
Validation: Coralogix UI → Explore → Tracing.
instrumentation.js:
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
const { ExpressInstrumentation } = require('@opentelemetry/instrumentation-express');
const { CoralogixTransactionSampler } = require('@coralogix/opentelemetry');
const { AlwaysOnSampler } = require('@opentelemetry/sdk-trace-base');
const sdk = new NodeSDK({
sampler: new CoralogixTransactionSampler(new AlwaysOnSampler()),
instrumentations: [new HttpInstrumentation(), new ExpressInstrumentation()],
});
sdk.start();export OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
export OTEL_EXPORTER_OTLP_ENDPOINT="ingress.eu2.coralogix.com:443"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
export OTEL_SERVICE_NAME="order-service"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=ecommerce,cx.subsystem.name=orders"
node --require ./instrumentation.js app.jsValidation: Coralogix UI → Explore → Tracing; APM → Transactions (requires CoralogixTransactionSampler).
export OTEL_TRACES_EXPORTER="otlp"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingress.eu2.coralogix.com:443"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <CORALOGIX_API_KEY>"
export OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
export OTEL_SERVICE_NAME="order-service"
export OTEL_RESOURCE_ATTRIBUTES="cx.application.name=ecommerce,cx.subsystem.name=orders"Run the OpenTelemetry .NET Auto-Instrumentation profiler per the official docs.
Validation: Coralogix UI → Explore → Tracing.
package main
import (
"context"
"fmt"
"os"
"github.com/coralogix/coralogix-opentelemetry-go/sampler"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
"google.golang.org/grpc/credentials"
)
func main() {
ctx := context.Background()
endpoint := os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT") // ingress.eu2.coralogix.com:443
token := os.Getenv("CORALOGIX_API_KEY")
res, _ := resource.Merge(resource.Default(), resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceName("order-service"),
attribute.String("cx.application.name", "ecommerce"),
attribute.String("cx.subsystem.name", "orders"),
))
exp, _ := otlptracegrpc.New(ctx,
otlptracegrpc.WithEndpoint(endpoint),
otlptracegrpc.WithHeaders(map[string]string{"Authorization": "Bearer " + token}),
otlptracegrpc.WithTLSCredentials(credentials.NewTLS(nil)),
)
tp := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sampler.NewCoralogixSampler(sdktrace.AlwaysSample())),
sdktrace.WithResource(res),
sdktrace.WithSpanProcessor(sdktrace.NewBatchSpanProcessor(exp)),
)
defer tp.Shutdown(ctx)
otel.SetTracerProvider(tp)
tracer := otel.Tracer("order-service")
_, span := tracer.Start(ctx, "process-order")
span.SetAttributes(attribute.String("order.id", "42"))
// ... do work ...
span.End()
fmt.Println("done")
}export OTEL_EXPORTER_OTLP_ENDPOINT="ingress.eu2.coralogix.com:443"
export CORALOGIX_API_KEY="your-send-your-data-key"
go run main.goValidation: Coralogix UI → Explore → Tracing.
{{ endpoints.opentelemetry }} template variables (from the docs source) with
the actual regional endpoint. Use the base URL for OTEL_EXPORTER_OTLP_ENDPOINT — do NOT
include /v1/traces in the base env var (SDK appends signal path automatically for HTTP/proto):
https://ingress.<CORALOGIX_REGION>.coralogix.com:443ingress.<CORALOGIX_REGION>.coralogix.com:443WithEndpoint: ingress.<CORALOGIX_REGION>.coralogix.com:443 (bare only)OTEL_EXPORTER_OTLP_ENDPOINT: https://ingress.<CORALOGIX_REGION>.coralogix.com:443https://ingress.<CORALOGIX_REGION>.coralogix.com:443/v1/traces<CORALOGIX_API_KEY> (shell) or os.environ["CORALOGIX_API_KEY"] (code) — never generate example key values.evals
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