OpenTelemetry值得一試嗎?

什么是OpenTelemetry器钟?

OpenTelemetry合并了OpenTracing和OpenCensus項(xiàng)目,提供了一組API和庫來標(biāo)準(zhǔn)化遙測數(shù)據(jù)的采集和傳輸攒读。OpenTelemetry提供了一個(gè)安全廓旬,廠商中立的工具凿蒜,這樣就可以按照需要將數(shù)據(jù)發(fā)往不同的后端哥艇。

OpenTelemetry項(xiàng)目由如下組件構(gòu)成:

  • 推動在所有項(xiàng)目中使用一致的規(guī)范
  • 基于規(guī)范的绝编,包含接口和實(shí)現(xiàn)的APIs
  • 不同語言的SDK(APIs的實(shí)現(xiàn)),如 Java, Python, Go, Erlang等
  • Exporters:可以將數(shù)據(jù)發(fā)往一個(gè)選擇的后端
  • Collectors:廠商中立的實(shí)現(xiàn)貌踏,用于處理和導(dǎo)出遙測數(shù)據(jù)

術(shù)語

如果剛接觸Opentelemetry十饥,那么需要了解如下術(shù)語:

  • Traces:記錄經(jīng)過分布式系統(tǒng)的請求活動,一個(gè)trace是spans的有向無環(huán)圖

  • Spans:一個(gè)trace中表示一個(gè)命名的祖乳,基于時(shí)間的操作逗堵。Spans嵌套形成trace樹。每個(gè)trace包含一個(gè)根span眷昆,描述了端到端的延遲蜒秤,其子操作也可能擁有一個(gè)或多個(gè)子spans。

  • Metrics:在運(yùn)行時(shí)捕獲的關(guān)于服務(wù)的原始度量數(shù)據(jù)隙赁。Opentelemetry定義的metric instruments(指標(biāo)工具)如下垦藏。Observer支持通過異步API來采集數(shù)據(jù),每個(gè)采集間隔采集一個(gè)數(shù)據(jù)伞访。

    ame Synchronous Adding Monotonic
    Counter Yes Yes Yes
    UpDownCounter Yes Yes No
    ValueRecorder Yes No No
    SumObserver No Yes Yes
    UpDownSumObserver No Yes No
    ValueObserver No No No
  • Context:一個(gè)span包含一個(gè)span context,它是一個(gè)全局唯一的標(biāo)識轰驳,表示每個(gè)span所屬的唯一的請求厚掷,以及跨服務(wù)邊界轉(zhuǎn)移trace信息所需的數(shù)據(jù)弟灼。OpenTelemetry 也支持correlation context,它可以包含用戶定義的屬性冒黑。correlation context不是必要的田绑,組件可以選擇不攜帶和存儲該信息。

  • Context propagation:表示在不同的服務(wù)之間傳遞上下文信息抡爹,通常通過HTTP首部掩驱。 Context propagation是Opentelemetry系統(tǒng)的關(guān)鍵功能之一。除了tracing之外冬竟,還有一些有趣的用法欧穴,如,執(zhí)行A/B測試泵殴。OpenTelemetry支持通過多個(gè)協(xié)議的Context propagation來避免可能發(fā)生的問題涮帘,但需要注意的是,在自己的應(yīng)用中最好使用單一的方法笑诅。

OpenTelemetry的好處

通過將OpenTracing 和OpenCensus 合并為一個(gè)開放的標(biāo)準(zhǔn)调缨,OpenTelemetry提供了如下便利:

  • 選擇簡單:不必在兩個(gè)標(biāo)準(zhǔn)之間進(jìn)行選擇,OpenTelemetry可以同時(shí)兼容 OpenTracing和OpenCensus吆你。
  • 跨平臺:OpenTelemetry 支持各種語言和后端弦叶。它代表了一種廠商中立的方式,可以在不改變現(xiàn)有工具的情況下捕獲并將遙測數(shù)據(jù)傳輸?shù)胶蠖恕?/li>
  • 簡化可觀測性:正如OpenTelemetry所說的"高質(zhì)量的觀測下要求高質(zhì)量的遙測"妇多。希望看到更多的廠商轉(zhuǎn)向OpenTelemetry伤哺,因?yàn)樗奖悖覂H需測試單一標(biāo)準(zhǔn)砌梆。

如何使用OpenTelemetry

OpenTelemetry APIs 和SDKs有很多快速使用指南和文檔幫助快速入門默责,如Java快速指南展示了如何獲取跟蹤程序、創(chuàng)建spans咸包、添加屬性桃序,以及跨不同spans傳遞context。

將OpenTelemetry trace APIs插裝到應(yīng)用程序后烂瘫,就可以使用預(yù)先編譯好的OpenTelemetry 庫中的exporters 將trace數(shù)據(jù)發(fā)送到觀測平臺媒熊,如New Relic或其他后端。

metrics和logs的規(guī)范仍在開發(fā)階段坟比,但一旦完成芦鳍,它們將在實(shí)現(xiàn)OpenTelemetry的主要目標(biāo)中發(fā)揮重要作用:確保庫和框架包含所有內(nèi)置的遙測數(shù)據(jù)類型,使開發(fā)人員無需進(jìn)行檢測即可提取遙測數(shù)據(jù)葛账。

OpenTelemetry 架構(gòu)組件

由于OpenTelemetry旨在成為一個(gè)為廠商和可觀察性后端提供的跨語言框架柠衅,因此它非常靈活且可擴(kuò)展,但同時(shí)也很復(fù)雜籍琳。OpenTelemetry的默認(rèn)實(shí)現(xiàn)中菲宴,其架構(gòu)可以分為如下三部分:

  1. OpenTelemetry API
  2. OpenTelemetry SDK贷祈,包括
    • Tracer pipeline
    • Meter pipeline
    • shared Context layer
  3. Collector
image.png

OpenTelemetry API

應(yīng)用開發(fā)者會使用 Open Telemetry API對其代碼進(jìn)行插樁,庫作者會用它(在庫中)直接編寫樁功能喝峦。API不處理操作問題势誊,也不關(guān)心如何將數(shù)據(jù)發(fā)送到廠商后端。

API分為四個(gè)部分:

  1. A Tracer API
  2. A Metrics API
  3. A Context API
  4. 語義規(guī)范
image.png
Tracer API

Tracer API 支持生成spans谣蠢,可以給span分配一個(gè)traceId粟耻,也可以選擇性地加上時(shí)間戳。一個(gè)Tracer會給spans打上名稱和版本眉踱。當(dāng)查看數(shù)據(jù)時(shí)挤忙,名稱和版本會與一個(gè)Tracer關(guān)聯(lián),通過這種方式可以追蹤生成sapan的插裝庫勋锤。

Metric API

Metric API提供了多種類型的Metric instruments(樁功能)饭玲,如CountersObservers。Counters 允許對度量進(jìn)行計(jì)算叁执,Observers允許獲取離散時(shí)間點(diǎn)上的測量值茄厘。例如,可以使用Observers 觀察不在Span上下文中出現(xiàn)的數(shù)值谈宛,如當(dāng)前CPU負(fù)載或磁盤上空閑的字節(jié)數(shù)次哈。

Context API

Context API 會在使用相同"context"的spans和traces中添加上下文信息,如W3C Trace Context, Zipkin B3首部, 或 New Relic distributed tracing 首部吆录。此外該API允許跟蹤spans是如何在一個(gè)系統(tǒng)中傳遞的窑滞。當(dāng)一個(gè)trace從一個(gè)處理傳遞到下一個(gè)處理時(shí)會更新上下文信息。Metric instruments可以訪問當(dāng)前上下文恢筝。

語義規(guī)范

OpenTelemetry API包含一組語義規(guī)范哀卫,該規(guī)范包含了命名spans,屬性以及與spans相關(guān)的錯(cuò)誤撬槽。通過將該規(guī)范編碼到API接口規(guī)范中此改,OpenTelemetry 項(xiàng)目保證所有的instrumentation(不論任何語言)都包含相同的語義信息。對于希望為所有用戶提供一致的APM體驗(yàn)的廠商來說侄柔,該功能非常有價(jià)值共啃。

OpenTelemetry SDK

OpenTelemetry SDK是OpenTelemetry API的實(shí)現(xiàn)。該SDK包含三個(gè)部分暂题,與上面的API類似:Tracer, 一個(gè)Meter, 和一個(gè)shared Context layer

image.png

理想情況下移剪,SDK應(yīng)該滿足99%的標(biāo)準(zhǔn)使用場景,但如果有必要薪者,可以自定義SDK纵苛。例如,可以在Tracer pipeline實(shí)現(xiàn)中自定義除核心實(shí)現(xiàn)(如何與共享上下文層交互)外的其他任何內(nèi)容,如Tracer pipeline使用的采樣算法赶站。

Tracer pipeline
image.png

當(dāng)配置SDK時(shí)幔虏,需要將一個(gè)或多個(gè)SpanProcessors與Tracer pipeline的實(shí)現(xiàn)進(jìn)行關(guān)聯(lián)纺念。SpanProcessors會查看spans的生命周期贝椿,然后在合適的時(shí)機(jī)將spans傳送到一個(gè)SpanExporter。SDK中內(nèi)置了一個(gè)簡單的SpanProcessor陷谱,可以將完成的spans直接轉(zhuǎn)發(fā)給exporter 烙博。

SDK還包含一個(gè)批處理實(shí)現(xiàn),按照可配置的間隔分批次轉(zhuǎn)發(fā)已完成的spans烟逊。但由于SpanProcessor的實(shí)現(xiàn)可以接受插件渣窜,因此可以在完成自己的實(shí)現(xiàn)后賦予其自定義的行為。例如宪躯,如果遙測后端支持觀測"正在進(jìn)行的"spans乔宿,那么可以創(chuàng)建一個(gè)SpanProcessor實(shí)現(xiàn),將所有span狀態(tài)變更涉及的spans轉(zhuǎn)發(fā)出去访雪。

Tracer pipeline的最后是SpanExporter详瑞。一個(gè)exporter的工作很簡單:將OpenTelemetry 的spans轉(zhuǎn)換為遙測后端要求的表達(dá)格式,然后轉(zhuǎn)發(fā)給該后端即可臣缀。提供定制化的SpanExporter是遙測廠商參與OpenTelemetry生態(tài)系統(tǒng)的最簡單方式坝橡。

Meter pipeline
image.png
Meter pipeline

Meter pipeline要遠(yuǎn)比Tracer pipeline負(fù)載,而metrics也遠(yuǎn)比span復(fù)雜精置。下面的描述基于java SDK實(shí)現(xiàn)计寇,可能跨語言會有所不同。

Meter pipeline會創(chuàng)建和維護(hù)多種類型的metric工具脂倦,包括Counters 和Observers番宁。每個(gè)工具的實(shí)例都需要以某種方式聚合。默認(rèn)情況下赖阻,Counters通過累加數(shù)值進(jìn)行聚合蝶押,而Observers通過采集記錄到的最后一個(gè)數(shù)值進(jìn)行聚合。所有的工具默認(rèn)都有一個(gè)聚合政供。

(在本文編寫之際播聪,metric工具的自定義聚合配置仍然在起草階段)。

不同語言的Meter pipeline的實(shí)現(xiàn)會有所不同布隔,但所有場景下离陶,metric的聚合結(jié)果都會被傳遞到MetricExporter。與spans類似衅檀,供應(yīng)商可以提供自己的exporter招刨,將由metric aggregators生成的聚合數(shù)據(jù)轉(zhuǎn)換為遙測后端所需的類型。

OpenTelemetry支持兩種類型的exporter:基于exporters的"push"哀军,即exporter按照時(shí)間間隔將數(shù)據(jù)發(fā)送到后端沉眶;基于exporters的"pull"打却,即后端按照需要請求數(shù)據(jù)。New Relic 是一個(gè)基于push的后端谎倔,而Prometheus是一個(gè)基于push的后端柳击。

shared Context layer

shared Context layer位于Tracer和Meter pipeline之間,允許在一個(gè)執(zhí)行的span的上下文中記錄所有非observer的metric片习“齐龋可以使用propagators自定義Context,在系統(tǒng)內(nèi)外傳遞span上下文藕咏。OpenTelemetry SDK提供了一個(gè)基于W3C Trace Context規(guī)范的實(shí)現(xiàn)状知,但也可以根據(jù)需要來包含 Zipkin B3 propagation等。

Collector

image.png

下面對collector的描述來自官方文檔

OpenTelemetry Collector提供了一種廠商中立的實(shí)現(xiàn)孽查,無縫地接收饥悴,處理和導(dǎo)出遙測數(shù)據(jù)。此外盲再,它移除了為支持發(fā)送到多個(gè)開源或商業(yè)后端而使用的開源可觀察性數(shù)據(jù)格式(如Jaeger西设,Prometheus等)的運(yùn)行,操作和維護(hù)洲胖。

OpenTelemetry collector可以擴(kuò)展或嵌入其他應(yīng)用中济榨。下面應(yīng)用擴(kuò)展了collector:

如果要?jiǎng)?chuàng)建自己的collector發(fā)行版,可以參見這篇blog: Building your own OpenTelemetry Collector distribution绿映。

如果要構(gòu)建自己的發(fā)行版擒滑,可以使用OpenTelemetry Collector Builder

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叉弦,一起剝皮案震驚了整個(gè)濱河市丐一,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淹冰,老刑警劉巖库车,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異樱拴,居然都是意外死亡柠衍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門晶乔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珍坊,“玉大人,你說我怎么就攤上這事正罢≌舐” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長履怯。 經(jīng)常有香客問我回还,道長,這世上最難降的妖魔是什么叹洲? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任柠硕,我火速辦了婚禮,結(jié)果婚禮上疹味,老公的妹妹穿的比我還像新娘仅叫。我一直安慰自己,他們只是感情好糙捺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笙隙,像睡著了一般洪灯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竟痰,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天签钩,我揣著相機(jī)與錄音,去河邊找鬼坏快。 笑死铅檩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的莽鸿。 我是一名探鬼主播昧旨,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祥得!你這毒婦竟也來了兔沃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤级及,失蹤者是張志新(化名)和其女友劉穎乒疏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饮焦,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怕吴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了县踢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片转绷。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖殿雪,靈堂內(nèi)的尸體忽然破棺而出暇咆,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布爸业,位于F島的核電站其骄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扯旷。R本人自食惡果不足惜拯爽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钧忽。 院中可真熱鬧毯炮,春花似錦、人聲如沸耸黑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽大刊。三九已至为迈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缺菌,已是汗流浹背葫辐。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伴郁,地道東北人耿战。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像焊傅,于是被迫代替她去往敵國和親剂陡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容