本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建自定义报告并分析 AppStream 2.0
Amazon Athena 是一项无服务器式交互式查询服务,您可以使用该服务通过标准 SQL 查询分析存储桶中的数据。您可以使用 Athena 汇总您的使用情况报告或生成其他类型的自定义报告。
创建 AWS Glue 爬网程序
AWS Glue是一项完全托管式提取、转换和加载 (ETL) 服务,使您能够从 Amazon S3 数据中创建数据库并使用 Athena 查询该数据库。此数据库也称为 AWS Glue 数据目录。网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的AWS Glue搜寻器可以自动检测您的 Amazon S3 数据的架构并创建相应的数据库和表。 AppStream 2.0AWS CloudFormation你可以用它来创建必要的模板AWS Glue资源。
完成以下过程中的步骤创建一个 AWS Glue 爬网程序。但是,这些步骤不会启动爬网程序。要启动爬网程序,您必须执行下一过程中的步骤。有关 AWS Glue 爬网程序的更多信息,请参阅定义爬网程序。
创建 AWS Glue 爬网程序
打开 AppStream 控制台2.0https://console.aws.amazon.com/appstream2
. 选择AWS您已订阅使用情况报告的区域。
在导航窗格中,选择 Usage Reports (使用率报告),然后确认使用率报告日志记录已启用。
在报告详情选项卡,在旁边的段落中分析,请选择CloudFormation模板link。
选择该链接可打开 AWS CloudFormation 控制台,您可以在其中查看模板指定的 AWS CloudFormation 堆栈的参数,然后再运行它。该模板在运行时会创建一个AWS Glue爬虫和几个示例 Athena 查询。
在指定详细信息页面,旁边ScheduleExpression,要么保留默认值,要么为要运行 Crawler 的频率指定不同的 cron 表达式值。请勿更改任何其他默认值。完成此操作后,选择 Next (下一步)。
默认情况下,爬网程序设定为每天运行,但您可以配置爬网程序每周、每月或以其他频率运行。有关 cron 语法的信息,请参阅 Cron 表达式。
在 Options (选项) 页面上,保留默认值,然后选择 Next (下一步)。
在审核页面,选中 “我确认” 旁边的复选框AWS CloudFormation可能会使用自定义名称选项创建 IAM 资源,”,然后选择Create.
您必须有足够的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" } ] }
使用创建数据目录AWS Glue爬网程序类
这些区域有:AWS GlueCrawler 在运行时会创建数据目录和架构,这些目录和架构映射到您的会话和应用程序报告的结构。每次在您的 Amazon S3 存储桶中存储新报告时,您都必须运行搜寻器来更新您的AWS Glue包含新报告中的数据的数据目录。
费用可能适用于运行您的 AWS Glue 爬网程序。有关更多信息,请参阅 AWS Glue 定价
打开 AWS Glue 控制台,地址:https://console.aws.amazon.com/glue/
。 选择AWS您已订阅使用情况报告的区域。
选中名为的搜寻器旁边的复选框appstream-usage-sessions-crawler,然后选择运行爬网程序类. 对名为爬网程序重复此步骤appstream-usage-apps-crawler.
执行这些步骤将运行爬网程序并将安排它们自动根据在 AWS CloudFormation 堆栈中指定的计划运行。
在这两个爬网程序都完成运行后,在导航窗格中,选择 Databases (数据库)。将显示名为 appstream-usage 的数据库,这表示您的使用率报告。这个数据库是一个AWS Glue创建时的数据目录appstream-usage-sessions-crawler和appstream-usage-apps-crawler跑了。
要查看数据库中的表,请选择 appstream-usage 和 Tables (表)。将显示两个表:applications (应用程序) 和 sessions (会话),它们分别表示您的应用程序和会话使用率报告。选择任一表以查看其架构。
现在,您可以使用 SQL 在 Athena 中查询这些表。
创建和运行 Athena 查询
要使用 Athena 查询您的使用报告,请执行以下步骤。
您运行的 Athena 查询可能会收取费用。有关更多信息,请参阅 Amazon Athena 定价
从 https://console.aws.amazon.com/athena/
打开 Athena 控制台。 在 Database (数据库) 下,选择 appstream-usage。
在查询窗格中,输入一个 SQL 查询,然后选择 运行查询。
使用 Athena 查询
本部分提供 SQL 查询,您可以在 Athena 中运行这些查询,以分析 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-
. 为便于查找查询结果,请选择 Save as (另存为) 并为您的查询提供名称,然后再运行它。您也可以在Athena 成绩窗格将查询结果下载为 .csv 文件。account-id-without-hyphens
-region-code
为了提高性能和降低成本,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 CloudFormation创建的模板AWS Glue搜寻器还在您的 Athena 账户中创建并保存了多个示例查询,您可以使用这些查询来分析使用情况数据。这些示例查询包含以下内容:
聚合的月度会话报告
每个堆栈的平均会话长度
每天的会话数
每个用户的总流式传输小时数
注意 On-demand usage charges are rounded up to the next hour for each session.
每个应用程序的不同用户数
要使用其中任何查询,请执行以下步骤。
从 https://console.aws.amazon.com/athena/
打开 Athena 控制台。 选择 Saved Queries (保存的查询)。应显示此过程之前记下的五个查询。每个查询的名称开头为“AS2”。例如,“AS2_users_per_app_curr_mo”。
要运行查询,请选择查询名称而不是名称旁边的选项。
查询的文本显示在查询窗格中。选择 Run query (运行查询)。
要单独查看这些查询AWS CloudFormation模板,请参阅athena-sample-queries-appstream-usage-data_template.yml在AWS代码示例目录。