桑基图 (Sankey Diagram),是一种特定类型的流图,用于描述一组值到另一组值的流向。适合网络流量等场景,通常包含3组值sourcetarget以及valuesourcetarget描述了节点的关系,而value描述了该sourcetarget之间边的关系。

功能特点

桑基图具有以下特点:

  • 起始流量和结束流量相同,所有主支宽度的总和与所有分出去的分支宽度总和相等,保持能量的平衡。
  • 在内部,不同的线条代表了不同的流量分流情况,它的宽度成比例地显示此分支占有的流量。
  • 节点不同的宽度代表了特定状态下的流量大小。
例如以下数据可以用桑基图表示:
source target value
node1 node2 14
node1 node3 12
node3 node4 5
..

桑基图如此描述上述数据的关系:

图 1. 桑基图的数据关系


基本构成

  • 节点

配置项

配置项 说明
起点列 描述起始节点。
终点列 描述终点节点。
数值列 链接起点节点和终点节点的值。
间距 坐标轴距离图表边界距离。

使用步骤

  1. 键入查询语句,选择时间区间后点击右侧查询按钮。
  2. 选择桑基图
  3. 配置图表属性。

示例

普通桑基图

如果日志字段包含了 sourcetargetvalue,即每条日志本身就是节点和边的关系,可以通过嵌套子查询获取到 steamValue的总和。
* | select sourceValue, targetValue, sum(streamValue) as streamValue from (select sourceValue, targetValue,
 streamValue, __time__ from log group by  sourceValue, targetValue, streamValue, __time__ order by __time__ desc) group by sourceValue,
 targetValue
图 2. 普通桑基图


负载均衡7层访问日志场景

日志服务支持负载均衡7层访问日志,可以直接通过访问日志绘制桑基图。

* | select COALESCE(client_ip, slbid, host) as source, COALESCE(host, slbid, client_ip) as dest, sum(request_length) as inflow group by grouping sets( (client_ip, slbid), (slbid, host))
图 3. 嵌套子查询