iT邦幫忙

0

OTel 戰地筆記:破解 Delta to Cumulative 的兩大夢魘 (ErrOutOfOrder & ErrOlderStart)

  • 分享至 

  • xImage
  •  

完整內容,請至幹話王 OTel 戰地筆記:破解 Delta to Cumulative 的兩大夢魘 (ErrOutOfOrder & ErrOlderStart)

[OTel 深水區] 徹底拆解 deltatocumulative 的兩大夢魘:ErrOlderStart 與 ErrOutOfOrder

接續上一篇我們對 deltatocumulative Processor 的架構剖析,今天我們要進入「深水區」。

在生產環境中,你可能遇過這種情況:Metrics 莫名其妙開始 Drop,去查 deltatocumulative_datapoints 指標時,看到 error 標籤出現了 delta.ErrOutOfOrderdelta.ErrOlderStart

這不僅僅是報錯,這是 Processor 在告訴你:你的數據流違反了物理定律。本文將從 Stream Identity (身份識別) 的源碼層級出發,徹底拆解這兩個錯誤的根源。


1. 核心根源:Stream Identity (身份識別)

要讀懂錯誤,首先得搞懂 Processor 怎麼判定「這是同一條 Stream」。許多人誤以為只要 Metric Name 一樣就是同一條線,這是大錯特錯。

在源碼中,Stream Identity 是一個 Hash 值,其組成結構非常嚴謹:

Stream Identity = Hash of:
┌─────────────────────────────────────────────────────────────────────┐
│  Metric                                                             │
│  ├── Scope                                                          │
│  │   ├── Resource                                                   │
│  │   │   └── resource.attributes (hash)                             │
│  │   │       (關鍵!: service.name, host.name, k8s.pod.name)          │
│  │   ├── scope.name       (例: "otelcol/prometheus")                 │
│  │   ├── scope.version    (例: "v0.90.0")                           │
│  │   └── scope.attributes (hash)                                    │
│  ├── metric.name          (例: "http_requests_total")               │
│  ├── metric.unit          (例: "ms")                                │
│  ├── metric.type          (例: Sum, Histogram)                      │
│  ├── metric.monotonic     (true/false)                              │
│  └── metric.temporality   (Delta/Cumulative)                        │
└─────────────────────────────────────────────────────────────────────┘
      +
datapoint.attributes (hash)   (例: method="GET", status="200")

圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言