@@ -144,6 +144,20 @@ export interface LambdaFunctionMonitoringOptions extends BaseMonitoringProps {
144144 string ,
145145 UsageThreshold
146146 > ;
147+
148+ // Enhanced init duration metrics that are time-based
149+ readonly addEnhancedMonitoringMaxInitDurationAlarm ?: Record <
150+ string ,
151+ DurationThreshold
152+ > ;
153+ readonly addEnhancedMonitoringP90InitDurationAlarm ?: Record <
154+ string ,
155+ DurationThreshold
156+ > ;
157+ readonly addEnhancedMonitoringAvgInitDurationAlarm ?: Record <
158+ string ,
159+ DurationThreshold
160+ > ;
147161}
148162
149163export interface LambdaFunctionMonitoringProps
@@ -174,6 +188,7 @@ export class LambdaFunctionMonitoring extends Monitoring {
174188 readonly memoryUsageAnnotations : HorizontalAnnotation [ ] ;
175189 readonly maxIteratorAgeAnnotations : HorizontalAnnotation [ ] ;
176190 readonly maxOffsetLagAnnotations : HorizontalAnnotation [ ] ;
191+ readonly initDurationAnnotations : HorizontalAnnotation [ ] ;
177192
178193 readonly tpsMetric : MetricWithAlarmSupport ;
179194 readonly p50LatencyMetric : MetricWithAlarmSupport ;
@@ -202,6 +217,9 @@ export class LambdaFunctionMonitoring extends Monitoring {
202217 readonly enhancedMonitoringMaxMemoryUtilizationMetric ?: MetricWithAlarmSupport ;
203218 readonly enhancedMonitoringP90MemoryUtilizationMetric ?: MetricWithAlarmSupport ;
204219 readonly enhancedMonitoringAvgMemoryUtilizationMetric ?: MetricWithAlarmSupport ;
220+ readonly enhancedMonitoringMaxInitDurationMetric ?: MetricWithAlarmSupport ;
221+ readonly enhancedMonitoringP90InitDurationMetric ?: MetricWithAlarmSupport ;
222+ readonly enhancedMonitoringAvgInitDurationMetric ?: MetricWithAlarmSupport ;
205223 readonly enhancedMetricFunctionCostMetric ?: MetricWithAlarmSupport ;
206224
207225 constructor ( scope : MonitoringScope , props : LambdaFunctionMonitoringProps ) {
@@ -238,6 +256,7 @@ export class LambdaFunctionMonitoring extends Monitoring {
238256 this . memoryUsageAnnotations = [ ] ;
239257 this . maxIteratorAgeAnnotations = [ ] ;
240258 this . maxOffsetLagAnnotations = [ ] ;
259+ this . initDurationAnnotations = [ ] ;
241260
242261 this . metricFactory = new LambdaFunctionMetricFactory (
243262 scope . createMetricFactory ( ) ,
@@ -295,6 +314,12 @@ export class LambdaFunctionMonitoring extends Monitoring {
295314 this . enhancedMetricFactory . enhancedMetricP90MemoryUtilization ( ) ;
296315 this . enhancedMonitoringAvgMemoryUtilizationMetric =
297316 this . enhancedMetricFactory . enhancedMetricAvgMemoryUtilization ( ) ;
317+ this . enhancedMonitoringMaxInitDurationMetric =
318+ this . enhancedMetricFactory . enhancedMetricMaxInitDuration ( ) ;
319+ this . enhancedMonitoringP90InitDurationMetric =
320+ this . enhancedMetricFactory . enhancedMetricP90InitDuration ( ) ;
321+ this . enhancedMonitoringAvgInitDurationMetric =
322+ this . enhancedMetricFactory . enhancedMetricAvgInitDuration ( ) ;
298323 this . enhancedMetricFunctionCostMetric =
299324 this . enhancedMetricFactory . enhancedMetricFunctionCost ( ) ;
300325
@@ -382,6 +407,51 @@ export class LambdaFunctionMonitoring extends Monitoring {
382407 this . memoryUsageAnnotations . push ( createdAlarm . annotation ) ;
383408 this . addAlarm ( createdAlarm ) ;
384409 }
410+ for ( const disambiguator in props . addEnhancedMonitoringMaxInitDurationAlarm ) {
411+ const alarmProps =
412+ props . addEnhancedMonitoringMaxInitDurationAlarm [ disambiguator ] ;
413+ const createdAlarm = this . latencyAlarmFactory . addCustomDurationAlarm (
414+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
415+ this . enhancedMonitoringMaxInitDurationMetric ! ,
416+ /* eslint-enable @typescript-eslint/no-non-null-assertion */
417+ LatencyType . MAX ,
418+ alarmProps ,
419+ "InitDuration" ,
420+ disambiguator ,
421+ ) ;
422+ this . initDurationAnnotations . push ( createdAlarm . annotation ) ;
423+ this . addAlarm ( createdAlarm ) ;
424+ }
425+ for ( const disambiguator in props . addEnhancedMonitoringP90InitDurationAlarm ) {
426+ const alarmProps =
427+ props . addEnhancedMonitoringP90InitDurationAlarm [ disambiguator ] ;
428+ const createdAlarm = this . latencyAlarmFactory . addCustomDurationAlarm (
429+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
430+ this . enhancedMonitoringP90InitDurationMetric ! ,
431+ /* eslint-enable @typescript-eslint/no-non-null-assertion */
432+ LatencyType . P90 ,
433+ alarmProps ,
434+ "InitDuration" ,
435+ disambiguator ,
436+ ) ;
437+ this . initDurationAnnotations . push ( createdAlarm . annotation ) ;
438+ this . addAlarm ( createdAlarm ) ;
439+ }
440+ for ( const disambiguator in props . addEnhancedMonitoringAvgInitDurationAlarm ) {
441+ const alarmProps =
442+ props . addEnhancedMonitoringAvgInitDurationAlarm [ disambiguator ] ;
443+ const createdAlarm = this . latencyAlarmFactory . addCustomDurationAlarm (
444+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
445+ this . enhancedMonitoringAvgInitDurationMetric ! ,
446+ /* eslint-enable @typescript-eslint/no-non-null-assertion */
447+ LatencyType . AVERAGE ,
448+ alarmProps ,
449+ "InitDuration" ,
450+ disambiguator ,
451+ ) ;
452+ this . initDurationAnnotations . push ( createdAlarm . annotation ) ;
453+ this . addAlarm ( createdAlarm ) ;
454+ }
385455 }
386456 for ( const disambiguator in props . addLatencyP50Alarm ) {
387457 const alarmProps = props . addLatencyP50Alarm [ disambiguator ] ;
@@ -653,15 +723,19 @@ export class LambdaFunctionMonitoring extends Monitoring {
653723 widgets . push (
654724 new Row (
655725 this . createLambdaInsightsCpuWidget (
656- ThirdWidth ,
726+ QuarterWidth ,
657727 DefaultGraphWidgetHeight ,
658728 ) ,
659729 this . createLambdaInsightsMemoryWidget (
660- ThirdWidth ,
730+ QuarterWidth ,
731+ DefaultGraphWidgetHeight ,
732+ ) ,
733+ this . createLambdaInsightsInitDurationWidget (
734+ QuarterWidth ,
661735 DefaultGraphWidgetHeight ,
662736 ) ,
663737 this . createLambdaInsightsFunctionCostWidget (
664- ThirdWidth ,
738+ QuarterWidth ,
665739 DefaultGraphWidgetHeight ,
666740 ) ,
667741 ) ,
@@ -813,6 +887,23 @@ export class LambdaFunctionMonitoring extends Monitoring {
813887 } ) ;
814888 }
815889
890+ createLambdaInsightsInitDurationWidget ( width : number , height : number ) {
891+ return new GraphWidget ( {
892+ width,
893+ height,
894+ title : "Init Duration" ,
895+ left : [
896+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
897+ this . enhancedMonitoringMaxInitDurationMetric ! ,
898+ this . enhancedMonitoringP90InitDurationMetric ! ,
899+ this . enhancedMonitoringAvgInitDurationMetric ! ,
900+ /* eslint-enable @typescript-eslint/no-non-null-assertion */
901+ ] ,
902+ leftYAxis : TimeAxisMillisFromZero ,
903+ leftAnnotations : this . initDurationAnnotations ,
904+ } ) ;
905+ }
906+
816907 createLambdaInsightsFunctionCostWidget ( width : number , height : number ) {
817908 return new GraphWidget ( {
818909 width,
0 commit comments