我有一个openelementetry收集器贡献(0.69.0)安装在OpenShift容器内,我想导出我的跟踪到Datadog。我有一个http端点URL暴露给我的收集器服务,我可以ping它,但是当我想从邮差发送一些样本跟踪来测试连接时,我得到以下响应:
请求正文(发送到'URL+/v1/traces'):
{
"resourceSpans": [
{
"resource": {
"attributes": [
{
"key": "otel.collector",
"value": {
"stringValue": "test-with-curl"
}
}
]
},
"instrumentationLibrarySpans": [
{
"instrumentationLibrary": {
"name": "instrumentatron"
},
"spans": [
{
"traceId": "71699b6fe85982c7c8995ea3d9c95df2",
"spanId": "3c191d03fa8be065",
"name": "spanitron",
"kind": 3,
"droppedAttributesCount": 0,
"events": [],
"droppedEventsCount": 0,
"status": {
"code": 1
}
}
]
}
]
}
]
}
响应(200 OK):
{
"partialSuccess": {}
}
collector-config.yml
kind: ConfigMap
apiVersion: v1
metadata:
name: collector-config
namespace: opentelemetry-collector
data:
collector.yaml: |
receivers:
otlp:
protocols:
http:
cors:
allowed_origins: "*"
grpc:
hostmetrics:
collection_interval: 10s
scrapers:
paging:
metrics:
system.paging.utilization:
enabled: true
cpu:
metrics:
system.cpu.utilization:
enabled: true
disk:
filesystem:
metrics:
system.filesystem.utilization:
enabled: true
load:
memory:
network:
processes:
prometheus:
config:
scrape_configs:
- job_name: 'otelcol'
scrape_interval: 10s
static_configs:
- targets: ['0.0.0.0:8888']
processors:
batch:
send_batch_max_size: 1000
send_batch_size: 100
timeout: 10s
exporters:
logging:
loglevel: debug
datadog:
api:
site: datadoghq.com
key: ************
fail_on_invalid_key: true
service:
telemetry:
logs:
level: "debug"
pipelines:
metrics:
receivers: [hostmetrics, otlp]
processors: [batch]
exporters: [datadog]
traces:
receivers: [otlp]
processors: [batch]
exporters: [datadog]
部分成功意味着什么?为什么我的数据没有到达Opentelemetry收集器?
不幸的是,较新的OTEL收集器版本不太会谈论错误。我猜你的问题是旧的OTLP协议。新版本不使用instrumentationLibrarySpans
和instrumentationLibrary
。
您应该使用OTLP 0.19 (instrumentationLibrarySpans
->scopeSpans
,instrumentationLibrary
->scope
) +我想说service.name
属性也是有用的:
{
"resourceSpans": [
{
"resource": {
"attributes": [
{
"key": "service.name",
"value": {
"stringValue": "my-test-service"
}
}
]
},
"scopeSpans": [
{
"scope": {
"name": "instrumentatron"
},
"spans": [
{
"traceId": "71699b6fe85982c7c8995ea3d9c95df2",
"spanId": "3c191d03fa8be065",
"name": "spanitron",
"kind": 3,
"droppedAttributesCount": 0,
"events": [],
"droppedEventsCount": 0,
"status": {
"code": 1
}
}
]
}
]
}
]
}
您可能仍然会收到响应{"partialSuccess": {}}
,但它应该通过。
在此版本中引入了更改:https://github.com/open-telemetry/opentelemetry-collector/releases/tag/v0.58.0
这里有多个问题,所以让我们来分解一下:
部分成功是什么意思?
收集器的部分成功响应不是问题。它实际上表明OTLP导出器向后端发出的请求成功。
部分成功响应是OTLP协议的一部分。它用于向客户端/导出器指示某些数据未被后端接受。
例如,假设您发送了10个跨度,但实际上只有5个被接受。其余的都因为某种原因被丢弃了。
部分成功响应将帮助您理解原因:
rejected_spans: 5
error_message: "Spans dropped due to invalid data"
为什么我的数据没有到达Opentelemetry收集器?
在收集器中获得部分成功200 - OK的事实意味着收集器确实获得了数据,然后导出。如果没有,那么就不会发生导出,因为没有数据可导出。
你可能会问的问题是为什么我的数据没有到达在我的后端. 这可能是由于许多原因造成的,但通常后端倾向于不摄取重复的跟踪/span id。如果你只从邮递员发送这个例子,那么这就是最有可能的原因。如果你也发送真实数据到收集器,但仍然没有在你的后端看到它们,那么你可以将日志导出器添加到你的收集器配置中,以确保收集器正在接收跟踪。
PS:收集器中的OTLP导出器的当前最新版本还没有处理部分成功响应(它没有对它做任何事情,所以没有日志之类的)。你可以关注这个问题,看看它的进展:https://github.com/open-telemetry/opentelemetry-collector/issues/6686