系列文章
配置 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 行中显示额外的信息。
你可以从三个选项中选择一个:
Trace to logs
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}
。
下表描述了你可以配置 Trace to logs 设置的方式:
Trace to metrics
Trace to metrics 设置配置了 Grafana 与 Jaeger 集成时可用的 trace 到 metrics 功能。
要配置 trace to metrics:
- 选择目标数据源。
- 创建需要的链接查询。
每个链接查询包括:
- 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