> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ClickStack 可视化与仪表盘

> ClickStack 可视化与仪表盘

export const Image = ({img, alt, size = "lg", background}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  const backgroundColor = background === "white" ? "white" : background === "black" ? "rgb(31 31 28)" : undefined;
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} style={{
    backgroundColor
  }} />
      </Frame>
    </div>;
};

ClickStack 支持事件可视化，并在 ClickStack UI (HyperDX) 中内置了图表功能。这些图表可以添加到仪表盘中，与其他用户共享。

可视化可以基于链路追踪、指标、日志或任何用户定义的 wide 事件 schema 创建。

<div id="creating-visualizations">
  ## 创建可视化
</div>

HyperDX 中的 **Chart Explorer** 界面可让你按时间维度将指标、trace 和日志可视化，便于快速创建用于数据分析的可视化内容。该界面在创建仪表盘时也会复用。下面将介绍如何使用 Chart Explorer 创建可视化。

每个可视化都从选择**数据源**开始，然后选择**指标**，并可按需添加**过滤表达式**和 **group by** 字段。从概念上讲，HyperDX 中的可视化在底层对应的是 SQL `GROUP BY` 查询——你需要定义要在所选维度上聚合的指标。

<Tip>
  **AI 驱动的图表生成**

  ClickStack 还支持通过 [text-to-chart](/zh/clickstack/text-to-chart) 功能，使用自然语言提示词创建图表。只需描述你想看到的内容，ClickStack 就会自动生成可视化。
</Tip>

例如，你可以绘制按服务名称分组的错误数量 (`count()`) 图表。

在下面的示例中，我们使用 [sql.clickhouse.com](https://sql.clickhouse.com) 上提供的远程数据集，详见指南 ["远程演示数据集"](/zh/clickstack/example-datasets/remote-demo-data)。**你也可以访问 [play-clickstack.clickhouse.com](https://play-clickstack.clickhouse.com) 来复现这些示例。**

<Steps>
  <Step title="前往 Chart Explorer" id="navigate-chart-explorer">
    从左侧菜单中选择 `Chart Explorer`。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/h6hThzQB7qVx2xlB/images/use-cases/observability/clickstack-visualization-1.webp?fit=max&auto=format&n=h6hThzQB7qVx2xlB&q=85&s=2fc58a35cb3fb55a709a35819034c081" alt="Chart Explorer" size="lg" width="3838" height="1986" data-path="images/use-cases/observability/clickstack-visualization-1.webp" />
  </Step>

  <Step title="创建可视化" id="create-visualization">
    在下面的示例中，我们绘制按服务名称区分的平均请求耗时随时间变化的图表。这要求用户指定一个指标、一列 (可以是 SQL 表达式) 以及一个聚合字段。

    从顶部菜单中选择 `Line/Bar` 可视化类型，然后选择 `Traces` 数据集 (如果使用 [play-clickstack.clickhouse.com](https://play-clickstack.clickhouse.com)，则选择 `Demo Traces`) 。填写以下值：

    * 指标：`Average`
    * 列：`Duration/1000`
    * Where：`<empty>`
    * Group By：`ServiceName`
    * 别名：`Average Time`

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/h6hThzQB7qVx2xlB/images/use-cases/observability/clickstack-visualization-2.webp?fit=max&auto=format&n=h6hThzQB7qVx2xlB&q=85&s=30bba407381b686e8bc98481e1e5004c" alt="Simple visualization" size="lg" width="3838" height="1986" data-path="images/use-cases/observability/clickstack-visualization-2.webp" />

    请注意，你既可以使用 SQL `WHERE` 子句，也可以使用 Lucene 语法来过滤事件，并设置事件可视化的时间范围。还支持多个数据系列。

    例如，添加过滤器 `ServiceName:"frontend"`，按 `frontend` 服务进行过滤。点击 `Add Series`，添加第二个表示事件数量随时间变化的数据系列，并将别名设为 `Count`。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/h6hThzQB7qVx2xlB/images/use-cases/observability/clickstack-visualization-3.webp?fit=max&auto=format&n=h6hThzQB7qVx2xlB&q=85&s=573706a748ac5743a02c9eba3d31cbc8" alt="Simple visualization 2" size="lg" width="3838" height="1986" data-path="images/use-cases/observability/clickstack-visualization-3.webp" />

    若要基于现有数据系列创建一个类似的新数据系列，你可以直接复制，而不必从头开始。点击某个数据系列行上的复制图标 (`Duplicate series`)，即可在其正下方插入一个副本。副本会保留原数据系列的设置，例如指标、列和过滤器。然后你只需修改不同的字段 (例如聚合方式) ，并为副本设置自己的别名。在所有支持多个数据系列 的地方都可以使用复制功能。对于仅允许一个数据系列 的可视化类型，例如 `数值`、`Pie` 和 `Heatmap`，则会隐藏该功能。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/h6hThzQB7qVx2xlB/images/use-cases/observability/clickstack-duplicate-series.webp?fit=max&auto=format&n=h6hThzQB7qVx2xlB&q=85&s=e9c9710015bc9ee1bede5d02ab4ef039" alt="The Duplicate series copy icon and its tooltip on a chart series row" size="lg" width="3348" height="322" data-path="images/use-cases/observability/clickstack-duplicate-series.webp" />

    <Note>
      可以基于任何数据源创建可视化——无论是指标、trace 还是日志。ClickStack 将这些统一视为宽事件。任何**数值列**都可以按时间绘制成图，而**字符串**、**日期**或**数值**列都可用于分组。

      这种统一方式使你能够基于一致且灵活的模型，跨不同类型的遥测数据构建仪表盘。
    </Note>
  </Step>
</Steps>

<div id="creating-dashboards">
  ## 创建仪表盘
</div>

仪表盘可用于将相关的可视化分组，让您能够并排比较指标并分析规律，从而识别系统中潜在的根因。这些仪表盘既可用于临时调查，也可保存下来用于持续监控。

可以在仪表盘级别应用全局过滤器，并自动传递到该仪表盘中的所有可视化。这使您能够在各个图表之间进行一致的下钻，并简化跨服务和不同遥测类型的事件关联。

下面我们将使用日志和 trace 数据源创建一个包含两个可视化的仪表盘。如指南 ["远程演示数据集"](/zh/clickstack/example-datasets/remote-demo-data) 所述，这些步骤可以在 [play-clickstack.clickhouse.com](https://play-clickstack.clickhouse.com) 上复现，也可以通过连接到托管在 [sql.clickhouse.com](https://sql.clickhouse.com) 上的数据集在本地复现。

<Steps>
  <Step title="前往仪表盘" id="navigate-dashboards">
    在左侧菜单中选择 `Dashboards`。然后点击 `New Dashboard`，创建临时仪表盘或已保存的仪表盘。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-1.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=152eeac3adf7c96c11de66d364254ec4" alt="创建仪表盘" size="lg" width="1467" height="595" data-path="images/use-cases/observability/hyperdx-dashboard-1.webp" />
  </Step>

  <Step title="创建可视化——按服务查看平均请求耗时" id="create-a-tile">
    选择 `Add New Tile`，打开可视化创建面板。

    在顶部菜单中选择 `Line/Bar` 可视化类型，然后选择 `Traces` 数据集 (如果使用 [play-clickstack.clickhouse.com](https://play-clickstack.clickhouse.com)，则选择 `Demo Traces`) 。填写以下值，以创建一个按服务名称展示平均请求耗时随时间变化的图表：

    * 图表名称：`Average duration by service`
    * 指标：`Average`
    * 列：`Duration/1000`
    * Where：`<empty>`
    * Group By：`ServiceName`
    * 别名：`Average Time`

    点击 `Save` 之前，先点击 **play** 按钮。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-2.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=b838b83c0b2d35a10f409ef69d6da2f4" alt="创建仪表板可视化" size="lg" width="3600" height="1930" data-path="images/use-cases/observability/hyperdx-dashboard-2.webp" />

    调整可视化大小，使其占满仪表板的整个宽度。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-3.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=697ed0006739475043d6e0fe1a0e488d" alt="包含可视化内容的仪表板" size="lg" width="3600" height="1930" data-path="images/use-cases/observability/hyperdx-dashboard-3.webp" />
  </Step>

  <Step title="创建可视化——按服务查看事件随时间的变化" id="create-a-tile-2">
    选择 `Add New Tile` 打开可视化创建面板。

    从顶部菜单中选择 `Line/Bar` 可视化类型，然后选择 `Logs` 数据集 (如果使用 [play-clickstack.clickhouse.com](https://play-clickstack.clickhouse.com)，则选择 `Demo Logs`) 。填写以下值，以创建一个按服务名称展示事件计数随时间变化的图表：

    * 图表名称：`Event count by service`
    * 指标：`Count of Events`
    * 条件：`<empty>`
    * 分组依据：`ServiceName`
    * 别名：`Count of events`

    点击 `Save` 前，先点击 **play** 按钮。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-4.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=b4055fc7688d74bab6ad1d576e6aec86" alt="仪表板可视化 2" size="lg" width="3600" height="1930" data-path="images/use-cases/observability/hyperdx-dashboard-4.webp" />

    调整可视化大小，使其占满整个仪表板宽度。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-5.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=1b4906be2f6be326e08cf89981f52913" alt="带可视化内容的仪表板 2" size="lg" width="3600" height="1930" data-path="images/use-cases/observability/hyperdx-dashboard-5.webp" />
  </Step>

  <Step title="为 span 耗时添加热力图卡片" id="create-a-tile-heatmap">
    热力图卡片会将落入每个 (时间、值) bucket 的事件数绘制成彩色网格。当你想查看某个分布随时间变化的**形态**，而不只是平均值或某一个百分位数时，应使用热力图。延迟热力图能够揭示双峰耗时模式、慢尾聚集或突发扩散，而这些现象在线图中往往会被平均掉。

    要添加热力图卡片：

    1. 选择 `Add New Tile`。
    2. 从顶部菜单中选择 `Heatmap` 可视化类型。数据源下拉列表只会显示[source type is `Traces`](/zh/clickstack/managing/config#traces) 的数据源。日志、指标和 session 数据源会被过滤掉，因为热力图需要 span 耗时列，而这只有 traces 数据源才提供。
    3. 按名称选择任意一个 traces 数据源。名称本身是任意的，关键在于类型。

    选择数据源后，热力图会预填以下内容：

    * **Value**：该数据源的 `Duration Expression`，并按当前显示单位进行缩放 (例如 `(Duration)/1e6`，将每个事件的 span 耗时从纳秒转换为毫秒)
    * **Count**：`count()`

    4. 设置图表名称，并使用 `Where` 将热力图限定到你想观察其性能的特定服务或一组操作。
    5. 调整时间范围以匹配你关注的时间段。较大的时间范围可以揭示分布偏移和双峰延迟模式，而较短的时间窗口可能会掩盖这些现象。

    下面的示例展示了一个服务在 24 小时时间窗口内的情况，其 span 耗时的快路径和慢路径清晰地分离成两条水平带。

    如需进一步自定义热力图，请点击 **Display Settings** 打开抽屉面板，以设置 **Scale** (Log 或 Linear) 、**Value** 和 **Count** 表达式。完整选项列表记录在 Event Deltas 页面的 [Customize the heatmap](/zh/clickstack/features/event-deltas#customize) 中。这里复用了同一个抽屉面板。

    点击 `Run` 预览图表，然后点击 `Save`。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/heatmap-tile-editor.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=270e19f4c0837809b47d6ee5698aa704" alt="已预填 span 耗时默认值、ServiceName payment 过滤条件和 Display Settings 按钮的热力图卡片编辑器" size="lg" width="1600" height="900" data-path="images/clickstack/dashboards/heatmap-tile-editor.webp" />

    保存后的卡片会在仪表盘上渲染为热力图。将鼠标悬停在任意单元上，即可查看 bucket 边界和事件数。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/heatmap-tile-rendered.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=8219db01f97ddd1e6f0f79424b1b8183" alt="显示 payment 服务在 24 小时内 span 耗时分布的热力图仪表盘卡片" size="lg" width="1600" height="900" data-path="images/clickstack/dashboards/heatmap-tile-rendered.webp" />

    <Tip>
      **每个热力图会执行两条 ClickHouse 查询**

      热力图会按顺序执行两条查询：先执行一个较小的**边界查询**来确定值范围，再执行一个**热力图查询**来统计每个 bucket 中的事件数。如果你想查看或复制它们，这两条查询都可以在编辑器的 **Generated SQL** 下看到。
    </Tip>

    #### 下钻到 Event Deltas

    点击已渲染热力图卡片中的任意单元，即可打开 **View in Event Deltas** 操作。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/heatmap-tile-drilldown.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=01ba8e72b1f2df1556f89532d60075cd" alt="点击热力图单元后显示 View in Event Deltas 操作" size="lg" width="1600" height="900" data-path="images/clickstack/dashboards/heatmap-tile-drilldown.webp" />

    选择它后，会打开 [Event Deltas](/zh/clickstack/features/event-deltas) 视图，并带入该卡片的数据源、`Where` 子句和时间范围。在那里，你可以交互式检查同一分布，按 attribute 切分以查看慢 spans 与快 spans 的差异，并查看任意单元背后的各个 spans，而无需手动重新构建查询。
  </Step>

  <Step title="筛选仪表板" id="filter-dashboards">
    可在仪表板级别应用 Lucene 或 SQL 过滤器以及时间范围，这些设置会自动同步到所有可视化中。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-filter.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=fb9eb1932d81d0aa9b290d446f097f2b" alt="带筛选条件的仪表板" size="lg" width="3600" height="1930" data-path="images/use-cases/observability/hyperdx-dashboard-filter.webp" />

    为演示这一点，请将 Lucene 过滤器 `ServiceName:"frontend"` 应用到仪表板，并将时间窗口调整为最近 3 小时。注意，此时所有可视化都只显示来自 `frontend` 服务的数据。

    仪表板会自动保存。要设置仪表板名称，请选中标题并进行修改，然后点击 `Save Name`。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-save.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=e99edb5cd5be527c85f858d2931de92c" alt="保存仪表板" size="lg" width="3600" height="1930" data-path="images/use-cases/observability/hyperdx-dashboard-save.webp" />
  </Step>
</Steps>

<div id="dashboards-editing-visualizations">
  ## 仪表盘 - 编辑可视化
</div>

要删除、编辑或复制可视化，请将鼠标悬停在其上，然后使用相应的操作按钮。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-edit.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=1b9b13037ac31084c7bb513ed3854d1b" alt="编辑仪表盘" size="lg" width="3120" height="848" data-path="images/use-cases/observability/hyperdx-dashboard-edit.webp" />

<div id="tile-display-settings">
  ### 卡片显示设置
</div>

每个卡片都有一个 **Display Settings** 抽屉，用于控制其数值的显示方式。在卡片编辑器中点击 **Display Settings** 即可打开。可用选项取决于可视化类型。

<div id="number-tile-color">
  #### 数值卡片颜色
</div>

数值卡片支持从精选图表调色板中选择静态 **颜色**。选中数值卡片后，打开 **Display Settings**，使用 **颜色** 控件 (为实现无障碍访问，该控件标注为 **数值卡片颜色**) 选择色块；或者清除选择，以使用默认文本颜色。

颜色以调色板标记而非原始十六进制值的形式存储，因此同一卡片可在浅色、深色和 IDE 主题下正确适配。

**categorical 标记** (多数据系列色相) ：

| 标记                 | 标签  |
| ------------------ | --- |
| `chart-blue`       | 蓝色  |
| `chart-orange`     | 橙色  |
| `chart-red`        | 红色  |
| `chart-cyan`       | 青色  |
| `chart-green`      | 绿色  |
| `chart-pink`       | 粉色  |
| `chart-purple`     | 紫色  |
| `chart-light-blue` | 浅蓝色 |
| `chart-brown`      | 棕色  |
| `chart-gray`       | 灰色  |

**语义标记** (面向状态) ：

| 标记              | 标签      |
| --------------- | ------- |
| `chart-success` | 成功      |
| `chart-warning` | Warning |
| `chart-error`   | 错误      |

当数值表示状态时，请使用语义标记 (例如，使用 `chart-error` 表示错误计数，或使用 `chart-success` 表示健康率) 。如果希望在相关 KPI 卡片之间形成视觉区分，但不表达状态含义，请使用 categorical 标记。

较旧的配置可能仍存储 legacy 数值标记 (`chart-1` 到 `chart-10`) 。加载 仪表盘 时，ClickStack 会将这些标记映射为上述以色相命名的标记。

同一调色板还支持在同一抽屉中设置可选的 **颜色规则**：根据显示值评估有序条件 (最后匹配的规则生效) 。如果没有规则匹配，则应用静态颜色；若未设置静态颜色，则使用默认文本颜色。

<div id="number-tile-background-chart">
  #### 数值卡片背景图表
</div>

数值卡片可以显示**背景图表**：即在数值后方绘制一条趋势迷你线图，让你一眼就能看出它在所选时间范围内的变化。这对 SLO 和错误预算卡片尤其有用，因为数值的变化趋势与当前读数同样重要。

选中数值卡片后，打开 **Display Settings**，将 **Background chart** 设置为 **Line** 或 **Area** (也可设为 **None** 将其关闭) 。这条迷你线图来自卡片查询按时间分桶后的结果，因此无需额外配置。默认情况下，它会继承卡片颜色；如果想改用调色板中的特定颜色，可以设置 **Background color** 进行覆盖。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/number-tile-background-chart.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=9a1951515f42053a8827ad7a185f559c" alt="数值卡片的 Display Settings 抽屉，其中 Background chart 设置为 Area" size="lg" width="1600" height="1000" data-path="images/clickstack/dashboards/number-tile-background-chart.webp" />

背景图表适用于查询构建器生成的数值卡片。Raw SQL 数值卡片只返回单个值，没有可用于分桶的时间维度，因此该选项会显示，但处于禁用状态。

表格卡片可以使用 **Alternate Row Background** 为行添加斑马纹背景，即为隔行着色，从而让宽表更易于浏览。默认情况下此选项处于关闭状态。

选中表格卡片后，打开 **Display Settings** 并开启 **Alternate Row Background**。斑马纹仅影响视觉显示，因此它同时适用于查询构建器和 Raw SQL 表格卡片。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/CVjLh3F87LIga0QD/images/clickstack/dashboards/table-tile-display-settings.webp?fit=max&auto=format&n=CVjLh3F87LIga0QD&q=85&s=0f4a408406dd70906aa64c51055cd256" alt="表格卡片的 Display Settings 抽屉，其中已开启 Alternate Row Background" size="lg" width="1600" height="1000" data-path="images/clickstack/dashboards/table-tile-display-settings.webp" />

表格卡片在滚动时也会在表头与数据之间保留分隔线，因此列标题始终清晰可辨。

<div id="api-number-tile-color">
  #### 仪表盘 API：数值卡片颜色
</div>

通过外部 API (`POST` / `PUT` `/api/v2/dashboards`) 创建或更新仪表盘时，请将 builder 数值卡片配置中的 `color` 设为调色板标记。不支持原始十六进制值。

```json theme={null}
{
  "name": "Error rate KPIs",
  "tiles": [
    {
      "id": "65f5e4a3b9e77c001a222222",
      "name": "Errors",
      "x": 0,
      "y": 0,
      "w": 6,
      "h": 4,
      "config": {
        "displayType": "number",
        "sourceId": "<SOURCE_ID>",
        "select": [
          {
            "aggFn": "count",
            "where": "SeverityText:error",
            "whereLanguage": "lucene",
            "alias": "Errors"
          }
        ],
        "color": "chart-error",
        "backgroundChart": {
          "type": "area"
        }
      }
    }
  ]
}
```

`color` 可接受上述 categorical 和语义列表中的任何标记 (例如 `chart-blue` 或 `chart-success`) 。可选的 `backgroundChart.color` 可使用相同的标记枚举覆盖迷你线图的颜色。有关身份验证和基础 URL，请参阅 [ClickStack API 参考文档](/zh/clickstack/api-reference)。

<div id="dashboard-listing-search">
  ## 仪表盘 - 列表与搜索
</div>

可在仪表盘页面查看仪表盘。仪表盘按标签组织，并内置搜索和过滤功能，便于快速定位特定仪表盘。

可以将仪表盘加入收藏，方便从侧边栏和列表页面顶部快速访问。收藏内容仅对各个用户单独保存。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-search.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=78024dd4cb02cfcc05d5620dcc021b09" alt="仪表盘搜索" size="lg" width="1466" height="878" data-path="images/use-cases/observability/hyperdx-dashboard-search.webp" />

<div id="tagging">
  ## 仪表盘 - 标签
</div>

您可以为仪表盘和已保存的搜索添加标签，以便更好地整理它们。
标签提供了一种灵活的方式，方便您按需进行分类和筛选。

<div id="how-tags-work">
  #### 标签如何工作
</div>

* **组织方式**：标签显示在左侧边栏中，仪表盘和已保存的搜索会按分配的标签分组
* **多个标签**：您可以为单个项目添加一个或多个标签，以便更好地分类
* **自动创建**：如果您分配了一个尚不存在的标签，系统会自动创建该标签
* **易于管理**：您可以随时添加或移除标签，以调整您的组织结构

这样一来，随着集合不断增长，您也能轻松找到相关项目，并保持工作区井然有序。

<div className="ch-image-md">
  <Frame>
    <img src="https://mintcdn.com/private-7c7dfe99-detect-table-modification/h6hThzQB7qVx2xlB/images/use-cases/observability/clickstack-tags-search.webp?fit=max&auto=format&n=h6hThzQB7qVx2xlB&q=85&s=5a8e19686bf74751427cbdc0c4d0963f" alt="已保存的搜索中的标签" width="743" height="230" data-path="images/use-cases/observability/clickstack-tags-search.webp" />
  </Frame>
</div>

您还可以选择多个标签，按不同类别过滤并查看项目：

<div className="ch-image-md">
  <Frame>
    <img src="https://mintcdn.com/private-7c7dfe99-detect-table-modification/h6hThzQB7qVx2xlB/images/use-cases/observability/clickstack-tags-dashboard.webp?fit=max&auto=format&n=h6hThzQB7qVx2xlB&q=85&s=436ba121a5368e94fc03ca2b559d6f74" alt="仪表盘中选中的多个标签" width="529" height="252" data-path="images/use-cases/observability/clickstack-tags-dashboard.webp" />
  </Frame>
</div>

<div id="custom-filters">
  ## 自定义过滤器和变量
</div>

除了所有仪表盘上都可用的[自由文本过滤器](#filter-dashboards)之外，已保存的仪表盘还支持自定义下拉过滤器，其选项来自对 ClickHouse 的查询结果。这些过滤器提供可复用的点选式过滤控件，让仪表盘查看者无需手动编写表达式即可进行过滤。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/filter-dropdown.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=263e69c54e5cca9b316a3e220d0965ff" alt="显示可用服务名称的服务下拉过滤器" size="lg" width="3812" height="1910" data-path="images/clickstack/dashboards/filter-dropdown.webp" />

每个过滤器都允许查看者选择一个或多个值，并对这些值执行以下一种或两种操作：

* **广播** — 将所选内容作为过滤条件应用于匹配的卡片。无需更新卡片以引用该过滤器。
* **变量** — 将所选内容以 `$variableName` 的形式提供给卡片查询，因此每个卡片可自行决定在何处以及如何使用该值。

过滤器必须至少执行这两种操作中的一种。创建过滤器时，默认启用 广播。

以下步骤演示如何为在[“创建仪表盘”](#creating-dashboards)部分中创建的仪表盘添加过滤器。

<Steps>
  <Step title="打开“Edit 过滤器”对话框" id="open-edit-filters">
    打开一个已保存的仪表盘，然后在工具栏中选择 **Edit 过滤器 and 变量**。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/54YbTgqhwFTQhLLk/images/clickstack/dashboards/edit-filters.webp?fit=max&auto=format&n=54YbTgqhwFTQhLLk&q=85&s=c29375e2b8b0201a795ccbd00b2d0301" alt="仪表盘工具栏中的 Edit 过滤器 按钮" size="lg" width="1406" height="884" data-path="images/clickstack/dashboards/edit-filters.webp" />
  </Step>

  <Step title="添加新过滤器" id="add-new-filter">
    点击 **Add new filter**。通过填写 **Display Name**、选择 **数据源**，并输入 **Filter expression** 来配置过滤器；它可以是一个 SQL 列或表达式，其不同值将填充到下拉框中。点击 **Save filter**。

    例如，要为链路追踪数据添加服务过滤器，可选择 `Traces` 数据源，并将 `ServiceName` 用作过滤表达式。“Dropdown values filter”为可选项，可用于限制下拉框中显示的值。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/54YbTgqhwFTQhLLk/images/clickstack/dashboards/add-filter.webp?fit=max&auto=format&n=54YbTgqhwFTQhLLk&q=85&s=71a0d96d4bffcea44bb5fe32b1eaa254" alt="包含 Display Name、数据源 和 Filter expression 字段的 Add filter 对话框" size="md" width="633" height="727" data-path="images/clickstack/dashboards/add-filter.webp" />

    同一对话框还可控制过滤器是否会[广播](#broadcast-filters)其值，以及是否[可作为变量使用](#dashboard-variables)，下文将对此进行说明。

    过滤器 模态框会显示该仪表盘上已配置的所有过滤器。你可以在这里编辑或删除现有过滤器，也可以添加更多过滤器。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/saved-filters.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=f47cfc48b7eb26c116c67a65632f4f8e" alt="显示已配置 Services 过滤器的 过滤器 模态框" size="md" width="764" height="452" data-path="images/clickstack/dashboards/saved-filters.webp" />
  </Step>

  <Step title="使用过滤器" id="use-filter">
    关闭 过滤器 模态框。新的下拉过滤器会显示在搜索栏下方。点击它可查看可用值，然后选择一个值，以过滤仪表盘上的所有可视化内容。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/filtered-dashboard.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=70eeed6663005ebe253daceaa96be4de" alt="已按 frontend 服务过滤的仪表盘" size="lg" width="3812" height="1910" data-path="images/clickstack/dashboards/filtered-dashboard.webp" />
  </Step>

  <Step title="（可选）将过滤器值保存为默认值" id="save-default-filters">
    要将某个过滤器选择保存为仪表盘的默认值，请在仪表盘菜单中选择 **Save Query & 过滤器 as Default**。此后，该仪表盘打开时将始终自动应用所选过滤器。若要重置，请在同一菜单中选择 **Remove Default Query & 过滤器**。

    <Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/save-filter-values.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=a8a1e009e83a62e873b90f7e6d4ee981" alt="显示 Save Query and 过滤器 as Default 选项的仪表盘菜单" size="lg" width="3812" height="1936" data-path="images/clickstack/dashboards/save-filter-values.webp" />
  </Step>
</Steps>

<Note>
  自定义下拉过滤器适用于已保存的仪表盘。要查看这种用法的实际示例，请参阅 [Kubernetes 仪表盘](#kubernetes-dashboard)，其中为 pod (容器组) 、部署、节点名称、命名空间和集群提供了内置下拉过滤器。
</Note>

<div id="broadcast-filters">
  ### 广播
</div>

启用 **广播过滤条件** 后，所选值会作为过滤条件应用到仪表盘中的卡片，无需任何卡片显式引用该过滤器。默认情况下，该条件会应用到所有卡片。使用 **应用到来源** 可将其限制为仅应用到使用指定来源集的卡片——当过滤器表达式只对仪表盘中的部分数据有意义时，这一选项十分有用。

图表构建器卡片会自动应用广播过滤器。Raw SQL 卡片必须包含 [`$__filters` 宏](/zh/clickstack/features/dashboards/sql-visualizations#dashboard-filter-macro)，并且已选择来源，因为 ClickStack 无法推断该条件应在手写查询的何处使用。

<div id="dashboard-variables">
  ### 变量
</div>

启用 **Available as 变量** 后，过滤器中选定的值也会以 `$variableName` 的形式供卡片查询使用。**变量 name** 默认为过滤器的显示名称 (移除非法字符后) ，也可自行覆盖。名称必须以字母开头，且只能包含字母、数字和下划线。

如果不希望广播 `WHERE` 条件，请使用变量——例如，在 `SELECT` 表达式、`HAVING` 子句或连接键中使用该值，或者根据不同于过滤器自身表达式的列来过滤卡片。

<div id="referencing-variables">
  #### 引用变量
</div>

变量会展开为其下拉列表中当前选中的值。引用形式决定其呈现方式：

| 引用                  | 展开为                                                                               | 未选择任何值 |
| ------------------- | --------------------------------------------------------------------------------- | ------ |
| `$name`, `${name}`  | 选中的值，根据上下文采用 `sqlstring` 或 `lucene` 格式。当名称后紧跟单词字符时，可使用花括号界定名称，例如 `${name}_total`。 | `NULL` |
| `${name:sqlstring}` | 选中的值，以单引号括起、用逗号分隔，并按 SQL 值进行转义，例如 `'a', 'b'`。                                     | `NULL` |
| `${name:csv}`       | 不加引号，以逗号分隔：`a,b`。不进行 SQL 转义。                                                      | 空字符串   |
| `${name:regex}`     | 正则表达式备选项，并进行正则表达式转义：`(a\|b)`。                                                     | `.*`   |
| `${name:lucene}`    | 用于 Lucene 输入的带引号术语 `OR` 表达式：`("a" OR "b")`。                                       | `("")` |

由于在未选择任何值时，`$name` 会呈现为 `NULL`，因此在需要 SQL 谓词的地方，建议优先使用以下宏。当变量未选择任何值时，这些宏都会展开为 `1=1`，从而确保查询仍然有效：

| 宏                                             | 描述                                                                                  |
| --------------------------------------------- | ----------------------------------------------------------------------------------- |
| `$__filter($<variable>)`                      | 当为 `variable` 选择了值时，展开为 `toString(<filter expression>) IN ($variable)`；否则展开为 `1=1`。 |
| `$__filter(<expression>, $<variable>)`        | 当为 `variable` 选择了值时，展开为 `<expression> IN ($variable)`；否则展开为 `1=1`。                  |
| `$__conditionalAll(<condition>, $<variable>)` | 当变量已选择值时，展开为 `<condition>`；否则展开为 `1=1`。                                             |

<div id="variables-in-builder-tiles">
  #### 在图表构建器卡片中使用变量
</div>

图表构建器中的所有 SQL 表达式输入均支持变量引用，包括 `SELECT` 列和各序列表达式、`WHERE`、`GROUP BY` 以及 `HAVING`。编辑器会自动补全仪表盘变量，并显示每个引用在当前选择下展开后的内容。

在 SQL 模式下，建议使用 `$__filter` 和 `$__conditionalAll` 宏，以确保变量选择为空时查询仍然有效。Lucene 输入不支持宏，应直接引用原始变量 (例如 `ServiceName:$service`) 。

在 Lucene 输入中，变量引用本身是否加引号决定了多值选择的匹配方式。假设 `$service` 选择了 `a,b`：

| 引用                       | 展开为                                    | 匹配行为                                                                   |
| ------------------------ | -------------------------------------- | ---------------------------------------------------------------------- |
| `ServiceName:$service`   | `ServiceName:("a" OR "b")`             | 子串匹配 — 转换为 SQL 后为 `ServiceName ILIKE '%a%' OR ServiceName ILIKE '%b%'` |
| `ServiceName:"$service"` | `(ServiceName:"a" OR ServiceName:"b")` | 与每个选定值精确匹配                                                             |

如果所选值应与 `Field` 精确匹配而非按子串匹配，请为变量引用加引号 — `Field:"$var"`。

<div id="variables-in-sql-tiles">
  #### 在 SQL 卡片中使用变量
</div>

Raw SQL 卡片可在查询的任何位置以相同方式引用变量：

```sql theme={null}
SELECT
  $__timeInterval(TimestampTime) AS ts,
  count() AS count
FROM otel_logs
WHERE $__timeFilter(TimestampTime)
  AND $__filter(ServiceName, $service)
  AND $__conditionalAll(SeverityText NOT IN ($severity), $severity)
GROUP BY ts
ORDER BY ts ASC
```

有关 SQL 卡片可用宏的完整列表，请参阅 [SQL-based visualizations](/zh/clickstack/features/dashboards/sql-visualizations#dashboard-variables)。

<Note>
  引用仪表盘变量的卡片上的告警会将每个变量视为空值进行评估，而不会使用仪表盘中选定的值。
</Note>

<div id="drilldown-to-search">
  ## 下钻到搜索页
</div>

仪表盘卡片支持下钻到搜索页。点击可视化中的某个数据点，会打开一个包含以下选项的上下文菜单：

* **查看所有事件** — 跳转到搜索页，显示所选时间范围内的所有事件。
* **按组筛选** — 跳转到搜索页，并筛选为特定数据系列。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/pgldaX9p0_FSNkx0/images/clickstack/dashboards/drilldown.webp?fit=max&auto=format&n=pgldaX9p0_FSNkx0&q=85&s=1cfc8081b077be5189b49559fa77a9d9" alt="显示“查看所有事件”和“按组筛选”选项的下钻上下文菜单" size="lg" width="3812" height="1910" data-path="images/clickstack/dashboards/drilldown.webp" />

这对于调查在仪表盘中发现的特定峰值或异常非常有用——你可以快速从聚合视图切换到底层的单条事件。

<div id="presets">
  ## 预设
</div>

HyperDX 部署后即提供开箱即用的仪表盘。

<div id="clickhouse-dashboard">
  ### ClickHouse 仪表盘
</div>

此仪表盘提供用于监控 ClickHouse 的可视化视图。要进入此仪表盘，请从左侧菜单中选择。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-clickhouse.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=c0ba8700b3da09ec558a10ee1a0ce3a5" alt="ClickHouse 仪表盘" size="lg" width="3600" height="1930" data-path="images/use-cases/observability/hyperdx-dashboard-clickhouse.webp" />

此仪表盘使用选项卡分别展示 **Selects**、**Inserts** 和 **ClickHouse 基础设施** 的监控信息。

<Info>
  **所需的系统表访问权限**

  此仪表盘会查询 ClickHouse [系统表](/zh/reference/system-tables/overview) 以显示关键指标。需要以下授权：

  `GRANT SHOW COLUMNS, SELECT(CurrentMetric_MemoryTracking, CurrentMetric_S3Requests, ProfileEvent_OSCPUVirtualTimeMicroseconds, ProfileEvent_OSReadChars, ProfileEvent_OSWriteChars, ProfileEvent_S3GetObject, ProfileEvent_S3ListObjects, ProfileEvent_S3PutObject, ProfileEvent_S3UploadPart, event_time) ON system.metric_log`

  `GRANT SHOW COLUMNS, SELECT(active, database, partition, rows, table) ON system.parts`

  `GRANT SHOW COLUMNS, SELECT(event_date, event_time, memory_usage, normalized_query_hash, query, query_duration_ms, query_kind, read_rows, tables, type, written_bytes, written_rows) ON system.query_log`

  `GRANT SHOW COLUMNS, SELECT(event_date, event_time, hostname, metric, value) ON system.transposed_metric_log`
</Info>

<div id="services-dashboard">
  ### 服务仪表盘
</div>

服务仪表盘会根据 trace 数据显示当前处于活跃状态的服务。这要求你已收集链路追踪数据，并配置了有效的链路追踪数据源。

系统会从 trace 数据中自动识别服务名称，并提供一组预建的可视化，分布在三个选项卡中：HTTP Services、Database 和 Errors。

这些可视化可使用 Lucene 或 SQL 语法进行过滤，并且可以调整时间窗口，以便进行更有针对性的分析。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-services.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=b7cec1531e64dcbd5afed334f0f06f5d" alt="ClickHouse services" size="lg" width="3600" height="1930" data-path="images/use-cases/observability/hyperdx-dashboard-services.webp" />

<div id="kubernetes-dashboard">
  ### Kubernetes 仪表盘
</div>

此仪表盘可让您查看通过 OpenTelemetry 收集的 Kubernetes 事件。它提供高级过滤选项，支持按 Kubernetes pod (容器组) 、部署、节点名称、命名空间和集群进行筛选，也支持自由文本搜索。

为便于导航，Kubernetes 数据分为三个选项卡：Pods、Nodes 和 Namespaces。

<Image img="https://mintcdn.com/private-7c7dfe99-detect-table-modification/hoEYoHM6iqtLQjYD/images/use-cases/observability/hyperdx-dashboard-kubernetes.webp?fit=max&auto=format&n=hoEYoHM6iqtLQjYD&q=85&s=d8c1301868631fdaae3434767fa37093" alt="ClickHouse kubernetes" size="lg" width="3022" height="1576" data-path="images/use-cases/observability/hyperdx-dashboard-kubernetes.webp" />
