iT邦幫忙

2024 iThome 鐵人賽

DAY 24
1
Kubernetes

成為 Kubernetes 特級咒術師的 30 天修行系列 第 24

第二十四篇:Opentelemetry Collector

  • 分享至 

  • xImage
  •  

前面介紹完基本的流程與上下文傳播,今天要準備介紹Opentelemetry Collector,但是在進入今天的主題之前,對於昨日的上下文傳播做一個小小的補充,就是有一個「Baggage」的概念,可以讓你在Trace的過程中,可以藉由上下文傳播夾帶你想要的資訊。

Opentelemetry Collector

那補充完之後,就要進入今天的重點Opentelemetry Collector後續我會稱為「Collector」,前面的架構圖沒有把完整Collector給畫出來,所以我們再來看一下整個流程以及Collector的樣子,如下圖

圖片取自於Opentelemetry Collector
image

那從上圖可以看到其實在Collector中的流程是:OTLP -> Receiver -> Processors -> Exporter -> Backend(e.g. Grafana、Jaeger),所以大家可以發現Collector是由三個元件「Receiver」 -> 「Processors」 -> 「Exporter」所組成。

從名字其實可以很容易的知道每個元件的功能

  • Receiver 負責接收來自在微服務產生的遙測資料
  • Processors 負責詳細得遙測資料處理
  • Exporter 將處理完的遙測資料匯出到後端或者是可視化工具

那什麼時候需要Collector呢?
我們先看看官方文件是怎麼說

要嘗試並開始使用 OpenTelemetry,將資料直接傳送到後端是快速獲取價值的好方法。此外,在開發或小規模環境中,無需收集器即可獲得不錯的結果。
但是,一般來說,我們建議在您的服務旁邊使用收集器,因為它允許您的服務快速卸載數據,並且收集器可以處理其他處理,例如重試、批次、加密甚至敏感資料過濾。
設定收集器也比您想像的更容易:每種語言的預設 OTLP 匯出器都假定本地收集器端點,因此如果您啟動收集器,它將自動開始接收遙測資料。

霹靂啪拉敘述了很多,大致上是在說收集、處理資料方便,非常合理也名符其實,Collector對我來說會有以下幾點重要的地方。

  1. 資料處理功能:雖然我目前還沒有資料處理的需求,但是試想如果你不使用Collector,你將所有的遙測資料送到一個你自己寫的模組處理,我是不敢想,想想就刺激。題外話就是:當然可能每個人有不同的需求,那其實Collector也有提供自建的功能,那在這邊我就不多敘述。
  2. 資料匯出功能:一樣試想沒有這個元件,一樣把所有的遙測資料送到一個你自己寫的模組處理,然後自己打API或者是用其他方式匯出到其他可視化工具。就好像寄個信件,明明可以透過郵局去送很方便,我偏偏要自己一個一個送到目的地。

但是有優點也會有缺點,雖然有Collector為處理、匯出遙測資料帶來方便,可是對我來說有時候其實從可視化工具中沒有看到資料,就會開始懷疑人生,表情大概就是這樣0.0(哭啊.... 我的資料呢

其實你也不太清楚Collector到底有沒有從微服務之中接收到資料,但是回頭看看多半可能都是自己Opentelemetry 的endpoint設錯之類的。

又是老樣子分享完我自己的看法之後,不免俗還是要來看看文件怎麼說的,文件中有詳述不同三種的部署方式

  • 沒有Collector
    image

優點:

  • 使用簡單
  • 不需要增加額外的元件

缺點:

  • 如果收集、處理發生變化,則需要更改程式碼

  • 應用程式碼與後端高度耦合

  • 每種語言實作的Exporter數量有限

  • 有Collector
    image

優點:

  • 上手簡單
  • 應用程式和收集器之間清晰的 1:1 映射

缺點:

  • 可擴展性(人力和負載方面)

  • 不靈活

  • 建立一個 Collector Gateway
    image

優點:

  • 關注點分離,例如集中管理的憑證
  • 集中策略管理(例如,過濾某些日誌或取樣)

缺點:

  • 這是另一件需要維護的事情,並且可能會失敗(複雜性)
  • 在多個收集器的情況下增加了延遲
  • 較高的整體資源使用率(成本)

看了文件的優缺,我只注意到一點有「上手簡單」,我二話不說就是採用了這種了XD

今日小總結

  • Collector是由三個元件「Receiver」 -> 「Processors」 -> 「Exporter」所組成。
  • Receiver 負責接收來自在微服務產生的遙測資料
    Processors 負責詳細得遙測資料處理
    Exporter 將處理完的遙測資料匯出到後端或者是可視化工具
  • 沒有Collector:優點「使用簡單、不需要增加額外的元件」缺點「如果收集、處理發生變化,則需要更改程式碼並且應用程式碼與後端高度耦合」
  • 有Collector:優點「上手簡單、應用程式和收集器之間清晰的 1:1 映射」缺點「擴展性較差」
  • Collector Gateway:優點「關注點分離,例如集中管理的憑證、集中策略管理(例如,過濾某些日誌或取樣)」缺點「成本較高」

上一篇
第二十三篇:Opentelemetry 上下文啟動
下一篇
第二十五篇:產生遙測資料
系列文
成為 Kubernetes 特級咒術師的 30 天修行30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
雷N
iT邦研究生 1 級 ‧ 2024-09-25 10:22:38

我幫忙補充https://ithelp.ithome.com.tw/upload/images/20240925/20104930q8oYSD9VsQ.png

Agent 模式, 就是collector 與應用程式在同一台主機上 (想成k8s node)
又或者就是集中的一台collector

這樣的好處是什麼呢?

就是我講堂中提到的resource detector 能做在collector processor中.
程式的異動會很少, 相比於 no collector

應用程式們的exporter 設定更簡單了, 根本就是localhost 或固定的一個位置

這是團隊剛開始接觸otel collector 時應該先嘗試的系統架構

圖片出自OpenTelemetry 學習手冊 書還沒上架 XD
預計10月上架

1
雷N
iT邦研究生 1 級 ‧ 2024-09-25 10:24:02

Gateway pattern

https://ithelp.ithome.com.tw/upload/images/20240925/20104930oMlfQA8mtm.png

目的就是為了負載均衡來處理反壓情況
以及文章中提到的職責(功能/資源)分離

這種模式下, 本地蒐集器負責的是加法, 勁量增添上下文
而collector pool 中的collector 則是依據需求來篩選,取樣,轉換或減去上下文(減法)

圖片出自OpenTelemetry 學習手冊 書還沒上架 XD
預計10月上架

我要留言

立即登入留言