遷移對(duì)照指南:V1 到 V2 的 Metric 命名與標(biāo)簽映射)
Jaeger Elasticsearch 指標(biāo)遷移對(duì)照指南V1 到 V2 的 Metric 命名與標(biāo)簽映射【免費(fèi)下載鏈接】jaegerCNCF Jaeger, a Distributed Tracing Platform項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ja/jaeger本文檔是 Jaeger v1 → v2 遷移系列中的 Elasticsearch 指標(biāo)篇完整羅列了 Elasticsearch 存儲(chǔ)后端在遷移前后的指標(biāo)名與標(biāo)簽labels對(duì)照關(guān)系涵蓋組合指標(biāo)Combined MetricsV1/V2 名稱完全一致與等價(jià)指標(biāo)Equivalent Metrics名稱與標(biāo)簽均發(fā)生變更兩類(lèi)并給出對(duì)應(yīng)源碼依據(jù)幫助監(jiān)控團(tuán)隊(duì)在升級(jí)過(guò)程中無(wú)痛切換告警規(guī)則與 Grafana 面板。本指南以倉(cāng)庫(kù)內(nèi) cmd/jaeger/docs/migration/elasticsearch-metrics.md 為核心骨架結(jié)合 Elasticsearch 存儲(chǔ)實(shí)現(xiàn)源碼與指標(biāo)生成腳本展開(kāi)講解。讀者讀完可掌握哪些 ES 指標(biāo)在 v2 中保持不變、哪些指標(biāo)被重命名并擴(kuò)展了標(biāo)簽、以及如何在遷移后繼續(xù)用統(tǒng)一指標(biāo)名構(gòu)建監(jiān)控面板。為什么需要指標(biāo)遷移對(duì)照表Jaeger v2 基于 OpenTelemetry Collector 重寫(xiě)了整體架構(gòu)數(shù)據(jù)寫(xiě)入、接收與構(gòu)建信息的埋點(diǎn)方式也隨之變化寫(xiě)入路徑從 v1 的internal/storage/v1演進(jìn)為 v2 的internal/storage/v2但 Elasticsearch 批量寫(xiě)入核心仍然復(fù)用統(tǒng)一的寫(xiě)入指標(biāo)模型接收路徑改為標(biāo)準(zhǔn) OTLP receiver拒絕 span 的計(jì)數(shù)指標(biāo)從 Jaeger 自定義命名切換為 OTel 語(yǔ)義約定的receiver_refused_spans構(gòu)建信息改為遵循 OpenTelemetry 資源語(yǔ)義的target_info標(biāo)簽結(jié)構(gòu)也向 OTel 資源屬性靠攏。倉(cāng)庫(kù)在 cmd/jaeger/docs/migration/ 下按存儲(chǔ)后端分別維護(hù)了遷移對(duì)照表all-in-one-metrics.md、badger-metrics.md、cassandra-metrics.md、elasticsearch-metrics.md、opensearch-metrics.md本文聚焦 ElasticsearchOpenSearch 對(duì)照表見(jiàn) opensearch-metrics.md內(nèi)容與 ES 完全一致。這些表格并非手寫(xiě)維護(hù)而是由 scripts/utils/metrics-md.py 從指標(biāo)定義中自動(dòng)生成的腳本中的generate_combined_markdown_table負(fù)責(zé)產(chǎn)出Combined Metrics小節(jié)generate_spans_markdown_table負(fù)責(zé)產(chǎn)出Equivalent Metrics小節(jié)確保對(duì)照關(guān)系與源碼始終同步。組合指標(biāo)Combined MetricsV1 與 V2 完全一致ES 寫(xiě)入相關(guān)的 10 個(gè)指標(biāo)在 v1、v2 中名稱與參數(shù)標(biāo)簽完全相同均為N/A即無(wú)附加標(biāo)簽只有指標(biāo)名本身。這意味著基于這些指標(biāo)構(gòu)建的寫(xiě)入監(jiān)控面板、告警規(guī)則在遷移后無(wú)需任何修改即可繼續(xù)工作。V1 MetricV1 ParametersV2 MetricV2 Parametersjaeger_bulk_index_attempts_totalN/Ajaeger_bulk_index_attempts_totalN/Ajaeger_bulk_index_errors_totalN/Ajaeger_bulk_index_errors_totalN/Ajaeger_bulk_index_inserts_totalN/Ajaeger_bulk_index_inserts_totalN/Ajaeger_bulk_index_latency_errN/Ajaeger_bulk_index_latency_errN/Ajaeger_bulk_index_latency_okN/Ajaeger_bulk_index_latency_okN/Ajaeger_index_create_attempts_totalN/Ajaeger_index_create_attempts_totalN/Ajaeger_index_create_errors_totalN/Ajaeger_index_create_errors_totalN/Ajaeger_index_create_inserts_totalN/Ajaeger_index_create_inserts_totalN/Ajaeger_index_create_latency_errN/Ajaeger_index_create_latency_errN/Ajaeger_index_create_latency_okN/Ajaeger_index_create_latency_okN/A指標(biāo)族的統(tǒng)一命名模型這 10 個(gè)指標(biāo)屬于兩個(gè)命名族bulk_index批量寫(xiě)入與index_create索引創(chuàng)建。每個(gè)族內(nèi)都遵循固定的attempts / inserts / errors / latency-ok / latency-err五件套結(jié)構(gòu)其底層定義位于 internal/storage/v1/api/spanstore/spanstoremetrics/write_metrics.gotype WriteMetrics struct { Attempts metrics.Counter metric:attempts Inserts metrics.Counter metric:inserts Errors metrics.Counter metric:errors LatencyOk metrics.Timer metric:latency-ok LatencyErr metrics.Timer metric:latency-err }其語(yǔ)義通過(guò) Emit 方法 一次性確定func (t *WriteMetrics) Emit(err error, latency time.Duration) { t.Attempts.Inc(1) if err ! nil { t.LatencyErr.Record(latency) t.Errors.Inc(1) } else { t.LatencyOk.Record(latency) t.Inserts.Inc(1) } }即每次操作先遞增attempts成功則記錄latency-ok并遞增inserts失敗則記錄latency-err并遞增errors。因此監(jiān)控時(shí)通常以errors / attempts計(jì)算失敗率用latency-ok與latency-err分別觀察正常與異常路徑的耗時(shí)分布。bulk_index批量寫(xiě)入指標(biāo)bulk_index族由 BulkIndexer 在寫(xiě)入_bulk時(shí)埋點(diǎn)。在 v2 的統(tǒng)一 ES 客戶端實(shí)現(xiàn) internal/storage/elasticsearch/esclient/bulk.go 中func NewBulkIndexer(client *Client, cfg BulkIndexerConfig, metricsFactory metrics.Factory, logger *zap.Logger) (*BulkIndexer, error) { b : BulkIndexer{ metrics: spanstoremetrics.NewWriter(metricsFactory, bulk_index), ... } }spanstoremetrics.NewWriter(metricsFactory, bulk_index)會(huì)將上述五件套指標(biāo)統(tǒng)一放入bulk_index命名空間最終輸出為jaeger_bulk_index_attempts_total、jaeger_bulk_index_errors_total、jaeger_bulk_index_inserts_total、jaeger_bulk_index_latency_err、jaeger_bulk_index_latency_ok。同步寫(xiě)入路徑 internal/storage/elasticsearch/esclient/sync_bulk.go 使用相同的bulk_index命名空間因此無(wú)論采用異步批量還是同步批量指標(biāo)口徑完全一致。單元測(cè)試對(duì)指標(biāo)行為做了精確斷言見(jiàn) internal/storage/elasticsearch/esclient/bulk_test.go成功場(chǎng)景bulk_index.inserts 1、bulk_index.errors 0只出現(xiàn)latency-ok計(jì)時(shí)器失敗場(chǎng)景bulk_index.inserts 0、bulk_index.errors 1只出現(xiàn)latency-err計(jì)時(shí)器入隊(duì)失敗場(chǎng)景隊(duì)列已滿bulk_index.attempts 1、bulk_index.errors 1見(jiàn) TestBulkIndexerEnqueueError。這從測(cè)試層面印證了表格中V1/V2 指標(biāo)名與參數(shù)一致的結(jié)論——同一套寫(xiě)入指標(biāo)模型在遷移前后被完整保留。index_create索引創(chuàng)建指標(biāo)index_create族對(duì)應(yīng) Elasticsearch 索引初始化/創(chuàng)建如按天/按小時(shí)滾動(dòng)索引的預(yù)創(chuàng)建操作同樣沿用NewWriter(metricsFactory, index_create)的五件套模型。在遷移對(duì)照表中該族 5 個(gè)指標(biāo)的 V1/V2 名稱與參數(shù)也保持完全一致N/A因此索引創(chuàng)建相關(guān)的告警如jaeger_index_create_errors_total持續(xù)增長(zhǎng)可以直接沿用。等價(jià)指標(biāo)Equivalent Metrics名稱與標(biāo)簽均發(fā)生變更以下 2 個(gè)指標(biāo)在 v1 與 v2 中名稱不同、標(biāo)簽集合也不同遷移時(shí)必須同步更新告警表達(dá)式與面板查詢V1 MetricV1 ParametersV2 MetricV2 Parametersjaeger_collector_spans_rejected_totaldebug, format, svc, transportreceiver_refused_spansreceiver, service_instance_id, service_name, service_version, transportjaeger_build_infobuild_date, revision, versiontarget_infoservice_instance_id, service_name, service_version拒絕 span 計(jì)數(shù)jaeger_collector_spans_rejected_total → receiver_refused_spansv1 中拒絕 span 的計(jì)數(shù)由 Collector 自定義埋點(diǎn)jaeger_collector_spans_rejected_total上報(bào)攜帶標(biāo)簽debug調(diào)試開(kāi)關(guān)、format數(shù)據(jù)格式如 jaeger/otlp、svc服務(wù)名、transport傳輸協(xié)議。v2 中 Jaeger 以標(biāo)準(zhǔn) OTel Collector 組件形態(tài)運(yùn)行該指標(biāo)由接收器按 OpenTelemetry 語(yǔ)義約定上報(bào)為receiver_refused_spans標(biāo)簽集變?yōu)閞eceiver接收器名稱如 otlp、jaeger 等service_instance_id/service_name/service_versionOTel 資源屬性標(biāo)識(shí)上報(bào)實(shí)例transport傳輸協(xié)議標(biāo)簽名保留含義與 v1 一致。這一命名在 Jaeger 的監(jiān)控資產(chǎn)中已被采用例如 monitoring/jaeger-mixin/dashboard-for-grafana.json 與生成代碼 monitoring/jaeger-mixin/generate/main.go 中均使用receiver_refused_spans構(gòu)建接收拒絕率的監(jiān)控表達(dá)式。遷移后若需按服務(wù)維度拆分告警應(yīng)改用service_name而非 v1 的svc。構(gòu)建信息jaeger_build_info → target_infov1 的jaeger_build_info攜帶build_date構(gòu)建日期、revisionGit 提交、version版本號(hào)三個(gè)標(biāo)簽用于在 Prometheus 中標(biāo)識(shí)運(yùn)行中的二進(jìn)制版本。v2 中該信息通過(guò) OTel 資源屬性導(dǎo)出為target_info標(biāo)簽僅保留服務(wù)身份三要素service_instance_id、service_name、service_version。遷移后查詢運(yùn)行版本時(shí)不再直接看到version/revision標(biāo)簽而需要通過(guò)service_nameservice_version組合定位實(shí)例若面板依賴jaeger_build_info{version...}做版本告警或展示需改寫(xiě)為對(duì)target_info的查詢。遷移落地建議寫(xiě)入與索引類(lèi)指標(biāo)零改動(dòng)jaeger_bulk_index_*與jaeger_index_create_*共 10 個(gè)指標(biāo)直接沿用現(xiàn)有面板與告警無(wú)需修改可結(jié)合errors/attempts比率與latency-err觀察寫(xiě)入健康度。接收拒絕類(lèi)指標(biāo)改寫(xiě)將jaeger_collector_spans_rejected_total相關(guān)查詢/告警替換為receiver_refused_spans并按需在標(biāo)簽receiver、service_name、transport上做分組與過(guò)濾。版本信息類(lèi)指標(biāo)改寫(xiě)將jaeger_build_info相關(guān)查詢替換為target_info注意標(biāo)簽從version/revision變?yōu)閟ervice_version/service_name的差異。保持文檔同步若后續(xù)指標(biāo)定義發(fā)生變更可通過(guò) scripts/utils/metrics-md.py 重新生成 elasticsearch-metrics.md 對(duì)照表確保監(jiān)控團(tuán)隊(duì)始終拿到與源碼一致的遷移依據(jù)。小結(jié)Elasticsearch 后端的指標(biāo)遷移可以概括為寫(xiě)入路徑不變、接收與元信息標(biāo)準(zhǔn)化bulk_index與index_create兩個(gè)指標(biāo)族的 10 個(gè)指標(biāo)在 v1/v2 中名稱與標(biāo)簽完全一致遷移成本為零而receiver_refused_spans、target_info兩個(gè) OTel 標(biāo)準(zhǔn)化指標(biāo)的引入則要求監(jiān)控側(cè)同步更新查詢與告警。結(jié)合 bulk.go、write_metrics.go 與 bulk_test.go 中的實(shí)現(xiàn)與測(cè)試可以確認(rèn)這套對(duì)照關(guān)系與運(yùn)行時(shí)代碼保持一致可放心作為遷移核對(duì)清單使用。【免費(fèi)下載鏈接】jaegerCNCF Jaeger, a Distributed Tracing Platform項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ja/jaeger創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考