- 另一个仪表盘,用于聚焦查看该条目,例如某个服务的详情仪表盘,或者
- 搜索中的底层事件,用于查看该行背后的日志或链路追踪。
在专属仪表盘中查看服务
Service Detail 仪表盘配合使用。
构建服务清单
在概览仪表盘上,基于你的链路追踪数据源添加一个按ServiceName 分组的 表格 卡片。为它添加用于衡量各服务的 RED 列,每一列都是一个带别名的序列:Requests:span 数量 (速率) 。Errors:错误状态的 span 数量。P95 Duration:Duration的 95 分位数。将该列的数字格式设置为耗时格式,这样它会显示为288ms,而不是原始纳秒值。
Requests 降序排序,让最繁忙的服务排在最前面。这个表就是清单:每个服务一行,按 RED 指标打分。配置行点击动作
在清单表上,打开 Row Click Action,选择 仪表盘,然后从仪表盘列表中选择Service Detail。直接选择该仪表盘会按 ID 固定关联。即使之后重命名仪表盘,链接仍然有效;导出再导入仪表盘后,它也仍可继续使用。 (Template 选项仅用于为每一行选择不同的仪表盘;参见设置行点击动作。)由于 Service Detail 声明了一个 ServiceName 自定义过滤器,侧边抽屉会为该表达式预填一个空过滤器。填写它的模板:- 表达式:
ServiceName(已预填) - 模板:
{{ServiceName}}
ServiceName 过滤器。点击一行
将鼠标悬停在某一行上时,表格右侧边缘会显示一个链接入口,并附带说明该操作的提示 (Open dashboard \"Service Detail\") 。点击该行会打开 Service Detail 仪表盘,并将其中的 Service 过滤器设置为被点击的值,因此所有卡片 (RED 关键指标、延迟百分位数、各端点明细) 都会在一次点击后重新限定到该服务。从服务跳转到其链路追踪
将行点击指向搜索
在清单表中,打开 Row Click Action 并选择 搜索。选择你的链路追踪数据源 (这里只会列出日志和 trace 数据源) 。添加一个过滤器:- Expression:
ServiceName - Template:
{{ServiceName}}
点击一行
现在,点击某个服务行会在该链路追踪数据源上打开搜索页面,并按ServiceName = <service> 过滤,因此你会直接看到相同时间范围内仅属于该服务的 spans。SpanName) 或某个端点属性对表进行分组,而不是按 ServiceName,再用该列为过滤器设置模板,这样每次点击行时,都会打开该操作或端点对应的事件。若要按 map 属性分组,请参阅验证与限制下方关于别名的说明。
设置行点击操作
Row Click Action: Default、Row Click Action: Search 或 Row Click Action: Dashboard。点击它即可打开抽屉面板。
抽屉面板提供三种操作:
- Default:内置行为。点击某一行会打开搜索页面,并按该行的 group-by 列值和所选时间范围进行过滤。这就是未设置自定义操作时的默认行为。
- Search:将点击发送到你选择的数据源的搜索页面。
- Dashboard:将点击发送到你团队拥有的另一个仪表盘。
- Destination:选择一个特定的数据源或仪表盘,或者选择 Template 并输入一个 Handlebars 模板,按名称匹配可用的数据源或仪表盘。选择特定目标会通过 ID 将其固定。对于单一固定目标,建议优先使用这种方式:它在重命名以及仪表盘导出、导入后仍然有效;对于仪表盘,它还会预填目标端已声明的过滤器。如果目标需要根据每一行动态变化,则使用 Template,通过引用某个行列来决定目标 (例如
Errors-{{ServiceName}}) 。 - Filters:点击 Add filter,然后提供一个 Expression (目标端上的某个列或表达式,例如
ServiceName) 以及该值对应的 Template (例如{{ServiceName}}) 。模板通过{{columnName}}引用被点击行的列 (哪些列可用,请参见下方说明) 。每个过滤器都会在目标端渲染为一个expression IN (value)条件,具有相同表达式的过滤器会被合并。当目标端是仪表盘时,抽屉面板会为该仪表盘已声明的每个过滤器预填一个空过滤器,因此你只需填写模板即可。 - WHERE (可选) :一个会被渲染到目标端全局过滤器中的 Handlebars 模板,附加在上述逐个过滤器条件之外。将其查询语言设置为 SQL 或 Lucene,以便目标端能够解析它。例如,SQL 模板
ServiceName = '{{ServiceName}}'会将目标端范围限定到被点击行对应的 service。
模板引用的是表中的列
{{...}} 模板是基于表格卡片自身的列解析的:包括 group-by 列,以及每个 series (按其名称或别名) ,且名称与它们在表中的显示完全一致。它无法访问底层数据源中那些未被表选出的列。某个值必须是表中的一列,才能在点击时被传递过去,因此 {{ServiceName}} 能生效,是因为 ServiceName 是表的 group-by 列;而带别名的列则需要通过其别名来引用。引用表中不存在的名称会导致点击失败,并报错 Row has no column '<name>'。目标端和过滤器如何解析
- 目标端。 选择特定的数据源或仪表盘时,会通过 ID 将其固定。Template 目标端会基于被点击的行进行渲染,然后按名称与你团队中的数据源或仪表盘匹配。要成功解析,名称必须唯一:如果两个数据源或两个仪表盘使用相同的渲染后名称,该链接就无法解析到其中任何一个。若渲染后的名称为空,或名称没有匹配项,也会解析失败。
- 过滤器。 每个过滤器模板都会基于该行进行渲染,并在目标端转换为
expression IN (value)条件。Search操作会打开限定到所选数据源范围的/search;Dashboard操作会打开相应的仪表盘。在这两种情况下,被点击行的时间范围都会一并带过去。
仪表盘目标端需要声明匹配的过滤器只有当目标端仪表盘声明了一个顶层自定义过滤器,并且其表达式与该过滤器的 Expression 匹配时,传入仪表盘的过滤器才会生效。如果没有任何已声明的过滤器匹配,该值会在点击时被丢弃,目标端将针对该表达式在未过滤状态下打开。这就是为什么仪表盘模式会预先填充目标端中已声明的过滤器:只要表达式匹配,目标端下拉菜单就会自动填入被点击行的值。
验证与限制
- 仅适用于表格卡片。 Row Click Action 按钮只会显示在表格卡片中,包括图表构建器中的表格和基于 SQL 的表格。其他类型的卡片不支持行点击操作。
- 搜索目标必须是日志或链路追踪数据源。 不提供指标和会话数据源,因为它们无法在搜索页面中查看。
- 模板名称必须唯一。 模板目标按名称解析,因此不能将两个同名的数据源或两个同名的仪表盘用作模板目标。
- 仪表盘目标需要有匹配的已声明过滤器,携带的值才能生效 (见上文说明) 。
- 表达式 group-by 列需要别名。 对表达式进行 group-by (例如 map 属性
SpanAttributes['http.route']) 时,生成的结果列名会直接使用原始表达式,这在模板中引用时会很不方便。请在图表构建器中为该列指定别名:在 Group By 输入框中,在表达式后添加AS <alias>(例如SpanAttributes['http.route'] AS Route) ,然后在模板中引用{{Route}}。聚合 series 也同样会从其 Alias 字段获取别名。像ServiceName这样的普通列在 group-by 后本身就有清晰的名称,不需要别名。