# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 AWSTemplateFormatVersion: 2010-09-09 Description: EMR Serverless CloudWatch Dashboard Parameters: ApplicationID: Description: Application ID of your EMR Serverless application Type: String Resources: CloudWatchDashboard: Type: AWS::CloudWatch::Dashboard Properties: DashboardBody: !Sub '{"widgets":[{"height":2,"width":24,"y":44,"x":0,"type":"text","properties":{"markdown":"Driver Metrics\n---\nDriver metrics shows you the capacity used by Spark Drivers for Pre-Initialized and On-Demand capacity pools."}},{"height":2,"width":24,"y":16,"x":0,"type":"text","properties":{"markdown":"Application Metrics\n---\nApplication metrics shows the capacity used by application **(${ApplicationID})**."}},{"height":6,"width":12,"y":52,"x":0,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","MemoryAllocated","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Memory Allocated"}},{"height":2,"width":24,"y":58,"x":0,"type":"text","properties":{"markdown":"Executor Metrics\n---\nExecutor metrics shows you the capacity used by Spark executors for Pre-Init and On-Demand capacity pools."}},{"height":6,"width":12,"y":46,"x":0,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","CPUAllocated","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum"}},{"height":6,"width":12,"y":52,"x":12,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","StorageAllocated","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Storage Allocated"}},{"height":6,"width":12,"y":60,"x":0,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","CPUAllocated","WorkerType","Spark_Executor","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"CPU Allocated"}},{"height":6,"width":12,"y":66,"x":0,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","MemoryAllocated","WorkerType","Spark_Executor","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Memory Allocated"}},{"height":6,"width":12,"y":66,"x":12,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","StorageAllocated","WorkerType","Spark_Executor","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Storage Allocated"}},{"height":6,"width":12,"y":32,"x":12,"type":"metric","properties":{"metrics":[[{"expression":"100*((m1+m2)/(m1+m2+m3))","label":"Pre-Initialized Capacity Worker Utilization %","id":"e1","region":"${AWS::Region}"}],["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"id":"m1","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m2","visible":false}],[".","IdleWorkerCount","ApplicationId","${ApplicationID}",{"id":"m3","visible":false}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","title":"Pre-Initialized Capacity Worker Utilization %","period":60,"stat":"Sum"}},{"height":2,"width":24,"y":30,"x":0,"type":"text","properties":{"markdown":"Pre-Initialized Capacity Metrics\n---\nShows you the Pre-Initialized Capacity metrics for an Application."}},{"height":6,"width":12,"y":18,"x":0,"type":"metric","properties":{"metrics":[[{"expression":"m1+m2","label":"Pre-Initialized","id":"e1","region":"${AWS::Region}"}],[{"expression":"m3+m4","label":"OnDemand","id":"e2","region":"${AWS::Region}"}],["AWS/EMRServerless","CPUAllocated","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"id":"m1","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m2","visible":false}],["...","Spark_Driver",".","OnDemandCapacity",".",".",{"id":"m3","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m4","visible":false}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"CPU Allocated"}},{"height":6,"width":12,"y":18,"x":12,"type":"metric","properties":{"metrics":[[{"expression":"m1+m2+m5","label":"Pre-Initialized","id":"e1","region":"${AWS::Region}"}],[{"expression":"m3+m4","label":"OnDemand","id":"e2","region":"${AWS::Region}"}],["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"visible":false,"id":"m1"}],["...","Spark_Executor",".",".",".",".",{"visible":false,"id":"m2"}],["...","Spark_Driver",".","OnDemandCapacity",".",".",{"visible":false,"id":"m3"}],["...","Spark_Executor",".",".",".",".",{"visible":false,"id":"m4"}],[".","IdleWorkerCount","ApplicationId","${ApplicationID}",{"id":"m5","visible":false}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Running Workers"}},{"height":6,"width":12,"y":24,"x":0,"type":"metric","properties":{"metrics":[[{"expression":"m1+m2","label":"Pre-Initialized","id":"e1"}],[{"expression":"m3+m4","label":"OnDemand","id":"e2"}],["AWS/EMRServerless","MemoryAllocated","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"id":"m1","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m2","visible":false}],["...","Spark_Driver",".","OnDemandCapacity",".",".",{"id":"m3","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m4","visible":false}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Memory Allocated"}},{"height":6,"width":12,"y":24,"x":12,"type":"metric","properties":{"metrics":[[{"expression":"m1+m2","label":"Pre-Initialized","id":"e1"}],[{"expression":"m3+m4","label":"OnDemand","id":"e2"}],["AWS/EMRServerless","StorageAllocated","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"id":"m1","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m2","visible":false}],["...","Spark_Driver",".","OnDemandCapacity",".",".",{"id":"m3","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m4","visible":false}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Storage Allocated"}},{"height":6,"width":12,"y":46,"x":12,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Running Drivers Count"}},{"height":6,"width":12,"y":60,"x":12,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Executor","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Running Executors Count"}},{"height":6,"width":12,"y":38,"x":0,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","IdleWorkerCount","ApplicationId","${ApplicationID}",{"label":"IdleWorkerCount"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Pre-Initialized Capacity Idle Workers"}},{"height":6,"width":12,"y":32,"x":0,"type":"metric","properties":{"metrics":[[{"expression":"m1+m2+m3","label":"Pre-Initialized Total Workers","id":"e1","region":"${AWS::Region}"}],["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"id":"m1","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m2","visible":false}],[".","IdleWorkerCount","ApplicationId","${ApplicationID}",{"id":"m3","visible":false}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","title":"Pre-Initialized Capacity Total Workers","period":60,"stat":"Sum"}},{"height":5,"width":12,"y":0,"x":0,"type":"metric","properties":{"metrics":[[{"expression":"100*((m1+m2)/(m1+m2+m3))","label":"Pre-Initialized Capacity Worker Utilization %","id":"e1","region":"${AWS::Region}"}],["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"id":"m1","visible":false}],["...","Spark_Executor",".",".",".",".",{"id":"m2","visible":false}],[".","IdleWorkerCount","ApplicationId","${ApplicationID}",{"id":"m3","visible":false}]],"view":"gauge","stacked":true,"region":"${AWS::Region}","title":"Pre-Initialized Capacity Worker Utilization % ","period":60,"stat":"Average","yAxis":{"left":{"min":0,"max":100}},"setPeriodToTimeRange":false,"sparkline":true,"legend":{"position":"bottom"},"liveData":false}},{"height":5,"width":12,"y":5,"x":0,"type":"metric","properties":{"metrics":[[{"expression":"m1+m2+m5","label":"Pre-Initialized","id":"e1","region":"${AWS::Region}"}],[{"expression":"m3+m4","label":"OnDemand","id":"e2","region":"${AWS::Region}"}],["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"visible":false,"id":"m1"}],["...","Spark_Executor",".",".",".",".",{"visible":false,"id":"m2"}],["...","Spark_Driver",".","OnDemandCapacity",".",".",{"visible":false,"id":"m3"}],["...","Spark_Executor",".",".",".",".",{"visible":false,"id":"m4"}],[".","IdleWorkerCount","ApplicationId","${ApplicationID}",{"id":"m5","visible":false}]],"view":"singleValue","stacked":true,"region":"${AWS::Region}","period":60,"stat":"Sum","title":"Available Workers","setPeriodToTimeRange":false,"sparkline":true,"liveData":false,"labels":{"visible":true}}},{"height":5,"width":12,"y":0,"x":12,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Driver","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Initialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"sparkline":true,"view":"singleValue","region":"${AWS::Region}","period":60,"stat":"Sum","title":"Running Drivers ","setPeriodToTimeRange":false}},{"height":5,"width":12,"y":5,"x":12,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","RunningWorkerCount","WorkerType","Spark_Executor","CapacityAllocationType","PreInitCapacity","ApplicationId","${ApplicationID}",{"label":"Pre-Inititialized"}],["...","OnDemandCapacity",".",".",{"label":"OnDemand"}]],"sparkline":true,"view":"singleValue","region":"${AWS::Region}","title":"Running Executors","period":60,"stat":"Sum","setPeriodToTimeRange":false}},{"height":6,"width":24,"y":10,"x":0,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","SubmittedJobs","ApplicationId","${ApplicationID}",{"color":"#ffbb78"}],[".","PendingJobs",".","."],[".","ScheduledJobs",".",".",{"color":"#dbdb8d"}],[".","RunningJobs",".",".",{"color":"#1f77b4"}],[".","SuccessJobs",".",".",{"color":"#2ca02c"}],[".","FailedJobs",".",".",{"color":"#d62728"}],[".","CancellingJobs",".","."],[".","CancelledJobs",".","."]],"sparkline":true,"view":"singleValue","region":"${AWS::Region}","title":"Job Runs","period":60,"stat":"Sum"}},{"height":7,"width":12,"y":74,"x":0,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","RunningJobs","ApplicationId","${ApplicationID}",{"region":"${AWS::Region}","label":"RunningJobs"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","stat":"Sum","period":60,"title":"Running Jobs"}},{"height":7,"width":12,"y":74,"x":12,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","SuccessJobs","ApplicationId","${ApplicationID}",{"color":"#2ca02c","region":"${AWS::Region}"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","stat":"Sum","period":60,"title":"Successful Jobs"}},{"height":7,"width":12,"y":81,"x":0,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","FailedJobs","ApplicationId","${ApplicationID}",{"color":"#d62728"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","stat":"Sum","period":60,"title":"Failed Jobs"}},{"height":7,"width":12,"y":81,"x":12,"type":"metric","properties":{"metrics":[["AWS/EMRServerless","CancelledJobs","ApplicationId","${ApplicationID}",{"color":"#c5b0d5"}]],"view":"timeSeries","stacked":true,"region":"${AWS::Region}","stat":"Sum","period":60,"title":"CancelledJobs"}},{"height":2,"width":24,"y":72,"x":0,"type":"text","properties":{"markdown":"Job Metrics\n---\nJob metrics shows you the aggregate number of jobs in each job state."}}]}' DashboardName: !Join - "-" - - emr-serverless-dashboard - !Ref 'ApplicationID'