

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 连接到 Amazon Redshift 数据来源
<a name="AWS-Redshift"></a>

**注意**  
在支持版本 9 或更高版本的工作区中，此数据来源可能需要您安装相应的插件。有关更多信息，请参阅 [使用插件扩展您的工作区](grafana-plugins.md)。

**注意**  
 本指南假设用户在使用 Amazon Redshift 数据来源之前已熟悉 Amazon Redshift 服务。

借助 Amazon Managed Grafana，您可以使用 Grafana AWS 工作空间控制台中的数据源配置选项将 Amazon Redshift 添加为数据源。此功能通过发现您现有的 Amazon Redshift 账户，简化了将 Amazon Redshift 添加为数据来源的过程，并可管理访问 Amazon Redshift 所需身份验证凭证的配置。您可以使用此方法设置身份验证，将 Amazon Redshift 添加为数据来源，也可以使用与自我管理的 Grafana 服务器上相同的方法手动设置数据来源和必要的身份验证凭证。

需要满足一些先决条件，Amazon Managed Grafana 才能访问 Amazon Redshift。有关与使用 Amazon Redshift 数据来源相关的先决条件，请参阅 [先决条件](Redshift-prereq.md)。

# 先决条件
<a name="Redshift-prereq"></a>

要使用亚马逊托管 Grafana 的托 AWS 管策略，请在配置 Amazon Redshift 数据源之前完成以下任务：
+ 使用 `GrafanaDataSource: true` 标记 Amazon Redshift 集群。否则，它将无法访问。
+ 通过以下互斥方式之一创建数据库凭证：
  + 如果要使用默认机制（临时凭证选项）对 Redshift 数据库进行身份验证，则必须创建一个名为 `redshift_data_api_user` 的数据库用户。
  + 如果要使用来自 Secrets Manager 的凭证，则必须使用 `RedshiftQueryOwner: true` 标记密钥。有关更多信息，请参阅本指南中 [Amazon Managed Grafana 中的基于身份的策略示例](https://docs.aws.amazon.com/grafana/latest/userguide/security_iam_id-based-policy-examples.html)。

# 使用 AWS 数据源配置将 Amazon Redshift 添加为数据源
<a name="Redshift-configure"></a>

# 使用 AWS 数据源配置将 Amazon Redshift 添加为数据源


1.  确保您的用户角色是管理员或编辑者。

1.  从 Amazon Managed Grafana 控制台中选择要使用的工作空间，网址为。[https://console.aws.amazon.com/grafana/](https://console.aws.amazon.com/grafana/home/)

1. 如果您在创建此工作空间时没有选择使用服务管理权限，请从使用客户托管权限更改为使用服务管理权限，以确保启用适当的 IAM 角色和策略以使用 Grafana 工作区控制台中的 AWS 数据源配置选项。为此，请按 **IAM 角色**选择编辑图标，然后选择**服务托管**、**保存更改**。有关更多信息，请参阅 [亚马逊托管 Grafana 数据源的权限和政策 AWS](AMG-manage-permissions.md)。

1. 选择**数据来源**选项卡。然后选中 **Amazon Redshift** 的复选框，并选择**操作**、**启用服务托管策略**。

1. 再次选择**数据来源**选项卡，然后在 **Amazon Redshift** 行中选择**在 Grafana 中配置**。

1. 如有必要，使用 IAM Identity Center 登录 Grafana 工作区控制台。

1. 在 Grafana 工作区控制台的左侧导航栏中，选择位置靠下的 AWS 图标（有两个图标），然后选择 **Redshift**。

1. 选择您希望 Amazon Redshift 数据来源从中进行查询的默认区域，然后选择所需的账户，然后选择**添加数据来源**。

1.  按照 [**连接详细信息**设置](Redshift-config.md#Redshift-connection-details)中的步骤配置**连接详细信息**。

# 手动添加 Amazon Redshift 数据来源
<a name="Redshift-add-the-data-source"></a>

## 先决条件
<a name="Redshift-prerequisites"></a>
+  您可以通过自己的账户访问 **Amazon Redshift**。

**要添加 Amazon Redshift 数据来源，请执行以下操作：**

1. 将附加[AmazonRedshiftAccessPolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaRedshiftAccess)到您的工作空间用户角色。

1. 确保您的用户角色是管理员或编辑者。

1.  从 Amazon Managed Grafana 控制台中选择要处理的工作空间，网址为。[https://console.aws.amazon.com/grafana/](https://console.aws.amazon.com/grafana/home/)

1.  在 Grafana 控制台侧边菜单中，将鼠标悬停在**配置**（齿轮）图标上，然后选择**数据来源**。

1. 选择**添加数据来源**。

1. 选择 **AWS Redshift** 数据来源。如有必要，您可以在搜索框中键入 **Redshift**，帮助查找。

1. 此操作将打开**连接详细信息**页面。按照配置 [**连接详细信息**设置](Redshift-config.md#Redshift-connection-details) 的步骤操作。

# 配置 Amazon Redshift
<a name="Redshift-config"></a>

 将 Amazon Redshift 数据来源添加到工作区后，按以下方式配置 Amazon Redshift 设置：

## 先决条件
<a name="Redshift-prerequisites"></a>
+  您可以通过自己的账户访问 **Amazon Redshift**。

## **连接详细信息**设置
<a name="Redshift-connection-details"></a>

**配置连接详细信息设置**

1.  在**连接详细信息**菜单中，选择身份验证提供者（推荐：**Workspace IAM 角色**）。

1.  选择要查询的**默认区域**。

## **身份验证**设置
<a name="Redshift-Authentication"></a>

**配置**身份验证**设置**

1.  在**身份验证**菜单中，选择**临时凭证**或 **AWS Secrets Manager** 选项卡作为您的访问凭证提供者。有关临时证书和 S AWS ecrets Manager 的详细信息，请参阅 [AWS 托管策略： AmazonGrafanaRedshiftAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaRedshiftAccess)

1.  如果您选择默认的**临时凭证**，请按照以下步骤操作。如果您选择 **AWS Secrets Manager**，请在输入字段中输入您的 **AWS Secrets Manager** 凭证。

1.  选择在 Amazon Redshift 中创建的集群的**集群标识**。

   有关 Redshift 集群的更多信息，请参阅 [Redshift 连接](https://docs.aws.amazon.com/redshift/latest/gsg/connection.html)。

1.  选择您的目标 Redshift 数据库。

1.  选择您为上述集群创建的数据库用户。

1.  选择**保存并测试**。

以下是**临时凭证**设置的示例。

![\[临时凭证示例\]](http://docs.aws.amazon.com/zh_cn/grafana/latest/userguide/images/redshift.png)


以下是 **AWS Secrets Manager** 菜单的示例。

![\[Secrets Manager 示例\]](http://docs.aws.amazon.com/zh_cn/grafana/latest/userguide/images/secretsmanager.png)


# 使用 Amazon Redshift 数据来源
<a name="Redshift-using-the-data-source"></a>

## IAM 策略
<a name="Redshift-policies"></a>

 Grafana 需要使用 IAM 授予的权限才能读取 Redshift 指标。您可以将这些权限附加到 IAM 角色，并利用 Grafana 的内置支持来担任这些角色。[AWS 托管策略： AmazonGrafanaRedshiftAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaRedshiftAccess) 这一节中定义了内置的 Amazon Grafana Redshift 访问策略。

## 查询 Amazon Redshift 数据
<a name="Redshift-query"></a>

 Amazon Redshift 数据来源提供了标准的 SQL 查询编辑器。Amazon Managed Grafana 包含一些宏来帮助编写更复杂的时间序列查询。

宏


|  宏  |  说明  |  输出示例  | 
| --- | --- | --- | 
|  \$1\$1\$1timeEpoch(column)  |  \$1\$1\$1timeEpoch 将由表达式替换，以转换为 UNIX 时间戳并将列重命名为时间  |  UNIX\$1TIMESTAMP(dateColumn) as "time"  | 
|  \$1\$1\$1timeFilter(column)  |  \$1\$1\$1timeFilter 创建根据面板的时间范围筛选数据（使用column）的条件  |  time BETWEEN '2017-07-18T11:15:52Z' AND '2017-07-18T11:15:52Z'  | 
|  \$1\$1\$1timeFrom()  |  \$1\$1\$1timeFrom 输出面板范围的当前开始时间，并加上引号  | '2017-07-18T11:15:52Z' | 
|  \$1\$1\$1timeTo()  |  \$1\$1\$1timeTo 输出面板范围的当前结束时间，并加上引号  | '2017-07-18T11:15:52Z' | 
|  \$1\$1\$1timeGroup(column, '1m')  |  \$1\$1\$1timeGroup 对时间戳进行分组，以便图表上的每个周期只有 1 个点  | floor(extract(epoch from time)/60)\$160 AS "time" | 
|  \$1\$1\$1schema  |  \$1\$1\$1schema  使用选定的架构  | public | 
|  \$1\$1\$1table  |   \$1\$1\$1table 从给定的 \$1\$1\$1schema 输出一个表（默认情况下它使用公共架构）  | sales | 
|  \$1\$1\$1column  |  \$1\$1\$1column 从当前 \$1\$1\$1table 输出列  | date  | 
|  \$1\$1\$1unixEpochFilter(column)  |  使用指定列名将 \$1\$1\$1unixEpochFilter 替换为时间范围筛选器，其中时间表示为 Unix 时间戳  |   column >= 1624406400 AND column <= 1624410000  | 
|  \$1\$1\$1unixEpochGroup(column)  |  \$1\$1\$1unixEpochGroup 与 \$1\$1\$1timeGroup 相同，但这仅针对存储为 Unix 时间戳的时间  | floor(time/60)\$160 AS "time" | 

**可视化**

Redshift 中的大多数查询最好用表可视化来表示。任何查询都将在表中显示数据。如果某个内容可以被查询到，那么就可以将其放入表中。

此示例返回表可视化的结果：

```
SELECT {column_1}, {column_2} FROM {table};
```

**时间序列和图表可视化**

对于时间序列和图表可视化，有一些要求需要满足：
+ 必须选择 `date` 或 `datetime` 类型的列。
+ `date` 列必须按升序排列（使用 `ORDER BY column ASC`）。
+ 必须选择数字列。

要绘制更合理的图表，请确保使用 `$__timeFilter` 和 `$__timeGroup` 宏。

**时间序列查询示例：**

```
SELECT
  avg(execution_time) AS average_execution_time,
  $__timeGroup(start_time, 'hour'),
  query_type
FROM
  account_usage.query_history
WHERE
  $__timeFilter(start_time)
group by
  query_type,start_time
order by
  start_time,query_type ASC;
```

**填充方式**

Grafana 还会使用一些默认值自动完成没有值的帧。要配置此值，请在查询编辑器中更改**填充值**。

**检查查询**

由于 Grafana 支持 Redshift 不支持的宏，因此可以在查询检查器中看到完全呈现的查询（可以直接复制并粘贴到 Redshift 中）。要查看完整的插值查询，请选择**查询检测器**菜单，**查询**选项卡上会显示完整的查询。

## 模板和变量
<a name="using-redshift-templates-variables"></a>

有关如何添加新的 Redshift 查询变量的详细信息，请参阅[添加查询变量](variables-types.md#add-a-query-variable)。使用您的 Redshift 数据来源作为可用查询的数据来源。

从 Amazon Redshift 表中查询的任何值都可以用作变量。请务必避免选择太多值，因为这可能会导致性能问题。

创建变量后，您可以通过使用 [变量语法](templates-and-variables.md#variable-syntax) 在 Redshift 查询中使用该变量。有关变量的更多信息，请参阅 [模板和变量](templates-and-variables.md)。

## Annotations
<a name="using-redshift-annotations"></a>

[Annotations](dashboard-annotations.md)允许您将丰富的事件信息叠加在图表之上。您可以通过选择面板来添加注释，也可以通过使用从**控制面板**菜单打开的**注释**视图添加注释查询来添加注释。

自动添加注释的查询示例：

```
SELECT
  time as time,
  environment as tags,
  humidity as text
FROM
  $__table
WHERE
  $__timeFilter(time) and humidity > 95
```

下表代表的是呈现注释时考虑的列的值：


|  Name  |  说明  | 
| --- | --- | 
|  Time  |  日期或时间字段的名称。可以是具有原生 SQL 日期或时间数据类型或纪元值的列。 | 
|  Timeend  |  结束日期或时间字段的可选名称。可以是具有原生 SQL 日期或时间数据类型或纪元值的列。 | 
|  Text  |  事件描述字段。 | 
|  Tags  |  用于事件标签的可选字段名称，显示为以逗号分隔的字符串。 | 