亚马逊AWS官方博客

使用 Amazon Athena 和 Amazon Managed Grafana 直观地呈现 Amazon S3 数据

Grafana 是一个热门的开源分析平台,您可以使用该平台,通过灵活的控制面板创建、浏览和分享数据。其使用案例包括应用程序和物联网设备监控,以及运营和业务数据的可视化等。您可以使用自己的数据集或与行业相关的公开数据集创建控制面板。

2021 年 11 月,AWS 团队与 Grafana Labs 一起宣布推出适用于 Grafana 的 Amazon Athena 数据源插件。该功能使您可以在无服务器交互式查询服务 Amazon Athena 的帮助下,使用存储在 Amazon Simple Storage Service(Amazon S3)存储桶中的数据,在 Grafana 控制面板上直观地呈现信息。此外,您还可以使用 Amazon Managed Grafana(这是一项面向开源 Grafana 和 Enterprise Grafana 的完全托管式服务)预置 Grafana 控制面板。

在这篇文章中,我们将介绍如何在 Amazon Managed Grafana 中创建和配置控制面板,以便使用 Athena 查询存储在 Amazon S3 中的数据。

解决方案概览

下图显示了该解决方案的架构。

架构图

该解决方案包括在 Amazon Managed Grafana 中创建的 Grafana 控制面板,其中填入了使用 Athena 查询的数据。Athena 使用标准 SQL 对 Amazon S3 中存储的数据运行查询。Athena 与 AWS Glue Data Catalog 集成,后者是 Amazon S3 中的数据的元数据存储,其中包含表架构等信息。

要实施该解决方案,我们需要完成以下几大步骤:

  1. 创建和配置 Athena 工作组。
  2. 在 Athena 中配置数据集。
  3. 创建和配置 Grafana 工作区。
  4. 创建 Grafana 控制面板。

创建和配置 Athena 工作组

默认情况下,Amazon Managed Grafana 使用的 AWS Identity and Access Management(IAM)角色附加了 AmazonGrafanaAthenaAccess IAM 策略。此策略授予 Grafana 工作区查询所有 Athena 数据库和表的访问权限。更重要的是,它使服务能够读取已写入 S3 存储桶(前缀为 grafana-athena-query-results-)的数据。为了让 Grafana 能够读取 Athena 查询结果,您有两种选择:

  • 创建名为 grafana-athena-query-results-<name> 的存储桶,创建一个新的 Athena 工作组,然后将其配置为将查询结果写入存储桶。
  • 创建 Grafana 工作区后,创建单独的 IAM 策略,授予 Grafana 工作区 IAM 角色对 Athena 用于输出结果的存储桶的访问权限。本博客中未介绍此选项。有关更多信息,请参阅使用可视化编辑器创建策略和 Amazon Managed Grafana 基于身份的策略示例

在这篇文章中,我们选择第一个选项。为此,执行以下步骤:

  1. 创建一个名为 grafana-athena-query-results-<name> 的 S3 存储桶。将 <name> 替换为您选择的唯一名称。
  2. 在 Athena 控制台上,选择导航窗格中的 Workgroups(工作组)。
  3. 选择 Create workgroup(创建工作组)。
  4. 在 Workgroup name(工作组名称)下,输入您选择的唯一名称。
  5. 对于 Query result configuration(查询结果配置),选择 Browse S3(浏览 S3)。
  6. 选择您创建的存储桶,然后选择 Choose(选择)。
  7. 对于 Tags(标签),选择 Add new tag(添加新标签)。
  8. 添加一个键为 GrafanaDataSource 且值为 true 的标签。
  9. 选择 Create workgroup(创建工作组)。

请务必添加步骤 7-8 中描述的标签。如果标签不存在,Amazon Managed Grafana 将无法访问工作组。

有关 Athena 查询结果位置的详细信息,请参阅使用查询结果、最近的查询和输出文件

在 Athena 中配置数据集

在这篇文章中,我们使用了美国国家海洋和大气管理局(NOAA)机构提供的 NOAA 全球历史气候学网络日报(GHCN-D)数据集。Registry of Open Data on AWS(为帮助人们发现和共享数据集而存在的注册表)中提供了数据集。

GHCN-D 数据集包含气象元素,例如日最高和最低气温。它是许多地方的气候记录的组合,有些地方包含超过 175 年的记录。

GHCN-D 数据采用 CSV 格式,存储在公共 S3 存储桶中(s3://noaa-ghcn-pds/)。您可以通过 Athena 访问数据。要开始使用 Athena,您需要创建一个数据库:

  1. 在 Athena 控制台上,选择导航窗格中的 Query editor(查询编辑器)。
  2. 从右上角的菜单中选择在上一步中创建的工作组。
  3. 要创建名为 mydatabase 的数据库,请输入以下语句:
CREATE DATABASE mydatabase
  1. 选择 Run(运行)。
  2. 从左侧的 Database(数据库)列表中,选择 mydatabase 使其成为当前数据库。

现在已经有了数据库,您可以在 AWS Glue Data Catalog 中创建一个表,开始查询 GHCN-D 数据集。

  1. 在 Athena 查询编辑器中,运行以下查询:
CREATE EXTERNAL TABLE `noaa_ghcn_pds`(
  `id` string,
  `year_date` string,
  `element` string,
  `data_value` string,
  `m_flag` string,
  `q_flag` string,
  `s_flag` string,
  `obs_time` string
)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES ('separatorChar'=',')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://noaa-ghcn-pds/csv/'
TBLPROPERTIES ('classification'='csv')

之后,在数据库的表格列表下面应该会显示表 noaa_ghcn_pds。在前面的语句中,我们根据 GHCN-D 数据结构定义列。有关变量和数据结构的完整说明,请参阅数据集的自述文件

配置数据库和表后,您可以开始对整个数据集运行 SQL 查询。就本文而言,创建包含数据子集的第二个表:位于西班牙马德里市最大的公园之一丽池公园(或简称 El Retiro)的一个气象站的最高温度。该站的标识是 SP000003195,相关元素是 TMAX

  1. 在 Athena 控制台上运行以下语句以创建第二个表:
CREATE TABLE madrid_tmax WITH (format = 'PARQUET') AS
SELECT CAST(data_value AS real) / 10 AS t_max,
  CAST(
    SUBSTR(year_date, 1, 4) || '-' || SUBSTR(year_date, 5, 2) || '-' || SUBSTR(year_date, 7, 2) AS date
  ) AS iso_date
FROM "noaa_ghcn_pds"
WHERE id = 'SP000003195'
  AND element = 'TMAX'

之后,在数据库的表格列表下面应该会显示表 madrid_tmax。请注意,在前面的语句中,温度值除以 10。那是因为温度最初是以十分之一摄氏度记录的。我们还调整了日期格式。这两项调整都使数据的使用更加容易。

与 noaa_ghcn_pds 表不同,madrid_tmax 表没有与原始数据集链接。这意味着其数据不会反映对 GHCN-D 数据集所作的更新。相反,它保留其创建时刻的快照。在某些情况下,这可能并不理想,但在这里是可以接受的。

创建和配置 Grafana 工作区

下一步是预置和配置 Grafana 工作区,并将用户分配到该工作区。

创建您的工作区

在这篇文章中,我们使用 AWS Single Sign-On(AWS SSO)选项来设置用户。如果您已有 Grafana 工作区,则可以跳过此步骤。

  1. 在 Amazon Managed Grafana 控制台中,选择 Create Workspace(创建工作区)。
  2. 为您的工作区取名,也可以选择提供描述。
  3. 单击 Next(下一步)。
  4. 选择 AWS IAM Identity Center (successor to AWS SSO) [AWS IAM Identity Center(AWS SSO 的后继产品)]。
  5. 对于 Permission type(权限类型),选择 Service Managed(管理的服务),然后选择 Next(下一步)。
  6. 对于 Account access(账户访问权限),请选择 Current account(当前账户)。
  7. 对于 Data sources(数据源),请选择 Amazon Athena,然后选择 Next(下一步)。
  8. 查看详细信息并选择 Create workspace(创建工作区)。

这将开始创建 Grafana 工作区。

创建用户并将其分配到工作区

配置的最后一步是创建一个用户来访问 Grafana 控制面板。请完成以下步骤:

  1. 如果还没有用户,请为 AWS SSO 身份存储创建一个用户
  2. 在 Amazon Managed Grafana 控制台中,选择导航窗格中的 All workspaces(所有工作区)。
  3. 选择您的 Grafana 工作区以打开工作区详细信息。
  4. 在 Authentication(身份验证)选项卡上,选择 Assign new user or group(分配新用户或组)。
  5. 选择您创建的用户,然后选择 Assign users and groups(分配用户和组)。
  6. 选择用户并在 Action(操作)菜单上选择 Make admin(设为管理员),即可更改用户类型。

创建 Grafana 控制面板

现在,您已经配置了 Athena 和 Amazon Managed Grafana,使用 Athena 利用从 Amazon S3 提取的数据创建一个 Grafana 控制面板。请完成以下步骤:

  1. 在 Amazon Managed Grafana 控制台中,选择导航窗格中的 All workspaces(所有工作区)。
  2. 选择 Grafana 工作区 URL 链接。
  3. 使用在上一步中分配的用户登录。
  4. 在导航窗格中,选择下部 AWS 图标(有两个图标),然后在 AWS services(AWS 服务)选项卡上选择 Athena
  5. 选择之前使用的区域、数据库和工作组,然后选择 Add 1 data source(添加 1 个数据源)。
  6. 在 Provisioned data sources(预置的数据源)下,选择新创建的数据源上的 Go to settings(转至设置)。
  7. 选择 Default(默认值),然后选择 Save & test(保存并测试)。
  8. 在导航窗格中,将鼠标悬停在加号上,然后选择 Dashboard(控制面板)以创建新的控制面板。
  9. 选择 Add a new panel(添加新面板)。
  10. 在查询窗格中,输入以下查询:
select iso_date as time, t_max from madrid_tmax where $__dateFilter(iso_date) order by iso_date
  1. 选择 Apply(应用)。
  2. 在右上角更改时间范围。

例如,如果您更改为 Last 2 years(最近 2 年),则应该会看到类似于以下屏幕截图的内容。

温度可视化

您已经可以通过使用 Athena 从 Amazon S3 提取的数据填充您的 Grafana 控制面板,现在您可以试验不同的可视化和配置。Grafana 提供了许多选项,您可以根据自己的喜好调整控制面板,如以下每日最高温度的示例屏幕截图所示。

温度可视化 - 彩色

正如您在这个可视化视图中看到的那样,马德里的夏天非常热!

有关如何自定义 Grafana 可视化的详细信息,请参阅可视化面板

清理

如果您在自己的 AWS 账户中按照这篇文章中的说明进行操作,请不要忘记清理创建的资源,以避免产生其他费用。

结论

在这篇文章中,您学习了如何将 Amazon Managed Grafana 与 Athena 结合使用来查询 S3 存储桶中存储的数据。例如,我们使用了 GHCN-D 数据集在 Registry of Open Data on AWS 中提供的一个子集。

查看 Amazon Managed Grafana,开始使用您自己的数据或存储在 Amazon S3 中的其他公开数据集创建其他控制面板。


关于作者

Pedro Pimentel 是一名原型设计架构师,在巴西的 AWS 云工程和原型设计团队工作。他与 AWS 客户合作,利用新技术和服务进行创新。在业余时间,Pedro 喜欢旅行和骑自行车。

Rafael Werneck 是一名高级原型设计架构师,在巴西的 AWS 云工程和原型设计团队工作。此前,他曾在 Amazon.com.br 和 Amazon RDS 性能详情部门担任软件开发工程师。