菜单
开源

创建自定义服务图

您可以基于指标生成器生成的指标创建自定义服务图。

开始之前

对于自定义服务图,您将使用

指标生成器会创建多个指标,包括 traces_service_graph_request_total。此指标包含

  • 服务之间的关系
  • 服务之间执行的总请求数

创建或多个 Grafana 仪表盘

  1. 在 Grafana 中,创建一个新仪表盘
  2. 添加两个变量
    • 类型为 Prometheus 的数据源。Custom service graph Grafana data source variable
    • 类型为 Label values 的服务,启用多值选项 Custom service graph service variable

添加一个面板

  1. 创建一个包含名为 edges 的单个查询的面板。
  2. 选择包含指标生成器指标的 Prometheus 数据源。
  3. 使用以下示例查询
    label_join(
      label_join(
        label_join(
          sum(increase(traces_service_graph_request_total{server=~"$service"}[5m])) by (server, client) > 0
          or
          sum(increase(traces_service_graph_request_total{client=~"$service"}[5m])) by (server, client) > 0,
        "source", "", "client"),
      "target", "", "server"),
    "id", "-", "server", "client")
  4. 使用即时查询类型(Instant query)。
  5. 如果您遇到问题,请切换到表格数据可视化。有关更多选项和预期数据形状,请参阅节点图面板文档。

Custom service graph panel view

所有数据转换均使用 Prometheus label_join 运算符完成。

查询解释

  • 第一个 label_join 创建了一个新字段 id,这是节点图面板所必需的。
  • 第二个和第三个 label_join 分别将 client 和 server 标签复制到 source 和 target,因为这些名称也是节点图面板所必需的。
  • traces_service_graph_request_total 使用 OR 运算符查询两次,以获取所有选定服务之间相互的请求组合。

此查询完成了大部分工作。但是,即使使用 Grafana 的数据转换功能也无法弥补其局限性。这些局限性包括

  • 无法向节点和边缘添加请求统计信息,例如 req/sec 和错误率
  • 无法为节点添加自定义图标

通过将 Prometheus 查询封装到 REST API 中可以克服这些限制,REST API 为查询结果数据转换提供了更大的灵活性。您可以使用 Grafana Infinity 数据源来可视化 REST API 中的数据。