AWS End User Computing (EUC) Dashboard
Introduction
The End User Computing (EUC) Dashboard provides a unified view of your AWS EUC environment through an intuitive QuickSight interface. Key capabilities include:
-
Operational visibility into Amazon WorkSpaces and Amazon AppStream 2.0 usage patterns
-
Cost optimization insights and spending analytics
-
Performance monitoring with CloudWatch metrics integration
-
WorkSpaces Logon statistics
-
Resource utilization tracking and trending
-
Recommendations for environment optimization
This solution helps teams make data-driven decisions to optimize costs, improve operational efficiency, and enhance the end-user experience across their EUC estate.

The dashboard has six tabs:
-
Summary:
-
Break down of EUC services costs for last 3 months.
-
Top Spending accounts for each service.
-
High level summary of your EUC estate.
-

-
Amazon WorkSpaces Insights:
-
In-dept break down of WorkSpaces costs for entire environment, additional insights not available in the Cost Usage Report including:
-
Protocol
-
Operating Systems
-
-
Daily Cost breakdown.
-
WorkSpaces Monthly usage.
-
WorkSpaces Cost Breakdown.
-
Workspaces Software bundle information.
-


-
Amazon WorkSpaces Usage:
-
WorkSpaces User connections.
-
Top10 Daily usage.
-
Directory cost breakdown.
-
WorkSpaces daily usage and Hours used.
-
WorkSpaces Logon information
-
Last Logon
-
Low Usage
-
AlwaysOn WorkSpaces Logon information
-
Never Logged on
-
-
-
Amazon WorkSpaces Metrics:
-
This tab is additional will breaks down Cloudwatch CPU/Memory utilization of WorkSpaces.
-

-
Amazon AppStream 2.0
-
Detail overview of AppStream 2.0 environment.
-
-
EUC Cost Optimization
-
Cost saving opportunities in your EUC environment.
-
Architecture

-
The EUC Dashboard is depended on AWS Data Exports service delivers Cost & Usage Report (CUR2) daily to an Amazon S3 Bucket in the Management Account.
-
The EUC Dashboard also requires Data Collection lab for the Amazon Lambda to capture WorkSpaces data and CloudWatch metrics and copies Export data to a dedicated Data Collection Account automatically. EUC Dashboard can be configured during setup to use AWS Organizations (all linked accounts) or specific linked accounts to capture this data.
Prerequisites
-
Deploy one or more of the foundational dashboards: CUDOS, Cost Intelligence, or KPI Dashboard. This will enable CUR and will enable required QuickSight and Athena resources needed for this dashboard.
-
Deploy or Update the Data Collection Lab and make sure the following modules are enabled. Version 3.2.0 or higher required.
-
Include Inventory Collector Module (Mandatory) - This enables the collection of WorkSpaces environmental information using the WorkSpaces API.
-
Include WorkSpaces Utilization Data Collection Module (Optional) - This enables the collection of Cloudwatch metrics for WorkSpaces. Please see Visualizing WorkSpaces Cloudwatch Metric section below to configure this.
-
EUC Module Settings (Optional) - You can choose to scan all linked accounts in an organization or specify accounts that have WorkSpaces deployed, provide a comma-separated list of account IDS in the field to only scan these accounts. Leaving blank will scan all accounts.
-
Deployment
Visualizing WorkSpaces Cloudwatch Metric (Optional)
In the EUC Dashboard, to view the WorkSpaces Cloudwatch metrics in the WorkSpaces Metrics tab, follow these steps:
-
During Deployment, make sure you selected yes for the Include WorkSpaces Utilization Data Collection Module parameter.
-
Go to the Amazon Athena
Query Editor. -
Select the database that has the views for CID. By default it can be CUR 1 cid_cur cur or CID 2 cid_data_export cur2 database.
-
Run the following query to update eucdashboard-metrics view in Amazon Athena, replacing the cur table name based on version of cur running.
CREATE OR REPLACE VIEW "euc_metrics_view" AS WITH workspace_metrics AS ( SELECT m."WorkspaceId" , m."UserName" , CAST(parse_datetime(m.timestamp, 'yyyy-MM-dd HH:mm:ss') AS timestamp) cw_timestamp , m."State" , m."BundleId" , m."DirectoryId" , m."ComputerName" , m."RunningMode" , m."RootVolumeSizeGib" , m."UserVolumeSizeGib" , m."accountid" , m."region" , m."CPUUsage" , m."MemoryUsage" , m."InSessionLatency" , m."UserVolumeDiskUsage" , m."RootVolumeDiskUsage" , m."UpTime" , CAST(parse_datetime(w.lastconnected, 'MM/dd/yy HH:mm:ss') AS timestamp) lastconnected FROM ("optimization_data"."workspaces_metrics_data" m LEFT JOIN "optimization_data"."inventory_workspaces_data" w ON (m."WorkspaceId" = w."WorkspaceId")) ) SELECT wi."WorkspaceId" , wi."UserName" , wi.cw_timestamp , wi."State" , wi."BundleId" , wi."DirectoryId" , wi."ComputerName" , wi."RunningMode" , wi."RootVolumeSizeGib" , wi."UserVolumeSizeGib" , wi."accountid" , wi."region" , wi."CPUUsage" , wi."MemoryUsage" , wi."InSessionLatency" , wi."UserVolumeDiskUsage" , wi."RootVolumeDiskUsage" , wi."UpTime" , wi.lastconnected , split_part(billing_period, '-', 1) year , split_part(billing_period, '-', 2) month , bill_billing_period_start_date billing_period , date_trunc('day', CAST(line_item_usage_start_date AS timestamp)) usage_date , bill_payer_account_id payer_account_id , line_item_usage_account_id linked_account_id , line_item_line_item_type charge_type , line_item_product_code , product['product_name'] product_product_name , product['product_family'] product_product_family , line_item_usage_type , line_item_operation , line_item_line_item_description , product_instance_type , product['operating_system'] product_operating_system , product['group'] product_group , product['region_code'] product_region_code , product['bundle_description'] product_bundle_description , product['bundle_group'] product_bundle_group , product_instance_family , product['resource_type'] product_resource_type , pricing_unit , split_part(line_item_resource_id, '/', 2) resource_id , split_part(line_item_resource_id, ':', 6) resource_type , split_part(line_item_resource_id, 'directory/', 2) resource_directory_id , CAST(line_item_unblended_cost AS DECIMAL(18, 6)) line_item_unblended_cost , CAST(line_item_usage_amount AS DECIMAL(18, 6)) line_item_usage_amount , CAST(pricing_public_on_demand_cost AS DECIMAL(18, 6)) pricing_public_on_demand_cost , pricing_term , product['storage'] product_storage , product['running_mode'] product_running_mode , product['license'] product_license , product['group_description'] product_group_description , product['software_included'] product_software_included , line_item_resource_id , sum((CASE WHEN ("line_item_line_item_type" = 'Usage') THEN "line_item_usage_amount" ELSE 0 END)) "usage_quantity" , sum("line_item_unblended_cost") "unblended_cost" , sum((CASE WHEN ("line_item_line_item_type" = 'Usage') THEN "line_item_unblended_cost" ELSE "line_item_unblended_cost" END)) "amortized_cost" FROM (<CUR2TABLE> cur2 LEFT JOIN workspace_metrics wi ON ((split_part(cur2.line_item_resource_id, '/', 2) = wi.workspaceid) AND (cur2.line_item_usage_account_id = wi.accountid))) WHERE ((("bill_billing_period_start_date" >= ("date_trunc"('month', current_timestamp) - INTERVAL '7' MONTH)) AND (CAST("concat"("billing_period", '-01') AS date) >= ("date_trunc"('month', current_date) - INTERVAL '7' MONTH)) AND (line_item_product_code = 'AmazonWorkSpaces')) OR (line_item_product_code = 'AmazonAppStream') OR (line_item_product_code = 'AWSDirectoryService')) GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54
Update
Please note that dashboards are not updated with update of CloudFormation Stack. When new version of the dashboard template is released, you can update your dashboard by running the following command in your command-line interface:
cid-cmd update --dashboard-id euc-dashboard
Authors
-
Christian O’Donoghue, Senior Technical Account Manager
Contributors
-
Daniel Matlock, Technical Account Manager
-
James Gaskell, Ex-Amazonian
-
Yuriy Prykhodko, AWS Principal Technical Account Manager
-
Iakov Gan, Senior Solution Architect
-
Brian Sheppard, AWS Principal Technical Account Manager
-
Natassa Eleftheriou, Senior Technical Account Manager
Feedback & Support
Have a success story to share with the Team, suggest an improvement or report an error?
-
Please email: euc-dashboard@amazon.com
-
Follow Feedback & Support guide
Note
These dashboards and their content: (a) are for informational purposes only, (b) represents current AWS product offerings and practices, which are subject to change without notice, and (c) does not create any commitments or assurances from AWS and its affiliates, suppliers or licensors. AWS content, products or services are provided "as is" without warranties, representations, or conditions of any kind, whether express or implied. The responsibilities and liabilities of AWS to its customers are controlled by AWS agreements, and this document is not part of, nor does it modify, any agreement between AWS and its customers.