开放遥测收集器给出"partialSuccess":{} 响应



我有一个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协议。新版本不使用instrumentationLibrarySpansinstrumentationLibrary

您应该使用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

相关内容

  • 没有找到相关文章

最新更新