xRe*_*Red 1 jaeger open-telemetry otlp-grpc
正如标题所述,我有一些客户端应用程序将指标、跟踪和日志发送到 opentelemtry 收集器,然后收集器应将提到的信号导出到 jaeger 实例。
由于某种原因,它失败了,并出现了一个不太明显的错误,我陷入了困境。
这是 Docker 的组成:
version: '3.9'
x-default-logging: &logging
driver: "json-file"
options:
max-size: "5m"
max-file: "2"
services:
# ********************
# Telemetry Components
# ********************
# Jaeger
jaeger:
image: jaegertracing/all-in-one:1.50
container_name: jaeger
deploy:
resources:
limits:
memory: 500M
restart: unless-stopped
ports:
- "16686:16686" # Jaeger UI
- "4317" # OTLP gRPC default port
- "4318" # OTLP HTTP default port (protobuf)
- "14250"
environment:
- COLLECTOR_OTLP_ENABLED=true
logging: *logging
# OpenTelemetry Collector
otelcol:
image: otel/opentelemetry-collector-contrib:0.87
container_name: otel-col
deploy:
resources:
limits:
memory: 525M
restart: unless-stopped
command: [ "--config=/etc/otelcol-config.yml" ]
volumes:
- ./otel/otelcol-config.yml:/etc/otelcol-config.yml
ports:
- "4317:4317" # OTLP over gRPC receiver
- "4318:4318" # OTLP over HTTP receiver
- "9464" # Prometheus exporter
- "8888" # metrics endpoint
depends_on:
- jaeger
logging: *logging
Run Code Online (Sandbox Code Playgroud)
这是 otelcol-config.yml:
receivers:
otlp:
protocols:
grpc:
http:
cors:
allowed_origins:
- "http://*"
- "https://*"
exporters:
debug:
verbosity: detailed
otlp:
endpoint: "jaeger:4317"
tls:
insecure: true
processors:
batch:
service:
telemetry:
logs:
level: debug
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [debug, otlp]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [debug, otlp]
logs:
receivers: [otlp]
processors: [batch]
exporters: [debug, otlp]
Run Code Online (Sandbox Code Playgroud)
我可以确认收集器成功接收所有信号(它导出到收集器的标准输出),但导出到 Jaeger 时出现以下错误:
2023-10-17T01:44:36.404Z error exporterhelper/retry_sender.go:145 Exporting failed. The error is not retryable. Dropping data. {"kind": "exporter", "data_type": "metrics", "name": "otlp", "error": "Permanent error: rpc error: code = Unimplemented desc = unknown service opentelemetry.proto.collector.metrics.v1.MetricsService", "dropped_items": 35}
otel-col | go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send
otel-col | go.opentelemetry.io/collector/exporter@v0.87.0/exporterhelper/retry_sender.go:145
otel-col | go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send
otel-col | go.opentelemetry.io/collector/exporter@v0.87.0/exporterhelper/metrics.go:176
otel-col | go.opentelemetry.io/collector/exporter/exporterhelper.(*queueSender).start.func1
otel-col | go.opentelemetry.io/collector/exporter@v0.87.0/exporterhelper/queue_sender.go:126
otel-col | go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).Start.func1
otel-col | go.opentelemetry.io/collector/exporter@v0.87.0/exporterhelper/internal/bounded_memory_queue.go:52
Run Code Online (Sandbox Code Playgroud)
Jaeger这边好像没有实现这个功能?我查看了 Jaeger 和 OpenTelemetry 网站/Github 上的文档和示例,它们都是这样做的,但我无法让它工作。
小智 7
Jaeger 只能接收跟踪,而不能接收指标或日志。如果您otlp从导出器管道中删除指标和日志,则错误应该消失。
如果您确实想要导出指标和日志,则需要安装兼容的后端(例如 Prometheus 和 Loki),并使用适当的导出器。
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |