iT邦幫忙

2023 iThome 鐵人賽

DAY 13
1
自我挑戰組

GPT伴我讀一些文件系列 第 13

Day13- GPT 陪我讀 將 OpenTelemetry Collector 連接到 Grafana Cloud 資料庫

  • 分享至 

  • xImage
  •  

Day12- GPT 陪我讀 Grafana OpenTelemetry


將OpenTelemetry Collector連接到Grafana Cloud資料庫

簡易介紹

本文旨在指導您如何配置 OpenTelemetry Collector,以便將遙測數據有效地發送到 Grafana Cloud。透過 OpenTelemetry Demo 應用程式的實際例子,您不僅可以了解數據的流動,還能夠對 Collector 的配置過程有深入的了解。


OpenTelemetry Collector 是一個中間件,用於連接遙測數據的來源和可靠地存儲數據的後端,同時在其中進行數據的處理和清潔。本文指導您配置 OpenTelemetry Collector,將數據發送到 Grafana Cloud Metrics、Traces 和 Logs。

注意:Grafana Labs 也提供了一個 OpenTelemetry Protocol (OTLP)端點 ,該端點直接將 OTLP 數據發送到 Grafana Cloud 資料庫的單一端點。如果您的遙測數據格式是 OTLP,我們鼓勵您今天就嘗試它。

本指南使用 OpenTelemetry Demo 應用程式進行日誌、指標和追踪。閱讀完此指南後,您將對遙測數據的流程有很好的了解,並且對使用生產質量配置運行收集器充滿信心。

儘管此指南使用 OpenTelemetry Demo 應用程式,但相同的概念也適用於生成 OTLP 數據的應用程式,很可能使用 OpenTelemetry SDK。請注意,OpenTelemetry Demo 本身就可以生成 OTLP 指標和追踪,使其成為使用 Grafana Cloud 的 OTLP 端點的絕佳選擇。日誌是從 pods 的 stdout 獲得的,與您運行 kubectl logs 時看到的類似。然後由 Collector 將其轉換為 OTLP。

Demo

該示範包含多個透過 Docker Compose 或 Kubernetes 部署的微服務和工具。本指南已根據上游示範進行調整,以便收集來自 Kubernetes pods 的日誌。未來會根據對上游示範項目進行的更改來調整此指南。

  1. 首先閱讀示範的 README,以瞭解該示範及其場景。
  2. 儘管 Docker Compose 被列為一個選項,但請遵循 Kubernetes 的指示,因為我們將在本指南的其餘部分使用它。
  3. 當服務啟動時,如果您還沒有賬戶,請註冊一個免費的 Grafana Cloud 賬戶。
  4. 在您的 Grafana Cloud 賬戶中,請記下以下詳細資料:
    • 在 Prometheus 部分,請注意 Prometheus Remote Write 端點,例如 https://prometheus-blocks-prod-us-central1.grafana.net/api/prom/push 。我們將此稱為 ${METRICS_URL}。同樣注意 “Username / Instance ID”,例如 123456。我們將此稱為 ${METRICS_USER_ID}
    • 在 Tempo 部分,請記下 URL,例如 https://tempo-us-central1.grafana.net/tempo 。我們將使用 URL 中的主機名和端口作為我們的 ${TRACES_URL},例如 tempo-us-central1.grafana.net:443。同樣注意 “Username / Instance ID”,例如 12345。我們將此稱為 ${TRACES_USER_ID}
    • 在 Loki 部分,請記下 URL,例如 https://logs-prod-us-central1.grafana.net 。對於 Loki exporter,我們指定完整的 URL,該 URL 應包含路徑 /loki/api/v1/push。結合兩者 ( https://logs-prod-us-central1.grafana.net/loki/api/v1/push) 我們將此稱為 ${LOGS_URL}。注意 “Username / Instance ID”,例如 12345。我們將此稱為 ${LOGS_USER_ID}
    • 您可能需要在 API Key 頁面下創建一個具有 MetricsPublisher 角色的 API。API 鍵看起來像這樣:eyJ...fQ==。我們將此稱為 ${API_KEY}
  5. 啟動示範應用程序並運行 OpenTelemetry Collector 後,通過將以下片段的內容保存到名為 grafana.yaml 的文件中,創建一個自定義 Helm values 文件,並替換之前獲得的 “${…}” 值。
default:
  envOverrides:
  - name: 'OTEL_COLLECTOR_NAME'
    value: $(OTEL_K8S_NODE_NAME)
opentelemetry-collector:
  mode: daemonset
  presets:
    logsCollection:
      enabled: true
      includeCollectorLogs: false
  config:
    extensions:
      basicauth/traces:
        client_auth:
          username: "${TRACES_USER_ID}"
          password: "${API_KEY}"
      basicauth/metrics:
        client_auth:
          username: "${METRICS_USER_ID}"
          password: "${API_KEY}"
      basicauth/logs:
        client_auth:
          username: "${LOGS_USER_ID}"
          password: "${API_KEY}"   

    exporters:
      otlp:
        endpoint: ${TRACES_URL}
        tls:
          insecure: false
        auth:
          authenticator: basicauth/traces

      prometheusremotewrite:
        endpoint: ${METRICS_URL}
        auth:
          authenticator: basicauth/metrics

      loki:
        endpoint: ${LOGS_URL}
        auth:
          authenticator: basicauth/logs

    processors:
      spanmetrics:
        metrics_exporter: prometheusremotewrite

    service:
      extensions: [ basicauth/traces, basicauth/metrics, basicauth/logs, health_check , memory_ballast ]
      pipelines:
        metrics:
          exporters: [prometheusremotewrite]
        logs:
          receivers: [filelog]
          exporters: [loki]

注意:在生產系統上,您將憑證添加到 Kubernetes Secret,然後在 Collector 部署中將憑證設置為環境變量,而不是直接在配置中替換值。

  1. 通過運行以下 Helm 命令之一安裝或升級圖表。
helm upgrade my-otel-demo open-telemetry/opentelemetry-demo --values grafana.yaml

如果您尚未安裝圖表,請改用以下命令:

helm install my-otel-demo open-telemetry/opentelemetry-demo --values grafana.yaml
  1. 新的 Collector 實例運行新的配置後,打開 Grafana Cloud 實例中的 Explore 頁面,選擇您的 traces 數據源,然後在 Query Type下單擊 Search
    服務列表應包含 frontendadservicecartservice 等名稱。
  2. 選擇 frontend 並在右上角單擊 Run query
    現在,您應該看到一個 trace 列表,每個 trace 代表由負載生成器執行的特定 HTTP 請求:

注意:來自不同服務的 spans 可能在不同的時間到達存儲,這解釋了 <root span not yet received> 消息。最終,應該可以使用 root span。

  1. 將數據源切換到您的 metrics 數據源,並輸入一個查詢,例如:
    rate(calls_total{service_name="frontend"}[5m])
    您應該開始在圖形中看到線條,每一條都代表特定 HTTP 返回代碼的 HTTP 請求率:
  2. 將數據源切換到您的日誌數據源,然後輸入一個查詢,例如:
    ```{exporter="OTLP"} | json | resources_k8s_container_name=`frontend````

注意:目前,OpenTelemetry Collector 的日誌功能尚在開發中。也就是說,您可以使用一些組件從如 journald 和本地磁盤文件等來源捕獲日誌條目,然後將它們轉換為 OTLP 數據並使它們對像 OTLP 和 Loki exporters 這樣的導出器可用。我們目前缺乏可以從我們的容器或 Kubernetes pods 抓取日誌條目的接收器。因此,我們的示例部署了一個 OpenTelemetry Collector 作為 DaemonSet,在 pod 上掛載 logs node 路徑。我們使用 filelog 接收器來讀取 pods 的日誌。

您應該看到 frontend 服務的幾個日誌條目:

總結

OpenTelemetry 示範包含了多個微服務,模擬了常見的分布式系統模式。每一個服務都使用 OpenTelemetry SDK 進行了儀表化,並使用 OTLP Exporter 為各自的 SDK 導出它的遙測數據。每個微服務都將遙測數據發送到我們部署為 DaemonSet 的 Collector,然後 Collector 將數據發送到最終目的地:Grafana Cloud 的各個數據庫,如 Grafana Cloud Metrics 和 Grafana Cloud Traces。我們還讓 Collector 抓取集群中的 pods 的本地日誌文件,將原始日誌行轉換為 OTLP,最終將它們導出到 Grafana Cloud Logs。

故障排除

  1. 如果您遇到速率限制錯誤,如:
    the request has been rejected because the tenant exceeded the ingestion rate limit, set to 1500 items/s with a maximum allowed burst of 15000
    請減少從負載生成器(http://localhost:8080/loadgen/)產生的合成用戶數量和生成速率。

  2. Grafana Cloud Traces 的 URL 只應包含主機名和端口。在我們的例子中,它應該是 tempo-us-central1.grafana.net:443。否則,可能會出現以下錯誤:
    transport: Error while dialing dial tcp: address tempo-us-central1.grafana.net/tempo: missing port in address

總結

在本文中,您學會了如何通過 OpenTelemetry Collector 將生成 OTLP 數據的應用程序連接到 Grafana Cloud Metrics 和 Grafana Cloud Traces。您還學會了如何獲取本地日誌並將它們發送到 Grafana Cloud Logs。雖然這仍然是 Grafana Cloud 中有 SLA 的官方支持的解決方案,但我們鼓勵您嘗試我們的新 OTLP 端點,它簡化了本指南中使用的許多配置。


上一篇
Day12- GPT 陪我讀 Grafana OpenTelemetry
下一篇
Day14- GPT 陪我讀 OpenTelemetry Collector Use Case 1 Fan out
系列文
GPT伴我讀一些文件31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言