Skip to content

透過 OpenTelemetry 來收集 Ingress Nginx Controller 的 Metrics 與 Traces 並送到 Datadog 上

Notifications You must be signed in to change notification settings

880831ian/opentelemetry-ingress-nginx-controller

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

opentelemetry-ingress-nginx-controller

此範例展示如何透過 OpenTelemetry 來收集 Ingress Nginx Controller 的 Metrics 與 Traces 並送到 Datadog 上。

🔥 這個範例比較特別,因為 Datadog 有提供 Ingress Nginx Controller 的 integrations,可以透過 Datadog Agent 來收集 Metrics,不需要透過 OpenTelemetry Collector 來收集。 ( Datadog Agent 請參考:https://docs.datadoghq.com/containers/kubernetes/)


檔案說明

  • otel-collector.yaml: OpenTelemetry Collector 的設定檔,主要是設定要收集哪些 metrics、traces,並且要送到哪個 exporter,要注意的是 exporters 的 datadog 需要設定 site、api_key,以及 image 要記得用 otel/opentelemetry-collector-contrib,才會有 datadog 的 exporter。

  • ingress-nginx-values.yaml: Ingress Nginx Controller 的設定檔,這邊的 podAnnotations 是為了讓 Ingress Nginx Controller 的 Pod 能夠透過 Datadog agent 收集 metrics 到 Datadog 才加上的。

    config 裡面的設定有很多,主要都是 openTelemetry 的設定,要注意的是 enable-opentelemetry 要設為 true,另外 otlp-collector-host 以及 otlp-collector-port 要送到哪個 collector 等等也要記得設定。 另外如果想要將 LOG 與 Trace 串再一起,記得要把 log-format 設為 json,並且帶入,trace_id 與 span_id ( 這邊有多帶 dd.trace_id 是為了讓 datadog 可以自動串接 LOG & Trace )。

  • nginx.yaml: 一個簡單的 Nginx 整套服務 (Deployment、Service、Ingress),要注意的是 Ingress 需要設定 annotations kubernetes.io/ingress.class: nginx (這個是 Ingress Nginx Controller 的預設 class name),才會被 Ingress Nginx Controller 接管 (才會有 Load Balancer 的 IP)


執行步驟

  1. 先 clone 這個 repo (廢話 xD)

  2. 先建立 OpenTelemetry Collector,執行以下指令:

    helm upgrade collector \
     opentelemetry-collector \
     --repo https://open-telemetry.github.io/opentelemetry-helm-charts \
     --install \
     --create-namespace \
     --namespace opentelemetry \
     -f "otel-collector.yaml"
  3. 再建立 Ingress Nginx Controller,執行以下指令:

    helm upgrade ingress-nginx \
     ingress-nginx \
     --repo https://kubernetes.github.io/ingress-nginx \
     --install \
     --create-namespace \
     --namespace ingress-nginx \
     -f "ingress-nginx-values.yaml"
  4. 接著建立測試用 Nginx 服務,執行以下指令:

    kubectl apply -f nginx.yaml

測試

當你執行完上面的步驟後,你會發現有產生兩個 namespace,一個是 ingress-nginx,另一個是 opentelemetry,並且會有 OpenTelemetry Collector、Ingress Nginx Controller、Nginx 等服務,如下:


圖片


我們試著打 http://nginx.example.com/ (測試網址,需要先在 /etc/hosts 綁定 Ingress Nginx Controller 咬住的 Load Balancer IP),查看一下 Datadog 的 LOG,看看是否有收到 Nginx 的 LOG (此收集 LOG 的方式是透過在 cluster 上安裝 Datadog 的 agent),如下:


圖片


接著查看 Datadog APM 的 trace,如下:


圖片


由於我們在後面目前沒有串其他服務,所以只有一個 span,之後還有另外兩篇文章是介紹如何串其他服務 (會增加服務以及部分設定),可以參考看看:opentelemetry-roadrunneropentelemetry-nodejs


順便看一下透過 Datadog Agent 收集的 Ingress Nginx Controller 的 Metrics,如下:


圖片


可以用這些 Metrics 來做 Dashboard,如下:


圖片


結論

透過 OpenTelemetry Collector 來收集 Ingress Nginx Controller 的 Metrics 與 Traces 並送到 Datadog 上,這樣就可以透過 Ingress Nginx Controller 的 Metrics 來做監控了,對於 RD 再開發上,有 Traces 也更方便 RD 他們找到程式的瓶頸 (有可能是服務導致的)。


參考

Configure Nginx Ingress Controller to use JSON log format

淺談 OpenTelemetry - Collector Compoents

About

透過 OpenTelemetry 來收集 Ingress Nginx Controller 的 Metrics 與 Traces 並送到 Datadog 上

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published