posthog-rails logs: /i/v1/logs returns JSON {} to protobuf OTLP requests, causing ExportLogsServiceResponse decode ERROR on every export
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
The report identifies the /i/v1/logs ingestion endpoint and the OTLP logs exporter as the relevant entry points, but does not name repository files or tests. Start by tracing how the endpoint handles application/x-protobuf requests and compare its response with the OTLP/HTTP expectation described here. Done means protobuf requests receive a valid protobuf response (or an empty body) with the appropriate content type, without triggering the exporter decode error.
由索引模型根据 Issue 内容生成。
描述
Summary
With config.logs_enabled = true, posthog-rails sets up OpenTelemetry::Exporter::OTLP::Logs::LogsExporter pointed at https://us.i.posthog.com/i/v1/logs. The exporter sends Content-Type: application/x-protobuf, but the endpoint replies 200 with content-type: application/json and a body of {}. The exporter then tries to decode that body as a protobuf ExportLogsServiceResponse and fails, which logs an ERROR on every batch export.
Environment
- Ruby 3.3
- posthog-ruby 3.23.x
- posthog-rails 3.18.6
- opentelemetry-exporter-otlp-logs 0.6.0 (latest)
- opentelemetry-logs-sdk 0.8.0
Repro
curl -s -D - -X POST https://us.i.posthog.com/i/v1/logs \
-H 'Content-Type: application/x-protobuf' \
-H 'Authorization: Bearer phc_test' \
--data-binary @/dev/null
Response:
HTTP/2 200
content-type: application/json
content-length: 2
{}
On a 2xx response the exporter calls log_partial_success(response.body), which runs ExportLogsServiceResponse.decode("{}") and raises Google::Protobuf::ParseError. Every export then logs:
ERROR -- : OpenTelemetry error: unexpected error decoding ExportLogsServiceResponse in OTLP::Exporter#log_partial_success - Error occurred during parsing - .../opentelemetry-exporter-otlp-logs-0.6.0/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb:246:in 'decode'
Expected vs actual
- Expected: Per the OTLP/HTTP spec, the response uses the request's Content-Type, so a protobuf request gets back a protobuf-encoded
ExportLogsServiceResponse. An empty body is a valid empty message. No error is logged. - Actual: The JSON
{}body causes an ERROR-level log line on every batch export from every process. Records are still ingested, because the exporter has already returned SUCCESS. But the noise is constant and hides real export failures.
Suggested fix
- Ingestion endpoint: for
application/x-protobufrequests, return an empty body or a protobuf-encodedExportLogsServiceResponsewithcontent-type: application/x-protobuf. - Until then, posthog-rails could install a scoped
OpenTelemetry.error_handlerfilter for this specific decode error, or document the noise.
- 主要语言
- Ruby
- 星标
- 37
- 派生
- 34
- 平均合并
- 20 小时 30 分钟
- 30 天内合并 PR
- 24
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
PostHog/posthog-ruby 的其他 Issue
-
bug enhancement feature/feature-flags
难度 3/5 1-2 天 新手友好度 68/100
PostHog/posthog-ruby#189 ·
维护者通常 1 天内回复
-
enhancement feature/feature-flags
难度 4/5 3-5 天 新手友好度 48/100
PostHog/posthog-ruby#188 ·
维护者通常 1 天内回复
-
bug enhancement
难度 3/5 1-2 天 新手友好度 68/100
PostHog/posthog-ruby#186 ·
维护者通常 1 天内回复
-
enhancement team/logs
难度 5/5 一周以上 新手友好度 35/100
PostHog/posthog-ruby#185 ·
维护者通常 1 天内回复
-
SDK references未关闭documentation
难度 4/5 3-5 天 新手友好度 35/100
PostHog/posthog-ruby#148 ·
维护者通常 1 天内回复
查看 PostHog/posthog-ruby 的全部 Issue
相似的 Issue
-
bugsnag
难度 2/5 1-3 小时 新手友好度 62/100
JoeMcB/improvcoaches#827 ·
-
难度 1/5 1 小时以内 新手友好度 72/100
TheOdinProject/curriculum#31465 ·
维护者通常 1 天内回复
-
area: docs eco: ruby good first issue help wanted lane: free-agent roadmap size: XS type: docs
难度 1/5 1 小时以内 新手友好度 66/100
arminazimi/evergreen#465 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 66/100
-
难度 1/5 1 小时以内 新手友好度 72/100
simp/puppetsync#120 ·
维护者通常 2 天内回复