Repository: cdklabs/cdk-monitoring-constructs (language: python)

Issue:
feat(dashboards): improve customizability
# Change Info
This change allows for improved customization of dashboards. It will allow consumers of this package to control how many dashboards they generate, the configuration of those dashboards, and the widgets on those dashboards. This probably helps address this related github issue: https://github.com/cdklabs/cdk-monitoring-constructs/issues/66. 

This change is backwards compatible and consumers must make explicit changes to their code if they would like to take advantage of the additional dynamism around dashboard generation this contribution provides. As a consequence of this, the dashboard configuration provided by this contribution is not as robust or as flexible as I would like it to be, but this comes at the trade-off of being minimally intrusive to the existing codebase. 

# Testing Done
I've used my own CDK application to test this and have verified that these new changes allow me to create a custom number of dashboards according to my own configuration. 

# Backwards Compatibility
This change was made backwards compatible by retrofitting the existing `DefaultDashboardFactory` to also be an implementation of `IDynamicDashboardFactory` with an opinionated implementation which creates three dashboards: Summary, Details, and Alarms. 

## Backwards Compatibility Testing Done
I also tested this for backwards compatibility by: 

1. Using my own CDK application by using the existing constructs exposed by the `MonitoringFacade` and verified that `monitoring.addSegment` and `monitoring.monitorXYZ` calls populated the default dashboards as expected
2. Verifying that the jest snapshots for the `DefaultDashboardFactory` did not change. 

# How to consume / Documentation
I've added a README section on how to consume these changes. 

# Limitations of this approach
1. This does not really support minor-changes to existing dashboard content. If you want to use this, it amounts to a full swap & replace. Re-arrangement of existing widgets to new dashboards can easily be done, but small modifications to existing widgets are not cheap with this change. 
3. This change introduces some coupling between dashboard types and IDynamicDashboardSegments: when creating IDynamicDashboardSegment implementations, you are required to know which dashboards you are generating. 

However, since this contribution is minimally intrusive, I thought the above were decent trade-offs to form the basis of PR discussions. 

# Forward Thinking / Additional Augmentations
Organizations can use this to configure their own defaults for service teams in their organization and setup best practices which can easily be consumed by service teams when creating their dashboards. Further, such organizations can even introduce additional dashboard types (e.g. for higher level operational or business review) which can exist separately from service/engineering dashboards which are intended to have higher detail and be consumed by more technical audiences.

---

_By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license_
feat(dashboards): improve customizability
# Change Info
This change allows for improved customization of dashboards. It will allow consumers of this package to control how many dashboards they generate, the configuration of those dashboards, and the widgets on those dashboards. This probably helps address this related github issue: https://github.com/cdklabs/cdk-monitoring-constructs/issues/66. 

This change is backwards compatible and consumers must make explicit changes to their code if they would like to take advantage of the additional dynamism around dashboard generation this contribution provides. As a consequence of this, the dashboard configuration provided by this contribution is not as robust or as flexible as I would like it to be, but this comes at the trade-off of being minimally intrusive to the existing codebase. 

# Testing Done
I've used my own CDK application to test this and have verified that these new changes allow me to create a custom number of dashboards according to my own configuration. 

# Backwards Compatibility
This change was made backwards compatible by retrofitting the existing `DefaultDashboardFactory` to also be an implementation of `IDynamicDashboardFactory` with an opinionated implementation which creates three dashboards: Summary, Details, and Alarms. 

## Backwards Compatibility Testing Done
I also tested this for backwards compatibility by: 

1. Using my own CDK application by using the existing constructs exposed by the `MonitoringFacade` and verified that `monitoring.addSegment` and `monitoring.monitorXYZ` calls populated the default dashboards as expected
2. Verifying that the jest snapshots for the `DefaultDashboardFactory` did not change. 

# How to consume / Documentation
I've added a README section on how to consume these changes. 

# Limitations of this approach
1. This does not really support minor-changes to existing dashboard content. If you want to use this, it amounts to a full swap & replace. Re-arrangement of existing widgets to new dashboards can easily be done, but small modifications to existing widgets are not cheap with this change. 
3. This change introduces some coupling between dashboard types and IDynamicDashboardSegments: when creating IDynamicDashboardSegment implementations, you are required to know which dashboards you are generating. 

However, since this contribution is minimally intrusive, I thought the above were decent trade-offs to form the basis of PR discussions. 

# Forward Thinking / Additional Augmentations
Organizations can use this to configure their own defaults for service teams in their organization and setup best practices which can easily be consumed by service teams when creating their dashboards. Further, such organizations can even introduce additional dashboard types (e.g. for higher level operational or business review) which can exist separately from service/engineering dashboards which are intended to have higher detail and be consumed by more technical audiences.

---

_By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license_


Discussion / hints:

Fix patch:
diff --git a/.projen/tasks.json b/.projen/tasks.json
index 818829e2..49c84012 100644
--- a/.projen/tasks.json
+++ b/.projen/tasks.json
@@ -233,7 +233,7 @@
       "description": "Prepare a release from \"main\" branch",
       "env": {
         "RELEASE": "true",
-        "MAJOR": "3"
+        "MAJOR": "4"
       },
       "steps": [
         {
diff --git a/.projenrc.js b/.projenrc.js
index 2c86fa75..57720eb7 100644
--- a/.projenrc.js
+++ b/.projenrc.js
@@ -11,7 +11,7 @@ const project = new awscdk.AwsCdkConstructLibrary({
   keywords: ["cloudwatch", "monitoring"],
 
   defaultReleaseBranch: "main",
-  majorVersion: 3,
+  majorVersion: 4,
   stability: "experimental",
 
   cdkVersion: CDK_VERSION,
diff --git a/API.md b/API.md
index d80eb509..6be9e2ac 100644
--- a/API.md
+++ b/API.md
@@ -602,7 +602,7 @@ The name of this dashboard.
 
 ### DefaultDashboardFactory <a name="DefaultDashboardFactory" id="cdk-monitoring-constructs.DefaultDashboardFactory"></a>
 
-- *Implements:* <a href="#cdk-monitoring-constructs.IDashboardFactory">IDashboardFactory</a>
+- *Implements:* <a href="#cdk-monitoring-constructs.IDashboardFactory">IDashboardFactory</a>, <a href="#cdk-monitoring-constructs.IDynamicDashboardFactory">IDynamicDashboardFactory</a>
 
 #### Initializers <a name="Initializers" id="cdk-monitoring-constructs.DefaultDashboardFactory.Initializer"></a>
 
@@ -643,10 +643,12 @@ new DefaultDashboardFactory(scope: Construct, id: string, props: MonitoringDashb
 | **Name** | **Description** |
 | --- | --- |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.toString">toString</a></code> | Returns a string representation of this construct. |
+| <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.addDynamicSegment">addDynamicSegment</a></code> | Adds a dynamic dashboard segment. |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.addSegment">addSegment</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.createdAlarmDashboard">createdAlarmDashboard</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.createdDashboard">createdDashboard</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.createdSummaryDashboard">createdSummaryDashboard</a></code> | *No description.* |
+| <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.getDashboard">getDashboard</a></code> | Gets the dashboard for the requested dashboard type. |
 
 ---
 
@@ -658,6 +660,20 @@ public toString(): string
 
 Returns a string representation of this construct.
 
+##### `addDynamicSegment` <a name="addDynamicSegment" id="cdk-monitoring-constructs.DefaultDashboardFactory.addDynamicSegment"></a>
+
+```typescript
+public addDynamicSegment(segment: IDynamicDashboardSegment): void
+```
+
+Adds a dynamic dashboard segment.
+
+###### `segment`<sup>Required</sup> <a name="segment" id="cdk-monitoring-constructs.DefaultDashboardFactory.addDynamicSegment.parameter.segment"></a>
+
+- *Type:* <a href="#cdk-monitoring-constructs.IDynamicDashboardSegment">IDynamicDashboardSegment</a>
+
+---
+
 ##### `addSegment` <a name="addSegment" id="cdk-monitoring-constructs.DefaultDashboardFactory.addSegment"></a>
 
 ```typescript
@@ -688,6 +704,20 @@ public createdDashboard(): Dashboard
 public createdSummaryDashboard(): Dashboard
 ```
 
+##### `getDashboard` <a name="getDashboard" id="cdk-monitoring-constructs.DefaultDashboardFactory.getDashboard"></a>
+
+```typescript
+public getDashboard(name: string): Dashboard
+```
+
+Gets the dashboard for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.DefaultDashboardFactory.getDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 #### Static Functions <a name="Static Functions" id="Static Functions"></a>
 
 | **Name** | **Description** |
@@ -720,6 +750,7 @@ Any object.
 | --- | --- | --- |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.property.anyDashboardCreated">anyDashboardCreated</a></code> | <code>boolean</code> | *No description.* |
+| <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.property.dashboards">dashboards</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_cloudwatch.Dashboard}</code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.property.alarmDashboard">alarmDashboard</a></code> | <code>aws-cdk-lib.aws_cloudwatch.Dashboard</code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.property.dashboard">dashboard</a></code> | <code>aws-cdk-lib.aws_cloudwatch.Dashboard</code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DefaultDashboardFactory.property.summaryDashboard">summaryDashboard</a></code> | <code>aws-cdk-lib.aws_cloudwatch.Dashboard</code> | *No description.* |
@@ -748,6 +779,16 @@ public readonly anyDashboardCreated: boolean;
 
 ---
 
+##### `dashboards`<sup>Required</sup> <a name="dashboards" id="cdk-monitoring-constructs.DefaultDashboardFactory.property.dashboards"></a>
+
+```typescript
+public readonly dashboards: {[ key: string ]: Dashboard};
+```
+
+- *Type:* {[ key: string ]: aws-cdk-lib.aws_cloudwatch.Dashboard}
+
+---
+
 ##### `alarmDashboard`<sup>Optional</sup> <a name="alarmDashboard" id="cdk-monitoring-constructs.DefaultDashboardFactory.property.alarmDashboard"></a>
 
 ```typescript
@@ -779,6 +820,148 @@ public readonly summaryDashboard: Dashboard;
 ---
 
 
+### DynamicDashboardFactory <a name="DynamicDashboardFactory" id="cdk-monitoring-constructs.DynamicDashboardFactory"></a>
+
+- *Implements:* <a href="#cdk-monitoring-constructs.IDynamicDashboardFactory">IDynamicDashboardFactory</a>
+
+#### Initializers <a name="Initializers" id="cdk-monitoring-constructs.DynamicDashboardFactory.Initializer"></a>
+
+```typescript
+import { DynamicDashboardFactory } from 'cdk-monitoring-constructs'
+
+new DynamicDashboardFactory(scope: Construct, id: string, props: MonitoringDynamicDashboardsProps)
+```
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.Initializer.parameter.props">props</a></code> | <code><a href="#cdk-monitoring-constructs.MonitoringDynamicDashboardsProps">MonitoringDynamicDashboardsProps</a></code> | *No description.* |
+
+---
+
+##### `scope`<sup>Required</sup> <a name="scope" id="cdk-monitoring-constructs.DynamicDashboardFactory.Initializer.parameter.scope"></a>
+
+- *Type:* constructs.Construct
+
+---
+
+##### `id`<sup>Required</sup> <a name="id" id="cdk-monitoring-constructs.DynamicDashboardFactory.Initializer.parameter.id"></a>
+
+- *Type:* string
+
+---
+
+##### `props`<sup>Required</sup> <a name="props" id="cdk-monitoring-constructs.DynamicDashboardFactory.Initializer.parameter.props"></a>
+
+- *Type:* <a href="#cdk-monitoring-constructs.MonitoringDynamicDashboardsProps">MonitoringDynamicDashboardsProps</a>
+
+---
+
+#### Methods <a name="Methods" id="Methods"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.toString">toString</a></code> | Returns a string representation of this construct. |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.addDynamicSegment">addDynamicSegment</a></code> | Adds a dynamic dashboard segment. |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.getDashboard">getDashboard</a></code> | Gets the dashboard for the requested dashboard type. |
+
+---
+
+##### `toString` <a name="toString" id="cdk-monitoring-constructs.DynamicDashboardFactory.toString"></a>
+
+```typescript
+public toString(): string
+```
+
+Returns a string representation of this construct.
+
+##### `addDynamicSegment` <a name="addDynamicSegment" id="cdk-monitoring-constructs.DynamicDashboardFactory.addDynamicSegment"></a>
+
+```typescript
+public addDynamicSegment(segment: IDynamicDashboardSegment): void
+```
+
+Adds a dynamic dashboard segment.
+
+###### `segment`<sup>Required</sup> <a name="segment" id="cdk-monitoring-constructs.DynamicDashboardFactory.addDynamicSegment.parameter.segment"></a>
+
+- *Type:* <a href="#cdk-monitoring-constructs.IDynamicDashboardSegment">IDynamicDashboardSegment</a>
+
+---
+
+##### `getDashboard` <a name="getDashboard" id="cdk-monitoring-constructs.DynamicDashboardFactory.getDashboard"></a>
+
+```typescript
+public getDashboard(type: string): Dashboard
+```
+
+Gets the dashboard for the requested dashboard type.
+
+###### `type`<sup>Required</sup> <a name="type" id="cdk-monitoring-constructs.DynamicDashboardFactory.getDashboard.parameter.type"></a>
+
+- *Type:* string
+
+---
+
+#### Static Functions <a name="Static Functions" id="Static Functions"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
+
+---
+
+##### ~~`isConstruct`~~ <a name="isConstruct" id="cdk-monitoring-constructs.DynamicDashboardFactory.isConstruct"></a>
+
+```typescript
+import { DynamicDashboardFactory } from 'cdk-monitoring-constructs'
+
+DynamicDashboardFactory.isConstruct(x: any)
+```
+
+Checks if `x` is a construct.
+
+###### `x`<sup>Required</sup> <a name="x" id="cdk-monitoring-constructs.DynamicDashboardFactory.isConstruct.parameter.x"></a>
+
+- *Type:* any
+
+Any object.
+
+---
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardFactory.property.dashboards">dashboards</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_cloudwatch.Dashboard}</code> | *No description.* |
+
+---
+
+##### `node`<sup>Required</sup> <a name="node" id="cdk-monitoring-constructs.DynamicDashboardFactory.property.node"></a>
+
+```typescript
+public readonly node: Node;
+```
+
+- *Type:* constructs.Node
+
+The tree node.
+
+---
+
+##### `dashboards`<sup>Required</sup> <a name="dashboards" id="cdk-monitoring-constructs.DynamicDashboardFactory.property.dashboards"></a>
+
+```typescript
+public readonly dashboards: {[ key: string ]: Dashboard};
+```
+
+- *Type:* {[ key: string ]: aws-cdk-lib.aws_cloudwatch.Dashboard}
+
+---
+
+
 ### MonitoringFacade <a name="MonitoringFacade" id="cdk-monitoring-constructs.MonitoringFacade"></a>
 
 An implementation of a {@link MonitoringScope}.
@@ -828,9 +1011,10 @@ new MonitoringFacade(scope: Construct, id: string, props?: MonitoringFacadeProps
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.createAwsConsoleUrlFactory">createAwsConsoleUrlFactory</a></code> | Creates a new factory that creates AWS Console URLs. |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.createMetricFactory">createMetricFactory</a></code> | Creates a new metric factory. |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
+| <code><a href="#cdk-monitoring-constructs.MonitoringFacade.addDynamicSegment">addDynamicSegment</a></code> | Adds a dashboard segment which returns dynamic content depending on dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.addLargeHeader">addLargeHeader</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.addMediumHeader">addMediumHeader</a></code> | *No description.* |
-| <code><a href="#cdk-monitoring-constructs.MonitoringFacade.addSegment">addSegment</a></code> | *No description.* |
+| <code><a href="#cdk-monitoring-constructs.MonitoringFacade.addSegment">addSegment</a></code> | Adds a dashboard segment to go on one of the {@link DefaultDashboards}. |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.addSmallHeader">addSmallHeader</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.addWidget">addWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.createCompositeAlarmUsingDisambiguator">createCompositeAlarmUsingDisambiguator</a></code> | Finds a subset of created alarms that are marked by a specific disambiguator and creates a composite alarm. |
@@ -940,6 +1124,22 @@ public createWidgetFactory(): IWidgetFactory
 
 Creates a new widget factory.
 
+##### `addDynamicSegment` <a name="addDynamicSegment" id="cdk-monitoring-constructs.MonitoringFacade.addDynamicSegment"></a>
+
+```typescript
+public addDynamicSegment(segment: IDynamicDashboardSegment): void
+```
+
+Adds a dashboard segment which returns dynamic content depending on dashboard type.
+
+###### `segment`<sup>Required</sup> <a name="segment" id="cdk-monitoring-constructs.MonitoringFacade.addDynamicSegment.parameter.segment"></a>
+
+- *Type:* <a href="#cdk-monitoring-constructs.IDynamicDashboardSegment">IDynamicDashboardSegment</a>
+
+dynamic segment to add.
+
+---
+
 ##### `addLargeHeader` <a name="addLargeHeader" id="cdk-monitoring-constructs.MonitoringFacade.addLargeHeader"></a>
 
 ```typescript
@@ -994,16 +1194,22 @@ public addMediumHeader(text: string, addToSummary?: boolean, addToAlarm?: boolea
 public addSegment(segment: IDashboardSegment, overrideProps?: MonitoringDashboardsOverrideProps): MonitoringFacade
 ```
 
+Adds a dashboard segment to go on one of the {@link DefaultDashboards}.
+
 ###### `segment`<sup>Required</sup> <a name="segment" id="cdk-monitoring-constructs.MonitoringFacade.addSegment.parameter.segment"></a>
 
 - *Type:* <a href="#cdk-monitoring-constructs.IDashboardSegment">IDashboardSegment</a>
 
+segment to add.
+
 ---
 
 ###### `overrideProps`<sup>Optional</sup> <a name="overrideProps" id="cdk-monitoring-constructs.MonitoringFacade.addSegment.parameter.overrideProps"></a>
 
 - *Type:* <a href="#cdk-monitoring-constructs.MonitoringDashboardsOverrideProps">MonitoringDashboardsOverrideProps</a>
 
+props to specify which default dashboards this segment is added to.
+
 ---
 
 ##### `addSmallHeader` <a name="addSmallHeader" id="cdk-monitoring-constructs.MonitoringFacade.addSmallHeader"></a>
@@ -1108,7 +1314,7 @@ customization options.
 
 ---
 
-##### `createdAlarmDashboard` <a name="createdAlarmDashboard" id="cdk-monitoring-constructs.MonitoringFacade.createdAlarmDashboard"></a>
+##### ~~`createdAlarmDashboard`~~ <a name="createdAlarmDashboard" id="cdk-monitoring-constructs.MonitoringFacade.createdAlarmDashboard"></a>
 
 ```typescript
 public createdAlarmDashboard(): Dashboard
@@ -1154,7 +1360,7 @@ tag to filter alarms by.
 
 ---
 
-##### `createdDashboard` <a name="createdDashboard" id="cdk-monitoring-constructs.MonitoringFacade.createdDashboard"></a>
+##### ~~`createdDashboard`~~ <a name="createdDashboard" id="cdk-monitoring-constructs.MonitoringFacade.createdDashboard"></a>
 
 ```typescript
 public createdDashboard(): Dashboard
@@ -1168,7 +1374,7 @@ public createdMonitorings(): Monitoring[]
 
 Returns the created monitorings added up until now.
 
-##### `createdSummaryDashboard` <a name="createdSummaryDashboard" id="cdk-monitoring-constructs.MonitoringFacade.createdSummaryDashboard"></a>
+##### ~~`createdSummaryDashboard`~~ <a name="createdSummaryDashboard" id="cdk-monitoring-constructs.MonitoringFacade.createdSummaryDashboard"></a>
 
 ```typescript
 public createdSummaryDashboard(): Dashboard
@@ -1781,6 +1987,7 @@ Any object.
 | **Name** | **Type** | **Description** |
 | --- | --- | --- |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacade.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
+| <code><a href="#cdk-monitoring-constructs.MonitoringFacade.property.dashboardFactory">dashboardFactory</a></code> | <code><a href="#cdk-monitoring-constructs.IDynamicDashboardFactory">IDynamicDashboardFactory</a></code> | *No description.* |
 
 ---
 
@@ -1796,6 +2003,16 @@ The tree node.
 
 ---
 
+##### `dashboardFactory`<sup>Optional</sup> <a name="dashboardFactory" id="cdk-monitoring-constructs.MonitoringFacade.property.dashboardFactory"></a>
+
+```typescript
+public readonly dashboardFactory: IDynamicDashboardFactory;
+```
+
+- *Type:* <a href="#cdk-monitoring-constructs.IDynamicDashboardFactory">IDynamicDashboardFactory</a>
+
+---
+
 
 ### MonitoringScope <a name="MonitoringScope" id="cdk-monitoring-constructs.MonitoringScope"></a>
 
@@ -12733,6 +12950,81 @@ public readonly maxDuration: Duration;
 
 ---
 
+### DynamicDashboardConfiguration <a name="DynamicDashboardConfiguration" id="cdk-monitoring-constructs.DynamicDashboardConfiguration"></a>
+
+#### Initializer <a name="Initializer" id="cdk-monitoring-constructs.DynamicDashboardConfiguration.Initializer"></a>
+
+```typescript
+import { DynamicDashboardConfiguration } from 'cdk-monitoring-constructs'
+
+const dynamicDashboardConfiguration: DynamicDashboardConfiguration = { ... }
+```
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardConfiguration.property.name">name</a></code> | <code>string</code> | Name of the dashboard. Full dashboard name will take the form of: `{@link MonitoringDynamicDashboardsProps.dashboardNamePrefix}-{@link name}`. |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardConfiguration.property.periodOverride">periodOverride</a></code> | <code>aws-cdk-lib.aws_cloudwatch.PeriodOverride</code> | Period override for the dashboard. |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardConfiguration.property.range">range</a></code> | <code>aws-cdk-lib.Duration</code> | Range of the dashboard. |
+| <code><a href="#cdk-monitoring-constructs.DynamicDashboardConfiguration.property.renderingPreference">renderingPreference</a></code> | <code><a href="#cdk-monitoring-constructs.DashboardRenderingPreference">DashboardRenderingPreference</a></code> | Dashboard rendering preference. |
+
+---
+
+##### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.DynamicDashboardConfiguration.property.name"></a>
+
+```typescript
+public readonly name: string;
+```
+
+- *Type:* string
+
+Name of the dashboard. Full dashboard name will take the form of: `{@link MonitoringDynamicDashboardsProps.dashboardNamePrefix}-{@link name}`.
+
+NOTE: The dashboard names in {@link DefaultDashboardFactory.DefaultDashboards}
+are reserved and cannot be used as dashboard names.
+
+---
+
+##### `periodOverride`<sup>Optional</sup> <a name="periodOverride" id="cdk-monitoring-constructs.DynamicDashboardConfiguration.property.periodOverride"></a>
+
+```typescript
+public readonly periodOverride: PeriodOverride;
+```
+
+- *Type:* aws-cdk-lib.aws_cloudwatch.PeriodOverride
+- *Default:* respect individual graphs (PeriodOverride.INHERIT)
+
+Period override for the dashboard.
+
+---
+
+##### `range`<sup>Optional</sup> <a name="range" id="cdk-monitoring-constructs.DynamicDashboardConfiguration.property.range"></a>
+
+```typescript
+public readonly range: Duration;
+```
+
+- *Type:* aws-cdk-lib.Duration
+- *Default:* 8 hours
+
+Range of the dashboard.
+
+---
+
+##### `renderingPreference`<sup>Optional</sup> <a name="renderingPreference" id="cdk-monitoring-constructs.DynamicDashboardConfiguration.property.renderingPreference"></a>
+
+```typescript
+public readonly renderingPreference: DashboardRenderingPreference;
+```
+
+- *Type:* <a href="#cdk-monitoring-constructs.DashboardRenderingPreference">DashboardRenderingPreference</a>
+- *Default:* DashboardRenderingPreference.INTERACTIVE_ONLY
+
+Dashboard rendering preference.
+
+---
+
 ### DynamoTableGlobalSecondaryIndexMetricFactoryProps <a name="DynamoTableGlobalSecondaryIndexMetricFactoryProps" id="cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMetricFactoryProps"></a>
 
 #### Initializer <a name="Initializer" id="cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMetricFactoryProps.Initializer"></a>
@@ -26840,6 +27132,51 @@ Range of the summary dashboard.
 
 ---
 
+### MonitoringDynamicDashboardsProps <a name="MonitoringDynamicDashboardsProps" id="cdk-monitoring-constructs.MonitoringDynamicDashboardsProps"></a>
+
+#### Initializer <a name="Initializer" id="cdk-monitoring-constructs.MonitoringDynamicDashboardsProps.Initializer"></a>
+
+```typescript
+import { MonitoringDynamicDashboardsProps } from 'cdk-monitoring-constructs'
+
+const monitoringDynamicDashboardsProps: MonitoringDynamicDashboardsProps = { ... }
+```
+
+#### Properties <a name="Properties" id="Properties"></a>
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#cdk-monitoring-constructs.MonitoringDynamicDashboardsProps.property.dashboardConfigs">dashboardConfigs</a></code> | <code><a href="#cdk-monitoring-constructs.DynamicDashboardConfiguration">DynamicDashboardConfiguration</a>[]</code> | List of dashboard types to generate. |
+| <code><a href="#cdk-monitoring-constructs.MonitoringDynamicDashboardsProps.property.dashboardNamePrefix">dashboardNamePrefix</a></code> | <code>string</code> | Prefix added to each dashboard's name. |
+
+---
+
+##### `dashboardConfigs`<sup>Required</sup> <a name="dashboardConfigs" id="cdk-monitoring-constructs.MonitoringDynamicDashboardsProps.property.dashboardConfigs"></a>
+
+```typescript
+public readonly dashboardConfigs: DynamicDashboardConfiguration[];
+```
+
+- *Type:* <a href="#cdk-monitoring-constructs.DynamicDashboardConfiguration">DynamicDashboardConfiguration</a>[]
+
+List of dashboard types to generate.
+
+---
+
+##### `dashboardNamePrefix`<sup>Required</sup> <a name="dashboardNamePrefix" id="cdk-monitoring-constructs.MonitoringDynamicDashboardsProps.property.dashboardNamePrefix"></a>
+
+```typescript
+public readonly dashboardNamePrefix: string;
+```
+
+- *Type:* string
+
+Prefix added to each dashboard's name.
+
+This allows to have all dashboards sorted close to each other and also separate multiple monitoring facades.
+
+---
+
 ### MonitoringFacadeProps <a name="MonitoringFacadeProps" id="cdk-monitoring-constructs.MonitoringFacadeProps"></a>
 
 #### Initializer <a name="Initializer" id="cdk-monitoring-constructs.MonitoringFacadeProps.Initializer"></a>
@@ -26855,7 +27192,7 @@ const monitoringFacadeProps: MonitoringFacadeProps = { ... }
 | **Name** | **Type** | **Description** |
 | --- | --- | --- |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacadeProps.property.alarmFactoryDefaults">alarmFactoryDefaults</a></code> | <code><a href="#cdk-monitoring-constructs.AlarmFactoryDefaults">AlarmFactoryDefaults</a></code> | Defaults for alarm factory. |
-| <code><a href="#cdk-monitoring-constructs.MonitoringFacadeProps.property.dashboardFactory">dashboardFactory</a></code> | <code><a href="#cdk-monitoring-constructs.IDashboardFactory">IDashboardFactory</a></code> | Defaults for dashboard factory. |
+| <code><a href="#cdk-monitoring-constructs.MonitoringFacadeProps.property.dashboardFactory">dashboardFactory</a></code> | <code><a href="#cdk-monitoring-constructs.IDynamicDashboardFactory">IDynamicDashboardFactory</a></code> | Defaults for dashboard factory. |
 | <code><a href="#cdk-monitoring-constructs.MonitoringFacadeProps.property.metricFactoryDefaults">metricFactoryDefaults</a></code> | <code><a href="#cdk-monitoring-constructs.MetricFactoryDefaults">MetricFactoryDefaults</a></code> | Defaults for metric factory. |
 
 ---
@@ -26876,11 +27213,11 @@ Defaults for alarm factory.
 ##### `dashboardFactory`<sup>Optional</sup> <a name="dashboardFactory" id="cdk-monitoring-constructs.MonitoringFacadeProps.property.dashboardFactory"></a>
 
 ```typescript
-public readonly dashboardFactory: IDashboardFactory;
+public readonly dashboardFactory: IDynamicDashboardFactory;
 ```
 
-- *Type:* <a href="#cdk-monitoring-constructs.IDashboardFactory">IDashboardFactory</a>
-- *Default:* An instance of {@link DefaultDashboardFactory}; facade logical ID used as default name
+- *Type:* <a href="#cdk-monitoring-constructs.IDynamicDashboardFactory">IDynamicDashboardFactory</a>
+- *Default:* An instance of {@link DynamicDashboardFactory}; facade logical ID used as default name
 
 Defaults for dashboard factory.
 
@@ -38823,6 +39160,7 @@ new ApiGatewayMonitoring(scope: MonitoringScope, props: ApiGatewayMonitoringProp
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.ApiGatewayMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayMonitoring.createErrorCountWidget">createErrorCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayMonitoring.createErrorRateWidget">createErrorRateWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
@@ -38915,6 +39253,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.ApiGatewayMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.ApiGatewayMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createErrorCountWidget` <a name="createErrorCountWidget" id="cdk-monitoring-constructs.ApiGatewayMonitoring.createErrorCountWidget"></a>
 
 ```typescript
@@ -39375,6 +39727,7 @@ new ApiGatewayV2HttpApiMonitoring(scope: MonitoringScope, props: ApiGatewayV2Htt
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.createErrorCountWidget">createErrorCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.createErrorRateWidget">createErrorRateWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
@@ -39467,6 +39820,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createErrorCountWidget` <a name="createErrorCountWidget" id="cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring.createErrorCountWidget"></a>
 
 ```typescript
@@ -39976,6 +40343,7 @@ new AppSyncMonitoring(scope: MonitoringScope, props: AppSyncMonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.AppSyncMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.AppSyncMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.AppSyncMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.AppSyncMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.AppSyncMonitoring.createErrorCountWidget">createErrorCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.AppSyncMonitoring.createErrorRateWidget">createErrorRateWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.AppSyncMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
@@ -40068,6 +40436,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.AppSyncMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.AppSyncMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createErrorCountWidget` <a name="createErrorCountWidget" id="cdk-monitoring-constructs.AppSyncMonitoring.createErrorCountWidget"></a>
 
 ```typescript
@@ -40527,6 +40909,7 @@ new AutoScalingGroupMonitoring(scope: MonitoringScope, props: AutoScalingGroupMo
 | <code><a href="#cdk-monitoring-constructs.AutoScalingGroupMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.AutoScalingGroupMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.AutoScalingGroupMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.AutoScalingGroupMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.AutoScalingGroupMonitoring.createGroupSizeWidget">createGroupSizeWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.AutoScalingGroupMonitoring.createGroupStatusWidget">createGroupStatusWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.AutoScalingGroupMonitoring.createTitleWidget">createTitleWidget</a></code> | *No description.* |
@@ -40617,6 +41000,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.AutoScalingGroupMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.AutoScalingGroupMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createGroupSizeWidget` <a name="createGroupSizeWidget" id="cdk-monitoring-constructs.AutoScalingGroupMonitoring.createGroupSizeWidget"></a>
 
 ```typescript
@@ -41194,6 +41591,7 @@ new BillingMonitoring(scope: MonitoringScope, props: BillingMonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.BillingMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.BillingMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.BillingMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.BillingMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.BillingMonitoring.createChargesByServiceWidget">createChargesByServiceWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.BillingMonitoring.createTitleWidget">createTitleWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.BillingMonitoring.createTotalChargesWidget">createTotalChargesWidget</a></code> | *No description.* |
@@ -41284,6 +41682,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.BillingMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.BillingMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createChargesByServiceWidget` <a name="createChargesByServiceWidget" id="cdk-monitoring-constructs.BillingMonitoring.createChargesByServiceWidget"></a>
 
 ```typescript
@@ -41477,6 +41889,7 @@ new CertificateManagerMonitoring(scope: MonitoringScope, props: CertificateManag
 | <code><a href="#cdk-monitoring-constructs.CertificateManagerMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.CertificateManagerMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.CertificateManagerMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.CertificateManagerMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.CertificateManagerMonitoring.createDaysToExpiryWidget">createDaysToExpiryWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.CertificateManagerMonitoring.createTitleWidget">createTitleWidget</a></code> | *No description.* |
 
@@ -41566,6 +41979,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.CertificateManagerMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.CertificateManagerMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createDaysToExpiryWidget` <a name="createDaysToExpiryWidget" id="cdk-monitoring-constructs.CertificateManagerMonitoring.createDaysToExpiryWidget"></a>
 
 ```typescript
@@ -41786,6 +42213,7 @@ new CloudFrontDistributionMonitoring(scope: MonitoringScope, props: CloudFrontDi
 | <code><a href="#cdk-monitoring-constructs.CloudFrontDistributionMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.CloudFrontDistributionMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.CloudFrontDistributionMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.CloudFrontDistributionMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.CloudFrontDistributionMonitoring.createCacheWidget">createCacheWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.CloudFrontDistributionMonitoring.createErrorRateWidget">createErrorRateWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.CloudFrontDistributionMonitoring.createTitleWidget">createTitleWidget</a></code> | *No description.* |
@@ -41878,6 +42306,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.CloudFrontDistributionMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.CloudFrontDistributionMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createCacheWidget` <a name="createCacheWidget" id="cdk-monitoring-constructs.CloudFrontDistributionMonitoring.createCacheWidget"></a>
 
 ```typescript
@@ -42305,6 +42747,7 @@ new CodeBuildProjectMonitoring(scope: MonitoringScope, props: CodeBuildProjectMo
 | <code><a href="#cdk-monitoring-constructs.CodeBuildProjectMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.CodeBuildProjectMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.CodeBuildProjectMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.CodeBuildProjectMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.CodeBuildProjectMonitoring.createBuildCountsWidget">createBuildCountsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.CodeBuildProjectMonitoring.createDurationWidget">createDurationWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.CodeBuildProjectMonitoring.createFailedBuildRateWidget">createFailedBuildRateWidget</a></code> | *No description.* |
@@ -42396,6 +42839,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.CodeBuildProjectMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.CodeBuildProjectMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createBuildCountsWidget` <a name="createBuildCountsWidget" id="cdk-monitoring-constructs.CodeBuildProjectMonitoring.createBuildCountsWidget"></a>
 
 ```typescript
@@ -42776,6 +43233,7 @@ new CustomMonitoring(scope: MonitoringScope, props: CustomMonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.CustomMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.CustomMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.CustomMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.CustomMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -42863,6 +43321,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.CustomMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.CustomMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 #### Properties <a name="Properties" id="Properties"></a>
 
@@ -43311,6 +43783,7 @@ new DocumentDbMonitoring(scope: MonitoringScope, props: DocumentDbMonitoringProp
 | <code><a href="#cdk-monitoring-constructs.DocumentDbMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.DocumentDbMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.DocumentDbMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.DocumentDbMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.DocumentDbMonitoring.createConnectionsWidget">createConnectionsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DocumentDbMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DocumentDbMonitoring.createResourceUsageWidget">createResourceUsageWidget</a></code> | *No description.* |
@@ -43403,6 +43876,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.DocumentDbMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.DocumentDbMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createConnectionsWidget` <a name="createConnectionsWidget" id="cdk-monitoring-constructs.DocumentDbMonitoring.createConnectionsWidget"></a>
 
 ```typescript
@@ -44058,6 +44545,7 @@ new DynamoTableGlobalSecondaryIndexMonitoring(scope: MonitoringScope, props: Dyn
 | <code><a href="#cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -44145,6 +44633,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 
 
@@ -44318,6 +44820,7 @@ new DynamoTableMonitoring(scope: MonitoringScope, props: DynamoTableMonitoringPr
 | <code><a href="#cdk-monitoring-constructs.DynamoTableMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.DynamoTableMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.DynamoTableMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.DynamoTableMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.DynamoTableMonitoring.createErrorsWidget">createErrorsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DynamoTableMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.DynamoTableMonitoring.createReadCapacityWidget">createReadCapacityWidget</a></code> | *No description.* |
@@ -44411,6 +44914,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.DynamoTableMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.DynamoTableMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createErrorsWidget` <a name="createErrorsWidget" id="cdk-monitoring-constructs.DynamoTableMonitoring.createErrorsWidget"></a>
 
 ```typescript
@@ -44926,6 +45443,7 @@ new EC2Monitoring(scope: MonitoringScope, props: EC2MonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.EC2Monitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.EC2Monitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.EC2Monitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.EC2Monitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.EC2Monitoring.createCpuWidget">createCpuWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.EC2Monitoring.createDiskOpsWidget">createDiskOpsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.EC2Monitoring.createDiskWidget">createDiskWidget</a></code> | *No description.* |
@@ -45018,6 +45536,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.EC2Monitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.EC2Monitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createCpuWidget` <a name="createCpuWidget" id="cdk-monitoring-constructs.EC2Monitoring.createCpuWidget"></a>
 
 ```typescript
@@ -45245,6 +45777,7 @@ new Ec2ServiceMonitoring(scope: MonitoringScope, props: CustomEc2ServiceMonitori
 | <code><a href="#cdk-monitoring-constructs.Ec2ServiceMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.Ec2ServiceMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.Ec2ServiceMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.Ec2ServiceMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.Ec2ServiceMonitoring.createCpuWidget">createCpuWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.Ec2ServiceMonitoring.createMemoryWidget">createMemoryWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.Ec2ServiceMonitoring.createTaskHealthWidget">createTaskHealthWidget</a></code> | *No description.* |
@@ -45337,6 +45870,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.Ec2ServiceMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.Ec2ServiceMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createCpuWidget` <a name="createCpuWidget" id="cdk-monitoring-constructs.Ec2ServiceMonitoring.createCpuWidget"></a>
 
 ```typescript
@@ -45928,6 +46475,7 @@ new ElastiCacheClusterMonitoring(scope: MonitoringScope, props: ElastiCacheClust
 | <code><a href="#cdk-monitoring-constructs.ElastiCacheClusterMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.ElastiCacheClusterMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.ElastiCacheClusterMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.ElastiCacheClusterMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.ElastiCacheClusterMonitoring.createConnectionsWidget">createConnectionsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.ElastiCacheClusterMonitoring.createCpuUsageWidget">createCpuUsageWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.ElastiCacheClusterMonitoring.createItemCountWidget">createItemCountWidget</a></code> | *No description.* |
@@ -46020,6 +46568,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.ElastiCacheClusterMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.ElastiCacheClusterMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createConnectionsWidget` <a name="createConnectionsWidget" id="cdk-monitoring-constructs.ElastiCacheClusterMonitoring.createConnectionsWidget"></a>
 
 ```typescript
@@ -46491,6 +47053,7 @@ new FargateServiceMonitoring(scope: MonitoringScope, props: CustomFargateService
 | <code><a href="#cdk-monitoring-constructs.FargateServiceMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.FargateServiceMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.FargateServiceMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.FargateServiceMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.FargateServiceMonitoring.createCpuWidget">createCpuWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.FargateServiceMonitoring.createMemoryWidget">createMemoryWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.FargateServiceMonitoring.createTaskHealthWidget">createTaskHealthWidget</a></code> | *No description.* |
@@ -46583,6 +47146,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.FargateServiceMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.FargateServiceMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createCpuWidget` <a name="createCpuWidget" id="cdk-monitoring-constructs.FargateServiceMonitoring.createCpuWidget"></a>
 
 ```typescript
@@ -47098,6 +47675,7 @@ new GlueJobMonitoring(scope: MonitoringScope, props: GlueJobMonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.GlueJobMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.GlueJobMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.GlueJobMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.GlueJobMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.GlueJobMonitoring.createDataMovementWidget">createDataMovementWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.GlueJobMonitoring.createErrorCountWidget">createErrorCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.GlueJobMonitoring.createErrorRateWidget">createErrorRateWidget</a></code> | *No description.* |
@@ -47191,6 +47769,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.GlueJobMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.GlueJobMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createDataMovementWidget` <a name="createDataMovementWidget" id="cdk-monitoring-constructs.GlueJobMonitoring.createDataMovementWidget"></a>
 
 ```typescript
@@ -48105,6 +48697,7 @@ new KinesisDataAnalyticsMonitoring(scope: MonitoringScope, props: KinesisDataAna
 | <code><a href="#cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.createDownTimeWidget">createDownTimeWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.createFullRestartsWidget">createFullRestartsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.createGarbageCollectionWidget">createGarbageCollectionWidget</a></code> | *No description.* |
@@ -48201,6 +48794,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createDownTimeWidget` <a name="createDownTimeWidget" id="cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring.createDownTimeWidget"></a>
 
 ```typescript
@@ -48740,6 +49347,7 @@ new KinesisDataStreamMonitoring(scope: MonitoringScope, props: KinesisDataStream
 | <code><a href="#cdk-monitoring-constructs.KinesisDataStreamMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataStreamMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataStreamMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.KinesisDataStreamMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataStreamMonitoring.createCapacityWidget">createCapacityWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataStreamMonitoring.createIncomingDataWidget">createIncomingDataWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.KinesisDataStreamMonitoring.createIteratorAgeWidget">createIteratorAgeWidget</a></code> | *No description.* |
@@ -48836,6 +49444,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.KinesisDataStreamMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.KinesisDataStreamMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createCapacityWidget` <a name="createCapacityWidget" id="cdk-monitoring-constructs.KinesisDataStreamMonitoring.createCapacityWidget"></a>
 
 ```typescript
@@ -49438,6 +50060,7 @@ new KinesisFirehoseMonitoring(scope: MonitoringScope, props: KinesisFirehoseMoni
 | <code><a href="#cdk-monitoring-constructs.KinesisFirehoseMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.KinesisFirehoseMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.KinesisFirehoseMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.KinesisFirehoseMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.KinesisFirehoseMonitoring.createConversionWidget">createConversionWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.KinesisFirehoseMonitoring.createIncomingRecordWidget">createIncomingRecordWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.KinesisFirehoseMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
@@ -49530,6 +50153,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.KinesisFirehoseMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.KinesisFirehoseMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createConversionWidget` <a name="createConversionWidget" id="cdk-monitoring-constructs.KinesisFirehoseMonitoring.createConversionWidget"></a>
 
 ```typescript
@@ -50037,6 +50674,7 @@ new LambdaFunctionMonitoring(scope: MonitoringScope, props: LambdaFunctionMonito
 | <code><a href="#cdk-monitoring-constructs.LambdaFunctionMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.LambdaFunctionMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.LambdaFunctionMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.LambdaFunctionMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.LambdaFunctionMonitoring.createErrorCountWidget">createErrorCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.LambdaFunctionMonitoring.createErrorRateWidget">createErrorRateWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.LambdaFunctionMonitoring.createInvocationWidget">createInvocationWidget</a></code> | *No description.* |
@@ -50135,6 +50773,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.LambdaFunctionMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.LambdaFunctionMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createErrorCountWidget` <a name="createErrorCountWidget" id="cdk-monitoring-constructs.LambdaFunctionMonitoring.createErrorCountWidget"></a>
 
 ```typescript
@@ -51078,6 +51730,7 @@ new LogMonitoring(scope: MonitoringScope, props: LogMonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.LogMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.LogMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.LogMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.LogMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.LogMonitoring.createIncomingLogsWidget">createIncomingLogsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.LogMonitoring.createTitleWidget">createTitleWidget</a></code> | *No description.* |
 
@@ -51167,6 +51820,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.LogMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.LogMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createIncomingLogsWidget` <a name="createIncomingLogsWidget" id="cdk-monitoring-constructs.LogMonitoring.createIncomingLogsWidget"></a>
 
 ```typescript
@@ -51870,7 +52537,7 @@ false if undefined
 
 ### Monitoring <a name="Monitoring" id="cdk-monitoring-constructs.Monitoring"></a>
 
-- *Implements:* <a href="#cdk-monitoring-constructs.IDashboardSegment">IDashboardSegment</a>
+- *Implements:* <a href="#cdk-monitoring-constructs.IDashboardSegment">IDashboardSegment</a>, <a href="#cdk-monitoring-constructs.IDynamicDashboardSegment">IDynamicDashboardSegment</a>
 
 An independent unit of monitoring.
 
@@ -51915,6 +52582,7 @@ new Monitoring(scope: MonitoringScope, props?: BaseMonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.Monitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.Monitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.Monitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.Monitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -52002,6 +52670,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.Monitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.Monitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 
 
@@ -52433,6 +53115,7 @@ new NetworkLoadBalancerMonitoring(scope: MonitoringScope, props: NetworkLoadBala
 | <code><a href="#cdk-monitoring-constructs.NetworkLoadBalancerMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.NetworkLoadBalancerMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.NetworkLoadBalancerMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.NetworkLoadBalancerMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -52520,6 +53203,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.NetworkLoadBalancerMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.NetworkLoadBalancerMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 
 
@@ -53278,6 +53975,7 @@ new OpenSearchClusterMonitoring(scope: MonitoringScope, props: OpenSearchCluster
 | <code><a href="#cdk-monitoring-constructs.OpenSearchClusterMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.OpenSearchClusterMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.OpenSearchClusterMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.OpenSearchClusterMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -53365,6 +54063,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.OpenSearchClusterMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.OpenSearchClusterMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 #### Properties <a name="Properties" id="Properties"></a>
 
@@ -54152,6 +54864,7 @@ new RdsClusterMonitoring(scope: MonitoringScope, props: RdsClusterMonitoringProp
 | <code><a href="#cdk-monitoring-constructs.RdsClusterMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.RdsClusterMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.RdsClusterMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.RdsClusterMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.RdsClusterMonitoring.createConnectionsWidget">createConnectionsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.RdsClusterMonitoring.createCpuAndDiskUsageWidget">createCpuAndDiskUsageWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.RdsClusterMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
@@ -54243,6 +54956,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.RdsClusterMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.RdsClusterMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createConnectionsWidget` <a name="createConnectionsWidget" id="cdk-monitoring-constructs.RdsClusterMonitoring.createConnectionsWidget"></a>
 
 ```typescript
@@ -54609,6 +55336,7 @@ new RedshiftClusterMonitoring(scope: MonitoringScope, props: RedshiftClusterMoni
 | <code><a href="#cdk-monitoring-constructs.RedshiftClusterMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.RedshiftClusterMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.RedshiftClusterMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.RedshiftClusterMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.RedshiftClusterMonitoring.createConnectionsWidget">createConnectionsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.RedshiftClusterMonitoring.createCpuAndDiskUsageWidget">createCpuAndDiskUsageWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.RedshiftClusterMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
@@ -54702,6 +55430,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.RedshiftClusterMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.RedshiftClusterMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createConnectionsWidget` <a name="createConnectionsWidget" id="cdk-monitoring-constructs.RedshiftClusterMonitoring.createConnectionsWidget"></a>
 
 ```typescript
@@ -55088,6 +55830,7 @@ new S3BucketMonitoring(scope: MonitoringScope, props: S3BucketMonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.S3BucketMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.S3BucketMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.S3BucketMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.S3BucketMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -55175,6 +55918,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.S3BucketMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.S3BucketMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 
 
@@ -55311,6 +56068,7 @@ new SecretsManagerSecretMonitoring(scope: MonitoringScope, props: SecretsManager
 | <code><a href="#cdk-monitoring-constructs.SecretsManagerSecretMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.SecretsManagerSecretMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.SecretsManagerSecretMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.SecretsManagerSecretMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.SecretsManagerSecretMonitoring.createDaysSinceLastChangeWidget">createDaysSinceLastChangeWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SecretsManagerSecretMonitoring.createDaysSinceLastRotationWidget">createDaysSinceLastRotationWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SecretsManagerSecretMonitoring.createTitleWidget">createTitleWidget</a></code> | *No description.* |
@@ -55401,6 +56159,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.SecretsManagerSecretMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.SecretsManagerSecretMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createDaysSinceLastChangeWidget` <a name="createDaysSinceLastChangeWidget" id="cdk-monitoring-constructs.SecretsManagerSecretMonitoring.createDaysSinceLastChangeWidget"></a>
 
 ```typescript
@@ -55890,6 +56662,7 @@ new SnsTopicMonitoring(scope: MonitoringScope, props: SnsTopicMonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.SnsTopicMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.SnsTopicMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.SnsTopicMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.SnsTopicMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.SnsTopicMonitoring.createMessageCountWidget">createMessageCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SnsTopicMonitoring.createMessageFailedWidget">createMessageFailedWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SnsTopicMonitoring.createMessageSizeWidget">createMessageSizeWidget</a></code> | *No description.* |
@@ -55981,6 +56754,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.SnsTopicMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.SnsTopicMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createMessageCountWidget` <a name="createMessageCountWidget" id="cdk-monitoring-constructs.SnsTopicMonitoring.createMessageCountWidget"></a>
 
 ```typescript
@@ -56292,6 +57079,7 @@ new SqsQueueMonitoring(scope: MonitoringScope, props: SqsQueueMonitoringProps, i
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoring.createMessageAgeWidget">createMessageAgeWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoring.createMessageCountWidget">createMessageCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoring.createMessageSizeWidget">createMessageSizeWidget</a></code> | *No description.* |
@@ -56385,6 +57173,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.SqsQueueMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.SqsQueueMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createMessageAgeWidget` <a name="createMessageAgeWidget" id="cdk-monitoring-constructs.SqsQueueMonitoring.createMessageAgeWidget"></a>
 
 ```typescript
@@ -56685,6 +57487,7 @@ new SqsQueueMonitoringWithDlq(scope: MonitoringScope, props: SqsQueueMonitoringW
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.createMessageAgeWidget">createMessageAgeWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.createMessageCountWidget">createMessageCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.createMessageSizeWidget">createMessageSizeWidget</a></code> | *No description.* |
@@ -56778,6 +57581,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createMessageAgeWidget` <a name="createMessageAgeWidget" id="cdk-monitoring-constructs.SqsQueueMonitoringWithDlq.createMessageAgeWidget"></a>
 
 ```typescript
@@ -57037,6 +57854,55 @@ public readonly queueUrl: string;
 ---
 
 
+### StaticSegmentDynamicAdapter <a name="StaticSegmentDynamicAdapter" id="cdk-monitoring-constructs.StaticSegmentDynamicAdapter"></a>
+
+- *Implements:* <a href="#cdk-monitoring-constructs.IDynamicDashboardSegment">IDynamicDashboardSegment</a>
+
+#### Initializers <a name="Initializers" id="cdk-monitoring-constructs.StaticSegmentDynamicAdapter.Initializer"></a>
+
+```typescript
+import { StaticSegmentDynamicAdapter } from 'cdk-monitoring-constructs'
+
+new StaticSegmentDynamicAdapter(props: IDashboardFactoryProps)
+```
+
+| **Name** | **Type** | **Description** |
+| --- | --- | --- |
+| <code><a href="#cdk-monitoring-constructs.StaticSegmentDynamicAdapter.Initializer.parameter.props">props</a></code> | <code><a href="#cdk-monitoring-constructs.IDashboardFactoryProps">IDashboardFactoryProps</a></code> | *No description.* |
+
+---
+
+##### `props`<sup>Required</sup> <a name="props" id="cdk-monitoring-constructs.StaticSegmentDynamicAdapter.Initializer.parameter.props"></a>
+
+- *Type:* <a href="#cdk-monitoring-constructs.IDashboardFactoryProps">IDashboardFactoryProps</a>
+
+---
+
+#### Methods <a name="Methods" id="Methods"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#cdk-monitoring-constructs.StaticSegmentDynamicAdapter.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
+
+---
+
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.StaticSegmentDynamicAdapter.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.StaticSegmentDynamicAdapter.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
+
+
+
 ### StepFunctionActivityMetricFactory <a name="StepFunctionActivityMetricFactory" id="cdk-monitoring-constructs.StepFunctionActivityMetricFactory"></a>
 
 #### Initializers <a name="Initializers" id="cdk-monitoring-constructs.StepFunctionActivityMetricFactory.Initializer"></a>
@@ -57229,6 +58095,7 @@ new StepFunctionActivityMonitoring(scope: MonitoringScope, props: StepFunctionAc
 | <code><a href="#cdk-monitoring-constructs.StepFunctionActivityMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.StepFunctionActivityMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.StepFunctionActivityMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.StepFunctionActivityMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -57316,6 +58183,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.StepFunctionActivityMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.StepFunctionActivityMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 #### Properties <a name="Properties" id="Properties"></a>
 
@@ -57686,6 +58567,7 @@ new StepFunctionLambdaIntegrationMonitoring(scope: MonitoringScope, props: StepF
 | <code><a href="#cdk-monitoring-constructs.StepFunctionLambdaIntegrationMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.StepFunctionLambdaIntegrationMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.StepFunctionLambdaIntegrationMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.StepFunctionLambdaIntegrationMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -57773,6 +58655,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.StepFunctionLambdaIntegrationMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.StepFunctionLambdaIntegrationMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 #### Properties <a name="Properties" id="Properties"></a>
 
@@ -58108,6 +59004,7 @@ new StepFunctionMonitoring(scope: MonitoringScope, props: StepFunctionMonitoring
 | <code><a href="#cdk-monitoring-constructs.StepFunctionMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.StepFunctionMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.StepFunctionMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.StepFunctionMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -58195,6 +59092,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.StepFunctionMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.StepFunctionMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 #### Properties <a name="Properties" id="Properties"></a>
 
@@ -58587,6 +59498,7 @@ new StepFunctionServiceIntegrationMonitoring(scope: MonitoringScope, props: Step
 | <code><a href="#cdk-monitoring-constructs.StepFunctionServiceIntegrationMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.StepFunctionServiceIntegrationMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.StepFunctionServiceIntegrationMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.StepFunctionServiceIntegrationMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 
 ---
 
@@ -58674,6 +59586,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.StepFunctionServiceIntegrationMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.StepFunctionServiceIntegrationMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 
 #### Properties <a name="Properties" id="Properties"></a>
 
@@ -58974,6 +59900,7 @@ new SyntheticsCanaryMonitoring(scope: MonitoringScope, props: SyntheticsCanaryMo
 | <code><a href="#cdk-monitoring-constructs.SyntheticsCanaryMonitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.SyntheticsCanaryMonitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.SyntheticsCanaryMonitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.SyntheticsCanaryMonitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.SyntheticsCanaryMonitoring.createErrorCountWidget">createErrorCountWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SyntheticsCanaryMonitoring.createErrorRateWidget">createErrorRateWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.SyntheticsCanaryMonitoring.createLatencyWidget">createLatencyWidget</a></code> | *No description.* |
@@ -59065,6 +59992,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.SyntheticsCanaryMonitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.SyntheticsCanaryMonitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createErrorCountWidget` <a name="createErrorCountWidget" id="cdk-monitoring-constructs.SyntheticsCanaryMonitoring.createErrorCountWidget"></a>
 
 ```typescript
@@ -60109,6 +61050,7 @@ new WafV2Monitoring(scope: MonitoringScope, props: WafV2MonitoringProps)
 | <code><a href="#cdk-monitoring-constructs.WafV2Monitoring.createWidgetFactory">createWidgetFactory</a></code> | Creates a new widget factory. |
 | <code><a href="#cdk-monitoring-constructs.WafV2Monitoring.summaryWidgets">summaryWidgets</a></code> | Returns widgets to be placed on the summary dashboard. |
 | <code><a href="#cdk-monitoring-constructs.WafV2Monitoring.widgets">widgets</a></code> | Returns widgets to be placed on the main dashboard. |
+| <code><a href="#cdk-monitoring-constructs.WafV2Monitoring.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
 | <code><a href="#cdk-monitoring-constructs.WafV2Monitoring.createAllowedRequestsWidget">createAllowedRequestsWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.WafV2Monitoring.createBlockedRequestsRateWidget">createBlockedRequestsRateWidget</a></code> | *No description.* |
 | <code><a href="#cdk-monitoring-constructs.WafV2Monitoring.createBlockedRequestsWidget">createBlockedRequestsWidget</a></code> | *No description.* |
@@ -60200,6 +61142,20 @@ public widgets(): IWidget[]
 
 Returns widgets to be placed on the main dashboard.
 
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.WafV2Monitoring.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.WafV2Monitoring.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+---
+
 ##### `createAllowedRequestsWidget` <a name="createAllowedRequestsWidget" id="cdk-monitoring-constructs.WafV2Monitoring.createAllowedRequestsWidget"></a>
 
 ```typescript
@@ -60739,6 +61695,81 @@ Returns all widgets.
 These should go to the detailed service dashboard.
 
 
+### IDynamicDashboardFactory <a name="IDynamicDashboardFactory" id="cdk-monitoring-constructs.IDynamicDashboardFactory"></a>
+
+- *Implemented By:* <a href="#cdk-monitoring-constructs.DefaultDashboardFactory">DefaultDashboardFactory</a>, <a href="#cdk-monitoring-constructs.DynamicDashboardFactory">DynamicDashboardFactory</a>, <a href="#cdk-monitoring-constructs.IDynamicDashboardFactory">IDynamicDashboardFactory</a>
+
+This dashboard factory interface provides for dynamic dashboard generation through IDynamicDashboard segments which will return different content depending on the dashboard type.
+
+#### Methods <a name="Methods" id="Methods"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#cdk-monitoring-constructs.IDynamicDashboardFactory.addDynamicSegment">addDynamicSegment</a></code> | Adds a dynamic dashboard segment. |
+| <code><a href="#cdk-monitoring-constructs.IDynamicDashboardFactory.getDashboard">getDashboard</a></code> | Gets the dashboard for the requested dashboard type. |
+
+---
+
+##### `addDynamicSegment` <a name="addDynamicSegment" id="cdk-monitoring-constructs.IDynamicDashboardFactory.addDynamicSegment"></a>
+
+```typescript
+public addDynamicSegment(segment: IDynamicDashboardSegment): void
+```
+
+Adds a dynamic dashboard segment.
+
+###### `segment`<sup>Required</sup> <a name="segment" id="cdk-monitoring-constructs.IDynamicDashboardFactory.addDynamicSegment.parameter.segment"></a>
+
+- *Type:* <a href="#cdk-monitoring-constructs.IDynamicDashboardSegment">IDynamicDashboardSegment</a>
+
+IDynamicDashboardSegment.
+
+---
+
+##### `getDashboard` <a name="getDashboard" id="cdk-monitoring-constructs.IDynamicDashboardFactory.getDashboard"></a>
+
+```typescript
+public getDashboard(type: string): Dashboard
+```
+
+Gets the dashboard for the requested dashboard type.
+
+###### `type`<sup>Required</sup> <a name="type" id="cdk-monitoring-constructs.IDynamicDashboardFactory.getDashboard.parameter.type"></a>
+
+- *Type:* string
+
+---
+
+
+### IDynamicDashboardSegment <a name="IDynamicDashboardSegment" id="cdk-monitoring-constructs.IDynamicDashboardSegment"></a>
+
+- *Implemented By:* <a href="#cdk-monitoring-constructs.ApiGatewayMonitoring">ApiGatewayMonitoring</a>, <a href="#cdk-monitoring-constructs.ApiGatewayV2HttpApiMonitoring">ApiGatewayV2HttpApiMonitoring</a>, <a href="#cdk-monitoring-constructs.AppSyncMonitoring">AppSyncMonitoring</a>, <a href="#cdk-monitoring-constructs.AutoScalingGroupMonitoring">AutoScalingGroupMonitoring</a>, <a href="#cdk-monitoring-constructs.BillingMonitoring">BillingMonitoring</a>, <a href="#cdk-monitoring-constructs.CertificateManagerMonitoring">CertificateManagerMonitoring</a>, <a href="#cdk-monitoring-constructs.CloudFrontDistributionMonitoring">CloudFrontDistributionMonitoring</a>, <a href="#cdk-monitoring-constructs.CodeBuildProjectMonitoring">CodeBuildProjectMonitoring</a>, <a href="#cdk-monitoring-constructs.CustomMonitoring">CustomMonitoring</a>, <a href="#cdk-monitoring-constructs.DocumentDbMonitoring">DocumentDbMonitoring</a>, <a href="#cdk-monitoring-constructs.DynamoTableGlobalSecondaryIndexMonitoring">DynamoTableGlobalSecondaryIndexMonitoring</a>, <a href="#cdk-monitoring-constructs.DynamoTableMonitoring">DynamoTableMonitoring</a>, <a href="#cdk-monitoring-constructs.EC2Monitoring">EC2Monitoring</a>, <a href="#cdk-monitoring-constructs.Ec2ServiceMonitoring">Ec2ServiceMonitoring</a>, <a href="#cdk-monitoring-constructs.ElastiCacheClusterMonitoring">ElastiCacheClusterMonitoring</a>, <a href="#cdk-monitoring-constructs.FargateServiceMonitoring">FargateServiceMonitoring</a>, <a href="#cdk-monitoring-constructs.GlueJobMonitoring">GlueJobMonitoring</a>, <a href="#cdk-monitoring-constructs.KinesisDataAnalyticsMonitoring">KinesisDataAnalyticsMonitoring</a>, <a href="#cdk-monitoring-constructs.KinesisDataStreamMonitoring">KinesisDataStreamMonitoring</a>, <a href="#cdk-monitoring-constructs.KinesisFirehoseMonitoring">KinesisFirehoseMonitoring</a>, <a href="#cdk-monitoring-constructs.LambdaFunctionMonitoring">LambdaFunctionMonitoring</a>, <a href="#cdk-monitoring-constructs.LogMonitoring">LogMonitoring</a>, <a href="#cdk-monitoring-constructs.Monitoring">Monitoring</a>, <a href="#cdk-monitoring-constructs.NetworkLoadBalancerMonitoring">NetworkLoadBalancerMonitoring</a>, <a href="#cdk-monitoring-constructs.OpenSearchClusterMonitoring">OpenSearchClusterMonitoring</a>, <a href="#cdk-monitoring-constructs.RdsClusterMonitoring">RdsClusterMonitoring</a>, <a href="#cdk-monitoring-constructs.RedshiftClusterMonitoring">RedshiftClusterMonitoring</a>, <a href="#cdk-monitoring-constructs.S3BucketMonitoring">S3BucketMonitoring</a>, <a href="#cdk-monitoring-constructs.SecretsManagerSecretMonitoring">SecretsManagerSecretMonitoring</a>, <a href="#cdk-monitoring-constructs.SnsTopicMonitoring">SnsTopicMonitoring</a>, <a href="#cdk-monitoring-constructs.SqsQueueMonitoring">SqsQueueMonitoring</a>, <a href="#cdk-monitoring-constructs.SqsQueueMonitoringWithDlq">SqsQueueMonitoringWithDlq</a>, <a href="#cdk-monitoring-constructs.StaticSegmentDynamicAdapter">StaticSegmentDynamicAdapter</a>, <a href="#cdk-monitoring-constructs.StepFunctionActivityMonitoring">StepFunctionActivityMonitoring</a>, <a href="#cdk-monitoring-constructs.StepFunctionLambdaIntegrationMonitoring">StepFunctionLambdaIntegrationMonitoring</a>, <a href="#cdk-monitoring-constructs.StepFunctionMonitoring">StepFunctionMonitoring</a>, <a href="#cdk-monitoring-constructs.StepFunctionServiceIntegrationMonitoring">StepFunctionServiceIntegrationMonitoring</a>, <a href="#cdk-monitoring-constructs.SyntheticsCanaryMonitoring">SyntheticsCanaryMonitoring</a>, <a href="#cdk-monitoring-constructs.WafV2Monitoring">WafV2Monitoring</a>, <a href="#cdk-monitoring-constructs.IDynamicDashboardSegment">IDynamicDashboardSegment</a>
+
+#### Methods <a name="Methods" id="Methods"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#cdk-monitoring-constructs.IDynamicDashboardSegment.widgetsForDashboard">widgetsForDashboard</a></code> | Returns widgets for the requested dashboard type. |
+
+---
+
+##### `widgetsForDashboard` <a name="widgetsForDashboard" id="cdk-monitoring-constructs.IDynamicDashboardSegment.widgetsForDashboard"></a>
+
+```typescript
+public widgetsForDashboard(name: string): IWidget[]
+```
+
+Returns widgets for the requested dashboard type.
+
+###### `name`<sup>Required</sup> <a name="name" id="cdk-monitoring-constructs.IDynamicDashboardSegment.widgetsForDashboard.parameter.name"></a>
+
+- *Type:* string
+
+name of dashboard for which widgets are generated.
+
+---
+
+
 ### IEC2MetricFactoryStrategy <a name="IEC2MetricFactoryStrategy" id="cdk-monitoring-constructs.IEC2MetricFactoryStrategy"></a>
 
 - *Implemented By:* <a href="#cdk-monitoring-constructs.IEC2MetricFactoryStrategy">IEC2MetricFactoryStrategy</a>
@@ -60992,6 +62023,33 @@ Create a two sets of dashboards: standard set (interactive) and a copy (bitmap).
 ---
 
 
+### DefaultDashboards <a name="DefaultDashboards" id="cdk-monitoring-constructs.DefaultDashboards"></a>
+
+#### Members <a name="Members" id="Members"></a>
+
+| **Name** | **Description** |
+| --- | --- |
+| <code><a href="#cdk-monitoring-constructs.DefaultDashboards.SUMMARY">SUMMARY</a></code> | *No description.* |
+| <code><a href="#cdk-monitoring-constructs.DefaultDashboards.DETAIL">DETAIL</a></code> | *No description.* |
+| <code><a href="#cdk-monitoring-constructs.DefaultDashboards.ALARMS">ALARMS</a></code> | *No description.* |
+
+---
+
+##### `SUMMARY` <a name="SUMMARY" id="cdk-monitoring-constructs.DefaultDashboards.SUMMARY"></a>
+
+---
+
+
+##### `DETAIL` <a name="DETAIL" id="cdk-monitoring-constructs.DefaultDashboards.DETAIL"></a>
+
+---
+
+
+##### `ALARMS` <a name="ALARMS" id="cdk-monitoring-constructs.DefaultDashboards.ALARMS"></a>
+
+---
+
+
 ### ElastiCacheClusterType <a name="ElastiCacheClusterType" id="cdk-monitoring-constructs.ElastiCacheClusterType"></a>
 
 #### Members <a name="Members" id="Members"></a>
diff --git a/README.md b/README.md
index 14d6a122..8099482a 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ In your `package.json`:
 ```json
 {
   "dependencies": {
-    "cdk-monitoring-constructs": "^3.0.0",
+    "cdk-monitoring-constructs": "^4.0.0",
 
     // peer dependencies of cdk-monitoring-constructs
     "@aws-cdk/aws-apigatewayv2-alpha": "^2.65.0-alpha.0",
@@ -265,6 +265,79 @@ This is a general procedure on how to do it:
 
 Both of these monitoring base classes are dashboard segments, so you can add them to your monitoring by calling `.addSegment()` on the `MonitoringFacade`.
 
+### Custom dashboards
+
+If you want *even* more flexibility, you can take complete control over dashboard generation by leveraging dynamic dashboarding features. This allows you to create an arbitrary number of dashboards while configuring each of them separately. You can do this in three simple steps:
+
+1. Create a dynamic dashboard factory
+2. Create `IDynamicDashboardSegment` implementations
+3. Add Dynamic Segments to your `MonitoringFacade`
+
+#### Create a dynamic dashboard factory
+
+The below code sample will generate two dashboards with the following names:
+* ExampleDashboards-HostedService
+* ExampleDashboards-Infrastructure
+
+
+```ts
+// create the dynamic dashboard factory.
+const factory = new DynamicDashboardFactory(stack, "DynamicDashboards", {
+  dashboardNamePrefix: "ExampleDashboards",
+  dashboardConfigs: [
+    // 'name' is the minimum required configuration
+    { name: "HostedService" },
+    // below is an example of additional dashboard-specific config options
+    {
+      name: "Infrastructure",
+      range: Duration.hours(3),
+      periodOverride: PeriodOverride.AUTO,
+      renderingPreference: DashboardRenderingPreference.BITMAP_ONLY
+    },
+  ],
+});
+```
+
+#### Create `IDynamicDashboardSegment` implementations
+For each construct you want monitored, you will need to create an implementation of an `IDynamicDashboardSegment`. The following is a basic reference implementation as an example:
+
+```ts
+export enum DashboardTypes {
+  HostedService = "HostedService",
+  Infrastructure = "Infrastructure",
+}
+
+class ExampleSegment implements IDynamicDashboardSegment {
+  widgetsForDashboard(name: string): IWidget[] {
+    // this logic is what's responsible for allowing your dynamic segment to return
+    // different widgets for different dashboards
+    switch (name) {
+      case DashboardTypes.HostedService:
+        return [new TextWidget({ markdown: "This shows metrics for your service hosted on AWS Infrastructure" })];
+      case DashboardTypes.Infrastructure:
+        return [new TextWidget({ markdown: "This shows metrics for the AWS Infrastructure supporting your hosted service" })];
+      default:
+        throw new Error("Unexpected dashboard name!");
+    }
+  }
+}
+```
+
+#### Add Dynamic Segments to MonitoringFacade
+
+When you have instances of an `IDynamicDashboardSegment` to use, they can be added to your dashboard like this:
+
+```ts
+monitoring.addDynamicSegment(new ExampleSegment());
+```
+
+Now, this widget will be added to both dashboards and will show different content depending on the dashboard. Using the above example code, two dashboards will be generated with the following content:
+
+* Dashboard Name: "ExampleDashboards-HostedService"
+  * Content: "This shows metrics for your service hosted on AWS Infrastructure"
+* Dashboard Name: "ExampleDashboards-Infrastructure"
+  * Content: "This shows metrics for the AWS Infrastructure supporting your hosted service"
+
 ### Monitoring scopes
 
 You can monitor complete CDK construct scopes using an aspect. It will automatically discover all monitorable resources within the scope recursively and add them to your dashboard.
diff --git a/lib/common/monitoring/Monitoring.ts b/lib/common/monitoring/Monitoring.ts
index 6e2b3e92..282b066b 100644
--- a/lib/common/monitoring/Monitoring.ts
+++ b/lib/common/monitoring/Monitoring.ts
@@ -2,7 +2,9 @@ import { IWidget } from "aws-cdk-lib/aws-cloudwatch";
 
 import { MonitoringScope } from "./MonitoringScope";
 import {
+  DefaultDashboards,
   IDashboardSegment,
+  IDynamicDashboardSegment,
   MonitoringDashboardsOverrideProps,
   UserProvidedNames,
 } from "../../dashboard";
@@ -28,7 +30,9 @@ export interface BaseMonitoringProps
 /**
  * An independent unit of monitoring. This is the base for all monitoring classes with alarm support.
  */
-export abstract class Monitoring implements IDashboardSegment {
+export abstract class Monitoring
+  implements IDashboardSegment, IDynamicDashboardSegment
+{
   protected readonly scope: MonitoringScope;
   protected readonly alarms: AlarmWithAnnotation[];
   protected readonly localAlarmNamePrefixOverride?: string;
@@ -101,4 +105,17 @@ export abstract class Monitoring implements IDashboardSegment {
    * Returns widgets to be placed on the main dashboard.
    */
   abstract widgets(): IWidget[];
+
+  widgetsForDashboard(name: string): IWidget[] {
+    switch (name) {
+      case DefaultDashboards.SUMMARY:
+        return this.summaryWidgets();
+      case DefaultDashboards.DETAIL:
+        return this.widgets();
+      case DefaultDashboards.ALARMS:
+        return this.alarmWidgets();
+      default:
+        return [];
+    }
+  }
 }
diff --git a/lib/dashboard/DefaultDashboardFactory.ts b/lib/dashboard/DefaultDashboardFactory.ts
index afc57d0e..b87ba51f 100644
--- a/lib/dashboard/DefaultDashboardFactory.ts
+++ b/lib/dashboard/DefaultDashboardFactory.ts
@@ -5,11 +5,12 @@ import {
   PeriodOverride,
 } from "aws-cdk-lib/aws-cloudwatch";
 import { Construct } from "constructs";
-
 import { BitmapDashboard } from "./BitmapDashboard";
 import { DashboardRenderingPreference } from "./DashboardRenderingPreference";
 import { DashboardWithBitmapCopy } from "./DashboardWithBitmapCopy";
+import { IDynamicDashboardSegment } from "./DynamicDashboardSegment";
 import { IDashboardFactory, IDashboardFactoryProps } from "./IDashboardFactory";
+import { IDynamicDashboardFactory } from "./IDynamicDashboardFactory";
 
 export interface MonitoringDashboardsProps {
   /**
@@ -67,15 +68,25 @@ export interface MonitoringDashboardsProps {
   readonly renderingPreference?: DashboardRenderingPreference;
 }
 
+export enum DefaultDashboards {
+  SUMMARY = "Summary",
+  DETAIL = "Detail",
+  ALARMS = "Alarms",
+}
+
 export class DefaultDashboardFactory
   extends Construct
-  implements IDashboardFactory
+  implements IDashboardFactory, IDynamicDashboardFactory
 {
+  // Legacy Dashboard Fields
   readonly dashboard?: Dashboard;
   readonly summaryDashboard?: Dashboard;
   readonly alarmDashboard?: Dashboard;
   readonly anyDashboardCreated: boolean;
 
+  // Dynamic Dashboard Fields
+  readonly dashboards: Record<string, Dashboard> = {};
+
   constructor(scope: Construct, id: string, props: MonitoringDashboardsProps) {
     super(scope, id);
 
@@ -108,6 +119,7 @@ export class DefaultDashboardFactory
         periodOverride:
           props.detailDashboardPeriodOverride ?? PeriodOverride.INHERIT,
       });
+      this.dashboards[DefaultDashboards.DETAIL] = this.dashboard;
     }
     if (createSummaryDashboard) {
       anyDashboardCreated = true;
@@ -121,6 +133,7 @@ export class DefaultDashboardFactory
             props.summaryDashboardPeriodOverride ?? PeriodOverride.INHERIT,
         }
       );
+      this.dashboards[DefaultDashboards.SUMMARY] = this.summaryDashboard;
     }
     if (createAlarmDashboard) {
       anyDashboardCreated = true;
@@ -134,26 +147,12 @@ export class DefaultDashboardFactory
             props.detailDashboardPeriodOverride ?? PeriodOverride.INHERIT,
         }
       );
+      this.dashboards[DefaultDashboards.ALARMS] = this.alarmDashboard;
     }
 
     this.anyDashboardCreated = anyDashboardCreated;
   }
 
-  protected createDashboard(
-    renderingPreference: DashboardRenderingPreference,
-    id: string,
-    props: DashboardProps
-  ) {
-    switch (renderingPreference) {
-      case DashboardRenderingPreference.INTERACTIVE_ONLY:
-        return new Dashboard(this, id, props);
-      case DashboardRenderingPreference.BITMAP_ONLY:
-        return new BitmapDashboard(this, id, props);
-      case DashboardRenderingPreference.INTERACTIVE_AND_BITMAP:
-        return new DashboardWithBitmapCopy(this, id, props);
-    }
-  }
-
   addSegment(props: IDashboardFactoryProps) {
     if ((props.overrideProps?.addToDetailDashboard ?? true) && this.dashboard) {
       this.dashboard.addWidgets(...props.segment.widgets());
@@ -172,6 +171,33 @@ export class DefaultDashboardFactory
     }
   }
 
+  addDynamicSegment(segment: IDynamicDashboardSegment): void {
+    this.dashboard?.addWidgets(
+      ...segment.widgetsForDashboard(DefaultDashboards.DETAIL)
+    );
+    this.summaryDashboard?.addWidgets(
+      ...segment.widgetsForDashboard(DefaultDashboards.SUMMARY)
+    );
+    this.alarmDashboard?.addWidgets(
+      ...segment.widgetsForDashboard(DefaultDashboards.ALARMS)
+    );
+  }
+
+  protected createDashboard(
+    renderingPreference: DashboardRenderingPreference,
+    id: string,
+    props: DashboardProps
+  ) {
+    switch (renderingPreference) {
+      case DashboardRenderingPreference.INTERACTIVE_ONLY:
+        return new Dashboard(this, id, props);
+      case DashboardRenderingPreference.BITMAP_ONLY:
+        return new BitmapDashboard(this, id, props);
+      case DashboardRenderingPreference.INTERACTIVE_AND_BITMAP:
+        return new DashboardWithBitmapCopy(this, id, props);
+    }
+  }
+
   createdDashboard(): Dashboard | undefined {
     return this.dashboard;
   }
@@ -183,4 +209,17 @@ export class DefaultDashboardFactory
   createdAlarmDashboard(): Dashboard | undefined {
     return this.alarmDashboard;
   }
+
+  getDashboard(name: string): Dashboard | undefined {
+    switch (name) {
+      case DefaultDashboards.SUMMARY:
+        return this.summaryDashboard;
+      case DefaultDashboards.DETAIL:
+        return this.dashboard;
+      case DefaultDashboards.ALARMS:
+        return this.alarmDashboard;
+      default:
+        throw new Error("Unexpected dashboard name!");
+    }
+  }
 }
diff --git a/lib/dashboard/DynamicDashboardFactory.ts b/lib/dashboard/DynamicDashboardFactory.ts
new file mode 100644
index 00000000..003c6852
--- /dev/null
+++ b/lib/dashboard/DynamicDashboardFactory.ts
@@ -0,0 +1,133 @@
+import { Duration } from "aws-cdk-lib";
+import {
+  Dashboard,
+  DashboardProps,
+  PeriodOverride,
+} from "aws-cdk-lib/aws-cloudwatch";
+import { Construct } from "constructs";
+
+import { BitmapDashboard } from "./BitmapDashboard";
+import { DashboardRenderingPreference } from "./DashboardRenderingPreference";
+import { DashboardWithBitmapCopy } from "./DashboardWithBitmapCopy";
+import { DefaultDashboards } from "./DefaultDashboardFactory";
+import { IDynamicDashboardSegment } from "./DynamicDashboardSegment";
+import { IDynamicDashboardFactory } from "./IDynamicDashboardFactory";
+
+export interface DynamicDashboardConfiguration {
+  /**
+   * Name of the dashboard. Full dashboard name will take the form of:
+   * `{@link MonitoringDynamicDashboardsProps.dashboardNamePrefix}-{@link name}`
+   *
+   * NOTE: The dashboard names in {@link DefaultDashboardFactory.DefaultDashboards}
+   * are reserved and cannot be used as dashboard names.
+   */
+  readonly name: string;
+
+  /**
+   * Dashboard rendering preference.
+   *
+   * @default - DashboardRenderingPreference.INTERACTIVE_ONLY
+   */
+  readonly renderingPreference?: DashboardRenderingPreference;
+
+  /**
+   * Range of the dashboard
+   * @default - 8 hours
+   */
+  readonly range?: Duration;
+
+  /**
+   * Period override for the dashboard.
+   * @default - respect individual graphs (PeriodOverride.INHERIT)
+   */
+  readonly periodOverride?: PeriodOverride;
+}
+
+export interface MonitoringDynamicDashboardsProps {
+  /**
+   * Prefix added to each dashboard's name.
+   * This allows to have all dashboards sorted close to each other and also separate multiple monitoring facades.
+   */
+  readonly dashboardNamePrefix: string;
+
+  /**
+   * List of dashboard types to generate.
+   */
+  readonly dashboardConfigs: DynamicDashboardConfiguration[];
+}
+
+export class DynamicDashboardFactory
+  extends Construct
+  implements IDynamicDashboardFactory
+{
+  readonly dashboards: Record<string, Dashboard> = {};
+
+  constructor(
+    scope: Construct,
+    id: string,
+    props: MonitoringDynamicDashboardsProps
+  ) {
+    super(scope, id);
+
+    props.dashboardConfigs.forEach((dashboardConfig) => {
+      if (this.dashboards[dashboardConfig.name]) {
+        throw new Error(
+          `Duplicate dashboard name found: ${dashboardConfig.name}`
+        );
+      }
+
+      if (
+        Object.values<string>(DefaultDashboards).includes(dashboardConfig.name)
+      ) {
+        throw new Error(
+          `${dashboardConfig.name} is a reserved name and cannot be used`
+        );
+      }
+
+      const renderingPreference =
+        dashboardConfig.renderingPreference ??
+        DashboardRenderingPreference.INTERACTIVE_ONLY;
+      const start: string =
+        "-" + (dashboardConfig.range ?? Duration.hours(8).toIsoString());
+
+      const dashboard = this.createDashboard(
+        renderingPreference,
+        dashboardConfig.name,
+        {
+          dashboardName: `${props.dashboardNamePrefix}-${dashboardConfig.name}`,
+          start,
+          periodOverride:
+            dashboardConfig.periodOverride ?? PeriodOverride.INHERIT,
+        }
+      );
+
+      this.dashboards[dashboardConfig.name] = dashboard;
+    });
+  }
+
+  protected createDashboard(
+    renderingPreference: DashboardRenderingPreference,
+    id: string,
+    props: DashboardProps
+  ) {
+    switch (renderingPreference) {
+      case DashboardRenderingPreference.INTERACTIVE_ONLY:
+        return new Dashboard(this, id, props);
+      case DashboardRenderingPreference.BITMAP_ONLY:
+        return new BitmapDashboard(this, id, props);
+      case DashboardRenderingPreference.INTERACTIVE_AND_BITMAP:
+        return new DashboardWithBitmapCopy(this, id, props);
+    }
+  }
+
+  addDynamicSegment(segment: IDynamicDashboardSegment): void {
+    for (const type in this.dashboards) {
+      const dashboard = this.dashboards[type];
+      dashboard.addWidgets(...segment.widgetsForDashboard(type));
+    }
+  }
+
+  getDashboard(type: string): Dashboard | undefined {
+    return this.dashboards[type];
+  }
+}
diff --git a/lib/dashboard/DynamicDashboardSegment.ts b/lib/dashboard/DynamicDashboardSegment.ts
new file mode 100644
index 00000000..493014c8
--- /dev/null
+++ b/lib/dashboard/DynamicDashboardSegment.ts
@@ -0,0 +1,42 @@
+import { IWidget } from "aws-cdk-lib/aws-cloudwatch";
+import { DefaultDashboards } from "./DefaultDashboardFactory";
+import { IDashboardFactoryProps } from "./IDashboardFactory";
+
+export interface IDynamicDashboardSegment {
+  /**
+   * Returns widgets for the requested dashboard type.
+   * @param name name of dashboard for which widgets are generated.
+   */
+  widgetsForDashboard(name: string): IWidget[];
+}
+
+export class StaticSegmentDynamicAdapter implements IDynamicDashboardSegment {
+  protected readonly props: IDashboardFactoryProps;
+
+  constructor(props: IDashboardFactoryProps) {
+    this.props = props;
+  }
+
+  widgetsForDashboard(name: string): IWidget[] {
+    if (
+      this.props.overrideProps?.addToDetailDashboard ||
+      name === DefaultDashboards.DETAIL
+    ) {
+      return this.props.segment.widgets();
+    }
+    if (
+      this.props.overrideProps?.addToSummaryDashboard ||
+      name === DefaultDashboards.SUMMARY
+    ) {
+      return this.props.segment.summaryWidgets();
+    }
+    if (
+      this.props.overrideProps?.addToAlarmDashboard ||
+      name === DefaultDashboards.ALARMS
+    ) {
+      return this.props.segment.alarmWidgets();
+    }
+
+    return [];
+  }
+}
diff --git a/lib/dashboard/IDynamicDashboardFactory.ts b/lib/dashboard/IDynamicDashboardFactory.ts
new file mode 100644
index 00000000..d2857243
--- /dev/null
+++ b/lib/dashboard/IDynamicDashboardFactory.ts
@@ -0,0 +1,21 @@
+import { Dashboard } from "aws-cdk-lib/aws-cloudwatch";
+import { IDynamicDashboardSegment } from "./DynamicDashboardSegment";
+
+/**
+ * This dashboard factory interface provides for dynamic dashboard generation through
+ * IDynamicDashboard segments which will return different content depending on the
+ * dashboard type.
+ */
+export interface IDynamicDashboardFactory {
+  /**
+   * Adds a dynamic dashboard segment.
+   * @param segment IDynamicDashboardSegment
+   */
+  addDynamicSegment(segment: IDynamicDashboardSegment): void;
+
+  /**
+   * Gets the dashboard for the requested dashboard type.
+   * @param type
+   */
+  getDashboard(type: string): Dashboard | undefined;
+}
diff --git a/lib/dashboard/index.ts b/lib/dashboard/index.ts
index e8d8f078..9d8bb381 100644
--- a/lib/dashboard/index.ts
+++ b/lib/dashboard/index.ts
@@ -1,10 +1,13 @@
 export * from "./BitmapDashboard";
 export * from "./DashboardRenderingPreference";
+export * from "./DynamicDashboardSegment";
 export * from "./DashboardSegment";
 export * from "./DashboardWithBitmapCopy";
 export * from "./DefaultDashboardFactory";
+export * from "./DynamicDashboardFactory";
 export * from "./DefaultWidgetFactory";
 export * from "./IDashboardFactory";
+export * from "./IDynamicDashboardFactory";
 export * from "./IWidgetFactory";
 export * from "./MonitoringNamingStrategy";
 export * from "./SingleWidgetDashboardSegment";
diff --git a/lib/facade/MonitoringFacade.ts b/lib/facade/MonitoringFacade.ts
index fb5e457b..b3a10e33 100644
--- a/lib/facade/MonitoringFacade.ts
+++ b/lib/facade/MonitoringFacade.ts
@@ -17,15 +17,20 @@ import {
 } from "../common";
 import {
   DefaultDashboardFactory,
+  DefaultDashboards,
   DefaultWidgetFactory,
   HeaderLevel,
   HeaderWidget,
-  IDashboardFactory,
   IDashboardSegment,
   IWidgetFactory,
   MonitoringDashboardsOverrideProps,
   SingleWidgetDashboardSegment,
 } from "../dashboard";
+import {
+  IDynamicDashboardSegment,
+  StaticSegmentDynamicAdapter,
+} from "../dashboard/DynamicDashboardSegment";
+import { IDynamicDashboardFactory } from "../dashboard/IDynamicDashboardFactory";
 import {
   ApiGatewayMonitoring,
   ApiGatewayMonitoringProps,
@@ -131,9 +136,9 @@ export interface MonitoringFacadeProps {
   /**
    * Defaults for dashboard factory.
    *
-   * @default - An instance of {@link DefaultDashboardFactory}; facade logical ID used as default name
+   * @default - An instance of {@link DynamicDashboardFactory}; facade logical ID used as default name
    */
-  readonly dashboardFactory?: IDashboardFactory;
+  readonly dashboardFactory?: IDynamicDashboardFactory;
 }
 
 /**
@@ -144,8 +149,11 @@ export interface MonitoringFacadeProps {
 export class MonitoringFacade extends MonitoringScope {
   protected readonly metricFactoryDefaults: MetricFactoryDefaults;
   protected readonly alarmFactoryDefaults: AlarmFactoryDefaults;
-  protected readonly dashboardFactory?: IDashboardFactory;
-  protected readonly createdSegments: IDashboardSegment[];
+  public readonly dashboardFactory?: IDynamicDashboardFactory;
+  protected readonly createdSegments: (
+    | IDashboardSegment
+    | IDynamicDashboardSegment
+  )[];
 
   constructor(scope: Construct, id: string, props?: MonitoringFacadeProps) {
     super(scope, id);
@@ -193,16 +201,28 @@ export class MonitoringFacade extends MonitoringScope {
   // GENERIC
   // =======
 
+  /**
+   * @deprecated -- prefer calling dashboardFactory.getDashboard directly.
+   * @returns default detail dashboard
+   */
   createdDashboard(): Dashboard | undefined {
-    return this.dashboardFactory?.createdDashboard();
+    return this.dashboardFactory?.getDashboard(DefaultDashboards.DETAIL);
   }
 
+  /**
+   * @deprecated -- prefer calling dashboardFactory.getDashboard directly.
+   * @returns default summary dashboard
+   */
   createdSummaryDashboard(): Dashboard | undefined {
-    return this.dashboardFactory?.createdSummaryDashboard();
+    return this.dashboardFactory?.getDashboard(DefaultDashboards.SUMMARY);
   }
 
+  /**
+   * @deprecated -- prefer calling dashboardFactory.getDashboard directly.
+   * @returns default alarms dashboard
+   */
   createdAlarmDashboard(): Dashboard | undefined {
-    return this.dashboardFactory?.createdAlarmDashboard();
+    return this.dashboardFactory?.getDashboard(DefaultDashboards.ALARMS);
   }
 
   /**
@@ -295,11 +315,30 @@ export class MonitoringFacade extends MonitoringScope {
       .map((s) => s as Monitoring);
   }
 
+  /**
+   * Adds a dashboard segment which returns dynamic content depending on dashboard type.
+   * @param segment dynamic segment to add.
+   */
+  addDynamicSegment(segment: IDynamicDashboardSegment) {
+    this.dashboardFactory?.addDynamicSegment(segment);
+    this.createdSegments.push(segment);
+  }
+
+  /**
+   * Adds a dashboard segment to go on one of the {@link DefaultDashboards}.
+   * @param segment segment to add
+   * @param overrideProps props to specify which default dashboards this segment is added to.
+   */
   addSegment(
     segment: IDashboardSegment,
     overrideProps?: MonitoringDashboardsOverrideProps
   ) {
-    this.dashboardFactory?.addSegment({ segment, overrideProps });
+    const adaptedSegment = new StaticSegmentDynamicAdapter({
+      segment,
+      overrideProps,
+    });
+    this.dashboardFactory?.addDynamicSegment(adaptedSegment);
+
     this.createdSegments.push(segment);
     return this;
   }


Test patch:
diff --git a/test/dashboard/DynamicDashboardFactory.test.ts b/test/dashboard/DynamicDashboardFactory.test.ts
new file mode 100644
index 00000000..24d0a9e9
--- /dev/null
+++ b/test/dashboard/DynamicDashboardFactory.test.ts
@@ -0,0 +1,76 @@
+import { Stack } from "aws-cdk-lib";
+import { Template } from "aws-cdk-lib/assertions";
+import { IWidget, TextWidget } from "aws-cdk-lib/aws-cloudwatch";
+import { DynamicDashboardFactory, IDynamicDashboardSegment } from "../../lib";
+
+enum TestDashboards {
+  Dynamic1 = "Dynamic1",
+  Dynamic2 = "Dynamic2",
+}
+
+class TestSegment implements IDynamicDashboardSegment {
+  widgetsForDashboard(name: string): IWidget[] {
+    switch (name) {
+      case TestDashboards.Dynamic1:
+        return [new TextWidget({ markdown: "Dynamic1" })];
+      case TestDashboards.Dynamic2:
+        return [new TextWidget({ markdown: "Dynamic2" })];
+      default:
+        return [];
+    }
+  }
+}
+
+test("dynamic dashboards created", () => {
+  const stack = new Stack();
+
+  const factory = new DynamicDashboardFactory(stack, "DynamicDashboards", {
+    dashboardNamePrefix: "testPrefix",
+    dashboardConfigs: [
+      { name: TestDashboards.Dynamic1 },
+      { name: TestDashboards.Dynamic2 },
+    ],
+  });
+
+  factory.addDynamicSegment(new TestSegment());
+
+  const result = Template.fromStack(stack);
+
+  expect(factory.dashboards.Dynamic1).not.toBeNull();
+  expect(factory.dashboards.Dynamic2).not.toBeNull();
+
+  result.resourceCountIs("AWS::CloudWatch::Dashboard", 2);
+  result.hasResourceProperties("AWS::CloudWatch::Dashboard", {
+    DashboardBody: `{"start":"-PT8H","periodOverride":"inherit","widgets":[{"type":"text","width":6,"height":2,"x":0,"y":0,"properties":{"markdown":"Dynamic1"}}]}`,
+    DashboardName: "testPrefix-Dynamic1",
+  });
+  result.hasResourceProperties("AWS::CloudWatch::Dashboard", {
+    DashboardBody: `{"start":"-PT8H","periodOverride":"inherit","widgets":[{"type":"text","width":6,"height":2,"x":0,"y":0,"properties":{"markdown":"Dynamic2"}}]}`,
+    DashboardName: "testPrefix-Dynamic2",
+  });
+});
+
+test("does not allow duplicate dashboard names", () => {
+  const stack = new Stack();
+
+  expect(() => {
+    new DynamicDashboardFactory(stack, "DynamicDashboards", {
+      dashboardNamePrefix: "testPrefix",
+      dashboardConfigs: [{ name: "Dynamic1" }, { name: "Dynamic1" }],
+    });
+  }).toThrow("Duplicate dashboard name found: Dynamic1");
+});
+
+test("does not allow reserved dashboard names", () => {
+  const stack = new Stack();
+
+  expect(() => {
+    new DynamicDashboardFactory(stack, "DynamicDashboards", {
+      dashboardNamePrefix: "testPrefix",
+      dashboardConfigs: [
+        { name: "Summary" },
+        { name: "CustomDetailDashboard" },
+      ],
+    });
+  }).toThrow("Summary is a reserved name and cannot be used");
+});
diff --git a/test/facade/MonitoringFacade.test.ts b/test/facade/MonitoringFacade.test.ts
index a737d82d..e274ebf4 100644
--- a/test/facade/MonitoringFacade.test.ts
+++ b/test/facade/MonitoringFacade.test.ts
@@ -1,6 +1,6 @@
 import { Stack } from "aws-cdk-lib";
 import { Template } from "aws-cdk-lib/assertions";
-import { MonitoringFacade } from "../../lib";
+import { DynamicDashboardFactory, MonitoringFacade } from "../../lib";
 
 describe("test of defaults", () => {
   test("only default dashboard gets created by default", () => {
@@ -30,4 +30,31 @@ describe("test of defaults", () => {
       DashboardName: "Test2",
     });
   });
+
+  test("handles dynamic dashboards", () => {
+    const stack = new Stack();
+
+    const dynamicDashboardFactory = new DynamicDashboardFactory(
+      stack,
+      "TestDynamicDashboardFactory",
+      {
+        dashboardNamePrefix: "testPrefix",
+        dashboardConfigs: [{ name: "Dynamic1" }, { name: "Dynamic2" }],
+      }
+    );
+    new MonitoringFacade(stack, "Test1", {
+      dashboardFactory: dynamicDashboardFactory,
+    });
+    const result = Template.fromStack(stack);
+
+    result.resourceCountIs("AWS::CloudWatch::Dashboard", 2);
+
+    result.hasResourceProperties("AWS::CloudWatch::Dashboard", {
+      DashboardName: "testPrefix-Dynamic1",
+    });
+
+    result.hasResourceProperties("AWS::CloudWatch::Dashboard", {
+      DashboardName: "testPrefix-Dynamic2",
+    });
+  });
 });