系列文章
配置 Jaeger data source
Grafana內建了對Jaeger的支援,它提供了開源的端到端分散式跟蹤。本文解釋了針對Jaeger資料來源的配置和查詢。
關鍵的配置如下:
- URL: Jaeger 例項的 URL, 如:
http://localhost:16686
或http://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 設定配置了 traces 到 logs 的功能,當你將 Grafana 與 Jaeger 整合時,該功能是可用的。
有兩種方法可以配置 trace 到 logs 的功能:
- 使用帶有預設查詢的簡化配置,或
- 配置一個自定義查詢,你可以使用模板語言從 trace 或 span 中插入變數。
使用簡化配置
- 選擇目標資料來源。
- 設定開始和結束時間的偏移。由於日誌的時間戳可能與 trace 中的 span 的時間戳不完全匹配,可能需要在更大的或移位的時間範圍內搜尋以找到所需的日誌。
- 選擇要在日誌查詢中使用的標籤。你配置的標籤必須存在於 span 屬性或資源中,才能出現 trace 到 logs span 連結。你可以選擇為標籤配置一個新的名字。如果標籤的名稱中有圓點,而目標資料來源不允許標籤中有圓點,這就很有用(如上圖)。在這種情況下,你可以,比如說,把
http.status
改成http_status
。 - 如果你的日誌一直包含 trace ID 或 span ID,可以選擇開啟 Filter by trace ID 和/或 Filter by span ID 的設定來進一步過濾日誌。
使用自定義 Query
- 選擇目標資料來源。
- 設定開始和結束時間的偏移。由於日誌的時間戳可能與 trace 中的 span 的時間戳不完全匹配,你可能需要擴大或偏移時間範圍以找到所需的日誌。
- 可選地,選擇要對映的標籤。這些標籤可以用
${__tags}
變數在自定義查詢中使用。這個變數將以適當的語法為資料來源插值對映的標籤,並只包括 span 中存在的標籤,省略那些不存在的標籤。您可以選擇為標籤配置一個新的名稱。這在標籤的名稱中有圓點而目標資料來源不允許標籤中有圓點的情況下很有用。例如,你可以將http.status
重新對映為http_status
。如果你不在這裡對映任何標籤,你仍然可以在查詢中使用任何標籤,比如method="${__span.tags.method}"
。 - 跳過 Filter by trace ID 和 Filter by span ID 設定,因為它們不能用於自定義查詢。
- 開啟 Use custom query。
- 指定一個用於查詢日誌的自定義查詢。你可以使用各種變數來使該查詢與當前 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 的開始時間,偏移日誌查詢的開始時間。你可以使用時間單位,如5s ,1m ,3h 。要把時間延長到過去,則使用一個負值。預設值: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 toggle 的traceToMetrics
後可見.
Trace to metrics 設定配置了 Grafana 與 Jaeger 整合時可用的 trace 到 metrics 功能。
要配置 trace to metrics:
- 選擇目標資料來源。
- 建立需要的連結查詢。
Setting name | Description |
---|---|
Data source | 定義目標資料來源. |
Tags | 定義了連結查詢中使用的標籤。鍵值設定 span 屬性名稱,可選值設定相應的metric 標籤名稱。例如,你可以將k8s.pod 對映為pod 。要把這些標籤插進查詢中,請使用$__tags 關鍵字。 |
每個連結查詢包括:
- Link Label: (可選項) 連結查詢的描述性標籤。
- Query: 從 trace 跳轉到 metric 資料來源時執行的查詢。使用
$__tags
關鍵字對標籤進行插值。例如,當你配置查詢requests_total{$__tags}
時,標籤為k8s.pod=pod
和cluster
,結果看起來像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 編寫.