Backend Integrations
Configure Telegen to export to various observability backends.
Overview
Telegen exports telemetry via OTLP. Most backends support OTLP natively or via OpenTelemetry Collector.
Grafana Cloud
Direct Export
otlp:
endpoint: "otlp-gateway-<zone>.grafana.net:443"
insecure: false
headers:
Authorization: "Basic ${GRAFANA_CLOUD_TOKEN}"
traces:
enabled: true
metrics:
enabled: true
logs:
enabled: true
Generate token: base64(<instance-id>:<api-key>)
Via Grafana Alloy
# Telegen
otlp:
endpoint: "grafana-alloy:4317"
insecure: true
# Alloy config
otelcol.receiver.otlp "default" {
grpc {
endpoint = "0.0.0.0:4317"
}
output {
traces = [otelcol.exporter.otlp.grafana_cloud.input]
metrics = [otelcol.exporter.otlp.grafana_cloud.input]
logs = [otelcol.exporter.otlp.grafana_cloud.input]
}
}
otelcol.exporter.otlp "grafana_cloud" {
client {
endpoint = "otlp-gateway-<zone>.grafana.net:443"
auth = otelcol.auth.basic.grafana_cloud.handler
}
}
otelcol.auth.basic "grafana_cloud" {
username = "<instance-id>"
password = "<api-key>"
}
Jaeger
Direct to Jaeger OTLP
otlp:
endpoint: "jaeger:4317"
insecure: true
traces:
enabled: true
metrics:
enabled: false
logs:
enabled: false
Jaeger All-in-One (Testing)
docker run -d --name jaeger \
-p 4317:4317 \
-p 16686:16686 \
jaegertracing/all-in-one:latest
Access UI: http://localhost:16686
Prometheus
Telegen exports metrics via OTLP. Use OTel Collector to convert to Prometheus format.
Via Collector (Remote Write)
# Telegen
otlp:
endpoint: "otel-collector:4317"
metrics:
enabled: true
# Collector
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
exporters:
prometheusremotewrite:
endpoint: "http://prometheus:9090/api/v1/write"
service:
pipelines:
metrics:
receivers: [otlp]
exporters: [prometheusremotewrite]
Via Collector (Scrape Endpoint)
# Collector
exporters:
prometheus:
endpoint: "0.0.0.0:8889"
service:
pipelines:
metrics:
receivers: [otlp]
exporters: [prometheus]
# Prometheus scrape config
scrape_configs:
- job_name: 'otel-collector'
static_configs:
- targets: ['otel-collector:8889']
Datadog
Direct OTLP
otlp:
endpoint: "https://otlp.datadoghq.com:4317"
insecure: false
headers:
DD-API-KEY: "${DD_API_KEY}"
traces:
enabled: true
metrics:
enabled: true
logs:
enabled: true
Via Datadog Agent
# Telegen
otlp:
endpoint: "datadog-agent:4317"
insecure: true
# datadog-agent.yaml
otlp_config:
receiver:
protocols:
grpc:
endpoint: 0.0.0.0:4317
New Relic
Direct OTLP
otlp:
endpoint: "otlp.nr-data.net:4317"
insecure: false
headers:
api-key: "${NEW_RELIC_LICENSE_KEY}"
For EU datacenter:
otlp:
endpoint: "otlp.eu01.nr-data.net:4317"
Elastic APM
Direct OTLP (Elastic Cloud)
otlp:
endpoint: "<cloud-id>.apm.us-east-1.aws.cloud.es.io:443"
insecure: false
headers:
Authorization: "Bearer ${ELASTIC_APM_SECRET_TOKEN}"
Self-Hosted Elastic
# Via OTel Collector
exporters:
elasticsearch:
endpoints:
- "https://elasticsearch:9200"
logs_index: logs-telegen
traces_index: traces-telegen
user: elastic
password: "${ELASTIC_PASSWORD}"
Splunk
Splunk Observability Cloud
otlp:
endpoint: "ingest.<realm>.signalfx.com:443"
insecure: false
headers:
X-SF-TOKEN: "${SPLUNK_ACCESS_TOKEN}"
Via OTel Collector
exporters:
splunk_hec:
token: "${SPLUNK_HEC_TOKEN}"
endpoint: "https://splunk:8088/services/collector"
source: "telegen"
sourcetype: "_json"
sapm:
access_token: "${SPLUNK_ACCESS_TOKEN}"
endpoint: "https://ingest.<realm>.signalfx.com/v2/trace"
Honeycomb
Direct OTLP
otlp:
endpoint: "api.honeycomb.io:443"
insecure: false
headers:
x-honeycomb-team: "${HONEYCOMB_API_KEY}"
x-honeycomb-dataset: "my-dataset"
Lightstep (ServiceNow)
Direct OTLP
otlp:
endpoint: "ingest.lightstep.com:443"
insecure: false
headers:
lightstep-access-token: "${LIGHTSTEP_ACCESS_TOKEN}"
Azure Monitor
Via OTel Collector
exporters:
azuremonitor:
connection_string: "${APPLICATIONINSIGHTS_CONNECTION_STRING}"
service:
pipelines:
traces:
receivers: [otlp]
exporters: [azuremonitor]
AWS X-Ray
Via OTel Collector
exporters:
awsxray:
region: "us-east-1"
aws_log_groups: ["telegen-traces"]
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [awsxray]
Google Cloud Trace
Via OTel Collector
exporters:
googlecloud:
project: "${GCP_PROJECT_ID}"
retry_on_failure:
enabled: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [googlecloud]
Tempo (Grafana)
Direct OTLP
otlp:
endpoint: "tempo:4317"
insecure: true
traces:
enabled: true
Mimir (Grafana Metrics)
Via OTel Collector
exporters:
prometheusremotewrite:
endpoint: "http://mimir:9009/api/v1/push"
headers:
X-Scope-OrgID: "${TENANT_ID}"
service:
pipelines:
metrics:
receivers: [otlp]
exporters: [prometheusremotewrite]
Loki (Grafana Logs)
Via OTel Collector
exporters:
loki:
endpoint: "http://loki:3100/loki/api/v1/push"
default_labels_enabled:
exporter: true
job: true
service:
pipelines:
logs:
receivers: [otlp]
exporters: [loki]
Pyroscope (Profiles)
Via OTel Collector
exporters:
otlp/pyroscope:
endpoint: "pyroscope:4317"
service:
pipelines:
profiles:
receivers: [otlp]
exporters: [otlp/pyroscope]
Multi-Backend Fan-Out
Export to multiple backends simultaneously:
# OTel Collector config
exporters:
otlp/tempo:
endpoint: "tempo:4317"
otlp/jaeger:
endpoint: "jaeger:4317"
prometheusremotewrite/mimir:
endpoint: "http://mimir:9009/api/v1/push"
prometheusremotewrite/prometheus:
endpoint: "http://prometheus:9090/api/v1/write"
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/tempo, otlp/jaeger] # Fan-out
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheusremotewrite/mimir, prometheusremotewrite/prometheus]
Backend Selection Guide
| Use Case | Recommended Backend |
|---|---|
| All-in-one, open source | Grafana Stack (Tempo, Mimir, Loki) |
| Enterprise, existing Splunk | Splunk Observability |
| AWS-native | AWS X-Ray + CloudWatch |
| GCP-native | Google Cloud Trace |
| Azure-native | Azure Monitor |
| Managed, easy setup | Grafana Cloud, Datadog, New Relic |
| Traces only, testing | Jaeger |
Next Steps
- OTel Collector - Configure OTel Collector
- Full Reference - Full configuration options
- Monitoring - Monitor integrations