建立自訂報告並分析 AppStream 2.0 使用情況資料 - Amazon 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 CloudFormation 模板,您可以使用它來創建必要的 AWS Glue 資源。

重要

完成下列程序中的步驟會建立 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" } ] }

使用 AWS Glue 爬行者程式建立資料目錄

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 的爬蟲程式重複這個步驟。

    執行這些步驟會執行爬行者程式,並將它們排定為根據 AWS CloudFormation 堆疊中指定的排程自動執行。

  4. 兩個爬蟲程式都執行完後,在導覽窗格中選擇 Databases (資料庫)。隨即會顯示代表用量報告的 appstream-usage 資料庫。此 AWS Glue 資料庫是在執行應用程式串流使用工作階段-爬行者程式和應用程式串流使用量-應用程式- 搜尋器時所建立的資料目錄。

  5. 若要檢視資料庫中的表格,請選擇 appstream-usage > Tables (表格)。隨即會顯示兩個表格 (應用程式工作階段),分別代表應用程式和工作階段用量報告。選擇任一表格即可檢視其結構描述。

    您現在可以使用 SQL 在 Athena 中查詢這些資料表。

建立並執行 Athena 查詢

若要使用 Athena 來查詢用量報告,請執行以下步驟。

注意

您執行的 Athena 查詢可能會產生費用。如需詳細資訊,請參閱 Amazon Athena 定價

  1. 前往 https://console.aws.amazon.com/athena/ 開啟 Athena 主控台。

  2. Database (資料庫) 中,選擇 appstream-usage

  3. 在查詢窗格中輸入 SQL 查詢,然後選擇 Run query (執行查詢)

使用 Athena 查詢

本節提供可在 Athena 中執行以分析 Amazon S3 儲存貯體中的用量報告資料的 SQL 查詢。

若要建立所有工作階段在給定月份的合併報告,請執行下列查詢:

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 檔案的形式儲存在名為 aws-athena-query-results-account-id-without-hyphens-region-code 的帳戶中的 Amazon S3 儲存貯體內。為了能夠簡單地找到查詢結果,請選擇 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 小時) 在一個日曆月內的所有作用中工作階段,請執行以下查詢來將分割集合擴大 5 天。

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 (儲存的查詢)。隨即應該會顯示此程序之前所記下的 5 個查詢。每個查詢的名稱會以「AS2」開頭。例如,「AS2_users_per_app_curr_mo。」

  3. 若要執行查詢,請選擇查詢名稱而非名稱旁的選項。

  4. 查詢的文字便會出現在查詢窗格中。選擇 Run query (執行查詢)。

若要在單獨的範本中檢視這些查詢,請參閱程式碼 AWS CloudFormation 範例目錄中的雅典娜範例查詢- appstream 使用狀況 data_template.yml。AWS