我尝试通过Postman手动将OTLP/HTTP跟踪事件发送到Elastic APM(在Elastic Cloud中)。
我设法找到了一些OTLP跟踪请求的JSON示例,以生成以下cURL请求:
curl --location --request POST 'https://REDACTED.apm.ap-southeast-2.aws.found.io/intake/v2/events' \
--header 'Content-Type: application/json' \
--header 'kbn-xsrf: true' \
--header 'Authorization: ApiKey REDACTED' \
--data-raw '{
"resource_spans": [
{
"scope_spans": [
{
"spans": [
{
"trace_id": "1",
"span_id": "1",
"name": "test",
"start_time_unix_nano": 1544712660300000000,
"end_time_unix_nano": 1544712660600000000
}
]
}
]
}
]
}'
...但是我不能使用JSON到APM端点-APM Server supports both the (OTLP/gRPC) and (OTLP/HTTP) protocol with ProtoBuf payload. APM Server does not yet support JSON Encoding for OTLP/HTTP
。
如何将JSON消息转换为ProtoBuf,Content-Type是什么?
1条答案
按热度按时间14ifxucb1#
Content-Type
将是application/x-protobuf
。但是有效负载将是二进制的,所以curl
不是最好的工具。还有更合适的工具,例如
protocurl
(实际上,它只为curl
准备正确格式的数据)。protocurl
命令可能看起来像:这将生成请求(请注意请求二进制-这是实际的有效负载):
查看protocurl手册了解所有参数。当然,你需要protocull文件-这些是从人类友好的json到机器友好的二进制格式的“Map”-https://github.com/open-telemetry/opentelemetry-proto。
很多麻烦。我会启动标准的otel收集器并正确配置它,例如将跟踪发送到APM。然后您可以使用curl将纯文本JSON格式的跟踪发送到otel收集器,收集器将在推送到APM之前执行该proto魔术。
顺便说一句:Postman supports GRPC,但它比普通的JSON请求更复杂。