创建自定义报告并分析 AppStream 2.0 使用数据 - 亚马逊 AppStream 2.0

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

创建自定义报告并分析 AppStream 2.0 使用数据

Amazon Athena 是一种无服务器、交互式查询服务,可使用此服务通过标准 SQL 查询分析 S3 存储桶中存储的数据。您可以使用 Athena 来汇总您的使用情况报告或生成其他类型的自定义报告。

创建 AWS Glue 爬虫

AWS Glue 是一项完全托管的提取、转换和加载 (ETL) 服务,允许您从 Amazon S3 数据创建数据库并使用 Athena 查询该数据库。该数据库也称为 AWS Glue 数据目录。 AWS Glue 爬虫可以自动检测您的 Amazon S3 数据的架构并创建相应的数据库和表。 AppStream 2.0 提供了一个可用于创建必要 AWS Glue 资源的 AWS CloudFormation 模板。

重要

完成以下过程中的步骤将创建 AWS Glue 爬虫。但是,这些步骤不会启动爬网程序。要启动爬网程序,您必须执行下一过程中的步骤。有关 AWS Glue 抓取工具的更多信息,请参阅定义爬虫

创建 AWS Glue 爬虫
  1. 打开 AppStream 2.0 主机,网址为 https://console.aws.amazon.com/appstream2

  2. 选择您已订阅使用情况报告的 AWS 区域。

  3. 在导航窗格中,选择 Usage Reports (使用率报告),然后确认使用率报告日志记录已启用。

  4. 报告详细信息选项卡上,在 Analytics 旁边的段落中,选择CloudFormation模板链接。

    选择该链接将打开 AWS CloudFormation 控制台,在运行模板之前,可以在其中查看模板指定的 AWS CloudFormation 堆栈参数。该模板在运行时会创建一个 AWS Glue 爬虫和几个示例 Athena 查询。

  5. 在 “指定详细信息” 页面上,在旁边 ScheduleExpression,保留默认值或为要运行爬网程序的频率指定不同的 cron 表达式值。请勿更改任何其他默认值。完成此操作后,选择 Next (下一步)

    默认情况下,爬网程序设定为每天运行,但您可以配置爬网程序每周、每月或以其他频率运行。有关 cron 语法的信息,请参阅 Cron 表达式

  6. Options (选项) 页面上,保留默认值,然后选择 Next (下一步)

  7. 在 “看” 页面上,选中 “我确认 AWS CloudFormation 可能会使用自定义名称创建 IAM 资源” 旁边的复选框,然后选择创建

    您必须拥有足够的 AWS Glue 和 AWS Identity and Access Management (IAM) 权限才能创建和运行 AWS CloudFormation 堆栈。如果您没有所需的权限,则要求您的 Amazon Web Services 账户管理员在您的账户中执行这些步骤或授予您以下权限。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:CreateNamedQuery", "athena:BatchGetNamedQuery", "athena:GetNamedQuery", "athena:StartQueryExecution", "athena:GetQueryResults", "athena:GetQueryExecution", "athena:ListNamedQueries", "cloudformation:DescribeStacks", "cloudformation:GetStackPolicy", "cloudformation:DescribeStackEvents", "cloudformation:CreateStack", "cloudformation:GetTemplate", "cloudformation:ListChangeSets", "cloudformation:ListStackResources", "iam:GetRole", "iam:CreateRole", "iam:GetRolePolicy", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads", "s3:ListBucket", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:GetObject", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:iam::*:role/AppStreamUsageReports-AppStreamUsageReportGlueRole*", "arn:aws:cloudformation:*:*:stack/AppStreamUsageReports/*", "arn:aws:athena:*:*:workgroup/primary", "arn:aws:s3:::aws-athena-query-results-*" ] }, { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:PutRolePolicy", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::appstream-logs-*", "arn:aws:iam::*:role/AppStreamUsageReports-AppStreamUsageReportGlueRole*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AppStreamUsageReports-AppStreamUsageReportGlueRole*" ], "Condition": { "StringEquals": { "iam:PassedToService": "glue.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "cloudformation:GetTemplateSummary", "glue:GetResourcePolicy", "glue:GetCrawlers", "glue:BatchGetCrawlers", "glue:GetClassifiers", "glue:CreateClassifier", "glue:ListCrawlers", "glue:GetTags", "glue:GetCrawlerMetrics", "glue:GetClassifier", "tag:GetResources" ], "Resource": "*" }, { "Effect": "Allow", "Action": "athena:RunQuery", "Resource": "arn:aws:athena:*:*:workgroup/primary" }, { "Effect": "Allow", "Action": [ "glue:GetTables", "glue:GetPartitions", "glue:GetTable" ], "Resource": [ "arn:aws:glue:*:*:table/appstream-usage/*", "arn:aws:glue:*:*:database/appstream-usage", "arn:aws:glue:*:*:catalog" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:*:*:database/appstream-usage", "arn:aws:glue:*:*:catalog" ] }, { "Effect": "Allow", "Action": [ "glue:GetCrawler", "glue:StartCrawler", "glue:CreateCrawler" ], "Resource": "arn:aws:glue:*:*:crawler/appstream-usage*" }, { "Effect": "Allow", "Action": "glue:GetCatalogImportStatus", "Resource": "arn:aws:glue:*:*:catalog" } ] }

使用 C AWS Glue rawler 创建数据目录

AWS Glue Crawler 在运行时会创建映射到会话和应用程序报告的结构的数据目录和架构。每次在您的 Amazon S3 存储桶中存储新报告时,您都必须运行爬虫以使用新报告中的数据更新您的 AWS Glue 数据目录。

注意

您的 AWS Glue 爬虫的运行可能会收取费用。有关更多信息,请参阅AWS Glue 定价

  1. 打开 AWS Glue 控制台,网址为 https://console.aws.amazon.com/glue/

  2. 选择您已订阅使用情况报告的 AWS 区域。

  3. 选择名为 appstream-usage-sessions-crawler 的爬网程序旁边的复选框,然后选择 Run crawler (运行爬网程序)。对于名为 appstream-usage-apps-crawler 的爬网程序重复此步骤。

    执行这些步骤会运行 Crawler,并根据 AWS CloudFormation 堆栈中指定的计划安排它们自动运行。

  4. 在这两个爬网程序都完成运行后,在导航窗格中,选择 Databases (数据库)。将显示名为 appstream-usage 的数据库,这表示您的使用率报告。此数据库是一个 AWS Glue 数据目录,是在运行 appstream-usage-s essions-crawler 和 appstream-usage-apps-Crawler 时创建的。

  5. 要查看数据库中的表,请选择 appstream-usageTables (表)。将显示两个表:applications (应用程序)sessions (会话),它们分别表示您的应用程序和会话使用率报告。选择任一表以查看其架构。

    您现在可以在 Athena 中使用 SQL 查询这些表。

创建和运行 Athena 查询

要使用 Athena 查询您的使用情况报告,请执行以下步骤。

注意

您运行的 Athena 查询可能会产生费用。有关更多信息,请参阅 Amazon Athena 定价

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. Database (数据库) 下,选择 appstream-usage

  3. 在查询窗格中,输入一个 SQL 查询,然后选择 运行查询

使用 Athena 查询

本节提供您可以在 Athena 中运行的 SQL 查询来分析 Amazon S3 存储桶中的使用情况报告数据。

要创建指定月份所有会话的整合报告,请运行以下查询:

SELECT * FROM "appstream-usage"."sessions" WHERE year='four-digit-year' AND month='two-digit-month'

您也可以在查询中执行应用程序表和 会话表之间的联接操作。例如,要查看在给定月份中启动每个应用程序的不同用户,请运行以下查询:

SELECT DISTINCT apps.application_name, sessions.user_id FROM "appstream-usage"."applications" apps INNER JOIN "appstream-usage"."sessions" sessions ON (apps.user_session_id = sessions.user_session_id AND sessions.year='four-digit-year' AND sessions.month='two-digit-month') WHERE apps.year='four-digit-year' AND apps.month='two-digit-month' ORDER BY 1, 2

Athena 查询结果将作为 .csv 文件存储为您账户的 Amazon S3 存储桶中,名称为 aws-athena-query-results-account-id-without-hyphens-region-code。为便于查找查询结果,请选择 Save as (另存为) 并为您的查询提供名称,然后再运行它。您还可以选择 Athena 结果窗格中的下载图标,以 .csv 文件格式下载查询的结果。

要提高性能和降低成本,Athena 使用分区以减少查询中扫描的数据量。有关更多信息,请参阅分区数据。使用情况报告在 Amazon S3 存储桶中按年、月和日分区。您可以使用 year (年) month (月)day (日) 字段作为查询中的条件,将查询限制为某些日期范围分区。例如,以下查询仅提取 2019 年 5 月 19 日这周的会话报告。

SELECT SUBSTRING(session_start_time, 1, 10) AS report_date, COUNT(DISTINCT user_session_id) AS num_sessions FROM "appstream-usage"."sessions" WHERE year='2019' AND month='05' AND day BETWEEN '19' and '25' GROUP BY 1 ORDER BY 1

相比较而言,以下查询将生成完全相同的结果,但因为它不限于任何分区,所以它提取存储在 Amazon S3 存储桶中的所有会话。

SELECT SUBSTRING(session_start_time, 1, 10) AS report_date, COUNT(DISTINCT user_session_id) AS num_sessions FROM "appstream-usage"."sessions" WHERE session_end_time BETWEEN '2019-05-19' AND '2019-05-26' GROUP BY 1 ORDER BY 1

如果会话跨多天,则会话和应用程序记录会分别显示在与会话结束日期对应的会话和应用程序报告中。因此,如果您需要查找与在给定日期范围处于活动状态的所有会话相关的记录,请考虑根据为您的实例集配置的最大会话长度扩大您的查询的分区集。

例如,要查看某个日历月期间给定实例集所有活动的会话,其中实例集的最大会话持续时间为 100 小时,请运行以下查询将您的分区设置扩展五天。

SELECT * FROM "appstream-usage"."sessions" WHERE fleet_name = 'fleet_name' AND session_start_time BETWEEN '2019-05-01' AND '2019-06-01' AND year='2019' AND (month='05' OR (month='06' AND day<='05')) ORDER BY session_start_time

创建 AWS Glue 抓取工具的 AWS CloudFormation 模板还在您的 Athena 账户中创建并保存了多个示例查询,您可以使用这些查询来分析您的使用数据。这些示例查询包含以下内容:

  • 聚合的月度会话报告

  • 每个堆栈的平均会话长度

  • 每天的会话数

  • 每个用户的总流式传输小时数

    注意

    对于每个会话,按需使用费用会四舍五入到下一小时。

  • 每个应用程序的不同用户数

要使用其中任何查询,请执行以下步骤。

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 选择 Saved Queries (保存的查询)。应显示此过程之前记下的五个查询。每个查询的名称开头为“AS2”。例如,“AS2_users_per_app_curr_mo”。

  3. 要运行查询,请选择查询名称而不是名称旁边的选项。

  4. 查询的文本显示在查询窗格中。选择运行查询

要在单独的 AWS CloudFormation 模板中查看这些查询,请参阅代码示例目录中的 at hena-sample-queries-appstream-usage-data_ template.yml。AWS