diff --git a/docs/features/observability/otel.mdx b/docs/features/observability/otel.mdx
index 4c8bc0e95a..b15b3b463f 100644
--- a/docs/features/observability/otel.mdx
+++ b/docs/features/observability/otel.mdx
@@ -114,7 +114,7 @@ func main() {
// Initialize OTel plugin
otelPlugin, err := otel.Init(ctx, &otel.Config{
ServiceName: "bifrost",
- CollectorURL: "http://localhost:4318",
+ CollectorURL: "http://localhost:4318/v1/traces",
TraceType: otel.TraceTypeGenAIExtension,
Protocol: otel.ProtocolHTTP,
Headers: map[string]string{
@@ -152,7 +152,7 @@ For Gateway mode, configure via `config.json`:
"name": "otel",
"config": {
"service_name": "bifrost",
- "collector_url": "http://localhost:4318",
+ "collector_url": "http://localhost:4318/v1/traces",
"trace_type": "genai_extension",
"protocol": "http",
"headers": {
@@ -164,7 +164,7 @@ For Gateway mode, configure via `config.json`:
}
```
-If you need to connect to an OTEL collector that requires TLS, configure `tls_ca_cert`:
+If you need to connect to an OTEL collector that requires TLS, configure `tls_ca_cert` and set insecure mode to `false`:
```json
{
@@ -177,6 +177,7 @@ If you need to connect to an OTEL collector that requires TLS, configure `tls_ca
"collector_url": "localhost:4317",
"trace_type": "genai_extension",
"protocol": "grpc",
+ "insecure": false,
"tls_ca_cert": "/path/to/your/ca.cert",
"headers": {
"Authorization": "env.OTEL_API_KEY"
@@ -188,6 +189,65 @@ If you need to connect to an OTEL collector that requires TLS, configure `tls_ca
```
+
+
+For Gateway mode, configure via `config.json`:
+
+```json
+{
+ "plugins": [
+ {
+ "enabled": true,
+ "name": "otel",
+ "config": {
+ "profiles": [
+ {
+ "service_name": "bifrost",
+ "enabled": true,
+ "collector_url": "http://localhost:4318/v1/traces",
+ "trace_type": "genai_extension",
+ "protocol": "http",
+ "headers": {
+ "Authorization": "env.OTEL_API_KEY"
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+```
+
+If you need to connect to an OTEL collector that requires TLS, configure `tls_ca_cert` and set insecure mode to `false`:
+
+```json
+{
+ "plugins": [
+ {
+ "enabled": true,
+ "name": "otel",
+ "config": {
+ "profiles": [
+ {
+ "service_name": "bifrost",
+ "enabled": true,
+ "collector_url": "localhost:4317",
+ "trace_type": "genai_extension",
+ "protocol": "grpc",
+ "insecure": false,
+ "tls_ca_cert": "/path/to/your/ca.cert",
+ "headers": {
+ "Authorization": "env.OTEL_API_KEY"
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+```
+
+
---
@@ -217,32 +277,46 @@ services:
depends_on:
- tempo
+ redpanda:
+ image: redpandadata/redpanda:latest
+ container_name: redpanda
+ command: >
+ redpanda start --overprovisioned
+ --mode=dev-container
+ --kafka-addr=PLAINTEXT://0.0.0.0:9092
+ --advertise-kafka-addr=PLAINTEXT://redpanda:9092
+ ports:
+ - "9092:9092"
+ restart: unless-stopped
+
tempo:
image: grafana/tempo:latest
container_name: tempo
- command: [ "-config.file=/etc/tempo.yaml" ]
+ command: ["-target=all", "-config.file=/etc/tempo.yaml"]
configs:
- source: tempo-config
target: /etc/tempo.yaml
ports:
- - "3200:3200" # tempo HTTP API
+ - "3200:3200" # Tempo HTTP API
expose:
- "4317" # OTLP gRPC (internal)
volumes:
- tempo-data:/var/tempo
+ depends_on:
+ - redpanda
restart: unless-stopped
prometheus:
image: prom/prometheus:latest
container_name: prometheus
- depends_on:
- - otel-collector
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
- "--web.console.templates=/usr/share/prometheus/consoles"
- "--web.enable-remote-write-receiver"
+ - "--enable-feature=exemplar-storage"
+ - "--enable-feature=native-histograms"
ports:
- "9090:9090"
volumes:
@@ -250,6 +324,8 @@ services:
configs:
- source: prometheus-config
target: /etc/prometheus/prometheus.yml
+ depends_on:
+ - otel-collector
restart: unless-stopped
grafana:
@@ -263,9 +339,8 @@ services:
GF_SECURITY_ADMIN_PASSWORD: admin
GF_AUTH_ANONYMOUS_ENABLED: "true"
GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer
- GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS: "grafana-pyroscope-app,grafana-exploretraces-app,grafana-metricsdrilldown-app"
- GF_PLUGINS_ENABLE_ALPHA: "true"
GF_INSTALL_PLUGINS: ""
+ GF_FEATURE_TOGGLES_ENABLE: traceqlEditor
ports:
- "4000:3000"
volumes:
@@ -295,12 +370,12 @@ configs:
namespace: otel
const_labels:
source: otelcol
-
+
otlp/tempo:
endpoint: tempo:4317
tls:
insecure: true
-
+
debug:
verbosity: detailed
@@ -339,13 +414,21 @@ configs:
http_listen_port: 3200
log_level: info
+ ingest:
+ kafka:
+ address: redpanda:9092
+ topic: tempo-ingest
+
+ block_builder:
+ consume_cycle_duration: 30s
+
distributor:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
-
+
ingester:
max_block_duration: 5m
trace_idle_period: 10s
@@ -419,11 +502,12 @@ volumes:
This launches:
- **OTel Collector** - Receives traces on ports 4317 (gRPC) and 4318 (HTTP)
+- **Redpanda** - Kafka-compatible broker that buffers trace ingestion for Tempo
- **Tempo** - Distributed tracing backend
- **Prometheus** - Metrics collection
- **Grafana** - Visualization dashboard
-Access Grafana at `http://localhost:3000` (default credentials: admin/admin)
+Access Grafana at `http://localhost:4000` (default credentials: admin/admin)
@@ -709,7 +793,7 @@ Uses HTTP/1.1 or HTTP/2 with JSON or Protobuf encoding:
```json
{
- "collector_url": "http://localhost:4318",
+ "collector_url": "http://localhost:4318/v1/traces",
"protocol": "http"
}
```
@@ -771,8 +855,37 @@ The OTel plugin supports **push-based metrics export** via OTLP, which is essent
]
}
```
+
+
+
+
+```json
+{
+ "plugins": [
+ {
+ "enabled": true,
+ "name": "otel",
+ "config": {
+ "profiles": [
+ {
+ "service_name": "bifrost",
+ "enabled": true,
+ "collector_url": "http://otel-collector:4318/v1/traces",
+ "trace_type": "genai_extension",
+ "protocol": "http",
+ "metrics_enabled": true,
+ "metrics_endpoint": "http://otel-collector:4318/v1/metrics",
+ "metrics_push_interval": 15
+ }
+ ]
+ }
+ }
+ ]
+}
+```
+
```json
@@ -794,8 +907,36 @@ The OTel plugin supports **push-based metrics export** via OTLP, which is essent
]
}
```
+
+
+
+```json
+{
+ "plugins": [
+ {
+ "enabled": true,
+ "name": "otel",
+ "config": {
+ "profiles": [
+ {
+ "service_name": "bifrost",
+ "enabled": true,
+ "collector_url": "otel-collector:4317",
+ "trace_type": "genai_extension",
+ "protocol": "grpc",
+ "metrics_enabled": true,
+ "metrics_endpoint": "otel-collector:4317",
+ "metrics_push_interval": 15
+ }
+ ]
+ }
+ }
+ ]
+}
+```
+
### Pushed Metrics
@@ -975,4 +1116,4 @@ echo $OTEL_API_KEY
- **[Built-in Observability](./default)** - Local logging for development
- **[Maxim Plugin](./maxim)** - Advanced LLM evaluation and monitoring
-- **[Telemetry](../telemetry)** - Prometheus metrics and dashboards
+- **[Telemetry](../telemetry)** - Prometheus metrics and dashboards
\ No newline at end of file