Grafana系列-統一展示-9-Jaeger資料來源

東風微鳴發表於2023-05-14

系列文章

配置 Jaeger data source

Grafana內建了對Jaeger的支援,它提供了開源的端到端分散式跟蹤。本文解釋了針對Jaeger資料來源的配置和查詢。

關鍵的配置如下:

  • URL: Jaeger 例項的 URL, 如: http://localhost:16686http://localhost:16686/trace/
  • Enable Node Graph: ✔️. 一旦啟用,Grafana會在 trace 檢視上方顯示 Node Graph (鏈路拓撲圖)。

Span bar

Span bar 設定幫助你在 span 行中顯示額外的資訊。

你可以從三個選項中選擇一個:

Name Description
None 啥都不加.
Duration (預設) 在Span 行上顯示 span 持續時間。
Tag 在 span 行上顯示 span tag。你還必須指定使用哪個標籤鍵來獲取標籤值,如span.kind

Trace to logs

?Notes:

Trace to logs 功能只支援部分日誌解決方案
Grafana Loki 和 Splunk 是支援的, ElasticSearch 是不支援的.

Trace to logs settings

Trace to logs 設定配置了 traces 到 logs 的功能,當你將 Grafana 與 Jaeger 整合時,該功能是可用的。

有兩種方法可以配置 trace 到 logs 的功能:

  • 使用帶有預設查詢的簡化配置,或
  • 配置一個自定義查詢,你可以使用模板語言從 trace 或 span 中插入變數。

使用簡化配置

  1. 選擇目標資料來源。
  2. 設定開始和結束時間的偏移。由於日誌的時間戳可能與 trace 中的 span 的時間戳不完全匹配,可能需要在更大的或移位的時間範圍內搜尋以找到所需的日誌。
  3. 選擇要在日誌查詢中使用的標籤。你配置的標籤必須存在於 span 屬性或資源中,才能出現 trace 到 logs span 連結。你可以選擇為標籤配置一個新的名字。如果標籤的名稱中有圓點,而目標資料來源不允許標籤中有圓點,這就很有用(如上圖)。在這種情況下,你可以,比如說,把http.status改成http_status
  4. 如果你的日誌一直包含 trace ID 或 span ID,可以選擇開啟 Filter by trace ID 和/或 Filter by span ID 的設定來進一步過濾日誌。

使用自定義 Query

  1. 選擇目標資料來源。
  2. 設定開始和結束時間的偏移。由於日誌的時間戳可能與 trace 中的 span 的時間戳不完全匹配,你可能需要擴大或偏移時間範圍以找到所需的日誌。
  3. 可選地,選擇要對映的標籤。這些標籤可以用 ${__tags} 變數在自定義查詢中使用。這個變數將以適當的語法為資料來源插值對映的標籤,並只包括 span 中存在的標籤,省略那些不存在的標籤。您可以選擇為標籤配置一個新的名稱。這在標籤的名稱中有圓點而目標資料來源不允許標籤中有圓點的情況下很有用。例如,你可以將 http.status 重新對映為 http_status。如果你不在這裡對映任何標籤,你仍然可以在查詢中使用任何標籤,比如method="${__span.tags.method}"
  4. 跳過 Filter by trace IDFilter by span ID 設定,因為它們不能用於自定義查詢。
  5. 開啟 Use custom query
  6. 指定一個用於查詢日誌的自定義查詢。你可以使用各種變數來使該查詢與當前 span 相關。只有當所有的變數都以非空值插值時,該連結才會出現,以防止建立一個無效的查詢。
可以在自定義查詢中使用的 Variables

要使用一個變數,你需要用${}來包裹它。例如:${__span.name}

Variable name Description
__tags 該變數使用來自使用者介面的標籤對映,以特定的資料來源語法建立一個標籤匹配器字串。該變數只使用 span 中存在的標籤。即使這些標籤中只有一個存在於 span 中,連結仍然被建立。如果查詢不需要所有的標籤,你可以使用這個。
__span.spanId Span 的 ID
__span.traceId Trace 的 ID
__span.duration Span 的持續時間
__span.name Span 的名稱
__span.tags span中標籤的名稱空間。要訪問一個名為 "version" 的特定標籤,你可以使用${__span.tags.version}。如果標籤包含點,你必須以${__span.tags["http.status"]}的方式訪問它。
__trace.traceId Trace 的 ID
__trace.duration Trace 的持續時間
__trace.name Trace 的名稱

下表描述了你可以配置 Trace to logs 設定的方式:

Setting name Description
Data source 定義目標資料來源。你可以只選擇Loki或Splunk logs 資料來源。
Span start time shift 根據 span 的開始時間,偏移日誌查詢的開始時間。你可以使用時間單位,如5s1m3h。要把時間延長到過去,則使用一個負值。預設值:0
Span end time shift 根據 span 的結束時間,轉移日誌查詢的結束時間。你可以使用時間單位。預設:0
Tags 定義了在日誌查詢中使用的標籤。預設:cluster, hostname, namespace, pod。你可以改變標籤的名稱,例如,如果目標資料來源中不允許使用點,可以從名稱中刪除點。例如,將http.status對映為http_status
Filter by trace ID 切換是否在日誌查詢中附加trace ID。
Filter by span ID 切換是否將span ID附加到日誌查詢中。
Use custom query 切換可以使用插值的自定義查詢。
Query 輸入來編寫自定義查詢。使用變數插值,用 span 的變數來定製它。

Trace to metrics

?Notes:
需要配置 feature toggletraceToMetrics 後可見.

Trace to metrics 設定配置了 Grafana 與 Jaeger 整合時可用的 trace 到 metrics 功能。

要配置 trace to metrics:

  1. 選擇目標資料來源。
  2. 建立需要的連結查詢。
Setting name Description
Data source 定義目標資料來源.
Tags 定義了連結查詢中使用的標籤。鍵值設定 span 屬性名稱,可選值設定相應的metric 標籤名稱。例如,你可以將k8s.pod對映為pod。要把這些標籤插進查詢中,請使用$__tags關鍵字。

每個連結查詢包括:

  • Link Label: (可選項) 連結查詢的描述性標籤。
  • Query: 從 trace 跳轉到 metric 資料來源時執行的查詢。使用 $__tags 關鍵字對標籤進行插值。例如,當你配置查詢 requests_total{$__tags} 時,標籤為k8s.pod=podcluster,結果看起來像requests_total{pod="nginx-554b9", cluster="us-east-1"}

Jaeger 資料來源配置示例

Jaeger 資料來源配置示例 YAML 如下:

apiVersion: 1

datasources:
  - name: Jaeger
    type: jaeger
    uid: EbPG8fYoz
    url: http://localhost:16686
    access: proxy
    basicAuth: true
    basicAuthUser: my_user
    readOnly: false
    isDefault: false
    jsonData:
      tracesToLogsV2:
        # Field with an internal link pointing to a logs data source in Grafana.
        # datasourceUid value must match the uid value of the logs data source.
        datasourceUid: 'loki'
        spanStartTimeShift: '1h'
        spanEndTimeShift: '-1h'
        tags: ['job', 'instance', 'pod', 'namespace']
        filterByTraceID: false
        filterBySpanID: false
        customQuery: true
        query: 'method="${__span.tags.method}"'
      tracesToMetrics:
        datasourceUid: 'prom'
        spanStartTimeShift: '1h'
        spanEndTimeShift: '-1h'
        tags: [{ key: 'service.name', value: 'service' }, { key: 'job' }]
        queries:
          - name: 'Sample query'
            query: 'sum(rate(traces_spanmetrics_latency_bucket{$__tags}[5m]))'
      nodeGraph:
        enabled: true
      spanBar:
        type: 'None'
    secureJsonData:
      basicAuthPassword: my_password

EOF

三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.

相關文章