diff --git a/packages/aws_rds_otel/changelog.yml b/packages/aws_rds_otel/changelog.yml index 94380c89b44..be0a0623e59 100644 --- a/packages/aws_rds_otel/changelog.yml +++ b/packages/aws_rds_otel/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.10.0" + changes: + - description: Add drill-down dashboards + type: enhancement + link: https://github.com/elastic/integrations/pull/20082 - version: "0.9.0" changes: - description: Add tags to Kibana assets diff --git a/packages/aws_rds_otel/img/aws_rds_detail_dashboard.png b/packages/aws_rds_otel/img/aws_rds_detail_dashboard.png new file mode 100644 index 00000000000..c38f31aad32 Binary files /dev/null and b/packages/aws_rds_otel/img/aws_rds_detail_dashboard.png differ diff --git a/packages/aws_rds_otel/img/aws_rds_overview_dashboard.png b/packages/aws_rds_otel/img/aws_rds_overview_dashboard.png new file mode 100644 index 00000000000..6765b36a457 Binary files /dev/null and b/packages/aws_rds_otel/img/aws_rds_overview_dashboard.png differ diff --git a/packages/aws_rds_otel/kibana/dashboard/aws_rds_otel-36df60a8-6a6e-4f72-96ce-a3533d24901a.json b/packages/aws_rds_otel/kibana/dashboard/aws_rds_otel-36df60a8-6a6e-4f72-96ce-a3533d24901a.json new file mode 100644 index 00000000000..4b42356aebd --- /dev/null +++ b/packages/aws_rds_otel/kibana/dashboard/aws_rds_otel-36df60a8-6a6e-4f72-96ce-a3533d24901a.json @@ -0,0 +1,8141 @@ +{ + "attributes": { + "description": "Per-instance detail view for an RDS database (OTel schema). Reached via the 'View instance details' drilldown on [AWS OTel] RDS (NICO-NEW-OVERVIEW). All panels filter on the inbound DBInstanceIdentifier KQL filter.", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "query": { + "language": "kuery", + "query": "" + } + } + }, + "optionsJSON": { + "autoApplyFilters": true, + "hidePanelBorders": false, + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "description": "", + "hide_border": true, + "hide_title": true, + "layout": "horizontal", + "links": [ + { + "destinationRefName": "link_c3419909-1fb3-4de2-be21-3240c094e883_dashboard", + "label": "\u003c Back to RDS overview", + "options": { + "open_in_new_tab": false, + "use_filters": false, + "use_time_range": true + }, + "type": "dashboardLink" + } + ] + }, + "gridData": { + "h": 3, + "i": "nico-rdsid-back-link", + "w": 6, + "x": 0, + "y": 0 + }, + "panelIndex": "nico-rdsid-back-link", + "type": "links" + }, + { + "embeddableConfig": { + "attributes": { + "description": "RDS database instance (DBInstanceIdentifier) for the inbound drilldown filter; falls back to 'N instances' if no instance filter is active.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-hdr-name": { + "allColumns": [ + { + "columnId": "col-hdr-name", + "customLabel": true, + "fieldName": "instance", + "inMetricDimension": true, + "label": "DB instance", + "meta": { + "esType": "keyword", + "type": "keyword" + } + } + ], + "columns": [ + { + "columnId": "col-hdr-name", + "customLabel": true, + "fieldName": "instance", + "inMetricDimension": true, + "label": "DB instance", + "meta": { + "esType": "keyword", + "type": "keyword" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS count = COUNT_DISTINCT(DBInstanceIdentifier), instance = MAX(DBInstanceIdentifier) | EVAL instance = CASE(count == 1, instance, CONCAT(TO_STRING(count), \" instances\")) | KEEP instance" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-hdr-name", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS count = COUNT_DISTINCT(DBInstanceIdentifier), instance = MAX(DBInstanceIdentifier) | EVAL instance = CASE(count == 1, instance, CONCAT(TO_STRING(count), \" instances\")) | KEEP instance" + }, + "visualization": { + "colorMode": "none", + "layerId": "rid-hdr-name", + "layerType": "data", + "metricAccessor": "col-hdr-name", + "primaryAlign": "left", + "showBar": false, + "titlesTextSize": "xxs", + "valueFontMode": "fit", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "RDS database instance (DBInstanceIdentifier) for the inbound drilldown filter; falls back to 'N instances' if no instance filter is active." + }, + "gridData": { + "h": 3, + "i": "nico-rdsid-hdr-name", + "w": 14, + "x": 6, + "y": 0 + }, + "panelIndex": "nico-rdsid-hdr-name", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "AWS account id from cloud.account.id.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-hdr-account": { + "allColumns": [ + { + "columnId": "col-hdr-account", + "customLabel": true, + "fieldName": "account", + "inMetricDimension": true, + "label": "Account", + "meta": { + "esType": "keyword", + "type": "keyword" + } + } + ], + "columns": [ + { + "columnId": "col-hdr-account", + "customLabel": true, + "fieldName": "account", + "inMetricDimension": true, + "label": "Account", + "meta": { + "esType": "keyword", + "type": "keyword" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE cloud.account.id IS NOT NULL AND cloud.account.id != \"\" | STATS account = MAX(cloud.account.id) | KEEP account" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-hdr-account", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE cloud.account.id IS NOT NULL AND cloud.account.id != \"\" | STATS account = MAX(cloud.account.id) | KEEP account" + }, + "visualization": { + "colorMode": "none", + "layerId": "rid-hdr-account", + "layerType": "data", + "metricAccessor": "col-hdr-account", + "primaryAlign": "left", + "showBar": false, + "titlesTextSize": "xxs", + "valueFontMode": "fit", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "AWS account id from cloud.account.id." + }, + "gridData": { + "h": 3, + "i": "nico-rdsid-hdr-account", + "w": 6, + "x": 20, + "y": 0 + }, + "panelIndex": "nico-rdsid-hdr-account", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-hdr-status": { + "allColumns": [ + { + "columnId": "col-hdr-status", + "customLabel": true, + "fieldName": "status", + "inMetricDimension": true, + "label": "Status", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "columns": [ + { + "columnId": "col-hdr-status", + "customLabel": true, + "fieldName": "status", + "inMetricDimension": true, + "label": "Status", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS c_cpu_max = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Maximum\", c_conn_max = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Maximum\", c_storage_min = MIN(min_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Minimum\", c_cpu = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Average\", c_conn = MAX(last_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Average\", c_mem = MAX(last_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) WHERE stat == \"Average\", c_storage = MAX(last_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\", c_read_iops = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) WHERE stat == \"Average\", c_write_iops = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) WHERE stat == \"Average\", c_read_lat = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) WHERE stat == \"Average\", c_write_lat = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) WHERE stat == \"Average\" BY DBInstanceIdentifier, c_account = cloud.account.id, c_region = cloud.region | EVAL c_cpu = c_cpu / 100.0, c_read_lat = c_read_lat * 1000, c_write_lat = c_write_lat * 1000 | EVAL c_state_sort = CASE( c_cpu_max \u003e 80, 1, c_storage_min \u003c 10737418240, 2, 3), c_state = CASE( c_cpu_max \u003e 80, \"Saturated\", c_storage_min \u003c 10737418240, \"Low storage\", \"Healthy\") | WHERE c_state != \"Unknown\" | SORT c_state_sort ASC | LIMIT 1 | RENAME c_state AS status | KEEP status" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS c_cpu_max = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Maximum\", c_conn_max = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Maximum\", c_storage_min = MIN(min_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Minimum\", c_cpu = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Average\", c_conn = MAX(last_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Average\", c_mem = MAX(last_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) WHERE stat == \"Average\", c_storage = MAX(last_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\", c_read_iops = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) WHERE stat == \"Average\", c_write_iops = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) WHERE stat == \"Average\", c_read_lat = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) WHERE stat == \"Average\", c_write_lat = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) WHERE stat == \"Average\" BY DBInstanceIdentifier, c_account = cloud.account.id, c_region = cloud.region | EVAL c_cpu = c_cpu / 100.0, c_read_lat = c_read_lat * 1000, c_write_lat = c_write_lat * 1000 | EVAL c_state_sort = CASE( c_cpu_max \u003e 80, 1, c_storage_min \u003c 10737418240, 2, 3), c_state = CASE( c_cpu_max \u003e 80, \"Saturated\", c_storage_min \u003c 10737418240, \"Low storage\", \"Healthy\") | WHERE c_state != \"Unknown\" | SORT c_state_sort ASC | LIMIT 1 | RENAME c_state AS status | KEEP status" + }, + "visualization": { + "colorMode": "none", + "layerId": "rid-hdr-status", + "layerType": "data", + "metricAccessor": "col-hdr-status", + "primaryAlign": "left", + "showBar": false, + "titlesTextSize": "xxs", + "valueFontMode": "fit", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Current status using the same definition as the overview: saturated, low_storage, healthy." + }, + "gridData": { + "h": 3, + "i": "nico-rdsid-hdr-status", + "w": 5, + "x": 26, + "y": 0 + }, + "panelIndex": "nico-rdsid-hdr-status", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "AWS region from cloud.region.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-hdr-region": { + "allColumns": [ + { + "columnId": "col-hdr-region", + "customLabel": true, + "fieldName": "region", + "inMetricDimension": true, + "label": "Region", + "meta": { + "esType": "keyword", + "type": "keyword" + } + } + ], + "columns": [ + { + "columnId": "col-hdr-region", + "customLabel": true, + "fieldName": "region", + "inMetricDimension": true, + "label": "Region", + "meta": { + "esType": "keyword", + "type": "keyword" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE cloud.region IS NOT NULL AND cloud.region != \"\" | STATS region = MAX(cloud.region) | KEEP region" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-hdr-region", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE cloud.region IS NOT NULL AND cloud.region != \"\" | STATS region = MAX(cloud.region) | KEEP region" + }, + "visualization": { + "colorMode": "none", + "layerId": "rid-hdr-region", + "layerType": "data", + "metricAccessor": "col-hdr-region", + "primaryAlign": "left", + "showBar": false, + "titlesTextSize": "xxs", + "valueFontMode": "fit", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "AWS region from cloud.region." + }, + "gridData": { + "h": 3, + "i": "nico-rdsid-hdr-region", + "w": 5, + "x": 31, + "y": 0 + }, + "panelIndex": "nico-rdsid-hdr-region", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Opens Discover filtered to this instance's metrics on DBInstanceIdentifier, scoped to the dashboard time range.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [], + "layers": { + "rid-card-discover": { + "allColumns": [ + { + "columnId": "col-card-discover", + "customLabel": true, + "fieldName": "instance", + "inMetricDimension": true, + "label": "View metrics in Discover", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "columns": [ + { + "columnId": "col-card-discover", + "customLabel": true, + "fieldName": "instance", + "inMetricDimension": true, + "label": "View metrics in Discover", + "meta": { + "esType": "keyword", + "params": { + "id": "string" + }, + "sourceParams": { + "indexPattern": "metrics-*", + "sourceField": "DBInstanceIdentifier" + }, + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS instance = MAX(DBInstanceIdentifier) | KEEP instance" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-card-discover", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS instance = MAX(DBInstanceIdentifier) | KEEP instance" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "icon": "popout", + "iconAlign": "left", + "layerId": "rid-card-discover", + "layerType": "data", + "metricAccessor": "col-card-discover", + "primaryAlign": "center", + "showBar": false, + "titlesTextAlign": "center", + "titlesTextSize": "xxs", + "valueFontMode": "fit", + "valuesTextSize": "xs" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Opens Discover filtered to this instance's metrics on DBInstanceIdentifier, scoped to the dashboard time range.", + "drilldowns": [ + { + "encode_url": false, + "label": "View metrics in Discover", + "open_in_new_tab": true, + "trigger": "on_click_value", + "type": "url_drilldown", + "url": "{{kibanaUrl}}/app/discover#/?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:'{{context.panel.timeRange.from}}',to:'{{context.panel.timeRange.to}}'))\u0026_a=(dataSource:(dataViewId:'metrics-*',type:dataView),filters:!((meta:(alias:!n,disabled:!f,index:'metrics-*',key:DBInstanceIdentifier,negate:!f,params:(query:'{{event.value}}'),type:phrase),query:(match_phrase:(DBInstanceIdentifier:'{{event.value}}')))),interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" + } + ], + "hide_border": true + }, + "gridData": { + "h": 3, + "i": "nico-rdsid-card-discover", + "w": 6, + "x": 36, + "y": 0 + }, + "panelIndex": "nico-rdsid-card-discover", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Opens this instance's detail page in the AWS RDS console. AWS routes to the instance's region automatically.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [], + "layers": { + "rid-card-console": { + "allColumns": [ + { + "columnId": "col-card-console", + "customLabel": true, + "fieldName": "instance", + "inMetricDimension": true, + "label": "View in AWS console", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "columns": [ + { + "columnId": "col-card-console", + "customLabel": true, + "fieldName": "instance", + "inMetricDimension": true, + "label": "View in AWS console", + "meta": { + "esType": "keyword", + "params": { + "id": "string" + }, + "sourceParams": { + "indexPattern": "metrics-*", + "sourceField": "DBInstanceIdentifier" + }, + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS instance = MAX(DBInstanceIdentifier) | KEEP instance" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-card-console", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS instance = MAX(DBInstanceIdentifier) | KEEP instance" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "icon": "popout", + "iconAlign": "left", + "layerId": "rid-card-console", + "layerType": "data", + "metricAccessor": "col-card-console", + "primaryAlign": "center", + "showBar": false, + "titlesTextAlign": "center", + "titlesTextSize": "xxs", + "valueFontMode": "fit", + "valuesTextSize": "xs" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Opens this instance's detail page in the AWS RDS console. AWS routes to the instance's region automatically.", + "drilldowns": [ + { + "encode_url": false, + "label": "View in AWS console", + "open_in_new_tab": true, + "trigger": "on_click_value", + "type": "url_drilldown", + "url": "https://console.aws.amazon.com/rds/home#database:id={{event.value}};is-cluster=false" + } + ], + "hide_border": true + }, + "gridData": { + "h": 3, + "i": "nico-rdsid-card-aws-console", + "w": 6, + "x": 42, + "y": 0 + }, + "panelIndex": "nico-rdsid-card-aws-console", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Status timeline. Each bar is one time bucket colored by the state using the same definition as the RDS overview (saturated, low_storage, healthy).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-chart-db-count": { + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "saturated", + "customLabel": true, + "fieldName": "saturated", + "inMetricDimension": true, + "label": "Saturated", + "meta": { + "esType": "double", + "type": "number" + } + }, + { + "columnId": "low_storage", + "customLabel": true, + "fieldName": "low_storage", + "inMetricDimension": true, + "label": "Low storage", + "meta": { + "esType": "double", + "type": "number" + } + }, + { + "columnId": "healthy", + "customLabel": true, + "fieldName": "healthy", + "inMetricDimension": true, + "label": "Healthy", + "meta": { + "esType": "double", + "type": "number" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS b_cpu = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Maximum\", b_storage = MIN(min_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Minimum\", b_conn = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Maximum\" BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL state = CASE( b_cpu \u003e 80, \"saturated\", b_storage \u003c 10737418240, \"low_storage\", \"healthy\") | STATS saturated = COUNT(*) WHERE state == \"saturated\", low_storage = COUNT(*) WHERE state == \"low_storage\", healthy = COUNT(*) WHERE state == \"healthy\" BY timestamp | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-chart-db-count", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS b_cpu = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Maximum\", b_storage = MIN(min_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Minimum\", b_conn = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Maximum\" BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL state = CASE( b_cpu \u003e 80, \"saturated\", b_storage \u003c 10737418240, \"low_storage\", \"healthy\") | STATS saturated = COUNT(*) WHERE state == \"saturated\", low_storage = COUNT(*) WHERE state == \"low_storage\", healthy = COUNT(*) WHERE state == \"healthy\" BY timestamp | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "saturated", + "low_storage", + "healthy" + ], + "layerId": "xy-layer-chart-db-count", + "layerType": "data", + "seriesType": "bar_stacked", + "showGridlines": false, + "xAccessor": "timestamp", + "yConfig": [ + { + "axisMode": "left", + "color": "#EE4C48", + "forAccessor": "saturated" + }, + { + "axisMode": "left", + "color": "#FCD883", + "forAccessor": "low_storage" + }, + { + "axisMode": "left", + "color": "#24C292", + "forAccessor": "healthy" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "bar_stacked", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": false, + "yRight": false + }, + "valueLabels": "hide", + "yLeftScale": "linear" + } + }, + "title": "Status timeline", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Status timeline. Each bar is one time bucket colored by the state using the same definition as the RDS overview (saturated, low_storage, healthy).", + "title": "Status timeline" + }, + "gridData": { + "h": 6, + "i": "nico-rdsid-status-timeline", + "w": 48, + "x": 0, + "y": 3 + }, + "panelIndex": "nico-rdsid-status-timeline", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest CPU utilization for this instance (last bucket). The bar fills against the period peak to show headroom; the secondary value is the percent change from the first to the last bucket (uncolored - utilization has no inherently good or bad direction).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-cpu": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-cpu-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "CPU utilization now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-cpu-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-cpu-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-cpu-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "CPU utilization", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-cpu-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-cpu-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 2 + } + } + } + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | EVAL last_value = last_value * 0.01, avg_value = avg_value * 0.01 | EVAL max_value = 1.0 | EVAL last_value = COALESCE(last_value, 0.0) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-cpu", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | EVAL last_value = last_value * 0.01, avg_value = avg_value * 0.01 | EVAL max_value = 1.0 | EVAL last_value = COALESCE(last_value, 0.0) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "value", + "color": "#F5F7FA", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-cpu", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-cpu-max", + "metricAccessor": "col-nico-rdsid-card-cpu-last", + "palette": { + "accessor": "col-nico-rdsid-card-cpu-last", + "name": "custom", + "params": { + "colorStops": [ + { + "color": "#24C292", + "stop": 0 + }, + { + "color": "#EE4C48", + "stop": 0.8 + } + ], + "continuity": "above", + "maxSteps": 5, + "name": "custom", + "progression": "fixed", + "rangeMax": null, + "rangeMin": 0, + "rangeType": "number", + "reverse": false, + "steps": 3, + "stops": [ + { + "color": "#24C292", + "stop": 0.8 + }, + { + "color": "#EE4C48", + "stop": 1.6 + } + ] + }, + "type": "palette" + }, + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "vertical", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-cpu-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": true, + "type": "dynamic", + "visuals": "both" + }, + "showBar": true, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest CPU utilization for this instance (last bucket). The bar fills against the period peak to show headroom; the secondary value is the percent change from the first to the last bucket (uncolored - utilization has no inherently good or bad direction).", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-cpu", + "w": 8, + "x": 0, + "y": 9 + }, + "panelIndex": "nico-rdsid-card-cpu", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "CPU utilization for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance). A dashed line marks the High CPU (80%) alert threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-cpu": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "CPU utilization", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "CPU utilization", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "067e83ca-fc9d-4d0a-98e9-3c449623af8b", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "d7814b6e-58fc-401b-a224-3a4d6a9063a5", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL metric_value = metric_value * 0.01 | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-cpu", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL metric_value = metric_value * 0.01 | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-layer-cpu", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "067e83ca-fc9d-4d0a-98e9-3c449623af8b", + "d7814b6e-58fc-401b-a224-3a4d6a9063a5" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "CPU utilization", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "CPU utilization for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance). A dashed line marks the High CPU (80%) alert threshold.", + "title": "CPU utilization" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-cpu", + "w": 16, + "x": 8, + "y": 9 + }, + "panelIndex": "nico-rdsid-chart-cpu", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest Database connections for this instance (last bucket). The bar fills against the period peak to show headroom; the secondary value is the percent change from the first to the last bucket (uncolored - utilization has no inherently good or bad direction).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-conn": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-conn-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Database connections now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-conn-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-conn-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-conn-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Database connections", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-conn-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-conn-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-conn", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-conn", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-conn-max", + "metricAccessor": "col-nico-rdsid-card-conn-last", + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-conn-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": true, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Database connections for this instance (last bucket). The bar fills against the period peak to show headroom; the secondary value is the percent change from the first to the last bucket (uncolored - utilization has no inherently good or bad direction).", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-conn", + "w": 8, + "x": 24, + "y": 9 + }, + "panelIndex": "nico-rdsid-card-conn", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "0badb2377c5faa1e34718fd22d89cd2526255b1435d7edc3e2db0d8e570ccb93": { + "allowHidden": false, + "allowNoIndex": false, + "fieldFormats": {}, + "id": "0badb2377c5faa1e34718fd22d89cd2526255b1435d7edc3e2db0d8e570ccb93", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "0badb2377c5faa1e34718fd22d89cd2526255b1435d7edc3e2db0d8e570ccb93", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "c807217d-c99d-4afa-84f3-3b46e962520e": { + "columns": [ + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Connections", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2 + } + } + } + }, + { + "columnId": "timestamp", + "customLabel": false, + "fieldName": "timestamp", + "label": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "deacc35c-e251-4644-8f46-eeb27eed52d0", + "fieldName": "cloud.region", + "label": "cloud.region", + "meta": { + "esType": "keyword", + "params": { + "id": "string" + }, + "sourceParams": { + "indexPattern": "metrics-aws.rds.otel-*", + "isSourceFieldFilterable": true, + "sourceField": "cloud.region" + }, + "type": "string" + } + }, + { + "columnId": "215c72b0-3eaa-4820-91db-244e1d01ad0a", + "fieldName": "DBInstanceIdentifier", + "label": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "params": { + "id": "string" + }, + "sourceParams": { + "indexPattern": "metrics-aws.rds.otel-*", + "isSourceFieldFilterable": true, + "sourceField": "DBInstanceIdentifier" + }, + "type": "string" + } + } + ], + "index": "0badb2377c5faa1e34718fd22d89cd2526255b1435d7edc3e2db0d8e570ccb93", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/DatabaseConnections` IS NOT NULL | STATS metric_value = MAX(sum_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/DatabaseConnections` IS NOT NULL | STATS metric_value = MAX(sum_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": false, + "yRight": true + }, + "fittingFunction": "Linear", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "c807217d-c99d-4afa-84f3-3b46e962520e", + "layerType": "data", + "seriesType": "line", + "splitAccessors": [ + "deacc35c-e251-4644-8f46-eeb27eed52d0", + "215c72b0-3eaa-4820-91db-244e1d01ad0a" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "pointVisibility": "auto", + "preferredSeriesType": "line", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Database connections for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "title": "Database connections " + }, + "gridData": { + "h": 10, + "i": "ac1bbda4-dd7e-4ec1-ab48-782e1a0ef10f", + "w": 16, + "x": 32, + "y": 9 + }, + "panelIndex": "ac1bbda4-dd7e-4ec1-ab48-782e1a0ef10f", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-storage": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-storage-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Free storage space now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-storage-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-storage-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-storage-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Free storage space", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-storage-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-storage-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | EVAL last_value = COALESCE(last_value, 0.0) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | EVAL last_value = COALESCE(last_value, 0.0) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "value", + "color": "#F5F7FA", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-storage", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-storage-max", + "metricAccessor": "col-nico-rdsid-card-storage-last", + "palette": { + "accessor": "col-nico-rdsid-card-storage-last", + "name": "custom", + "params": { + "colorStops": [ + { + "color": "#EE4C48", + "stop": 0 + }, + { + "color": "#24C292", + "stop": 5000000000 + } + ], + "continuity": "above", + "maxSteps": 5, + "name": "custom", + "progression": "fixed", + "rangeMax": null, + "rangeMin": 0, + "rangeType": "number", + "reverse": false, + "steps": 3, + "stops": [ + { + "color": "#EE4C48", + "stop": 5000000000 + }, + { + "color": "#24C292", + "stop": 10000000000 + } + ] + }, + "type": "palette" + }, + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-storage-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": false, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Free storage space for this instance (last bucket). The secondary value is the percent change from the first to the last bucket, colored so an increase is green (good) and a decrease is red - higher is better for this metric.", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-storage", + "w": 8, + "x": 0, + "y": 19 + }, + "panelIndex": "nico-rdsid-card-storage", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "ab123ff8-0ca1-47b3-b534-269f819e968c": { + "allColumns": [], + "columns": [ + { + "columnId": "metric_value", + "customLabel": false, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "metric_value", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + }, + { + "columnId": "timestamp", + "customLabel": false, + "fieldName": "timestamp", + "label": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "c81d5ac6-73e3-4e9e-b07e-4f257cbf14e7", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "8a914b5a-9ea7-464d-aa2f-208d8e3dba87", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n | WHERE\n DBInstanceIdentifier IS NOT NULL AND\n DBInstanceIdentifier != \"\"\n | WHERE\n stat == \"Average\" AND\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL\n | STATS\n metric_value =\n AVG(\n AVG_OVER_TIME(\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`))\n BY\n timestamp = TBUCKET(50, ?_tstart, ?_tend),\n cloud.region, DBInstanceIdentifier\n | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n | WHERE\n DBInstanceIdentifier IS NOT NULL AND\n DBInstanceIdentifier != \"\"\n | WHERE\n stat == \"Average\" AND\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL\n | STATS\n metric_value =\n AVG(\n AVG_OVER_TIME(\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`))\n BY\n timestamp = TBUCKET(50, ?_tstart, ?_tend),\n cloud.region, DBInstanceIdentifier\n | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "fittingFunction": "Linear", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "ab123ff8-0ca1-47b3-b534-269f819e968c", + "layerType": "data", + "seriesType": "line", + "splitAccessors": [ + "c81d5ac6-73e3-4e9e-b07e-4f257cbf14e7", + "8a914b5a-9ea7-464d-aa2f-208d8e3dba87" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "line", + "showCurrentTimeMarker": false, + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Free storage space for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance). A dashed line marks the Low storage (10 GB) alert threshold.", + "title": "Free storage space" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-storage", + "w": 16, + "x": 8, + "y": 19 + }, + "panelIndex": "nico-rdsid-chart-storage", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest Freeable memory for this instance (last bucket). The secondary value is the percent change from the first to the last bucket, colored so an increase is green (good) and a decrease is red - higher is better for this metric.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-mem": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-mem-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Freeable memory now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-mem-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-mem-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-mem-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Freeable memory", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-mem-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-mem-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-mem", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "background", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-mem", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-mem-max", + "metricAccessor": "col-nico-rdsid-card-mem-last", + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-mem-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": false, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Freeable memory for this instance (last bucket). The secondary value is the percent change from the first to the last bucket, colored so an increase is green (good) and a decrease is red - higher is better for this metric.", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-mem", + "w": 8, + "x": 24, + "y": 19 + }, + "panelIndex": "nico-rdsid-card-mem", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Freeable memory for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-mem": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Freeable memory", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Freeable memory", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "6ed560e7-9f42-46cd-9fe5-ff405636eb26", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "b1153e8c-e162-4cfa-82d0-87a93da9f144", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/FreeableMemory` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-mem", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/FreeableMemory` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-layer-mem", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "6ed560e7-9f42-46cd-9fe5-ff405636eb26", + "b1153e8c-e162-4cfa-82d0-87a93da9f144" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Freeable memory", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Freeable memory for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "title": "Freeable memory" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-mem", + "w": 16, + "x": 32, + "y": 19 + }, + "panelIndex": "nico-rdsid-chart-mem", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest Read latency for this instance (last bucket). The secondary value is the percent change from the first to the last bucket, colored so a decrease is green (good) and an increase is red - lower is better for this metric.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-rlat": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-rlat-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Read latency now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-rlat-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-rlat-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-rlat-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Read latency", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "duration", + "params": { + "compact": true, + "decimals": 2, + "fromUnit": "milliseconds", + "toUnit": "humanizePrecise" + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-rlat-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-rlat-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | EVAL last_value = last_value * 1000.0, avg_value = avg_value * 1000.0, max_value = max_value * 1000.0 | EVAL last_value = COALESCE(last_value, 0.0) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-rlat", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | EVAL last_value = last_value * 1000.0, avg_value = avg_value * 1000.0, max_value = max_value * 1000.0 | EVAL last_value = COALESCE(last_value, 0.0) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "value", + "color": "#F5F7FA", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-rlat", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-rlat-max", + "metricAccessor": "col-nico-rdsid-card-rlat-last", + "palette": { + "accessor": "col-nico-rdsid-card-rlat-last", + "name": "custom", + "params": { + "colorStops": [ + { + "color": "#24C292", + "stop": 0 + }, + { + "color": "#EE4C48", + "stop": 20 + } + ], + "continuity": "above", + "maxSteps": 5, + "name": "custom", + "progression": "fixed", + "rangeMax": null, + "rangeMin": 0, + "rangeType": "number", + "reverse": false, + "steps": 3, + "stops": [ + { + "color": "#24C292", + "stop": 20 + }, + { + "color": "#EE4C48", + "stop": 40 + } + ] + }, + "type": "palette" + }, + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-rlat-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": true, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Read latency for this instance (last bucket). The secondary value is the percent change from the first to the last bucket, colored so a decrease is green (good) and an increase is red - lower is better for this metric.", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-rlat", + "w": 8, + "x": 0, + "y": 29 + }, + "panelIndex": "nico-rdsid-card-rlat", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Read latency for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance). A dashed line marks the High read latency (50 ms) alert threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-rlat": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Read latency", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Read latency", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + }, + { + "columnId": "3bf847e8-7ace-4d79-bb31-1faf05535467", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "2accdb78-c50a-45e0-9e04-7e40b683784d", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReadLatency` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL metric_value = metric_value * 1000.0 | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-rlat", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReadLatency` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadLatency`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL metric_value = metric_value * 1000.0 | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-layer-rlat", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "3bf847e8-7ace-4d79-bb31-1faf05535467", + "2accdb78-c50a-45e0-9e04-7e40b683784d" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Read latency", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Read latency for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance). A dashed line marks the High read latency (50 ms) alert threshold.", + "title": "Read latency" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-rlat", + "w": 16, + "x": 8, + "y": 29 + }, + "panelIndex": "nico-rdsid-chart-rlat", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest Write latency for this instance (last bucket). The secondary value is the percent change from the first to the last bucket, colored so a decrease is green (good) and an increase is red - lower is better for this metric.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-wlat": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-wlat-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Write latency now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-wlat-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-wlat-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-wlat-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Write latency", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "duration", + "params": { + "compact": true, + "decimals": 2, + "fromUnit": "milliseconds", + "toUnit": "humanizePrecise" + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-wlat-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-wlat-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | EVAL last_value = last_value * 1000.0, avg_value = avg_value * 1000.0, max_value = max_value * 1000.0 | EVAL last_value = COALESCE(last_value, 0.0) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-wlat", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | EVAL last_value = last_value * 1000.0, avg_value = avg_value * 1000.0, max_value = max_value * 1000.0 | EVAL last_value = COALESCE(last_value, 0.0) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "value", + "color": "#F5F7FA", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-wlat", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-wlat-max", + "metricAccessor": "col-nico-rdsid-card-wlat-last", + "palette": { + "accessor": "col-nico-rdsid-card-wlat-last", + "name": "custom", + "params": { + "colorStops": [ + { + "color": "#24C292", + "stop": 0 + }, + { + "color": "#EE4C48", + "stop": 20 + } + ], + "continuity": "above", + "maxSteps": 5, + "name": "custom", + "progression": "fixed", + "rangeMax": null, + "rangeMin": 0, + "rangeType": "number", + "reverse": false, + "steps": 3, + "stops": [ + { + "color": "#24C292", + "stop": 20 + }, + { + "color": "#EE4C48", + "stop": 40 + } + ] + }, + "type": "palette" + }, + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-wlat-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": true, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Write latency for this instance (last bucket). The secondary value is the percent change from the first to the last bucket, colored so a decrease is green (good) and an increase is red - lower is better for this metric.", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-wlat", + "w": 8, + "x": 24, + "y": 29 + }, + "panelIndex": "nico-rdsid-card-wlat", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Write latency for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance). A dashed line marks the High write latency (50 ms) alert threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-wlat": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Write latency", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Write latency", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 2, + "suffix": " ms" + } + } + } + }, + { + "columnId": "179a0c9b-a40e-4a79-81a7-7e546999e904", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "6ec8f571-13aa-4726-bf1c-ff144824ed8d", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/WriteLatency` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL metric_value = metric_value * 1000.0 | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-wlat", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/WriteLatency` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteLatency`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL metric_value = metric_value * 1000.0 | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-layer-wlat", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "179a0c9b-a40e-4a79-81a7-7e546999e904", + "6ec8f571-13aa-4726-bf1c-ff144824ed8d" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Write latency", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Write latency for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance). A dashed line marks the High write latency (50 ms) alert threshold.", + "title": "Write latency" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-wlat", + "w": 16, + "x": 32, + "y": 29 + }, + "panelIndex": "nico-rdsid-chart-wlat", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest Read IOPS for this instance (last bucket). The secondary value is the percent change from the first to the last bucket (uncolored - this is a volume metric with no inherently good or bad direction).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-riops": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-riops-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Read IOPS now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-riops-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-riops-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-riops-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Read IOPS", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-riops-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-riops-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-riops", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-riops", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-riops-max", + "metricAccessor": "col-nico-rdsid-card-riops-last", + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-riops-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": true, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Read IOPS for this instance (last bucket). The secondary value is the percent change from the first to the last bucket (uncolored - this is a volume metric with no inherently good or bad direction).", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-riops", + "w": 8, + "x": 0, + "y": 39 + }, + "panelIndex": "nico-rdsid-card-riops", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Read IOPS for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-riops": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Read IOPS", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Read IOPS", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "dc5fd7aa-10f2-4460-bddc-8b65597e984a", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "a941cb46-231c-4534-8bda-954bd039a21c", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-riops", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-layer-riops", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "dc5fd7aa-10f2-4460-bddc-8b65597e984a", + "a941cb46-231c-4534-8bda-954bd039a21c" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Read IOPS", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Read IOPS for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "title": "Read IOPS" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-riops", + "w": 16, + "x": 8, + "y": 39 + }, + "panelIndex": "nico-rdsid-chart-riops", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest Write IOPS for this instance (last bucket). The secondary value is the percent change from the first to the last bucket (uncolored - this is a volume metric with no inherently good or bad direction).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-wiops": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-wiops-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Write IOPS now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-wiops-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-wiops-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-wiops-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Write IOPS", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-wiops-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-wiops-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-wiops", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-wiops", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-wiops-max", + "metricAccessor": "col-nico-rdsid-card-wiops-last", + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-wiops-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": true, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Write IOPS for this instance (last bucket). The secondary value is the percent change from the first to the last bucket (uncolored - this is a volume metric with no inherently good or bad direction).", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-wiops", + "w": 8, + "x": 24, + "y": 39 + }, + "panelIndex": "nico-rdsid-card-wiops", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Write IOPS for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-wiops": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Write IOPS", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Write IOPS", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "a8cf62c2-8e56-4f89-b737-bc612fce2c70", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "85aa6450-d07d-4716-aa8a-f49ac980b99e", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-wiops", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-layer-wiops", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "a8cf62c2-8e56-4f89-b737-bc612fce2c70", + "85aa6450-d07d-4716-aa8a-f49ac980b99e" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Write IOPS", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Write IOPS for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "title": "Write IOPS" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-wiops", + "w": 16, + "x": 32, + "y": 39 + }, + "panelIndex": "nico-rdsid-chart-wiops", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest Network receive for this instance (last bucket). The secondary value is the percent change from the first to the last bucket (uncolored - this is a volume metric with no inherently good or bad direction).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-netrx": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-netrx-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Network receive now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-netrx-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-netrx-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-netrx-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Network receive", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-netrx-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-netrx-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-netrx", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-netrx", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-netrx-max", + "metricAccessor": "col-nico-rdsid-card-netrx-last", + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-netrx-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": true, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Network receive for this instance (last bucket). The secondary value is the percent change from the first to the last bucket (uncolored - this is a volume metric with no inherently good or bad direction).", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-netrx", + "w": 8, + "x": 0, + "y": 49 + }, + "panelIndex": "nico-rdsid-card-netrx", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Network receive for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-netrx": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Network receive", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Network receive", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "9d0a8b66-43b9-42b3-a9e5-050b71c7b63f", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "514773c6-15ec-44b5-a568-814efb6efb70", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-netrx", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-layer-netrx", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "9d0a8b66-43b9-42b3-a9e5-050b71c7b63f", + "514773c6-15ec-44b5-a568-814efb6efb70" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Network receive", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Network receive for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "title": "Network receive" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-netrx", + "w": 16, + "x": 8, + "y": 49 + }, + "panelIndex": "nico-rdsid-chart-netrx", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Latest Network transmit for this instance (last bucket). The secondary value is the percent change from the first to the last bucket (uncolored - this is a volume metric with no inherently good or bad direction).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-nico-rdsid-card-nettx": { + "allColumns": [ + { + "columnId": "col-nico-rdsid-card-nettx-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Network transmit now", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-nettx-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-nettx-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "columns": [ + { + "columnId": "col-nico-rdsid-card-nettx-last", + "customLabel": true, + "fieldName": "last_value", + "inMetricDimension": true, + "label": "Network transmit", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-nettx-max", + "customLabel": true, + "fieldName": "max_value", + "inMetricDimension": true, + "label": "Peak", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "col-nico-rdsid-card-nettx-delta", + "customLabel": true, + "fieldName": "avg_value", + "inMetricDimension": true, + "label": "Avg", + "meta": { + "esType": "double", + "type": "number" + }, + "params": {} + } + ], + "index": "metrics-*", + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-nico-rdsid-card-nettx", + "type": "index-pattern" + } + ], + "query": { + "esql": "TS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | STATS last_value = AVG(last_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) WHERE stat == \"Average\", avg_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) WHERE stat == \"Average\", max_value = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) WHERE stat == \"Average\", last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_ts = MAX(last_seen) | WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5 | STATS last_value = AVG(last_value), avg_value = AVG(avg_value), max_value = MAX(max_value) | KEEP last_value, avg_value, max_value" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "rid-nico-rdsid-card-nettx", + "layerType": "data", + "maxAccessor": "col-nico-rdsid-card-nettx-max", + "metricAccessor": "col-nico-rdsid-card-nettx-last", + "primaryAlign": "left", + "primaryPosition": "top", + "progressDirection": "horizontal", + "secondaryAlign": "right", + "secondaryLabel": "Last value vs Avg", + "secondaryLabelPosition": "before", + "secondaryMetricAccessor": "col-nico-rdsid-card-nettx-delta", + "secondaryTrend": { + "baselineValue": "primary", + "paletteId": "compare_to", + "reversed": true, + "type": "dynamic", + "visuals": "both" + }, + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "default", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Latest Network transmit for this instance (last bucket). The secondary value is the percent change from the first to the last bucket (uncolored - this is a volume metric with no inherently good or bad direction).", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-card-nettx", + "w": 8, + "x": 24, + "y": 49 + }, + "panelIndex": "nico-rdsid-card-nettx", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Network transmit for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-layer-nettx": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Network transmit", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Network transmit", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "7978d887-0027-43a4-9397-c242097d1ab8", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "f4c64fa4-5504-417a-86e9-fc18c8b8c516", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-layer-nettx", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-layer-nettx", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "7978d887-0027-43a4-9397-c242097d1ab8", + "f4c64fa4-5504-417a-86e9-fc18c8b8c516" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Network transmit", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Network transmit for this instance over time. Reflects the dashboard's DBInstanceIdentifier filter (one series for the selected instance).", + "title": "Network transmit" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-chart-nettx", + "w": 16, + "x": 32, + "y": 49 + }, + "panelIndex": "nico-rdsid-chart-nettx", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Database engine inferred from this instance's metric fingerprint (binlog → MySQL/MariaDB; transaction-ID / WAL / replication-slot → PostgreSQL). CloudWatch does not attach the engine name to per-instance RDS metrics.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "rid-hdr-engine": { + "allColumns": [ + { + "columnId": "col-hdr-engine", + "customLabel": true, + "fieldName": "engine", + "inMetricDimension": true, + "label": "Engine (inferred)", + "meta": { + "esType": "keyword", + "type": "keyword" + } + } + ], + "columns": [ + { + "columnId": "col-hdr-engine", + "customLabel": true, + "fieldName": "engine", + "inMetricDimension": true, + "label": "Engine (inferred)", + "meta": { + "esType": "keyword", + "type": "keyword" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND stat == \"Average\" | STATS c_binlog = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage`)), c_txid = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs`)), c_txlog = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration`)), c_replslot = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage`)) | EVAL engine = CASE(c_binlog IS NOT NULL, \"MySQL / MariaDB\", c_txid IS NOT NULL OR c_txlog IS NOT NULL OR c_replslot IS NOT NULL, \"PostgreSQL\", \"Other\") | KEEP engine" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-rid-hdr-engine", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND stat == \"Average\" | STATS c_binlog = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage`)), c_txid = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs`)), c_txlog = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration`)), c_replslot = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage`)) | EVAL engine = CASE(c_binlog IS NOT NULL, \"MySQL / MariaDB\", c_txid IS NOT NULL OR c_txlog IS NOT NULL OR c_replslot IS NOT NULL, \"PostgreSQL\", \"Other\") | KEEP engine" + }, + "visualization": { + "colorMode": "none", + "layerId": "rid-hdr-engine", + "layerType": "data", + "metricAccessor": "col-hdr-engine", + "primaryAlign": "left", + "showBar": false, + "titlesTextSize": "xxs", + "valueFontMode": "fit", + "valuesTextSize": "m" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Database engine inferred from this instance's metric fingerprint (binlog → MySQL/MariaDB; transaction-ID / WAL / replication-slot → PostgreSQL). CloudWatch does not attach the engine name to per-instance RDS metrics." + }, + "gridData": { + "h": 4, + "i": "nico-rdsid-hdr-engine", + "w": 12, + "x": 0, + "y": 59 + }, + "panelIndex": "nico-rdsid-hdr-engine", + "type": "vis" + }, + { + "embeddableConfig": { + "content": "## Engine-specific metrics\nThe sections below contain metrics specific to each database engine. Expand the section that matches your RDS instance’s engine to see the relevant panels. Each section only displays data for instances running that engine.", + "hide_border": false, + "hide_title": true, + "settings": { + "open_links_in_new_tab": true + } + }, + "gridData": { + "h": 4, + "i": "nico-rdsid-engine-intro", + "w": 36, + "x": 12, + "y": 59 + }, + "panelIndex": "nico-rdsid-engine-intro", + "type": "markdown" + }, + { + "embeddableConfig": { + "attributes": { + "description": "PostgreSQL only. MaximumUsedTransactionIDs as a fraction of the 2^31 wraparound limit. Approaching 100% risks a forced shutdown to prevent transaction ID wraparound. A dashed line marks the wraparound warning (75%) threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-pg-xid": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "PostgreSQL — Transaction ID usage (toward wraparound)", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 2 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Transaction ID usage (toward wraparound)", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 2 + } + } + } + }, + { + "columnId": "a0cc24e3-d2e2-44cd-ba51-d2970599638f", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "595a9171-9aa8-47b6-8a47-e5190ffcfb4c", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL metric_value = metric_value / 2147483648.0 | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-pg-xid", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | EVAL metric_value = metric_value / 2147483648.0 | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-pg-xid", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "a0cc24e3-d2e2-44cd-ba51-d2970599638f", + "595a9171-9aa8-47b6-8a47-e5190ffcfb4c" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "PostgreSQL — Transaction ID usage (toward wraparound)", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "PostgreSQL only. MaximumUsedTransactionIDs as a fraction of the 2^31 wraparound limit. Approaching 100% risks a forced shutdown to prevent transaction ID wraparound. A dashed line marks the wraparound warning (75%) threshold.", + "title": "PostgreSQL — Transaction ID usage (toward wraparound)" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-pg-xid", + "sectionId": "rds-detail-postgres-section", + "w": 16, + "x": 0, + "y": 0 + }, + "panelIndex": "nico-rdsid-pg-xid", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "PostgreSQL only. TransactionLogsGeneration — volume of write-ahead log generated. Spikes indicate heavy write activity / long-running transactions and drive replication lag and storage. Empty for non-PostgreSQL engines.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-pg-wal": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "PostgreSQL — WAL generated (transaction logs)", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "WAL generated (transaction logs)", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "49a237b6-4228-4d06-9fe3-e4244b266d10", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "a29b4dac-9473-4c1b-b508-14d73a6669c9", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-pg-wal", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-pg-wal", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "49a237b6-4228-4d06-9fe3-e4244b266d10", + "a29b4dac-9473-4c1b-b508-14d73a6669c9" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "PostgreSQL — WAL generated (transaction logs)", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "PostgreSQL only. TransactionLogsGeneration — volume of write-ahead log generated. Spikes indicate heavy write activity / long-running transactions and drive replication lag and storage. Empty for non-PostgreSQL engines.", + "title": "PostgreSQL — WAL generated (transaction logs)" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-pg-wal", + "sectionId": "rds-detail-postgres-section", + "w": 16, + "x": 16, + "y": 0 + }, + "panelIndex": "nico-rdsid-pg-wal", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "PostgreSQL only. ReplicationSlotDiskUsage — disk held by logical replication slots. Grows unbounded when a downstream consumer falls behind or a slot is orphaned, eventually filling storage. Empty for non-PostgreSQL engines.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-pg-replslot": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "PostgreSQL — Replication slot disk usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Replication slot disk usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "465a944c-5fce-44d1-a2a4-6ea1e014865d", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "d317d7ec-72c0-4883-89a5-cbf279f0ad6b", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-pg-replslot", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-pg-replslot", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "465a944c-5fce-44d1-a2a4-6ea1e014865d", + "d317d7ec-72c0-4883-89a5-cbf279f0ad6b" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "PostgreSQL — Replication slot disk usage", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "PostgreSQL only. ReplicationSlotDiskUsage — disk held by logical replication slots. Grows unbounded when a downstream consumer falls behind or a slot is orphaned, eventually filling storage. Empty for non-PostgreSQL engines.", + "title": "PostgreSQL — Replication slot disk usage" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-pg-replslot", + "sectionId": "rds-detail-postgres-section", + "w": 16, + "x": 32, + "y": 0 + }, + "panelIndex": "nico-rdsid-pg-replslot", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "MySQL / MariaDB only. BinLogDiskUsage — disk used by binary logs. Growth indicates replication consumers lagging or a long binlog retention; can fill storage. Empty for non-MySQL engines.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-mysql-binlog": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "MySQL / MariaDB — Binlog disk usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Binlog disk usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "0e04dcc1-398b-445f-afa7-f15043df3cb6", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "89209a6c-aec8-4cdb-a486-fa8d40282f77", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-mysql-binlog", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-mysql-binlog", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "0e04dcc1-398b-445f-afa7-f15043df3cb6", + "89209a6c-aec8-4cdb-a486-fa8d40282f77" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "MySQL / MariaDB — Binlog disk usage", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "MySQL / MariaDB only. BinLogDiskUsage — disk used by binary logs. Growth indicates replication consumers lagging or a long binlog retention; can fill storage. Empty for non-MySQL engines.", + "title": "MySQL / MariaDB — Binlog disk usage" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-mysql-binlog", + "sectionId": "rds-detail-mysql-section", + "w": 24, + "x": 0, + "y": 0 + }, + "panelIndex": "nico-rdsid-mysql-binlog", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "MySQL / MariaDB only. ReplicaLag — how far (in seconds) a read replica trails its source. A dashed line marks the replica lag warning (60 s) alert threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-mysql-replicalag": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "MySQL / MariaDB — Replica lag", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0, + "suffix": " s" + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Replica lag", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0, + "suffix": " s" + } + } + } + }, + { + "columnId": "5913b930-e16a-46a0-9d1e-52f4aed2b88f", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "3a6ecb25-bf51-40a5-a60c-a2fe02cfbabe", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReplicaLag` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicaLag`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-mysql-replicalag", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReplicaLag` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicaLag`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-mysql-replicalag", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "5913b930-e16a-46a0-9d1e-52f4aed2b88f", + "3a6ecb25-bf51-40a5-a60c-a2fe02cfbabe" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "MySQL / MariaDB — Replica lag", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "MySQL / MariaDB only. ReplicaLag — how far (in seconds) a read replica trails its source. A dashed line marks the replica lag warning (60 s) alert threshold.", + "title": "MySQL / MariaDB — Replica lag" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-mysql-replicalag", + "sectionId": "rds-detail-mysql-section", + "w": 24, + "x": 24, + "y": 0 + }, + "panelIndex": "nico-rdsid-mysql-replicalag", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "MySQL / MariaDB (also Oracle, PostgreSQL). SwapUsage — bytes of swap space used on the DB instance. Non-zero swap indicates memory pressure. A dashed line marks the swap usage warning (100 MB) alert threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-mysql-swapusage": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "MySQL / MariaDB — Swap usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Swap usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "e17fcd2a-1529-46bc-9e75-4741e1d383cb", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "958c7d2f-6dcc-4870-a0c8-02ffbb719c36", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/SwapUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/SwapUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-mysql-swapusage", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/SwapUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/SwapUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-mysql-swapusage", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "e17fcd2a-1529-46bc-9e75-4741e1d383cb", + "958c7d2f-6dcc-4870-a0c8-02ffbb719c36" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "MySQL / MariaDB — Swap usage", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "MySQL / MariaDB (also Oracle, PostgreSQL). SwapUsage — bytes of swap space used on the DB instance. Non-zero swap indicates memory pressure. A dashed line marks the swap usage warning (100 MB) alert threshold.", + "title": "MySQL / MariaDB — Swap usage" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-mysql-swapusage", + "sectionId": "rds-detail-mysql-section", + "w": 24, + "x": 0, + "y": 10 + }, + "panelIndex": "nico-rdsid-mysql-swapusage", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Oracle (also MariaDB, MySQL, SQL Server, PostgreSQL). ReplicaLag — how far (in seconds) a read replica trails its source. A dashed line marks the replica lag warning (60 s) alert threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-oracle-replicalag": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Oracle — Replica lag", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0, + "suffix": " s" + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Replica lag", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0, + "suffix": " s" + } + } + } + }, + { + "columnId": "79ceeb9d-e7d0-47c7-bcbb-0ba994fdfed9", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "a7b61c24-dbc5-4263-97f3-0300ed0157d3", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReplicaLag` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicaLag`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-oracle-replicalag", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReplicaLag` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicaLag`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-oracle-replicalag", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "79ceeb9d-e7d0-47c7-bcbb-0ba994fdfed9", + "a7b61c24-dbc5-4263-97f3-0300ed0157d3" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Oracle — Replica lag", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Oracle (also MariaDB, MySQL, SQL Server, PostgreSQL). ReplicaLag — how far (in seconds) a read replica trails its source. A dashed line marks the replica lag warning (60 s) alert threshold.", + "title": "Oracle — Replica lag" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-oracle-replicalag", + "sectionId": "rds-detail-oracle-section", + "w": 24, + "x": 0, + "y": 0 + }, + "panelIndex": "nico-rdsid-oracle-replicalag", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Oracle (also MariaDB, MySQL, PostgreSQL). SwapUsage — bytes of swap space used on the DB instance. Non-zero swap indicates memory pressure. A dashed line marks the swap usage warning (100 MB) alert threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-oracle-swapusage": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Oracle — Swap usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Swap usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "712d3232-3ea1-4802-a817-99467f9868ba", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "ddd696e7-6572-4228-9933-76f17b6f2f26", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/SwapUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/SwapUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-oracle-swapusage", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/SwapUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/SwapUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-oracle-swapusage", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "712d3232-3ea1-4802-a817-99467f9868ba", + "ddd696e7-6572-4228-9933-76f17b6f2f26" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "Oracle — Swap usage", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Oracle (also MariaDB, MySQL, PostgreSQL). SwapUsage — bytes of swap space used on the DB instance. Non-zero swap indicates memory pressure. A dashed line marks the swap usage warning (100 MB) alert threshold.", + "title": "Oracle — Swap usage" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-oracle-swapusage", + "sectionId": "rds-detail-oracle-section", + "w": 24, + "x": 24, + "y": 0 + }, + "panelIndex": "nico-rdsid-oracle-swapusage", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "SQL Server (also MariaDB, MySQL, Oracle, PostgreSQL). ReplicaLag — how far (in seconds) a read replica trails its source. A dashed line marks the replica lag warning (60 s) alert threshold.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-sqlserver-replicalag": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "SQL Server — Replica lag", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0, + "suffix": " s" + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Replica lag", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0, + "suffix": " s" + } + } + } + }, + { + "columnId": "f7f13ac2-15e4-44a4-b1d4-8d1eebb3e8e4", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "9933deb3-3205-4a23-89d4-d7da34d598d0", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReplicaLag` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicaLag`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-sqlserver-replicalag", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/ReplicaLag` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReplicaLag`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-sqlserver-replicalag", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "f7f13ac2-15e4-44a4-b1d4-8d1eebb3e8e4", + "9933deb3-3205-4a23-89d4-d7da34d598d0" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "SQL Server — Replica lag", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "SQL Server (also MariaDB, MySQL, Oracle, PostgreSQL). ReplicaLag — how far (in seconds) a read replica trails its source. A dashed line marks the replica lag warning (60 s) alert threshold.", + "title": "SQL Server — Replica lag" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-sqlserver-replicalag", + "sectionId": "rds-detail-sqlserver-section", + "w": 24, + "x": 0, + "y": 0 + }, + "panelIndex": "nico-rdsid-sqlserver-replicalag", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "SQL Server only. FailedSQLServerAgentJobsCount — number of failed SQL Server Agent jobs during the last minute.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-sqlserver-failedjobs": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "SQL Server — Failed agent jobs", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0, + "suffix": " /min" + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "Failed agent jobs", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 0, + "suffix": " /min" + } + } + } + }, + { + "columnId": "7f509dd7-6c68-49f8-bd3f-c9e56cbec066", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "b2f0ded5-1194-418c-ab9a-cd4964c0a505", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/FailedSQLServerAgentJobsCount` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FailedSQLServerAgentJobsCount`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-sqlserver-failedjobs", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/FailedSQLServerAgentJobsCount` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FailedSQLServerAgentJobsCount`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-sqlserver-failedjobs", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "7f509dd7-6c68-49f8-bd3f-c9e56cbec066", + "b2f0ded5-1194-418c-ab9a-cd4964c0a505" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "SQL Server — Failed agent jobs", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "SQL Server only. FailedSQLServerAgentJobsCount — number of failed SQL Server Agent jobs during the last minute.", + "title": "SQL Server — Failed agent jobs" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-sqlserver-failedjobs", + "sectionId": "rds-detail-sqlserver-section", + "w": 24, + "x": 24, + "y": 0 + }, + "panelIndex": "nico-rdsid-sqlserver-failedjobs", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "SQL Server only. TempDbAvailableDataSpace — available data space on tempdb.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-sqlserver-tempdbdataspace": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "SQL Server — TempDB available data space", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "TempDB available data space", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "abf80197-d6ed-4b74-9fb7-b8c60bd93676", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "1d29e9e9-571a-4ef9-8272-e532651f842a", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TempDbAvailableDataSpace` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TempDbAvailableDataSpace`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-sqlserver-tempdbdataspace", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TempDbAvailableDataSpace` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TempDbAvailableDataSpace`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-sqlserver-tempdbdataspace", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "abf80197-d6ed-4b74-9fb7-b8c60bd93676", + "1d29e9e9-571a-4ef9-8272-e532651f842a" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "SQL Server — TempDB available data space", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "SQL Server only. TempDbAvailableDataSpace — available data space on tempdb.", + "title": "SQL Server — TempDB available data space" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-sqlserver-tempdbdataspace", + "sectionId": "rds-detail-sqlserver-section", + "w": 24, + "x": 0, + "y": 10 + }, + "panelIndex": "nico-rdsid-sqlserver-tempdbdataspace", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "SQL Server only. TempDbAvailableLogSpace — available log space on tempdb.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-sqlserver-tempdblogspace": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "SQL Server — TempDB available log space", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "TempDB available log space", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "dbbb9bbe-1559-4a09-9452-a42c5fea52df", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "b1d8b98b-8335-49ce-8c4c-f74870277bf0", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TempDbAvailableLogSpace` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TempDbAvailableLogSpace`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-sqlserver-tempdblogspace", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TempDbAvailableLogSpace` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TempDbAvailableLogSpace`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-sqlserver-tempdblogspace", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "dbbb9bbe-1559-4a09-9452-a42c5fea52df", + "b1d8b98b-8335-49ce-8c4c-f74870277bf0" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "SQL Server — TempDB available log space", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "SQL Server only. TempDbAvailableLogSpace — available log space on tempdb.", + "title": "SQL Server — TempDB available log space" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-sqlserver-tempdblogspace", + "sectionId": "rds-detail-sqlserver-section", + "w": 24, + "x": 24, + "y": 10 + }, + "panelIndex": "nico-rdsid-sqlserver-tempdblogspace", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "SQL Server only. TempDbDataFileUsage — percentage of data files used on tempdb.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-sqlserver-tempdbdatausage": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "SQL Server — TempDB data file usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1, + "suffix": " %" + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "TempDB data file usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1, + "suffix": " %" + } + } + } + }, + { + "columnId": "f07b86c6-e496-45e8-834c-c97241f2b8f3", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "9ed900ad-7295-47a0-97e3-e05e42d00375", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TempDbDataFileUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TempDbDataFileUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-sqlserver-tempdbdatausage", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TempDbDataFileUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TempDbDataFileUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-sqlserver-tempdbdatausage", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "f07b86c6-e496-45e8-834c-c97241f2b8f3", + "9ed900ad-7295-47a0-97e3-e05e42d00375" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "SQL Server — TempDB data file usage", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "SQL Server only. TempDbDataFileUsage — percentage of data files used on tempdb.", + "title": "SQL Server — TempDB data file usage" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-sqlserver-tempdbdatausage", + "sectionId": "rds-detail-sqlserver-section", + "w": 24, + "x": 0, + "y": 20 + }, + "panelIndex": "nico-rdsid-sqlserver-tempdbdatausage", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "description": "SQL Server only. TempDbLogFileUsage — percentage of log files used on tempdb.", + "references": [], + "state": { + "adHocDataViews": { + "metrics-*": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "metrics-*", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "metrics-*", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "xy-sqlserver-tempdblogusage": { + "allColumns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "SQL Server — TempDB log file usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1, + "suffix": " %" + } + } + } + } + ], + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "metric_value", + "customLabel": true, + "fieldName": "metric_value", + "inMetricDimension": true, + "label": "TempDB log file usage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "number", + "params": { + "decimals": 1, + "suffix": " %" + } + } + } + }, + { + "columnId": "8c7a34e3-fcf1-4159-a652-69085220f245", + "fieldName": "cloud.region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "cf412e3c-cd43-4e09-9c0c-77787e1bc519", + "fieldName": "DBInstanceIdentifier", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "metrics-*", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TempDbLogFileUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TempDbLogFileUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-xy-sqlserver-tempdblogusage", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND `metrics.amazonaws.com/AWS/RDS/TempDbLogFileUsage` IS NOT NULL | STATS metric_value = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/TempDbLogFileUsage`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fillOpacity": 0.1, + "layers": [ + { + "accessors": [ + "metric_value" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_line_optimized", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "layerId": "xy-sqlserver-tempdblogusage", + "layerType": "data", + "seriesType": "area", + "showGridlines": false, + "splitAccessors": [ + "8c7a34e3-fcf1-4159-a652-69085220f245", + "cf412e3c-cd43-4e09-9c0c-77787e1bc519" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "legendStats": [ + "min", + "max", + "average", + "lastValue" + ], + "position": "bottom", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "valueLabels": "hide" + } + }, + "title": "SQL Server — TempDB log file usage", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "SQL Server only. TempDbLogFileUsage — percentage of log files used on tempdb.", + "title": "SQL Server — TempDB log file usage" + }, + "gridData": { + "h": 10, + "i": "nico-rdsid-sqlserver-tempdblogusage", + "sectionId": "rds-detail-sqlserver-section", + "w": 24, + "x": 24, + "y": 20 + }, + "panelIndex": "nico-rdsid-sqlserver-tempdblogusage", + "type": "vis" + } + ], + "pinned_panels": { + "panels": { + "58b7e509-2670-4517-94d9-2e4884a8c013": { + "config": { + "dataViewRefName": "58b7e509-2670-4517-94d9-2e4884a8c013:optionsListDataView", + "exclude": false, + "exists_selected": false, + "field_name": "DBInstanceIdentifier", + "ignore_validations": false, + "run_past_timeout": false, + "search_technique": "wildcard", + "selected_options": [], + "single_select": true, + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "DB Instance", + "use_global_filters": true, + "values_source": "field" + }, + "grow": false, + "order": 0, + "type": "options_list_control", + "width": "large" + } + } + }, + "sections": [ + { + "collapsed": true, + "gridData": { + "i": "rds-detail-postgres-section", + "y": 63 + }, + "title": "PostgreSQL — engine-specific metrics" + }, + { + "collapsed": true, + "gridData": { + "i": "rds-detail-mysql-section", + "y": 64 + }, + "title": "MySQL / MariaDB — engine-specific metrics" + }, + { + "collapsed": true, + "gridData": { + "i": "rds-detail-oracle-section", + "y": 65 + }, + "title": "Oracle — engine-specific metrics" + }, + { + "collapsed": true, + "gridData": { + "i": "rds-detail-sqlserver-section", + "y": 66 + }, + "title": "Microsoft SQL Server — engine-specific metrics" + } + ], + "timeFrom": "now-1h/h", + "timeRestore": true, + "timeTo": "now", + "title": "[AWS RDS OTel] Database Detail" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2026-07-10T10:08:14.193Z", + "id": "aws_rds_otel-36df60a8-6a6e-4f72-96ce-a3533d24901a", + "references": [ + { + "id": "aws_rds_otel-c92e1216-83f6-4de7-9d7f-1bcb42d5988a", + "name": "nico-rdsid-back-link:link_c3419909-1fb3-4de2-be21-3240c094e883_dashboard", + "type": "dashboard" + }, + { + "id": "metrics-*", + "name": "58b7e509-2670-4517-94d9-2e4884a8c013:optionsListDataView", + "type": "index-pattern" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.3.0" +} \ No newline at end of file diff --git a/packages/aws_rds_otel/kibana/dashboard/aws_rds_otel-c92e1216-83f6-4de7-9d7f-1bcb42d5988a.json b/packages/aws_rds_otel/kibana/dashboard/aws_rds_otel-c92e1216-83f6-4de7-9d7f-1bcb42d5988a.json index 0f0c37edbb0..8340ce546f0 100644 --- a/packages/aws_rds_otel/kibana/dashboard/aws_rds_otel-c92e1216-83f6-4de7-9d7f-1bcb42d5988a.json +++ b/packages/aws_rds_otel/kibana/dashboard/aws_rds_otel-c92e1216-83f6-4de7-9d7f-1bcb42d5988a.json @@ -1,2873 +1,2836 @@ { - "accessControl": { - "accessMode": "default", - "owner": "u_LQY3UOHdVkYrbjy8PgOCQKR-fROZ1M0Vh7DvpOH6S40_0" - }, - "attributes": { - "description": "AWS RDS dashboard for CloudWatch metrics collected by the OpenTelemetry Collector.", - "kibanaSavedObjectMeta": { - "searchSourceJSON": { - "query": { - "language": "kuery", - "query": "" - } - } - }, - "optionsJSON": { - "autoApplyFilters": false, - "hidePanelBorders": false, - "hidePanelTitles": false, - "syncColors": false, - "syncCursor": true, - "syncTooltips": false, - "useMargins": true - }, - "panelsJSON": [ - { - "embeddableConfig": { - "content": "## ![Amazon RDS](data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCA4MCA4MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgPHRpdGxlPkljb24tQXJjaGl0ZWN0dXJlLzY0L0FyY2hfQW1hem9uLVJEU182NDwvdGl0bGU+ICAgIDxnIGlkPSJJY29uLUFyY2hpdGVjdHVyZS82NC9BcmNoX0FtYXpvbi1SRFNfNjQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9Ikljb24tQXJjaGl0ZWN0dXJlLUJHLzY0L0RhdGFiYXNlIiBmaWxsPSIjQzkyNUQxIj4gICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlIiB4PSIwIiB5PSIwIiB3aWR0aD0iODAiIGhlaWdodD0iODAiPjwvcmVjdD4gICAgICAgIDwvZz4gICAgICAgIDxwYXRoIGQ9Ik0xNS40MTQsMTQgTDI0LjcwNywyMy4yOTMgTDIzLjI5MywyNC43MDcgTDE0LDE1LjQxNCBMMTQsMjMgTDEyLDIzIEwxMiwxMyBDMTIsMTIuNDQ4IDEyLjQ0NywxMiAxMywxMiBMMjMsMTIgTDIzLDE0IEwxNS40MTQsMTQgWiBNNjgsMTMgTDY4LDIzIEw2NiwyMyBMNjYsMTUuNDE0IEw1Ni43MDcsMjQuNzA3IEw1NS4yOTMsMjMuMjkzIEw2NC41ODYsMTQgTDU3LDE0IEw1NywxMiBMNjcsMTIgQzY3LjU1MywxMiA2OCwxMi40NDggNjgsMTMgTDY4LDEzIFogTTY2LDU3IEw2OCw1NyBMNjgsNjcgQzY4LDY3LjU1MiA2Ny41NTMsNjggNjcsNjggTDU3LDY4IEw1Nyw2NiBMNjQuNTg2LDY2IEw1NS4yOTMsNTYuNzA3IEw1Ni43MDcsNTUuMjkzIEw2Niw2NC41ODYgTDY2LDU3IFogTTY1LjUsMzkuMjEzIEM2NS41LDM1Ljg5NCA2MS42NjgsMzIuNjE1IDU1LjI1LDMwLjQ0MiBMNTUuODkxLDI4LjU0OCBDNjMuMjY4LDMxLjA0NSA2Ny41LDM0LjkzMiA2Ny41LDM5LjIxMyBDNjcuNSw0My40OTUgNjMuMjY4LDQ3LjM4MyA1NS44OSw0OS44NzkgTDU1LjI0OSw0Ny45ODQgQzYxLjY2OCw0NS44MTIgNjUuNSw0Mi41MzQgNjUuNSwzOS4yMTMgTDY1LjUsMzkuMjEzIFogTTE0LjU1NiwzOS4yMTMgQzE0LjU1Niw0Mi4zOTMgMTguMTQzLDQ1LjU4NSAyNC4xNTIsNDcuNzUzIEwyMy40NzMsNDkuNjM0IEMxNi41MzUsNDcuMTMxIDEyLjU1Niw0My4zMzMgMTIuNTU2LDM5LjIxMyBDMTIuNTU2LDM1LjA5NCAxNi41MzUsMzEuMjk2IDIzLjQ3MywyOC43OTIgTDI0LjE1MiwzMC42NzMgQzE4LjE0MywzMi44NDIgMTQuNTU2LDM2LjAzNCAxNC41NTYsMzkuMjEzIEwxNC41NTYsMzkuMjEzIFogTTI0LjcwNyw1Ni43MDcgTDE1LjQxNCw2NiBMMjMsNjYgTDIzLDY4IEwxMyw2OCBDMTIuNDQ3LDY4IDEyLDY3LjU1MiAxMiw2NyBMMTIsNTcgTDE0LDU3IEwxNCw2NC41ODYgTDIzLjI5Myw1NS4yOTMgTDI0LjcwNyw1Ni43MDcgWiBNNDAsMzEuMjg2IEMzMi44NTQsMzEuMjg2IDI5LDI5LjQ0IDI5LDI4LjY4NiBDMjksMjcuOTMxIDMyLjg1NCwyNi4wODYgNDAsMjYuMDg2IEM0Ny4xNDUsMjYuMDg2IDUxLDI3LjkzMSA1MSwyOC42ODYgQzUxLDI5LjQ0IDQ3LjE0NSwzMS4yODYgNDAsMzEuMjg2IEw0MCwzMS4yODYgWiBNNDAuMDI5LDM5LjAzMSBDMzMuMTg3LDM5LjAzMSAyOSwzNy4xNjIgMjksMzYuMTQ1IEwyOSwzMS4yODQgQzMxLjQ2MywzMi42NDMgMzUuODMyLDMzLjI4NiA0MCwzMy4yODYgQzQ0LjE2OCwzMy4yODYgNDguNTM3LDMyLjY0MyA1MSwzMS4yODQgTDUxLDM2LjE0NSBDNTEsMzcuMTYzIDQ2LjgzNSwzOS4wMzEgNDAuMDI5LDM5LjAzMSBMNDAuMDI5LDM5LjAzMSBaIE00MC4wMjksNDYuNjY3IEMzMy4xODcsNDYuNjY3IDI5LDQ0Ljc5OCAyOSw0My43ODEgTDI5LDM4Ljg2MiBDMzEuNDMxLDQwLjI5MSAzNS43NDIsNDEuMDMxIDQwLjAyOSw0MS4wMzEgQzQ0LjI5Miw0MS4wMzEgNDguNTc4LDQwLjI5MiA1MSwzOC44NjcgTDUxLDQzLjc4MSBDNTEsNDQuNzk5IDQ2LjgzNSw0Ni42NjcgNDAuMDI5LDQ2LjY2NyBMNDAuMDI5LDQ2LjY2NyBaIE00MCw1My41MTggQzMyLjg4Myw1My41MTggMjksNTEuNjA1IDI5LDUwLjYyMiBMMjksNDYuNDk4IEMzMS40MzEsNDcuOTI3IDM1Ljc0Miw0OC42NjcgNDAuMDI5LDQ4LjY2NyBDNDQuMjkyLDQ4LjY2NyA0OC41NzgsNDcuOTI5IDUxLDQ2LjUwMyBMNTEsNTAuNjIyIEM1MSw1MS42MDUgNDcuMTE3LDUzLjUxOCA0MCw1My41MTggTDQwLDUzLjUxOCBaIE00MCwyNC4wODYgQzMzLjczOSwyNC4wODYgMjcsMjUuNTI1IDI3LDI4LjY4NiBMMjcsNTAuNjIyIEMyNyw1My44MzYgMzMuNTQsNTUuNTE4IDQwLDU1LjUxOCBDNDYuNDYsNTUuNTE4IDUzLDUzLjgzNiA1Myw1MC42MjIgTDUzLDI4LjY4NiBDNTMsMjUuNTI1IDQ2LjI2MSwyNC4wODYgNDAsMjQuMDg2IEw0MCwyNC4wODYgWiIgaWQ9IkFtYXpvbi1SRFNfSWNvbl82NF9TcXVpZCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPiAgICA8L2c+PC9zdmc+)  AWS RDS dashboard", - "description": "Monitor AWS RDS database instances across your fleet in real time.\nFilter by DB instance at the top. Spot saturated CPU, idle databases, and storage outliers in the summary table — click any database to drill down.\nTo get started, instrument your RDS instances with the AWS integration.", - "hide_border": true, - "hide_title": true, - "settings": { - "open_links_in_new_tab": true - } - }, - "gridData": { - "h": 2, - "i": "hdr", - "w": 42, - "x": 0, - "y": 0 - }, - "panelIndex": "hdr", - "type": "markdown" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Navigation tile — clicking opens the Kibana Dashboards library searched for “AWS OTel” dashboards in a new browser tab, carrying the current panel time range to the destination.", - "references": [], - "state": { - "adHocDataViews": { - "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697", - "managed": false, - "name": "metrics-aws.rds*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697", - "timeField": "@timestamp", - "title": "metrics-aws.rds*" - } - ], - "layers": { - "layer-nav-otel": { - "columns": [ - { - "columnId": "col-nav-otel", - "customLabel": true, - "fieldName": "value", - "inMetricDimension": true, - "label": "Browse other AWS OTel dashboards", - "meta": { - "esType": "keyword", - "type": "string" - } - } - ], - "index": "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nROW value = \"AWS-Managed-OTel\" | KEEP value" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697", - "name": "textBasedLanguages-datasource-layer-layer-nav-otel", - "type": "index-pattern" + "attributes": { + "description": "AWS RDS dashboard for CloudWatch metrics collected by the OpenTelemetry Collector.", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "query": { + "language": "kuery", + "query": "" } - ], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nROW value = \"AWS-Managed-OTel\" | KEEP value" - }, - "visualization": { - "applyColorTo": "background", - "color": "#61a2ff00", - "colorMode": "background", - "icon": "popout", - "iconAlign": "right", - "layerId": "layer-nav-otel", - "layerType": "data", - "metricAccessor": "col-nav-otel", - "primaryAlign": "left", - "primaryPosition": "bottom", - "showBar": false, - "titlesTextAlign": "left", - "titlesTextSize": "xxs", - "valueFontMode": "fit", - "valuesTextSize": "xs" - } - }, - "title": "", - "version": 2, - "visualizationType": "lnsMetric" - }, - "description": "Navigation tile — clicking opens the Kibana Dashboards library searched for “AWS OTel” dashboards in a new browser tab, carrying the current panel time range to the destination.", - "drilldowns": [ - { - "encode_url": false, - "label": "Browse AWS OTel dashboards", - "open_in_new_tab": true, - "trigger": "on_click_value", - "type": "url_drilldown", - "url": "{{kibanaUrl}}/app/dashboards#/list?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:{{context.panel.timeRange.from}},to:{{context.panel.timeRange.to}}))&s=AWS%20OTel" } - ], - "hide_border": true }, - "gridData": { - "h": 2, - "i": "nav-otel-dashboards", - "w": 6, - "x": 42, - "y": 0 + "optionsJSON": { + "autoApplyFilters": false, + "hidePanelBorders": false, + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true }, - "panelIndex": "nav-otel-dashboards", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" + "panelsJSON": [ + { + "embeddableConfig": { + "content": "## ![Amazon RDS](data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCA4MCA4MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgPHRpdGxlPkljb24tQXJjaGl0ZWN0dXJlLzY0L0FyY2hfQW1hem9uLVJEU182NDwvdGl0bGU+ICAgIDxnIGlkPSJJY29uLUFyY2hpdGVjdHVyZS82NC9BcmNoX0FtYXpvbi1SRFNfNjQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9Ikljb24tQXJjaGl0ZWN0dXJlLUJHLzY0L0RhdGFiYXNlIiBmaWxsPSIjQzkyNUQxIj4gICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlIiB4PSIwIiB5PSIwIiB3aWR0aD0iODAiIGhlaWdodD0iODAiPjwvcmVjdD4gICAgICAgIDwvZz4gICAgICAgIDxwYXRoIGQ9Ik0xNS40MTQsMTQgTDI0LjcwNywyMy4yOTMgTDIzLjI5MywyNC43MDcgTDE0LDE1LjQxNCBMMTQsMjMgTDEyLDIzIEwxMiwxMyBDMTIsMTIuNDQ4IDEyLjQ0NywxMiAxMywxMiBMMjMsMTIgTDIzLDE0IEwxNS40MTQsMTQgWiBNNjgsMTMgTDY4LDIzIEw2NiwyMyBMNjYsMTUuNDE0IEw1Ni43MDcsMjQuNzA3IEw1NS4yOTMsMjMuMjkzIEw2NC41ODYsMTQgTDU3LDE0IEw1NywxMiBMNjcsMTIgQzY3LjU1MywxMiA2OCwxMi40NDggNjgsMTMgTDY4LDEzIFogTTY2LDU3IEw2OCw1NyBMNjgsNjcgQzY4LDY3LjU1MiA2Ny41NTMsNjggNjcsNjggTDU3LDY4IEw1Nyw2NiBMNjQuNTg2LDY2IEw1NS4yOTMsNTYuNzA3IEw1Ni43MDcsNTUuMjkzIEw2Niw2NC41ODYgTDY2LDU3IFogTTY1LjUsMzkuMjEzIEM2NS41LDM1Ljg5NCA2MS42NjgsMzIuNjE1IDU1LjI1LDMwLjQ0MiBMNTUuODkxLDI4LjU0OCBDNjMuMjY4LDMxLjA0NSA2Ny41LDM0LjkzMiA2Ny41LDM5LjIxMyBDNjcuNSw0My40OTUgNjMuMjY4LDQ3LjM4MyA1NS44OSw0OS44NzkgTDU1LjI0OSw0Ny45ODQgQzYxLjY2OCw0NS44MTIgNjUuNSw0Mi41MzQgNjUuNSwzOS4yMTMgTDY1LjUsMzkuMjEzIFogTTE0LjU1NiwzOS4yMTMgQzE0LjU1Niw0Mi4zOTMgMTguMTQzLDQ1LjU4NSAyNC4xNTIsNDcuNzUzIEwyMy40NzMsNDkuNjM0IEMxNi41MzUsNDcuMTMxIDEyLjU1Niw0My4zMzMgMTIuNTU2LDM5LjIxMyBDMTIuNTU2LDM1LjA5NCAxNi41MzUsMzEuMjk2IDIzLjQ3MywyOC43OTIgTDI0LjE1MiwzMC42NzMgQzE4LjE0MywzMi44NDIgMTQuNTU2LDM2LjAzNCAxNC41NTYsMzkuMjEzIEwxNC41NTYsMzkuMjEzIFogTTI0LjcwNyw1Ni43MDcgTDE1LjQxNCw2NiBMMjMsNjYgTDIzLDY4IEwxMyw2OCBDMTIuNDQ3LDY4IDEyLDY3LjU1MiAxMiw2NyBMMTIsNTcgTDE0LDU3IEwxNCw2NC41ODYgTDIzLjI5Myw1NS4yOTMgTDI0LjcwNyw1Ni43MDcgWiBNNDAsMzEuMjg2IEMzMi44NTQsMzEuMjg2IDI5LDI5LjQ0IDI5LDI4LjY4NiBDMjksMjcuOTMxIDMyLjg1NCwyNi4wODYgNDAsMjYuMDg2IEM0Ny4xNDUsMjYuMDg2IDUxLDI3LjkzMSA1MSwyOC42ODYgQzUxLDI5LjQ0IDQ3LjE0NSwzMS4yODYgNDAsMzEuMjg2IEw0MCwzMS4yODYgWiBNNDAuMDI5LDM5LjAzMSBDMzMuMTg3LDM5LjAzMSAyOSwzNy4xNjIgMjksMzYuMTQ1IEwyOSwzMS4yODQgQzMxLjQ2MywzMi42NDMgMzUuODMyLDMzLjI4NiA0MCwzMy4yODYgQzQ0LjE2OCwzMy4yODYgNDguNTM3LDMyLjY0MyA1MSwzMS4yODQgTDUxLDM2LjE0NSBDNTEsMzcuMTYzIDQ2LjgzNSwzOS4wMzEgNDAuMDI5LDM5LjAzMSBMNDAuMDI5LDM5LjAzMSBaIE00MC4wMjksNDYuNjY3IEMzMy4xODcsNDYuNjY3IDI5LDQ0Ljc5OCAyOSw0My43ODEgTDI5LDM4Ljg2MiBDMzEuNDMxLDQwLjI5MSAzNS43NDIsNDEuMDMxIDQwLjAyOSw0MS4wMzEgQzQ0LjI5Miw0MS4wMzEgNDguNTc4LDQwLjI5MiA1MSwzOC44NjcgTDUxLDQzLjc4MSBDNTEsNDQuNzk5IDQ2LjgzNSw0Ni42NjcgNDAuMDI5LDQ2LjY2NyBMNDAuMDI5LDQ2LjY2NyBaIE00MCw1My41MTggQzMyLjg4Myw1My41MTggMjksNTEuNjA1IDI5LDUwLjYyMiBMMjksNDYuNDk4IEMzMS40MzEsNDcuOTI3IDM1Ljc0Miw0OC42NjcgNDAuMDI5LDQ4LjY2NyBDNDQuMjkyLDQ4LjY2NyA0OC41NzgsNDcuOTI5IDUxLDQ2LjUwMyBMNTEsNTAuNjIyIEM1MSw1MS42MDUgNDcuMTE3LDUzLjUxOCA0MCw1My41MTggTDQwLDUzLjUxOCBaIE00MCwyNC4wODYgQzMzLjczOSwyNC4wODYgMjcsMjUuNTI1IDI3LDI4LjY4NiBMMjcsNTAuNjIyIEMyNyw1My44MzYgMzMuNTQsNTUuNTE4IDQwLDU1LjUxOCBDNDYuNDYsNTUuNTE4IDUzLDUzLjgzNiA1Myw1MC42MjIgTDUzLDI4LjY4NiBDNTMsMjUuNTI1IDQ2LjI2MSwyNC4wODYgNDAsMjQuMDg2IEw0MCwyNC4wODYgWiIgaWQ9IkFtYXpvbi1SRFNfSWNvbl82NF9TcXVpZCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPiAgICA8L2c+PC9zdmc+)\u0026nbsp;\u0026nbsp;AWS RDS dashboard", + "description": "Monitor AWS RDS database instances across your fleet in real time.\nFilter by DB instance at the top. Spot saturated CPU, idle databases, and storage outliers in the summary table — click any database to drill down.\nTo get started, instrument your RDS instances with the AWS integration.", + "hide_border": true, + "hide_title": true, + "settings": { + "open_links_in_new_tab": true } - ], - "layers": { - "4146621d-d1e8-4240-9a4c-52c6b0289dd8": { - "columns": [ - { - "columnId": "total", - "customLabel": false, - "fieldName": "total", - "inMetricDimension": true, - "label": "total", - "meta": { - "esType": "long", - "type": "number" - } - }, - { - "columnId": "saturated", - "customLabel": false, - "fieldName": "saturated", - "inMetricDimension": true, - "label": "saturated", - "meta": { - "esType": "long", - "type": "number" - } - }, - { - "columnId": "low_storage", - "customLabel": false, - "fieldName": "low_storage", - "inMetricDimension": true, - "label": "low_storage", - "meta": { - "esType": "long", - "type": "number" - } - }, - { - "columnId": "healthy", - "customLabel": false, - "fieldName": "healthy", - "inMetricDimension": true, - "label": "healthy", - "meta": { - "esType": "long", - "type": "number" - } + }, + "gridData": { + "h": 2, + "i": "hdr", + "w": 42, + "x": 0, + "y": 0 + }, + "panelIndex": "hdr", + "type": "markdown" + }, + { + "embeddableConfig": { + "attributes": { + "description": "Navigation tile — clicking opens the Kibana Dashboards library searched for “AWS OTel” dashboards in a new browser tab, carrying the current panel time range to the destination.", + "references": [], + "state": { + "adHocDataViews": { + "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697", + "managed": false, + "name": "metrics-aws.rds*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697", + "timeField": "@timestamp", + "title": "metrics-aws.rds*" + } + ], + "layers": { + "layer-nav-otel": { + "columns": [ + { + "columnId": "col-nav-otel", + "customLabel": true, + "fieldName": "value", + "inMetricDimension": true, + "label": "Browse other AWS OTel dashboards", + "meta": { + "esType": "keyword", + "type": "string" + } + } + ], + "index": "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nROW value = \"AWS-Managed-OTel\" | KEEP value" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "0f4e60230636aaf1697f0e9d3717ae56ca807278b1a57a7b138a1e7175e0e697", + "name": "textBasedLanguages-datasource-layer-layer-nav-otel", + "type": "index-pattern" + } + ], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nROW value = \"AWS-Managed-OTel\" | KEEP value" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "icon": "popout", + "iconAlign": "right", + "layerId": "layer-nav-otel", + "layerType": "data", + "metricAccessor": "col-nav-otel", + "primaryAlign": "left", + "primaryPosition": "bottom", + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xxs", + "valueFontMode": "fit", + "valuesTextSize": "xs" + } }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Navigation tile — clicking opens the Kibana Dashboards library searched for “AWS OTel” dashboards in a new browser tab, carrying the current panel time range to the destination.", + "drilldowns": [ { - "columnId": "timestamp", - "customLabel": false, - "fieldName": "timestamp", - "label": "timestamp", - "meta": { - "esType": "date", - "type": "date" - } + "encode_url": false, + "label": "Browse AWS OTel dashboards", + "open_in_new_tab": true, + "trigger": "on_click_value", + "type": "url_drilldown", + "url": "{{kibanaUrl}}/app/dashboards#/list?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:{{context.panel.timeRange.from}},to:{{context.panel.timeRange.to}}))\u0026s=AWS%20OTel" } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS b_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n b_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n b_conn = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)))\n BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region\n| EVAL state = CASE(\n b_cpu IS NULL AND b_storage IS NULL AND b_conn IS NULL, \"Unknown\",\n b_cpu > 80, \"saturated\",\n b_storage < 5368709120, \"low_storage\",\n \"healthy\")\n| STATS total = COUNT(*),\n saturated = COUNT(*) WHERE state == \"saturated\",\n low_storage = COUNT(*) WHERE state == \"low_storage\",\n healthy = COUNT(*) WHERE state == \"healthy\"\n BY timestamp\n| SORT timestamp ASC" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS b_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n b_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n b_conn = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)))\n BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region\n| EVAL state = CASE(\n b_cpu IS NULL AND b_storage IS NULL AND b_conn IS NULL, \"Unknown\",\n b_cpu > 80, \"saturated\",\n b_storage < 5368709120, \"low_storage\",\n \"healthy\")\n| STATS total = COUNT(*),\n saturated = COUNT(*) WHERE state == \"saturated\",\n low_storage = COUNT(*) WHERE state == \"low_storage\",\n healthy = COUNT(*) WHERE state == \"healthy\"\n BY timestamp\n| SORT timestamp ASC" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false - }, - "fittingFunction": "Linear", - "gridlinesVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true - }, - "labelsOrientation": { - "x": 0, - "yLeft": 0, - "yRight": 0 - }, - "layers": [ - { - "accessors": [ - "total", - "saturated", - "low_storage", - "healthy" ], - "layerId": "4146621d-d1e8-4240-9a4c-52c6b0289dd8", - "layerType": "data", - "seriesType": "line", - "xAccessor": "timestamp", - "yConfig": [ - { - "forAccessor": "total", - "color": "#61A2FF" - }, - { - "forAccessor": "saturated", - "color": "#F6726A" - }, - { - "forAccessor": "low_storage", - "color": "#D6BF57" - }, - { - "forAccessor": "healthy", - "color": "#24C292" - } - ] - } - ], - "legend": { - "isVisible": true, - "layout": "list", - "position": "bottom" + "hide_border": true }, - "preferredSeriesType": "line", - "tickLabelsVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true + "gridData": { + "h": 2, + "i": "nav-otel-dashboards", + "w": 6, + "x": 42, + "y": 0 }, - "valueLabels": "hide" - } + "panelIndex": "nav-otel-dashboards", + "type": "vis" }, - "title": "", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Count of RDS databases over time, classified per time bucket by health — saturated (CPU > 80%), low-storage (free storage < 5 GiB), idle (no connections), or healthy. A rising saturated series indicates spreading CPU pressure.", - "drilldowns": [], - "title": "Database count over time" - }, - "gridData": { - "h": 12, - "i": "chart-db-count", - "sectionId": "aws-rds-overview-section", - "w": 20, - "x": 28, - "y": 0 - }, - "panelIndex": "chart-db-count", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" - } - ], - "layers": { - "pie-layer-chart-status-donut": { - "columns": [ - { - "columnId": "rds_state", - "customLabel": true, - "fieldName": "rds_state", - "label": "State", - "meta": { - "esType": "keyword", - "type": "string" - } - }, - { - "columnId": "databases", - "customLabel": true, - "fieldName": "databases", - "inMetricDimension": true, - "label": "Databases", - "meta": { - "esType": "long", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minutes\", last_seen, latest_global) <= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur > 80, \"saturated\",\n storage_cur < 5368709120, \"low-storage\",\n \"healthy\")\n| STATS databases = COUNT(*) BY rds_state = state" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minutes\", last_seen, latest_global) <= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur > 80, \"saturated\",\n storage_cur < 5368709120, \"low-storage\",\n \"healthy\")\n| STATS databases = COUNT(*) BY rds_state = state" - }, - "visualization": { - "layers": [ - { - "categoryDisplay": "default", - "colorMapping": { - "assignments": [ - { - "color": { - "colorCode": "#F6726A", - "type": "colorCode" - }, - "rules": [ - { - "type": "raw", - "value": "saturated" + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "4146621d-d1e8-4240-9a4c-52c6b0289dd8": { + "columns": [ + { + "columnId": "total", + "customLabel": true, + "fieldName": "total", + "inMetricDimension": true, + "label": "Total", + "meta": { + "esType": "long", + "type": "number" + } + }, + { + "columnId": "saturated", + "customLabel": true, + "fieldName": "saturated", + "inMetricDimension": true, + "label": "Saturated", + "meta": { + "esType": "long", + "type": "number" + } + }, + { + "columnId": "low_storage", + "customLabel": true, + "fieldName": "low_storage", + "inMetricDimension": true, + "label": "Low storage", + "meta": { + "esType": "long", + "type": "number" + } + }, + { + "columnId": "healthy", + "customLabel": true, + "fieldName": "healthy", + "inMetricDimension": true, + "label": "Healthy", + "meta": { + "esType": "long", + "type": "number" + } + }, + { + "columnId": "timestamp", + "customLabel": false, + "fieldName": "timestamp", + "label": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS b_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n b_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n b_conn = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)))\n BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region\n| EVAL state = CASE(\n b_cpu IS NULL AND b_storage IS NULL AND b_conn IS NULL, \"Unknown\",\n b_cpu \u003e 80, \"saturated\",\n b_storage \u003c 10737418240, \"low_storage\",\n \"healthy\")\n| STATS total = COUNT(*),\n saturated = COUNT(*) WHERE state == \"saturated\",\n low_storage = COUNT(*) WHERE state == \"low_storage\",\n healthy = COUNT(*) WHERE state == \"healthy\"\n BY timestamp\n| SORT timestamp ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS b_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n b_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n b_conn = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)))\n BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region\n| EVAL state = CASE(\n b_cpu IS NULL AND b_storage IS NULL AND b_conn IS NULL, \"Unknown\",\n b_cpu \u003e 80, \"saturated\",\n b_storage \u003c 10737418240, \"low_storage\",\n \"healthy\")\n| STATS total = COUNT(*),\n saturated = COUNT(*) WHERE state == \"saturated\",\n low_storage = COUNT(*) WHERE state == \"low_storage\",\n healthy = COUNT(*) WHERE state == \"healthy\"\n BY timestamp\n| SORT timestamp ASC" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "fittingFunction": "Linear", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "total", + "saturated", + "low_storage", + "healthy" + ], + "layerId": "4146621d-d1e8-4240-9a4c-52c6b0289dd8", + "layerType": "data", + "seriesType": "line", + "xAccessor": "timestamp", + "yConfig": [ + { + "color": "#61A2FF", + "forAccessor": "total" + }, + { + "color": "#F6726A", + "forAccessor": "saturated" + }, + { + "color": "#D6BF57", + "forAccessor": "low_storage" + }, + { + "color": "#24C292", + "forAccessor": "healthy" + } + ] + } + ], + "legend": { + "isVisible": true, + "layout": "list", + "position": "bottom" + }, + "preferredSeriesType": "line", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" } - ], - "touched": true }, - { - "color": { - "colorCode": "#D6BF57", - "type": "colorCode" - }, - "rules": [ - { - "type": "raw", - "value": "low-storage" + "title": "", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Count of RDS databases over time, classified per time bucket by health — saturated (CPU \u003e 80%), low-storage (free storage \u003c 5 GiB), idle (no connections), or healthy. A rising saturated series indicates spreading CPU pressure.", + "title": "Database count over time" + }, + "gridData": { + "h": 12, + "i": "chart-db-count", + "sectionId": "aws-rds-overview-section", + "w": 20, + "x": 28, + "y": 0 + }, + "panelIndex": "chart-db-count", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "pie-layer-chart-status-donut": { + "columns": [ + { + "columnId": "rds_state", + "customLabel": true, + "fieldName": "rds_state", + "label": "State", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "databases", + "customLabel": true, + "fieldName": "databases", + "inMetricDimension": true, + "label": "Databases", + "meta": { + "esType": "long", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur \u003e 80, \"saturated\",\n storage_cur \u003c 10737418240, \"low-storage\",\n \"healthy\")\n| STATS databases = COUNT(*) BY rds_state = state" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur \u003e 80, \"saturated\",\n storage_cur \u003c 10737418240, \"low-storage\",\n \"healthy\")\n| STATS databases = COUNT(*) BY rds_state = state" + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "colorMapping": { + "assignments": [ + { + "color": { + "colorCode": "#F6726A", + "type": "colorCode" + }, + "rules": [ + { + "type": "raw", + "value": "saturated" + } + ], + "touched": true + }, + { + "color": { + "colorCode": "#D6BF57", + "type": "colorCode" + }, + "rules": [ + { + "type": "raw", + "value": "low-storage" + } + ], + "touched": true + }, + { + "color": { + "colorCode": "#24C292", + "type": "colorCode" + }, + "rules": [ + { + "type": "raw", + "value": "healthy" + } + ], + "touched": true + }, + { + "color": { + "colorCode": "#BFDBFF", + "type": "colorCode" + }, + "rules": [ + { + "type": "raw", + "value": "Unknown" + } + ], + "touched": true + } + ], + "colorMode": { + "type": "categorical" + }, + "paletteId": "default", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "emptySizeRatio": 0.7, + "layerId": "pie-layer-chart-status-donut", + "layerType": "data", + "legendDisplay": "default", + "legendPosition": "right", + "metrics": [ + "databases" + ], + "nestedLegend": false, + "numberDisplay": "percent", + "percentDecimals": 1, + "primaryGroups": [ + "rds_state" + ] + } + ], + "shape": "donut" } - ], - "touched": true }, - { - "color": { - "colorCode": "#24C292", - "type": "colorCode" - }, - "rules": [ - { - "type": "raw", - "value": "healthy" + "title": "", + "version": 2, + "visualizationType": "lnsPie" + }, + "description": "Share of RDS databases by latest state — saturated (CPU \u003e 80%), low-storage (free storage \u003c 5 GiB), idle (no connections), or healthy. Uses the most recent value per database within a 5-minute freshness window.", + "title": "Databases by status" + }, + "gridData": { + "h": 12, + "i": "chart-status-donut", + "sectionId": "aws-rds-overview-section", + "w": 20, + "x": 8, + "y": 0 + }, + "panelIndex": "chart-status-donut", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "layer-kpi-total": { + "columns": [ + { + "columnId": "col-kpi-total", + "customLabel": true, + "fieldName": "total", + "inMetricDimension": true, + "label": "Databases", + "meta": { + "esType": "long", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| STATS total = COUNT(*)\n| KEEP total" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| STATS total = COUNT(*)\n| KEEP total" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "layer-kpi-total", + "layerType": "data", + "metricAccessor": "col-kpi-total", + "primaryAlign": "left", + "primaryPosition": "top", + "showBar": false, + "titlesTextAlign": "left" } - ], - "touched": true }, - { - "color": { - "colorCode": "#BFDBFF", - "type": "colorCode" - }, - "rules": [ - { - "type": "raw", - "value": "Unknown" - } - ], - "touched": true - } - ], - "colorMode": { - "type": "categorical" - }, - "paletteId": "default", - "specialAssignments": [ - { - "color": { - "type": "loop" - }, - "rules": [ - { - "type": "other" - } - ], - "touched": false - } - ] + "title": "", + "version": 2, + "visualizationType": "lnsMetric" }, - "emptySizeRatio": 0.7, - "layerId": "pie-layer-chart-status-donut", - "layerType": "data", - "legendDisplay": "default", - "legendPosition": "right", - "metrics": [ - "databases" - ], - "nestedLegend": false, - "numberDisplay": "percent", - "percentDecimals": 1, - "primaryGroups": [ - "rds_state" - ] - } - ], - "shape": "donut" - } - }, - "title": "", - "version": 2, - "visualizationType": "lnsPie" - }, - "description": "Share of RDS databases by latest state — saturated (CPU > 80%), low-storage (free storage < 5 GiB), idle (no connections), or healthy. Uses the most recent value per database within a 5-minute freshness window.", - "drilldowns": [], - "title": "Databases by status" - }, - "gridData": { - "h": 12, - "i": "chart-status-donut", - "sectionId": "aws-rds-overview-section", - "w": 20, - "x": 8, - "y": 0 - }, - "panelIndex": "chart-status-donut", - "type": "vis" - }, - { - "embeddableConfig": { - "description": "One hexagon per RDS database, ordered worst-first with CPU-saturated or low-storage databases first. Toggle Color by between Status, CPU utilization, or Free Storage; metric views support Min, Max, Avg, and Last over the dashboard time range. Click any hexagon to filter the dashboard or open metrics for that database.", - "drilldowns": [], - "hide_title": false, - "savedVis": { - "data": { - "aggs": [], - "searchSource": { - "filter": [], - "projectRouting": "_alias:*", - "query": { - "language": "kuery", - "query": "" - } - } - }, - "description": "One hexagon per RDS database, ordered worst-first with CPU-saturated or low-storage databases first. Toggle Color by between Status, CPU utilization, or Free Storage; metric views support Min, Max, Avg, and Last over the dashboard time range. Click any hexagon to filter the dashboard or open metrics for that database.", - "params": { - "spec": "{\n \"$schema\": \"https://vega.github.io/schema/vega/v5.json\",\n \"description\": \"One hexagon per RDS database, ordered worst-first with CPU-saturated or low-storage databases first. States: saturated (CPU > 80%), low-storage (< 5 GB free), healthy (passing all checks), Unknown (no metric data). Toggle Color by between Status, CPU utilization, or Free Storage; metric views support Min, Max, Avg, and Last over the dashboard time range. Click any hexagon to filter the dashboard or open metrics for that database.\",\n \"usermeta\": {\n \"x_rds_hexmap\": true\n },\n \"padding\": {\n \"top\": 10,\n \"left\": 10,\n \"right\": 10,\n \"bottom\": 15\n },\n \"data\": [\n {\n \"name\": \"ts_probe\",\n \"url\": {\n \"%type%\": \"esql\",\n \"%context%\": true,\n \"%timefield%\": \"@timestamp\",\n \"query\": \"ROW round_key = CONCAT(TO_STRING(?_tstart), \\\"|\\\", TO_STRING(?_tend)), fetched_at = NOW()\"\n }\n },\n {\n \"name\": \"raw_all\",\n \"url\": {\n \"%type%\": \"esql\",\n \"%context%\": true,\n \"%timefield%\": \"@timestamp\",\n \"query\": \"SET unmapped_fields = \\\"nullify\\\";\\nFROM metrics-aws.rds.otel-* | WHERE @timestamp >= ?_tstart AND @timestamp <= ?_tend\\n AND DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \\\"\\\"\\n AND stat == \\\"Average\\\" | STATS cpu_min = MIN(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL,\\n cpu_max = MAX(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL,\\n cpu_avg = AVG(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL,\\n cpu_last = LAST(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`, @timestamp)\\n WHERE `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL,\\n st_min = MIN(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL,\\n st_max = MAX(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL,\\n st_avg = AVG(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL,\\n st_last = LAST(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, @timestamp)\\n WHERE `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL\\n BY entity_id = DBInstanceIdentifier\\n, cloud.region\\n| EVAL storage_min = st_min / 1073741824,\\n storage_max = st_max / 1073741824,\\n storage_avg = st_avg / 1073741824,\\n storage_last = st_last / 1073741824,\\n status_num = CASE(\\n cpu_last IS NULL AND st_last IS NULL, 3,\\n cpu_last > 80, 0,\\n st_last < 5368709120, 1,\\n 2),\\n status_label = CASE(\\n cpu_last IS NULL AND st_last IS NULL, \\\"Unknown\\\",\\n cpu_last > 80, \\\"saturated\\\",\\n st_last < 5368709120, \\\"low-storage\\\",\\n \\\"healthy\\\"),\\n severity_rank = status_num,\\n round_key = CONCAT(TO_STRING(?_tstart), \\\"|\\\", TO_STRING(?_tend)),\\n fetched_at = NOW()\\n| KEEP entity_id, status_num, status_label, severity_rank,\\n cpu_min, cpu_max, cpu_avg, cpu_last,\\n storage_min, storage_max, storage_avg, storage_last,\\n round_key, fetched_at\\n| LIMIT 10000\"\n }\n },\n {\n \"name\": \"ranked_status\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"severity_rank\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_cpu_min\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.cpu_min == null ? 1e12 : -datum.cpu_min * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_cpu_max\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.cpu_max == null ? 1e12 : -datum.cpu_max * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_cpu_avg\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.cpu_avg == null ? 1e12 : -datum.cpu_avg * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_cpu_last\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.cpu_last == null ? 1e12 : -datum.cpu_last * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_storage_min\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.storage_min == null ? 1e12 : datum.storage_min * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_storage_max\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.storage_max == null ? 1e12 : datum.storage_max * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_storage_avg\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.storage_avg == null ? 1e12 : datum.storage_avg * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_storage_last\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.storage_last == null ? 1e12 : datum.storage_last * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"active\",\n \"values\": [],\n \"on\": [\n {\n \"trigger\": \"ts_round !== '' && active_round !== '' && active_round !== ts_round\",\n \"remove\": \"true\"\n },\n {\n \"trigger\": \"metric === 'status' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_status')\"\n },\n {\n \"trigger\": \"metric === 'cpu' && effective_agg === 'min' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_cpu_min')\"\n },\n {\n \"trigger\": \"metric === 'cpu' && effective_agg === 'max' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_cpu_max')\"\n },\n {\n \"trigger\": \"metric === 'cpu' && effective_agg === 'avg' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_cpu_avg')\"\n },\n {\n \"trigger\": \"metric === 'cpu' && effective_agg === 'last' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_cpu_last')\"\n },\n {\n \"trigger\": \"metric === 'storage' && effective_agg === 'min' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_storage_min')\"\n },\n {\n \"trigger\": \"metric === 'storage' && effective_agg === 'max' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_storage_max')\"\n },\n {\n \"trigger\": \"metric === 'storage' && effective_agg === 'avg' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_storage_avg')\"\n },\n {\n \"trigger\": \"metric === 'storage' && effective_agg === 'last' && len_raw > 0 && raw_round === ts_round && ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_storage_last')\"\n }\n ]\n },\n {\n \"name\": \"entities\",\n \"source\": \"active\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"active_val\",\n \"expr\": \"metric=='status' ? null : (metric=='cpu' ? (effective_agg=='min' ? datum.cpu_min : effective_agg=='max' ? datum.cpu_max : effective_agg=='avg' ? datum.cpu_avg : effective_agg=='last' ? datum.cpu_last : null) : (metric=='storage' ? (effective_agg=='min' ? datum.storage_min : effective_agg=='max' ? datum.storage_max : effective_agg=='avg' ? datum.storage_avg : effective_agg=='last' ? datum.storage_last : null) : null))\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"index0\",\n \"expr\": \"datum.active_rank - 1\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"col\",\n \"expr\": \"datum.index0 % gridCols\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"row\",\n \"expr\": \"floor(datum.index0 / gridCols)\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"x\",\n \"expr\": \"datum.col * gapX + (datum.row % 2 == 1 ? gapX / 2 : 0) + hexR + 5\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"y\",\n \"expr\": \"datum.row * gapY + hexR + 5 + hexOffsetY\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"hexSize\",\n \"expr\": \"hexR * hexR * 3.46\"\n }\n ]\n },\n {\n \"name\": \"status_counts\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"aggregate\",\n \"groupby\": [\n \"status_num\"\n ],\n \"ops\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ]\n }\n ]\n },\n {\n \"name\": \"status_legend\",\n \"values\": [\n {\n \"label\": \"Saturated\",\n \"val\": 0\n },\n {\n \"label\": \"Low storage\",\n \"val\": 1\n },\n {\n \"label\": \"Healthy\",\n \"val\": 2\n },\n {\n \"label\": \"Unknown\",\n \"val\": 3\n }\n ],\n \"transform\": [\n {\n \"type\": \"lookup\",\n \"from\": \"status_counts\",\n \"key\": \"status_num\",\n \"fields\": [\n \"val\"\n ],\n \"values\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ],\n \"default\": 0\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"idx\"\n ]\n }\n ]\n },\n {\n \"name\": \"cpu_counts\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"v\",\n \"expr\": \"agg == 'min' ? datum.cpu_min : agg == 'max' ? datum.cpu_max : agg == 'avg' ? datum.cpu_avg : agg == 'last' ? datum.cpu_last : null\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"bucket\",\n \"expr\": \"datum.v == null ? 3 : (datum.v >= 80 ? 2 : datum.v >= 60 ? 1 : 0)\"\n },\n {\n \"type\": \"aggregate\",\n \"groupby\": [\n \"bucket\"\n ],\n \"ops\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ]\n }\n ]\n },\n {\n \"name\": \"storage_counts\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"v\",\n \"expr\": \"agg == 'min' ? datum.storage_min : agg == 'max' ? datum.storage_max : agg == 'avg' ? datum.storage_avg : agg == 'last' ? datum.storage_last : null\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"bucket\",\n \"expr\": \"datum.v == null ? 3 : (datum.v >= 20 ? 2 : datum.v >= 5 ? 1 : 0)\"\n },\n {\n \"type\": \"aggregate\",\n \"groupby\": [\n \"bucket\"\n ],\n \"ops\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ]\n }\n ]\n },\n {\n \"name\": \"cpu_legend_stops\",\n \"values\": [\n {\n \"label\": \"≥ 80%\",\n \"val\": 90,\n \"bucket\": 2,\n \"is_nodata\": false\n },\n {\n \"label\": \"60 – 79%\",\n \"val\": 70,\n \"bucket\": 1,\n \"is_nodata\": false\n },\n {\n \"label\": \"< 60%\",\n \"val\": 0,\n \"bucket\": 0,\n \"is_nodata\": false\n },\n {\n \"label\": \"Unknown\",\n \"val\": null,\n \"bucket\": 3,\n \"is_nodata\": true\n }\n ],\n \"transform\": [\n {\n \"type\": \"lookup\",\n \"from\": \"cpu_counts\",\n \"key\": \"bucket\",\n \"fields\": [\n \"bucket\"\n ],\n \"values\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ],\n \"default\": 0\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"idx\"\n ]\n }\n ]\n },\n {\n \"name\": \"storage_legend_stops\",\n \"values\": [\n {\n \"label\": \"< 5 GB\",\n \"val\": 2,\n \"bucket\": 0,\n \"is_nodata\": false\n },\n {\n \"label\": \"5 – 19 GB\",\n \"val\": 10,\n \"bucket\": 1,\n \"is_nodata\": false\n },\n {\n \"label\": \"≥ 20 GB\",\n \"val\": 50,\n \"bucket\": 2,\n \"is_nodata\": false\n },\n {\n \"label\": \"Unknown\",\n \"val\": null,\n \"bucket\": 3,\n \"is_nodata\": true\n }\n ],\n \"transform\": [\n {\n \"type\": \"lookup\",\n \"from\": \"storage_counts\",\n \"key\": \"bucket\",\n \"fields\": [\n \"bucket\"\n ],\n \"values\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ],\n \"default\": 0\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"idx\"\n ]\n }\n ]\n },\n {\n \"name\": \"spinner_dots\",\n \"values\": [\n {\n \"i\": 0\n },\n {\n \"i\": 1\n },\n {\n \"i\": 2\n },\n {\n \"i\": 3\n },\n {\n \"i\": 4\n },\n {\n \"i\": 5\n },\n {\n \"i\": 6\n },\n {\n \"i\": 7\n }\n ]\n },\n {\n \"name\": \"pills\",\n \"values\": [\n {\n \"id\": \"status\",\n \"label\": \"Status\",\n \"group\": \"metric\",\n \"x\": 69,\n \"w\": 48,\n \"available_aggs\": [],\n \"default_agg\": \"last\"\n },\n {\n \"id\": \"cpu\",\n \"label\": \"CPU %\",\n \"group\": \"metric\",\n \"x\": 125,\n \"w\": 58,\n \"available_aggs\": [\n \"min\",\n \"max\",\n \"avg\",\n \"last\"\n ],\n \"default_agg\": \"last\"\n },\n {\n \"id\": \"storage\",\n \"label\": \"Free Storage (GB)\",\n \"group\": \"metric\",\n \"x\": 191,\n \"w\": 128,\n \"available_aggs\": [\n \"min\",\n \"max\",\n \"avg\",\n \"last\"\n ],\n \"default_agg\": \"last\"\n },\n {\n \"id\": \"min\",\n \"label\": \"Min\",\n \"group\": \"agg\",\n \"x\": 425,\n \"w\": 36,\n \"valid_for\": [\n \"cpu\",\n \"storage\"\n ]\n },\n {\n \"id\": \"max\",\n \"label\": \"Max\",\n \"group\": \"agg\",\n \"x\": 465,\n \"w\": 36,\n \"valid_for\": [\n \"cpu\",\n \"storage\"\n ]\n },\n {\n \"id\": \"avg\",\n \"label\": \"Avg\",\n \"group\": \"agg\",\n \"x\": 505,\n \"w\": 36,\n \"valid_for\": [\n \"cpu\",\n \"storage\"\n ]\n },\n {\n \"id\": \"last\",\n \"label\": \"Last\",\n \"group\": \"agg\",\n \"x\": 545,\n \"w\": 40,\n \"valid_for\": [\n \"cpu\",\n \"storage\"\n ]\n },\n {\n \"id\": \"sum\",\n \"label\": \"Sum\",\n \"group\": \"agg\",\n \"x\": 589,\n \"w\": 40,\n \"valid_for\": []\n }\n ]\n },\n {\n \"name\": \"menu_items_data\",\n \"values\": [\n {\n \"id\": \"filter\",\n \"label\": \"Filter dashboard by this database\",\n \"idx\": 0\n },\n {\n \"id\": \"metrics\",\n \"label\": \"View database metrics in Discover\",\n \"idx\": 1\n }\n ]\n },\n {\n \"name\": \"menu_visible\",\n \"values\": [\n {\n \"_\": 0\n }\n ],\n \"transform\": [\n {\n \"type\": \"filter\",\n \"expr\": \"selected_entity != null\"\n }\n ]\n },\n {\n \"name\": \"menu_items_visible\",\n \"source\": \"menu_items_data\",\n \"transform\": [\n {\n \"type\": \"filter\",\n \"expr\": \"selected_entity != null\"\n }\n ]\n }\n ],\n \"signals\": [\n {\n \"name\": \"metric\",\n \"value\": \"status\",\n \"on\": [\n {\n \"events\": \"@pill_bg:click\",\n \"update\": \"datum.group === 'metric' ? datum.id : metric\"\n }\n ]\n },\n {\n \"name\": \"agg\",\n \"value\": \"last\",\n \"on\": [\n {\n \"events\": \"@pill_bg:click\",\n \"update\": \"datum.group === 'agg' && metric !== 'status' && indexof(datum.valid_for, metric) >= 0 ? datum.id : ( datum.group === 'metric' && datum.id !== 'status' ? (indexof(datum.available_aggs, agg) >= 0 ? agg : datum.default_agg) : agg )\"\n }\n ]\n },\n {\n \"name\": \"effective_agg\",\n \"update\": \"metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'\"\n },\n {\n \"name\": \"groupHeaderH\",\n \"value\": 20\n },\n {\n \"name\": \"groupGap\",\n \"value\": 10\n },\n {\n \"name\": \"group_by\",\n \"value\": \"none\"\n },\n {\n \"name\": \"len_raw\",\n \"update\": \"length(data('raw_all'))\"\n },\n {\n \"name\": \"len_active\",\n \"update\": \"length(data('active'))\"\n },\n {\n \"name\": \"ts_round\",\n \"update\": \"data('ts_probe')[0] ? data('ts_probe')[0].round_key : ''\"\n },\n {\n \"name\": \"time_from\",\n \"update\": \"ts_round !== '' && indexof(ts_round, '|') > 0 ? slice(ts_round, 0, indexof(ts_round, '|')) : ''\"\n },\n {\n \"name\": \"time_to\",\n \"update\": \"ts_round !== '' && indexof(ts_round, '|') > 0 ? slice(ts_round, indexof(ts_round, '|') + 1) : ''\"\n },\n {\n \"name\": \"g_param\",\n \"update\": \"time_from !== '' && time_to !== '' ? '_g=(time:(from:%27' + time_from + '%27,to:%27' + time_to + '%27))&' : ''\"\n },\n {\n \"name\": \"raw_round\",\n \"update\": \"data('raw_all')[0] ? data('raw_all')[0].round_key : ''\"\n },\n {\n \"name\": \"active_round\",\n \"update\": \"raw_round\"\n },\n {\n \"name\": \"raw_fetched_str\",\n \"update\": \"data('raw_all')[0] ? data('raw_all')[0].fetched_at : ''\"\n },\n {\n \"name\": \"active_fetched\",\n \"update\": \"raw_fetched_str !== '' ? toDate(raw_fetched_str) : 0\"\n },\n {\n \"name\": \"tick\",\n \"value\": 0,\n \"on\": [\n {\n \"events\": {\n \"type\": \"timer\",\n \"throttle\": 100\n },\n \"update\": \"now()\"\n }\n ]\n },\n {\n \"name\": \"url_change_at\",\n \"value\": 0,\n \"on\": [\n {\n \"events\": {\n \"source\": \"window\",\n \"type\": \"hashchange\"\n },\n \"update\": \"now()\"\n },\n {\n \"events\": {\n \"source\": \"window\",\n \"type\": \"popstate\"\n },\n \"update\": \"now()\"\n }\n ]\n },\n {\n \"name\": \"fetch_tracker\",\n \"init\": \"{seen: 0, arrived_at: 0}\",\n \"on\": [\n {\n \"events\": {\n \"signal\": \"tick\"\n },\n \"update\": \"active_fetched > 0 && active_fetched !== fetch_tracker.seen ? {seen: active_fetched, arrived_at: tick} : fetch_tracker\"\n }\n ]\n },\n {\n \"name\": \"loading_raw\",\n \"update\": \"len_active === 0 || ts_round === '' || active_round === '' || active_round !== ts_round || (url_change_at > 0 && fetch_tracker.arrived_at < url_change_at)\"\n },\n {\n \"name\": \"loading_started_at\",\n \"value\": 0,\n \"on\": [\n {\n \"events\": {\n \"signal\": \"tick\"\n },\n \"update\": \"loading_raw ? (loading_started_at === 0 ? tick : loading_started_at) : 0\"\n }\n ]\n },\n {\n \"name\": \"loading_elapsed\",\n \"update\": \"loading_started_at > 0 ? tick - loading_started_at : 0\"\n },\n {\n \"name\": \"no_data\",\n \"update\": \"loading_raw && ts_round !== '' && len_raw === 0 && loading_elapsed > 2000\"\n },\n {\n \"name\": \"loading\",\n \"update\": \"loading_raw && !no_data\"\n },\n {\n \"name\": \"loading_timeout\",\n \"update\": \"loading && loading_elapsed > 15000\"\n },\n {\n \"name\": \"total_entities\",\n \"update\": \"len_raw\"\n },\n {\n \"name\": \"legendW\",\n \"value\": 138\n },\n {\n \"name\": \"buttonsH\",\n \"value\": 34\n },\n {\n \"name\": \"availW\",\n \"update\": \"width - 20 - legendW\"\n },\n {\n \"name\": \"n_groups\",\n \"value\": 0\n },\n {\n \"name\": \"availH\",\n \"update\": \"height - 20 - buttonsH - (group_by !== 'none' ? n_groups * (groupHeaderH + groupGap) : 0)\"\n },\n {\n \"name\": \"hexOffsetY\",\n \"update\": \"buttonsH\"\n },\n {\n \"name\": \"idealCols\",\n \"update\": \"total_entities > 0 && availH > 0 ? max(1, round(sqrt(total_entities * (availW / availH)))) : 1\"\n },\n {\n \"name\": \"idealRows\",\n \"update\": \"max(1, ceil(total_entities / idealCols))\"\n },\n {\n \"name\": \"hexRInitial\",\n \"update\": \"min(availW / (idealCols * 2 + 0), availH / (idealRows * 2 + 0))\"\n },\n {\n \"name\": \"maxColsAtHexR\",\n \"update\": \"max(idealCols, floor(availW / (max(3, hexRInitial) * 2)))\"\n },\n {\n \"name\": \"maxColsAtMinR\",\n \"update\": \"max(1, floor(availW / (3 * 2)))\"\n },\n {\n \"name\": \"gridCols\",\n \"update\": \"max(1, min(total_entities, min(maxColsAtHexR, maxColsAtMinR)))\"\n },\n {\n \"name\": \"gridRows\",\n \"update\": \"group_by === 'none' ? max(1, ceil(total_entities / gridCols)) : max(1, ceil(total_entities / gridCols) + max(0, n_groups - 1))\"\n },\n {\n \"name\": \"rByWidth\",\n \"update\": \"availW / (gridCols * 1.76 + 0.88)\"\n },\n {\n \"name\": \"rByHeight\",\n \"update\": \"availH / (gridRows * 1.54 + 0.92)\"\n },\n {\n \"name\": \"hexR\",\n \"update\": \"max(3, min(90, min(rByWidth, rByHeight)))\"\n },\n {\n \"name\": \"gapX\",\n \"update\": \"hexR * 1.76\"\n },\n {\n \"name\": \"gapY\",\n \"update\": \"hexR * 1.54\"\n },\n {\n \"name\": \"legendX\",\n \"update\": \"width - legendW + 4\"\n },\n {\n \"name\": \"tooltip\",\n \"value\": {},\n \"on\": [\n {\n \"events\": \"@hexagons:mouseover\",\n \"update\": \"datum\"\n },\n {\n \"events\": \"@hexagons:mouseout\",\n \"update\": \"{}\"\n }\n ]\n },\n {\n \"name\": \"selected_entity\",\n \"value\": null,\n \"on\": [\n {\n \"events\": \"@hexagons:click\",\n \"update\": \"{id: datum.entity_id, x: datum.x, y: datum.y}\"\n },\n {\n \"events\": \"@menu_backdrop:click\",\n \"update\": \"null\"\n },\n {\n \"events\": \"@menu_item_bg:click\",\n \"update\": \"null\"\n }\n ]\n },\n {\n \"name\": \"menu_x\",\n \"update\": \"selected_entity ? ((selected_entity.x + hexR + 4 + 248 > width - legendW - 4) ? max(4, selected_entity.x - hexR - 248 - 4) : max(4, selected_entity.x + hexR + 4)) : 0\"\n },\n {\n \"name\": \"menu_y\",\n \"update\": \"selected_entity ? max(buttonsH + 4, min(selected_entity.y - 75, height - 90 - 4)) : 0\"\n }\n ],\n \"scales\": [\n {\n \"name\": \"status_color\",\n \"type\": \"ordinal\",\n \"domain\": [\n 0,\n 1,\n 2,\n 3\n ],\n \"range\": [\n \"#F6726A\",\n \"#D6BF57\",\n \"#24C292\",\n \"#BFDBFF\"\n ]\n },\n {\n \"name\": \"cpu_color\",\n \"type\": \"threshold\",\n \"domain\": [\n 60,\n 80\n ],\n \"range\": [\n \"#24C292\",\n \"#D6BF57\",\n \"#F6726A\"\n ]\n },\n {\n \"name\": \"storage_color\",\n \"type\": \"threshold\",\n \"domain\": [\n 5,\n 20\n ],\n \"range\": [\n \"#F6726A\",\n \"#D6BF57\",\n \"#24C292\"\n ]\n }\n ],\n \"marks\": [\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 5\n },\n \"y\": {\n \"value\": 17\n },\n \"text\": {\n \"value\": \"Color by:\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": 600\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 345\n },\n \"y\": {\n \"value\": 17\n },\n \"text\": {\n \"value\": \"Aggregation:\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": 600\n },\n \"fill\": {\n \"value\": \"#838C99\"\n },\n \"opacity\": {\n \"signal\": \"(metric === 'cpu' || metric === 'storage') ? 1 : 0.5\"\n }\n }\n }\n },\n {\n \"name\": \"pill_bg\",\n \"type\": \"rect\",\n \"from\": {\n \"data\": \"pills\"\n },\n \"encode\": {\n \"enter\": {},\n \"update\": {\n \"x\": {\n \"field\": \"x\"\n },\n \"x2\": {\n \"signal\": \"datum.x + datum.w\"\n },\n \"y\": {\n \"value\": 6\n },\n \"y2\": {\n \"value\": 28\n },\n \"cornerRadius\": {\n \"value\": 4\n },\n \"fill\": {\n \"signal\": \"((datum.group === 'metric' && datum.id === metric) || (datum.group === 'agg' && datum.id === effective_agg)) ? '#0077CC' : 'transparent'\"\n },\n \"stroke\": {\n \"signal\": \"((datum.group === 'metric' && datum.id === metric) || (datum.group === 'agg' && datum.id === effective_agg)) ? '#0064B0' : '#838C99'\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"opacity\": {\n \"signal\": \"(datum.group === 'agg' && (!(metric === 'cpu' || metric === 'storage') || indexof(datum.valid_for, metric) < 0)) ? 0.5 : 1\"\n },\n \"cursor\": {\n \"signal\": \"(datum.group === 'agg' && (!(metric === 'cpu' || metric === 'storage') || indexof(datum.valid_for, metric) < 0)) ? 'default' : 'pointer'\"\n }\n }\n }\n },\n {\n \"name\": \"pill_label\",\n \"type\": \"text\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"pills\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"datum.x + datum.w / 2\"\n },\n \"y\": {\n \"value\": 17\n },\n \"text\": {\n \"field\": \"label\"\n },\n \"align\": {\n \"value\": \"center\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": 500\n },\n \"fill\": {\n \"signal\": \"((datum.group === 'metric' && datum.id === metric) || (datum.group === 'agg' && datum.id === effective_agg)) ? '#FFFFFF' : '#838C99'\"\n },\n \"opacity\": {\n \"signal\": \"(datum.group === 'agg' && (!(metric === 'cpu' || metric === 'storage') || indexof(datum.valid_for, metric) < 0)) ? 0.5 : 1\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"width - legendW - 4\"\n },\n \"y\": {\n \"value\": 17\n },\n \"text\": {\n \"signal\": \"total_entities === 0 ? '' : (total_entities < 10000 ? 'Showing ' + total_entities + ' databases' : 'Showing top 10,000 databases (limit reached)')\"\n },\n \"align\": {\n \"value\": \"right\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n }\n }\n },\n {\n \"name\": \"hexagons\",\n \"type\": \"symbol\",\n \"from\": {\n \"data\": \"entities\"\n },\n \"encode\": {\n \"enter\": {\n \"cursor\": {\n \"value\": \"pointer\"\n }\n },\n \"update\": {\n \"x\": {\n \"field\": \"x\"\n },\n \"y\": {\n \"field\": \"y\"\n },\n \"size\": {\n \"field\": \"hexSize\"\n },\n \"fill\": [\n {\n \"test\": \"metric == 'status'\",\n \"scale\": \"status_color\",\n \"field\": \"status_num\"\n },\n {\n \"test\": \"datum.active_val == null\",\n \"value\": \"#BFDBFF\"\n },\n {\n \"test\": \"metric == 'cpu'\",\n \"scale\": \"cpu_color\",\n \"field\": \"active_val\"\n },\n {\n \"test\": \"metric == 'storage'\",\n \"scale\": \"storage_color\",\n \"field\": \"active_val\"\n },\n {\n \"value\": \"#BFDBFF\"\n }\n ],\n \"fillOpacity\": {\n \"value\": 0.92\n },\n \"shape\": {\n \"value\": \"M0,-1L0.866,-0.5L0.866,0.5L0,1L-0.866,0.5L-0.866,-0.5Z\"\n },\n \"strokeWidth\": [\n {\n \"test\": \"selected_entity && selected_entity.id === datum.entity_id\",\n \"value\": 3.5\n },\n {\n \"test\": \"tooltip.entity_id === datum.entity_id\",\n \"value\": 3\n },\n {\n \"value\": 1\n }\n ],\n \"stroke\": [\n {\n \"test\": \"selected_entity && selected_entity.id === datum.entity_id\",\n \"value\": \"#0077CC\"\n },\n {\n \"test\": \"tooltip.entity_id === datum.entity_id\",\n \"value\": \"#222\"\n },\n {\n \"value\": \"#FFFFFF\"\n }\n ],\n \"strokeOpacity\": [\n {\n \"test\": \"selected_entity && selected_entity.id === datum.entity_id\",\n \"value\": 1\n },\n {\n \"test\": \"tooltip.entity_id === datum.entity_id\",\n \"value\": 1\n },\n {\n \"value\": 0.3\n }\n ]\n }\n }\n },\n {\n \"type\": \"group\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"legendX\"\n },\n \"y\": {\n \"signal\": \"buttonsH + 8\"\n }\n }\n },\n \"marks\": [\n {\n \"type\": \"text\",\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 0\n },\n \"y\": {\n \"value\": 0\n },\n \"text\": {\n \"value\": \"Status\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"opacity\": [\n {\n \"test\": \"metric == 'status'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"from\": {\n \"data\": \"status_legend\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 6\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"size\": {\n \"value\": 110\n },\n \"shape\": {\n \"value\": \"circle\"\n },\n \"fill\": {\n \"scale\": \"status_color\",\n \"field\": \"val\"\n }\n },\n \"update\": {\n \"opacity\": [\n {\n \"test\": \"metric == 'status'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"text\",\n \"from\": {\n \"data\": \"status_legend\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 18\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"datum.label + ' (' + datum.count + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'status'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n }\n ]\n },\n {\n \"type\": \"group\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"legendX\"\n },\n \"y\": {\n \"signal\": \"buttonsH + 8\"\n }\n }\n },\n \"marks\": [\n {\n \"type\": \"text\",\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 0\n },\n \"y\": {\n \"value\": 0\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"'CPU% (' + agg + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'cpu'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"from\": {\n \"data\": \"cpu_legend_stops\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 6\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"size\": {\n \"value\": 110\n },\n \"shape\": {\n \"value\": \"circle\"\n }\n },\n \"update\": {\n \"fill\": [\n {\n \"test\": \"datum.is_nodata\",\n \"value\": \"#BFDBFF\"\n },\n {\n \"scale\": \"cpu_color\",\n \"field\": \"val\"\n }\n ],\n \"opacity\": [\n {\n \"test\": \"metric == 'cpu'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"text\",\n \"from\": {\n \"data\": \"cpu_legend_stops\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 18\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"datum.label + ' (' + datum.count + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'cpu'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n }\n ]\n },\n {\n \"type\": \"group\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"legendX\"\n },\n \"y\": {\n \"signal\": \"buttonsH + 8\"\n }\n }\n },\n \"marks\": [\n {\n \"type\": \"text\",\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 0\n },\n \"y\": {\n \"value\": 0\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"'Free storage (' + agg + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'storage'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"from\": {\n \"data\": \"storage_legend_stops\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 6\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"size\": {\n \"value\": 110\n },\n \"shape\": {\n \"value\": \"circle\"\n }\n },\n \"update\": {\n \"fill\": [\n {\n \"test\": \"datum.is_nodata\",\n \"value\": \"#BFDBFF\"\n },\n {\n \"scale\": \"storage_color\",\n \"field\": \"val\"\n }\n ],\n \"opacity\": [\n {\n \"test\": \"metric == 'storage'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"text\",\n \"from\": {\n \"data\": \"storage_legend_stops\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 18\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"datum.label + ' (' + datum.count + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'storage'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n }\n ]\n },\n {\n \"type\": \"group\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"tooltip.x + 18 + 290 > width - legendW - 10 ? max(tooltip.x - 18 - 290, 5) : tooltip.x + 18\"\n },\n \"y\": {\n \"signal\": \"max(tooltip.y - 30, 5)\"\n },\n \"width\": {\n \"value\": 290\n },\n \"height\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) <= 36 ? 110 : 124) : 110\"\n },\n \"opacity\": [\n {\n \"test\": \"tooltip.entity_id\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ],\n \"fill\": {\n \"value\": \"#0E1728\"\n },\n \"stroke\": {\n \"value\": \"#2A3144\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"cornerRadius\": {\n \"value\": 8\n }\n }\n },\n \"marks\": [\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"value\": 12\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) <= 36 ? [tooltip.entity_id] : [slice(tooltip.entity_id, 0, 36), slice(tooltip.entity_id, 36)]) : ['']\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"lineHeight\": {\n \"value\": 14\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#fff\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) <= 36 ? 36 : 50) : 36\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? 'Status: ' + tooltip.status_label : ''\"\n },\n \"fontSize\": {\n \"value\": 10\n },\n \"fontWeight\": [\n {\n \"test\": \"metric == 'status'\",\n \"value\": \"bold\"\n },\n {\n \"value\": \"normal\"\n }\n ],\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"signal\": \"metric == 'status' ? (tooltip.status_num == 0 ? '#F6726A' : tooltip.status_num == 1 ? '#D6BF57' : tooltip.status_num == 2 ? '#24C292' : tooltip.status_num == 3 ? '#BFDBFF' : '#BFDBFF') : '#9da4b3'\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) <= 36 ? 50 : 64) : 50\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? 'CPU% (' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last') + '): ' + (tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] != null ? format(tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))], '.1f') + '%' : 'Unknown') : ''\"\n },\n \"fontSize\": {\n \"value\": 10\n },\n \"fontWeight\": [\n {\n \"test\": \"metric == 'cpu'\",\n \"value\": \"bold\"\n },\n {\n \"value\": \"normal\"\n }\n ],\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"signal\": \"metric == 'cpu' ? (tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] == null ? '#9da4b3' : tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] >= 80 ? '#F6726A' : tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] >= 60 ? '#D6BF57' : '#24C292') : '#9da4b3'\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) <= 36 ? 64 : 78) : 64\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? 'Free Storage (' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last') + '): ' + (tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] != null ? format(tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))], '.1f') + ' GB' : 'Unknown') : ''\"\n },\n \"fontSize\": {\n \"value\": 10\n },\n \"fontWeight\": [\n {\n \"test\": \"metric == 'storage'\",\n \"value\": \"bold\"\n },\n {\n \"value\": \"normal\"\n }\n ],\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"signal\": \"metric == 'storage' ? (tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] == null ? '#9da4b3' : tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] >= 20 ? '#24C292' : tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] >= 5 ? '#D6BF57' : '#F6726A') : '#9da4b3'\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) <= 36 ? 82 : 96) : 82\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? '› Click for actions' : ''\"\n },\n \"fontSize\": {\n \"value\": 9\n },\n \"fontStyle\": {\n \"value\": \"italic\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"value\": \"#9da4b3\"\n }\n }\n }\n }\n ]\n },\n {\n \"type\": \"rect\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2 - 120\"\n },\n \"x2\": {\n \"signal\": \"(width - legendW) / 2 + 120\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 - 45\"\n },\n \"y2\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 + 45\"\n },\n \"fill\": {\n \"value\": \"#1A1C21\"\n },\n \"fillOpacity\": {\n \"signal\": \"(loading || loading_timeout) ? 0.92 : 0\"\n },\n \"stroke\": {\n \"value\": \"#838C99\"\n },\n \"strokeOpacity\": {\n \"signal\": \"(loading || loading_timeout) ? 0.4 : 0\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"cornerRadius\": {\n \"value\": 12\n }\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"spinner_dots\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2 + 18 * cos(datum.i * PI / 4 - PI / 2)\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 - 8 + 18 * sin(datum.i * PI / 4 - PI / 2)\"\n },\n \"size\": {\n \"value\": 70\n },\n \"shape\": {\n \"value\": \"circle\"\n },\n \"fill\": {\n \"value\": \"#0077CC\"\n },\n \"opacity\": {\n \"signal\": \"loading ? 0.15 + 0.85 * (1 - (((floor(tick / 100) % 8) - datum.i + 8) % 8) / 7) : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 + 28\"\n },\n \"text\": {\n \"value\": \"Loading data…\"\n },\n \"align\": {\n \"value\": \"center\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontWeight\": {\n \"value\": 500\n },\n \"fill\": {\n \"value\": \"#FFFFFF\"\n },\n \"opacity\": {\n \"signal\": \"loading && !loading_timeout ? 1 : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 + 28\"\n },\n \"text\": {\n \"value\": \"Still loading… (taking longer than usual)\"\n },\n \"align\": {\n \"value\": \"center\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontWeight\": {\n \"value\": 500\n },\n \"fill\": {\n \"value\": \"#FFFFFF\"\n },\n \"opacity\": {\n \"signal\": \"loading_timeout ? 1 : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2\"\n },\n \"text\": {\n \"value\": \"No databases for the selected time range\"\n },\n \"align\": {\n \"value\": \"center\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 13\n },\n \"fontWeight\": {\n \"value\": 500\n },\n \"fill\": {\n \"value\": \"#838C99\"\n },\n \"opacity\": {\n \"signal\": \"no_data ? 1 : 0\"\n }\n }\n }\n },\n {\n \"name\": \"menu_backdrop\",\n \"type\": \"rect\",\n \"from\": {\n \"data\": \"menu_visible\"\n },\n \"encode\": {\n \"enter\": {\n \"cursor\": {\n \"value\": \"default\"\n }\n },\n \"update\": {\n \"x\": {\n \"value\": 0\n },\n \"y\": {\n \"value\": 0\n },\n \"x2\": {\n \"signal\": \"width\"\n },\n \"y2\": {\n \"signal\": \"height\"\n },\n \"fill\": {\n \"value\": \"#000000\"\n },\n \"fillOpacity\": {\n \"value\": 0\n }\n }\n }\n },\n {\n \"name\": \"menu_box\",\n \"type\": \"rect\",\n \"from\": {\n \"data\": \"menu_visible\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x\"\n },\n \"y\": {\n \"signal\": \"menu_y\"\n },\n \"width\": {\n \"value\": 248\n },\n \"height\": {\n \"value\": 90\n },\n \"fill\": {\n \"value\": \"#0E1728\"\n },\n \"stroke\": {\n \"value\": \"#2A3144\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"cornerRadius\": {\n \"value\": 6\n }\n }\n }\n },\n {\n \"name\": \"menu_header\",\n \"type\": \"text\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"menu_visible\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x + 12\"\n },\n \"y\": {\n \"signal\": \"menu_y + 13.0\"\n },\n \"text\": {\n \"signal\": \"selected_entity ? 'Database: ' + (length(selected_entity.id) > 30 ? slice(selected_entity.id, 0, 28) + '…' : selected_entity.id) : ''\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": 600\n },\n \"fill\": {\n \"value\": \"#98A2B3\"\n }\n }\n }\n },\n {\n \"name\": \"menu_separator\",\n \"type\": \"rule\",\n \"from\": {\n \"data\": \"menu_visible\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x + 8\"\n },\n \"x2\": {\n \"signal\": \"menu_x + 240\"\n },\n \"y\": {\n \"signal\": \"menu_y + 26\"\n },\n \"stroke\": {\n \"value\": \"#2A3144\"\n },\n \"strokeWidth\": {\n \"value\": 1\n }\n }\n }\n },\n {\n \"name\": \"menu_item_bg\",\n \"type\": \"rect\",\n \"from\": {\n \"data\": \"menu_items_visible\"\n },\n \"encode\": {\n \"enter\": {\n \"cursor\": {\n \"value\": \"pointer\"\n }\n },\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x\"\n },\n \"y\": {\n \"signal\": \"menu_y + 30 + datum.idx * 30\"\n },\n \"width\": {\n \"value\": 248\n },\n \"height\": {\n \"value\": 30\n },\n \"fill\": {\n \"value\": \"#0E1728\"\n },\n \"href\": {\n \"signal\": \"selected_entity ? (datum.id === 'filter' ? ('/app/dashboards#/view/aws_rds_otel-c92e1216-83f6-4de7-9d7f-1bcb42d5988a?' + g_param + '_a=(filters:!((meta:(alias:!n,disabled:!f,index:%27metrics-*%27,key:DBInstanceIdentifier,negate:!f,params:(query:%27' + selected_entity.id + '%27),type:phrase),query:(match_phrase:(DBInstanceIdentifier:%27' + selected_entity.id + '%27)))),query:(language:kuery,query:%27%27))') : datum.id === 'metrics' ? ('/app/discover#/?_g=(time:(from:%27' + time_from + '%27,to:%27' + time_to + '%27))&_a=(dataSource:(dataViewId:%27metrics-*%27,type:dataView),query:(language:kuery,query:%27' + 'DBInstanceIdentifier:%22' + selected_entity.id + '%22' + '%27))') : '') : ''\"\n }\n },\n \"hover\": {\n \"fill\": {\n \"value\": \"#1A2640\"\n }\n }\n }\n },\n {\n \"name\": \"menu_item_label\",\n \"type\": \"text\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"menu_items_visible\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x + 14\"\n },\n \"y\": {\n \"signal\": \"menu_y + 30 + datum.idx * 30 + 15.0\"\n },\n \"text\": {\n \"field\": \"label\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fill\": {\n \"value\": \"#DFE5EF\"\n }\n }\n }\n }\n ],\n \"background\": \"transparent\",\n \"autosize\": {\n \"type\": \"fit\",\n \"contains\": \"padding\"\n }\n}" - }, - "title": "RDS databases — hexagon map", - "type": "vega", - "uiState": {} - }, - "title": "RDS databases — hexagon map (click an hex for actions)" - }, - "gridData": { - "x": 0, - "y": 0, - "w": 48, - "h": 15, - "i": "rds-hexmap-0001-aaaa-bbbb-ccccdddd0000", - "sectionId": "aws-rds-list-section" - }, - "panelIndex": "rds-hexmap-0001-aaaa-bbbb-ccccdddd0000", - "type": "legacy_vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Total number of RDS databases — distinct DB instance identifiers reporting metrics in the latest collected data for the selected time range.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" - } - ], - "layers": { - "layer-kpi-total": { - "columns": [ - { - "columnId": "col-kpi-total", - "customLabel": true, - "fieldName": "total", - "inMetricDimension": true, - "label": "Databases", - "meta": { - "esType": "long", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nFROM metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND stat IN (\"Average\", \"Maximum\") | STATS last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest = MAX(last_seen) | WHERE DATE_DIFF(\"minutes\", last_seen, latest) <= 5 | STATS total = COUNT(*) | KEEP total" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "textBasedLanguages-datasource-layer-layer-kpi-total", - "type": "index-pattern" - } - ], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nFROM metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND stat IN (\"Average\", \"Maximum\") | STATS last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest = MAX(last_seen) | WHERE DATE_DIFF(\"minutes\", last_seen, latest) <= 5 | STATS total = COUNT(*) | KEEP total" - }, - "visualization": { - "applyColorTo": "background", - "color": "#61a2ff00", - "colorMode": "background", - "layerId": "layer-kpi-total", - "layerType": "data", - "metricAccessor": "col-kpi-total", - "primaryAlign": "left", - "primaryPosition": "top", - "showBar": false, - "titlesTextAlign": "left" - } - }, - "title": "", - "version": 2, - "visualizationType": "lnsMetric" - }, - "description": "Total number of RDS databases — distinct DB instance identifiers reporting metrics in the latest collected data for the selected time range.", - "hide_title": true, - "title": "" - }, - "gridData": { - "h": 6, - "i": "kpi-total", - "sectionId": "aws-rds-overview-section", - "w": 4, - "x": 0, - "y": 0 - }, - "panelIndex": "kpi-total", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Number of low-storage RDS databases — those whose free storage dropped below 5 GiB, within a 5-minute freshness window. At risk of running out of disk. (Aurora instances are excluded — their storage auto-scales.)", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" - } - ], - "layers": { - "layer-kpi-low-storage": { - "columns": [ - { - "columnId": "col-kpi-low-storage", - "customLabel": true, - "fieldName": "low_storage", - "inMetricDimension": true, - "label": "Low storage", - "meta": { - "esType": "long", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nFROM metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND stat IN (\"Maximum\", \"Minimum\") | STATS cpu_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL)), conn_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)), storage_cur = MIN(CASE(stat == \"Minimum\", `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)), last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_global = MAX(last_seen) | WHERE DATE_DIFF(\"minutes\", last_seen, latest_global) <= 5 | EVAL state = CASE(cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\", cpu_cur > 80, \"saturated\", storage_cur < 5368709120, \"low-storage\", \"healthy\") | STATS low_storage = COUNT(*) WHERE state == \"low-storage\" | KEEP low_storage" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "textBasedLanguages-datasource-layer-layer-kpi-low-storage", - "type": "index-pattern" - } - ], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nFROM metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND stat IN (\"Maximum\", \"Minimum\") | STATS cpu_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL)), conn_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)), storage_cur = MIN(CASE(stat == \"Minimum\", `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)), last_seen = MAX(@timestamp) BY DBInstanceIdentifier, cloud.region | INLINE STATS latest_global = MAX(last_seen) | WHERE DATE_DIFF(\"minutes\", last_seen, latest_global) <= 5 | EVAL state = CASE(cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\", cpu_cur > 80, \"saturated\", storage_cur < 5368709120, \"low-storage\", \"healthy\") | STATS low_storage = COUNT(*) WHERE state == \"low-storage\" | KEEP low_storage" - }, - "visualization": { - "applyColorTo": "value", - "color": "#61a2ff00", - "colorMode": "background", - "layerId": "layer-kpi-low-storage", - "layerType": "data", - "metricAccessor": "col-kpi-low-storage", - "palette": { - "name": "custom", - "params": { - "colorStops": [ - { - "color": "#24C292", - "stop": 0 - }, - { - "color": "#D6BF57", - "stop": 1 - } - ], - "continuity": "above", - "maxSteps": 5, - "name": "custom", - "progression": "fixed", - "rangeMax": null, - "rangeMin": 0, - "rangeType": "number", - "reverse": false, - "steps": 3, - "stops": [ - { - "color": "#24C292", - "stop": 1 - }, - { - "color": "#D6BF57", - "stop": 2 - } - ] - }, - "type": "palette" + "description": "Total number of RDS databases — distinct DB instance identifiers reporting metrics in the latest collected data for the selected time range.", + "hide_title": true, + "title": "" }, - "primaryAlign": "left", - "primaryPosition": "top", - "showBar": false, - "titlesTextAlign": "left" - } - }, - "title": "", - "version": 2, - "visualizationType": "lnsMetric" - }, - "description": "Number of low-storage RDS databases — those whose free storage dropped below 5 GiB, within a 5-minute freshness window. At risk of running out of disk. (Aurora instances are excluded — their storage auto-scales.)", - "hide_title": true, - "title": "" - }, - "gridData": { - "h": 6, - "i": "kpi-low-storage", - "sectionId": "aws-rds-overview-section", - "w": 4, - "x": 0, - "y": 6 - }, - "panelIndex": "kpi-low-storage", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" - } - ], - "layers": { - "layer-kpi-healthy": { - "columns": [ - { - "columnId": "col-kpi-healthy", - "customLabel": true, - "fieldName": "healthy", - "inMetricDimension": true, - "label": "Healthy", - "meta": { - "esType": "long", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minutes\", last_seen, latest_global) <= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur > 80, \"saturated\",\n storage_cur < 5368709120, \"low-storage\",\n \"healthy\")\n| STATS healthy = COUNT(*) WHERE state == \"healthy\"\n| KEEP healthy" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minutes\", last_seen, latest_global) <= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur > 80, \"saturated\",\n storage_cur < 5368709120, \"low-storage\",\n \"healthy\")\n| STATS healthy = COUNT(*) WHERE state == \"healthy\"\n| KEEP healthy" - }, - "visualization": { - "applyColorTo": "background", - "color": "#61a2ff00", - "colorMode": "background", - "layerId": "layer-kpi-healthy", - "layerType": "data", - "metricAccessor": "col-kpi-healthy", - "primaryAlign": "left", - "primaryPosition": "top", - "showBar": false, - "titlesTextAlign": "left" - } - }, - "title": "", - "version": 2, - "visualizationType": "lnsMetric" - }, - "description": "Number of healthy RDS databases — with active connections and CPU at or below 80%, within a 5-minute freshness window.", - "drilldowns": [], - "hide_title": true, - "title": "" - }, - "gridData": { - "h": 6, - "i": "kpi-healthy", - "sectionId": "aws-rds-overview-section", - "w": 4, - "x": 4, - "y": 6 - }, - "panelIndex": "kpi-healthy", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" - } - ], - "layers": { - "ff67c6af-1965-4a2a-9048-45188451659a": { - "columns": [ - { - "columnId": "saturated", - "customLabel": false, - "fieldName": "saturated", - "inMetricDimension": true, - "label": "Saturated", - "meta": { - "esType": "long", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minutes\", last_seen, latest_global) <= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur > 80, \"saturated\",\n storage_cur < 5368709120, \"low-storage\",\n \"healthy\")\n| STATS saturated = COUNT(*) WHERE state == \"saturated\"\n| KEEP saturated" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minutes\", last_seen, latest_global) <= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur > 80, \"saturated\",\n storage_cur < 5368709120, \"low-storage\",\n \"healthy\")\n| STATS saturated = COUNT(*) WHERE state == \"saturated\"\n| KEEP saturated" - }, - "visualization": { - "applyColorTo": "value", - "color": "#61a2ff00", - "colorMode": "background", - "layerId": "ff67c6af-1965-4a2a-9048-45188451659a", - "layerType": "data", - "metricAccessor": "saturated", - "palette": { - "name": "custom", - "params": { - "colorStops": [ - { - "color": "#24C292", - "stop": 0 - }, - { - "color": "#F6726A", - "stop": 1 - } - ], - "continuity": "above", - "maxSteps": 5, - "name": "custom", - "progression": "fixed", - "rangeMax": null, - "rangeMin": 0, - "rangeType": "number", - "reverse": false, - "steps": 3, - "stops": [ - { - "color": "#24C292", - "stop": 1 - }, - { - "color": "#F6726A", - "stop": 2 - } - ] - }, - "type": "palette" + "gridData": { + "h": 6, + "i": "kpi-total", + "sectionId": "aws-rds-overview-section", + "w": 4, + "x": 0, + "y": 0 }, - "primaryAlign": "left", - "primaryPosition": "top", - "showBar": false, - "titlesTextAlign": "left" - } + "panelIndex": "kpi-total", + "type": "vis" }, - "title": "", - "version": 2, - "visualizationType": "lnsMetric" - }, - "description": "Number of saturated RDS databases — those whose latest CPU utilization exceeds 80%, within a 5-minute freshness window. Indicates CPU-bound databases that may slow queries.", - "drilldowns": [], - "hide_title": true, - "title": "" - }, - "gridData": { - "h": 6, - "i": "kpi-saturated", - "sectionId": "aws-rds-overview-section", - "w": 4, - "x": 4, - "y": 0 - }, - "panelIndex": "kpi-saturated", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" - } - ], - "layers": { - "tbl-layer-tbl-instances": { - "columns": [ - { - "columnId": "DBInstanceIdentifier", - "customLabel": true, - "fieldName": "DBInstanceIdentifier", - "label": "DB instance", - "meta": { - "esType": "keyword", - "type": "string" - } - }, - { - "columnId": "c_state_sort", - "customLabel": true, - "fieldName": "c_state_sort", - "inMetricDimension": true, - "label": "State order", - "meta": { - "esType": "integer", - "type": "number" - } - }, - { - "columnId": "c_state", - "customLabel": true, - "fieldName": "c_state", - "inMetricDimension": true, - "label": "State", - "meta": { - "esType": "keyword", - "type": "string" - } - }, - { - "columnId": "c_account", - "customLabel": true, - "fieldName": "c_account", - "label": "Account", - "meta": { - "esType": "keyword", - "type": "string" - } - }, - { - "columnId": "c_region", - "customLabel": true, - "fieldName": "c_region", - "label": "Region", - "meta": { - "esType": "keyword", - "type": "string" - } - }, - { - "columnId": "c_cpu", - "customLabel": true, - "fieldName": "c_cpu", - "inMetricDimension": true, - "label": "Avg CPU (%)", - "meta": { - "esType": "double", - "type": "number" - }, - "params": { - "format": { - "id": "percent", - "params": { - "decimals": 1 - } + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "layer-kpi-low-storage": { + "columns": [ + { + "columnId": "col-kpi-low-storage", + "customLabel": true, + "fieldName": "low_storage", + "inMetricDimension": true, + "label": "Low storage", + "meta": { + "esType": "long", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur \u003e 80, \"saturated\",\n storage_cur \u003c 10737418240, \"low-storage\",\n \"healthy\")\n| STATS low_storage = COUNT(*) WHERE state == \"low-storage\"\n| KEEP low_storage" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur \u003e 80, \"saturated\",\n storage_cur \u003c 10737418240, \"low-storage\",\n \"healthy\")\n| STATS low_storage = COUNT(*) WHERE state == \"low-storage\"\n| KEEP low_storage" + }, + "visualization": { + "applyColorTo": "value", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "layer-kpi-low-storage", + "layerType": "data", + "metricAccessor": "col-kpi-low-storage", + "palette": { + "name": "custom", + "params": { + "colorStops": [ + { + "color": "#24C292", + "stop": 0 + }, + { + "color": "#D6BF57", + "stop": 1 + } + ], + "continuity": "above", + "maxSteps": 5, + "name": "custom", + "progression": "fixed", + "rangeMax": null, + "rangeMin": 0, + "rangeType": "number", + "reverse": false, + "steps": 3, + "stops": [ + { + "color": "#24C292", + "stop": 1 + }, + { + "color": "#D6BF57", + "stop": 2 + } + ] + }, + "type": "palette" + }, + "primaryAlign": "left", + "primaryPosition": "top", + "showBar": false, + "titlesTextAlign": "left" } - } }, - { - "columnId": "c_conn", - "customLabel": true, - "fieldName": "c_conn", - "inMetricDimension": true, - "label": "Current connections", - "meta": { - "esType": "double", - "type": "number" - } - }, - { - "columnId": "c_mem", - "customLabel": true, - "fieldName": "c_mem", - "inMetricDimension": true, - "label": "Current free memory", - "meta": { - "esType": "double", - "type": "number" - }, - "params": { - "format": { - "id": "bytes", - "params": { - "decimals": 2 - } + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Number of low-storage RDS databases — those whose free storage dropped below 5 GiB, within a 5-minute freshness window. At risk of running out of disk. (Aurora instances are excluded — their storage auto-scales.)", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 6, + "i": "kpi-low-storage", + "sectionId": "aws-rds-overview-section", + "w": 4, + "x": 0, + "y": 6 + }, + "panelIndex": "kpi-low-storage", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "layer-kpi-healthy": { + "columns": [ + { + "columnId": "col-kpi-healthy", + "customLabel": true, + "fieldName": "healthy", + "inMetricDimension": true, + "label": "Healthy", + "meta": { + "esType": "long", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur \u003e 80, \"saturated\",\n storage_cur \u003c 10737418240, \"low-storage\",\n \"healthy\")\n| STATS healthy = COUNT(*) WHERE state == \"healthy\"\n| KEEP healthy" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur \u003e 80, \"saturated\",\n storage_cur \u003c 10737418240, \"low-storage\",\n \"healthy\")\n| STATS healthy = COUNT(*) WHERE state == \"healthy\"\n| KEEP healthy" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "layer-kpi-healthy", + "layerType": "data", + "metricAccessor": "col-kpi-healthy", + "primaryAlign": "left", + "primaryPosition": "top", + "showBar": false, + "titlesTextAlign": "left" } - } }, - { - "columnId": "c_storage", - "customLabel": true, - "fieldName": "c_storage", - "inMetricDimension": true, - "label": "Current free storage", - "meta": { - "esType": "double", - "type": "number" - }, - "params": { - "format": { - "id": "bytes", - "params": { - "decimals": 2 - } + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Number of healthy RDS databases — with active connections and CPU at or below 80%, within a 5-minute freshness window.", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 6, + "i": "kpi-healthy", + "sectionId": "aws-rds-overview-section", + "w": 4, + "x": 4, + "y": 6 + }, + "panelIndex": "kpi-healthy", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "ff67c6af-1965-4a2a-9048-45188451659a": { + "columns": [ + { + "columnId": "saturated", + "customLabel": true, + "fieldName": "saturated", + "inMetricDimension": true, + "label": "Saturated", + "meta": { + "esType": "long", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur \u003e 80, \"saturated\",\n storage_cur \u003c 10737418240, \"low-storage\",\n \"healthy\")\n| STATS saturated = COUNT(*) WHERE state == \"saturated\"\n| KEEP saturated" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS cpu_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n conn_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n storage_cur = AVG(AVG_OVER_TIME(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_global = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_global) \u003c= 5\n| EVAL state = CASE(\n cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\",\n cpu_cur \u003e 80, \"saturated\",\n storage_cur \u003c 10737418240, \"low-storage\",\n \"healthy\")\n| STATS saturated = COUNT(*) WHERE state == \"saturated\"\n| KEEP saturated" + }, + "visualization": { + "applyColorTo": "value", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "ff67c6af-1965-4a2a-9048-45188451659a", + "layerType": "data", + "metricAccessor": "saturated", + "palette": { + "name": "custom", + "params": { + "colorStops": [ + { + "color": "#24C292", + "stop": 0 + }, + { + "color": "#F6726A", + "stop": 1 + } + ], + "continuity": "above", + "maxSteps": 5, + "name": "custom", + "progression": "fixed", + "rangeMax": null, + "rangeMin": 0, + "rangeType": "number", + "reverse": false, + "steps": 3, + "stops": [ + { + "color": "#24C292", + "stop": 1 + }, + { + "color": "#F6726A", + "stop": 2 + } + ] + }, + "type": "palette" + }, + "primaryAlign": "left", + "primaryPosition": "top", + "showBar": false, + "titlesTextAlign": "left" } - } }, - { - "columnId": "c_read_iops", - "customLabel": true, - "fieldName": "c_read_iops", - "inMetricDimension": true, - "label": "Avg read IOPS", - "meta": { - "esType": "double", - "type": "number" - } + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Number of saturated RDS databases — those whose latest CPU utilization exceeds 80%, within a 5-minute freshness window. Indicates CPU-bound databases that may slow queries.", + "hide_title": true + }, + "gridData": { + "h": 6, + "i": "kpi-saturated", + "sectionId": "aws-rds-overview-section", + "w": 4, + "x": 4, + "y": 0 + }, + "panelIndex": "kpi-saturated", + "type": "vis" + }, + { + "embeddableConfig": { + "description": "One hexagon per RDS database, ordered worst-first with CPU-saturated or low-storage databases first. Toggle Color by between Status, CPU utilization, or Free Storage; metric views support Min, Max, Avg, and Last over the dashboard time range. Click any hexagon to filter the dashboard or open metrics for that database.", + "hide_title": false, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "projectRouting": "_alias:*", + "query": { + "language": "kuery", + "query": "" + } + } }, - { - "columnId": "c_write_iops", - "customLabel": true, - "fieldName": "c_write_iops", - "inMetricDimension": true, - "label": "Avg write IOPS", - "meta": { - "esType": "double", - "type": "number" - } + "description": "One hexagon per RDS database, ordered worst-first with CPU-saturated or low-storage databases first. Toggle Color by between Status, CPU utilization, or Free Storage; metric views support Min, Max, Avg, and Last over the dashboard time range. Click any hexagon to filter the dashboard or open metrics for that database.", + "params": { + "spec": "{\n \"$schema\": \"https://vega.github.io/schema/vega/v5.json\",\n \"description\": \"One hexagon per RDS database, ordered worst-first with CPU-saturated or low-storage databases first. States: saturated (CPU \u003e 80%), low-storage (\u003c 10 GB free), healthy (passing all checks), Unknown (no metric data). Toggle Color by between Status, CPU utilization, or Free Storage; metric views support Min, Max, Avg, and Last over the dashboard time range. Click any hexagon to filter the dashboard or open metrics for that database.\",\n \"usermeta\": {\n \"x_rds_hexmap\": true\n },\n \"padding\": {\n \"top\": 10,\n \"left\": 10,\n \"right\": 10,\n \"bottom\": 15\n },\n \"data\": [\n {\n \"name\": \"ts_probe\",\n \"url\": {\n \"%type%\": \"esql\",\n \"%context%\": true,\n \"%timefield%\": \"@timestamp\",\n \"query\": \"ROW round_key = CONCAT(TO_STRING(?_tstart), \\\"|\\\", TO_STRING(?_tend)), fetched_at = NOW()\"\n }\n },\n {\n \"name\": \"raw_all\",\n \"url\": {\n \"%type%\": \"esql\",\n \"%context%\": true,\n \"%timefield%\": \"@timestamp\",\n \"query\": \"SET unmapped_fields = \\\"nullify\\\";\\nFROM metrics-aws.rds.otel-* | WHERE @timestamp \u003e= ?_tstart AND @timestamp \u003c= ?_tend\\n AND DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \\\"\\\"\\n AND stat == \\\"Average\\\" | STATS cpu_min = MIN(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL,\\n cpu_max = MAX(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL,\\n cpu_avg = AVG(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL,\\n cpu_last = LAST(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`, @timestamp)\\n WHERE `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL,\\n st_min = MIN(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL,\\n st_max = MAX(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL,\\n st_avg = AVG(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL,\\n st_last = LAST(`metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, @timestamp)\\n WHERE `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace` IS NOT NULL,\\n last_seen = MAX(@timestamp)\\n ,\\n conn_max = MAX(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)\\n WHERE `metrics.amazonaws.com/AWS/RDS/DatabaseConnections` IS NOT NULL,\\n eng_binlog = MAX(`metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage`),\\n eng_txid = MAX(`metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs`),\\n eng_txlog = MAX(`metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration`),\\n eng_replslot = MAX(`metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage`),\\n eng_failedjobs = MAX(`metrics.amazonaws.com/AWS/RDS/FailedSQLServerAgentJobsCount`),\\n eng_tempdb = MAX(`metrics.amazonaws.com/AWS/RDS/TempDbDataFileUsage`),\\n eng_swap = MAX(`metrics.amazonaws.com/AWS/RDS/SwapUsage`)\\n BY entity_id = DBInstanceIdentifier\\n, cloud.region\\n| INLINE STATS latest_global = MAX(last_seen)\\n| WHERE DATE_DIFF(\\\"minutes\\\", last_seen, latest_global) \u003c= 5\\n| EVAL storage_min = st_min / 1073741824,\\n storage_max = st_max / 1073741824,\\n storage_avg = st_avg / 1073741824,\\n storage_last = st_last / 1073741824,\\n engine = CASE(\\n eng_failedjobs IS NOT NULL OR eng_tempdb IS NOT NULL, \\\"SQL Server\\\",\\n eng_txid IS NOT NULL OR eng_txlog IS NOT NULL OR eng_replslot IS NOT NULL, \\\"PostgreSQL\\\",\\n eng_binlog IS NOT NULL, \\\"MySQL / MariaDB\\\",\\n eng_swap IS NOT NULL, \\\"Oracle\\\",\\n \\\"Other\\\"),\\n status_num = CASE(\\n cpu_last IS NULL AND st_last IS NULL, 3,\\n cpu_last \u003e 80, 0,\\n st_last \u003c 10737418240, 1,\\n 2),\\n status_label = CASE(\\n cpu_last IS NULL AND st_last IS NULL, \\\"Unknown\\\",\\n cpu_last \u003e 80, \\\"saturated\\\",\\n st_last \u003c 10737418240, \\\"low-storage\\\",\\n \\\"healthy\\\"),\\n severity_rank = status_num,\\n round_key = CONCAT(TO_STRING(?_tstart), \\\"|\\\", TO_STRING(?_tend)),\\n fetched_at = NOW()\\n| KEEP entity_id, engine, status_num, status_label, severity_rank,\\n cpu_min, cpu_max, cpu_avg, cpu_last,\\n storage_min, storage_max, storage_avg, storage_last,\\n round_key, fetched_at\\n| LIMIT 10000\"\n }\n },\n {\n \"name\": \"ranked_status\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"severity_rank\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_cpu_min\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.cpu_min == null ? 1e12 : -datum.cpu_min * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_cpu_max\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.cpu_max == null ? 1e12 : -datum.cpu_max * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_cpu_avg\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.cpu_avg == null ? 1e12 : -datum.cpu_avg * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_cpu_last\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.cpu_last == null ? 1e12 : -datum.cpu_last * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_storage_min\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.storage_min == null ? 1e12 : datum.storage_min * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_storage_max\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.storage_max == null ? 1e12 : datum.storage_max * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_storage_avg\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.storage_avg == null ? 1e12 : datum.storage_avg * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"ranked_storage_last\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"sort_key\",\n \"expr\": \"datum.storage_last == null ? 1e12 : datum.storage_last * 1000000\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": [\n \"sort_key\",\n \"entity_id\"\n ],\n \"order\": [\n \"ascending\",\n \"ascending\"\n ]\n }\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"active_rank\"\n ]\n }\n ]\n },\n {\n \"name\": \"active\",\n \"values\": [],\n \"on\": [\n {\n \"trigger\": \"ts_round !== '' \u0026\u0026 active_round !== '' \u0026\u0026 active_round !== ts_round\",\n \"remove\": \"true\"\n },\n {\n \"trigger\": \"metric === 'status' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_status')\"\n },\n {\n \"trigger\": \"metric === 'cpu' \u0026\u0026 effective_agg === 'min' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_cpu_min')\"\n },\n {\n \"trigger\": \"metric === 'cpu' \u0026\u0026 effective_agg === 'max' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_cpu_max')\"\n },\n {\n \"trigger\": \"metric === 'cpu' \u0026\u0026 effective_agg === 'avg' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_cpu_avg')\"\n },\n {\n \"trigger\": \"metric === 'cpu' \u0026\u0026 effective_agg === 'last' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_cpu_last')\"\n },\n {\n \"trigger\": \"metric === 'storage' \u0026\u0026 effective_agg === 'min' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_storage_min')\"\n },\n {\n \"trigger\": \"metric === 'storage' \u0026\u0026 effective_agg === 'max' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_storage_max')\"\n },\n {\n \"trigger\": \"metric === 'storage' \u0026\u0026 effective_agg === 'avg' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_storage_avg')\"\n },\n {\n \"trigger\": \"metric === 'storage' \u0026\u0026 effective_agg === 'last' \u0026\u0026 len_raw \u003e 0 \u0026\u0026 raw_round === ts_round \u0026\u0026 ts_round !== ''\",\n \"remove\": \"true\",\n \"insert\": \"data('ranked_storage_last')\"\n }\n ]\n },\n {\n \"name\": \"entities\",\n \"source\": \"active\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"active_val\",\n \"expr\": \"metric=='status' ? null : (metric=='cpu' ? (effective_agg=='min' ? datum.cpu_min : effective_agg=='max' ? datum.cpu_max : effective_agg=='avg' ? datum.cpu_avg : effective_agg=='last' ? datum.cpu_last : null) : (metric=='storage' ? (effective_agg=='min' ? datum.storage_min : effective_agg=='max' ? datum.storage_max : effective_agg=='avg' ? datum.storage_avg : effective_agg=='last' ? datum.storage_last : null) : null))\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"index0\",\n \"expr\": \"datum.active_rank - 1\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"col\",\n \"expr\": \"datum.index0 % gridCols\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"row\",\n \"expr\": \"floor(datum.index0 / gridCols)\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"x\",\n \"expr\": \"datum.col * gapX + (datum.row % 2 == 1 ? gapX / 2 : 0) + hexR + 5\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"y\",\n \"expr\": \"datum.row * gapY + hexR + 5 + hexOffsetY\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"hexSize\",\n \"expr\": \"hexR * hexR * 3.46\"\n }\n ]\n },\n {\n \"name\": \"status_counts\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"aggregate\",\n \"groupby\": [\n \"status_num\"\n ],\n \"ops\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ]\n }\n ]\n },\n {\n \"name\": \"status_legend\",\n \"values\": [\n {\n \"label\": \"Saturated\",\n \"val\": 0\n },\n {\n \"label\": \"Low storage\",\n \"val\": 1\n },\n {\n \"label\": \"Healthy\",\n \"val\": 2\n },\n {\n \"label\": \"Unknown\",\n \"val\": 3\n }\n ],\n \"transform\": [\n {\n \"type\": \"lookup\",\n \"from\": \"status_counts\",\n \"key\": \"status_num\",\n \"fields\": [\n \"val\"\n ],\n \"values\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ],\n \"default\": 0\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"idx\"\n ]\n }\n ]\n },\n {\n \"name\": \"cpu_counts\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"v\",\n \"expr\": \"agg == 'min' ? datum.cpu_min : agg == 'max' ? datum.cpu_max : agg == 'avg' ? datum.cpu_avg : agg == 'last' ? datum.cpu_last : null\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"bucket\",\n \"expr\": \"datum.v == null ? 3 : (datum.v \u003e= 80 ? 2 : datum.v \u003e= 60 ? 1 : 0)\"\n },\n {\n \"type\": \"aggregate\",\n \"groupby\": [\n \"bucket\"\n ],\n \"ops\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ]\n }\n ]\n },\n {\n \"name\": \"storage_counts\",\n \"source\": \"raw_all\",\n \"transform\": [\n {\n \"type\": \"formula\",\n \"as\": \"v\",\n \"expr\": \"agg == 'min' ? datum.storage_min : agg == 'max' ? datum.storage_max : agg == 'avg' ? datum.storage_avg : agg == 'last' ? datum.storage_last : null\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"bucket\",\n \"expr\": \"datum.v == null ? 3 : (datum.v \u003e= 20 ? 2 : datum.v \u003e= 10 ? 1 : 0)\"\n },\n {\n \"type\": \"aggregate\",\n \"groupby\": [\n \"bucket\"\n ],\n \"ops\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ]\n }\n ]\n },\n {\n \"name\": \"cpu_legend_stops\",\n \"values\": [\n {\n \"label\": \"≥ 80%\",\n \"val\": 90,\n \"bucket\": 2,\n \"is_nodata\": false\n },\n {\n \"label\": \"60 – 79%\",\n \"val\": 70,\n \"bucket\": 1,\n \"is_nodata\": false\n },\n {\n \"label\": \"\u003c 60%\",\n \"val\": 0,\n \"bucket\": 0,\n \"is_nodata\": false\n },\n {\n \"label\": \"Unknown\",\n \"val\": null,\n \"bucket\": 3,\n \"is_nodata\": true\n }\n ],\n \"transform\": [\n {\n \"type\": \"lookup\",\n \"from\": \"cpu_counts\",\n \"key\": \"bucket\",\n \"fields\": [\n \"bucket\"\n ],\n \"values\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ],\n \"default\": 0\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"idx\"\n ]\n }\n ]\n },\n {\n \"name\": \"storage_legend_stops\",\n \"values\": [\n {\n \"label\": \"\u003c 10 GB\",\n \"val\": 2,\n \"bucket\": 0,\n \"is_nodata\": false\n },\n {\n \"label\": \"10 – 19 GB\",\n \"val\": 15,\n \"bucket\": 1,\n \"is_nodata\": false\n },\n {\n \"label\": \"≥ 20 GB\",\n \"val\": 50,\n \"bucket\": 2,\n \"is_nodata\": false\n },\n {\n \"label\": \"Unknown\",\n \"val\": null,\n \"bucket\": 3,\n \"is_nodata\": true\n }\n ],\n \"transform\": [\n {\n \"type\": \"lookup\",\n \"from\": \"storage_counts\",\n \"key\": \"bucket\",\n \"fields\": [\n \"bucket\"\n ],\n \"values\": [\n \"count\"\n ],\n \"as\": [\n \"count\"\n ],\n \"default\": 0\n },\n {\n \"type\": \"window\",\n \"ops\": [\n \"row_number\"\n ],\n \"as\": [\n \"idx\"\n ]\n }\n ]\n },\n {\n \"name\": \"spinner_dots\",\n \"values\": [\n {\n \"i\": 0\n },\n {\n \"i\": 1\n },\n {\n \"i\": 2\n },\n {\n \"i\": 3\n },\n {\n \"i\": 4\n },\n {\n \"i\": 5\n },\n {\n \"i\": 6\n },\n {\n \"i\": 7\n }\n ]\n },\n {\n \"name\": \"pills\",\n \"values\": [\n {\n \"id\": \"status\",\n \"label\": \"Status\",\n \"group\": \"metric\",\n \"x\": 69,\n \"w\": 48,\n \"available_aggs\": [],\n \"default_agg\": \"last\"\n },\n {\n \"id\": \"cpu\",\n \"label\": \"CPU %\",\n \"group\": \"metric\",\n \"x\": 125,\n \"w\": 58,\n \"available_aggs\": [\n \"min\",\n \"max\",\n \"avg\",\n \"last\"\n ],\n \"default_agg\": \"last\"\n },\n {\n \"id\": \"storage\",\n \"label\": \"Free Storage (GB)\",\n \"group\": \"metric\",\n \"x\": 191,\n \"w\": 128,\n \"available_aggs\": [\n \"min\",\n \"max\",\n \"avg\",\n \"last\"\n ],\n \"default_agg\": \"last\"\n },\n {\n \"id\": \"min\",\n \"label\": \"Min\",\n \"group\": \"agg\",\n \"x\": 425,\n \"w\": 36,\n \"valid_for\": [\n \"cpu\",\n \"storage\"\n ]\n },\n {\n \"id\": \"max\",\n \"label\": \"Max\",\n \"group\": \"agg\",\n \"x\": 465,\n \"w\": 36,\n \"valid_for\": [\n \"cpu\",\n \"storage\"\n ]\n },\n {\n \"id\": \"avg\",\n \"label\": \"Avg\",\n \"group\": \"agg\",\n \"x\": 505,\n \"w\": 36,\n \"valid_for\": [\n \"cpu\",\n \"storage\"\n ]\n },\n {\n \"id\": \"last\",\n \"label\": \"Last\",\n \"group\": \"agg\",\n \"x\": 545,\n \"w\": 40,\n \"valid_for\": [\n \"cpu\",\n \"storage\"\n ]\n },\n {\n \"id\": \"sum\",\n \"label\": \"Sum\",\n \"group\": \"agg\",\n \"x\": 589,\n \"w\": 40,\n \"valid_for\": []\n }\n ]\n },\n {\n \"name\": \"menu_items_data\",\n \"values\": [\n {\n \"id\": \"details\",\n \"label\": \"View details\",\n \"idx\": 0\n },\n {\n \"id\": \"metrics\",\n \"label\": \"View metrics in Discover\",\n \"idx\": 1\n }\n ]\n },\n {\n \"name\": \"menu_visible\",\n \"values\": [\n {\n \"_\": 0\n }\n ],\n \"transform\": [\n {\n \"type\": \"filter\",\n \"expr\": \"selected_entity != null\"\n }\n ]\n },\n {\n \"name\": \"menu_items_visible\",\n \"source\": \"menu_items_data\",\n \"transform\": [\n {\n \"type\": \"filter\",\n \"expr\": \"selected_entity != null\"\n }\n ]\n },\n {\n \"name\": \"spark_raw\",\n \"url\": {\n \"%type%\": \"esql\",\n \"%context%\": true,\n \"%timefield%\": \"@timestamp\",\n \"query\": \"SET unmapped_fields = \\\"nullify\\\";\\nFROM metrics-aws.rds.otel-* | WHERE @timestamp \u003e= ?_tstart AND @timestamp \u003c= ?_tend AND DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \\\"\\\" | STATS s_cpu = AVG(CASE(stat == \\\"Average\\\", `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL)), s_storage = AVG(CASE(stat == \\\"Average\\\", `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)) BY entity_id = DBInstanceIdentifier, t = BUCKET(@timestamp, 40, ?_tstart, ?_tend) | SORT entity_id, t | LIMIT 10000\"\n }\n },\n {\n \"name\": \"spark_series\",\n \"source\": \"spark_raw\",\n \"transform\": [\n {\n \"type\": \"filter\",\n \"expr\": \"tooltip \u0026\u0026 tooltip.entity_id \u0026\u0026 metric != 'status' \u0026\u0026 datum.entity_id === tooltip.entity_id\"\n },\n {\n \"type\": \"formula\",\n \"as\": \"v\",\n \"expr\": \"metric == 'cpu' ? datum.s_cpu : metric == 'storage' ? datum.s_storage : datum.s_cpu\"\n },\n {\n \"type\": \"collect\",\n \"sort\": {\n \"field\": \"t\",\n \"order\": \"ascending\"\n }\n }\n ]\n },\n {\n \"name\": \"spark_stat\",\n \"source\": \"spark_series\",\n \"transform\": [\n {\n \"type\": \"aggregate\",\n \"fields\": [\n \"v\",\n \"v\",\n \"v\"\n ],\n \"ops\": [\n \"max\",\n \"mean\",\n \"valid\"\n ],\n \"as\": [\n \"vmax\",\n \"vavg\",\n \"vn\"\n ]\n }\n ]\n }\n ],\n \"signals\": [\n {\n \"name\": \"metric\",\n \"value\": \"status\",\n \"on\": [\n {\n \"events\": \"@pill_bg:click\",\n \"update\": \"datum.group === 'metric' ? datum.id : metric\"\n }\n ]\n },\n {\n \"name\": \"agg\",\n \"value\": \"last\",\n \"on\": [\n {\n \"events\": \"@pill_bg:click\",\n \"update\": \"datum.group === 'agg' \u0026\u0026 metric !== 'status' \u0026\u0026 indexof(datum.valid_for, metric) \u003e= 0 ? datum.id : ( datum.group === 'metric' \u0026\u0026 datum.id !== 'status' ? (indexof(datum.available_aggs, agg) \u003e= 0 ? agg : datum.default_agg) : agg )\"\n }\n ]\n },\n {\n \"name\": \"effective_agg\",\n \"update\": \"metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'\"\n },\n {\n \"name\": \"groupHeaderH\",\n \"value\": 20\n },\n {\n \"name\": \"groupGap\",\n \"value\": 10\n },\n {\n \"name\": \"group_by\",\n \"value\": \"none\"\n },\n {\n \"name\": \"len_raw\",\n \"update\": \"length(data('raw_all'))\"\n },\n {\n \"name\": \"len_active\",\n \"update\": \"length(data('active'))\"\n },\n {\n \"name\": \"ts_round\",\n \"update\": \"data('ts_probe')[0] ? data('ts_probe')[0].round_key : ''\"\n },\n {\n \"name\": \"time_from\",\n \"update\": \"ts_round !== '' \u0026\u0026 indexof(ts_round, '|') \u003e 0 ? slice(ts_round, 0, indexof(ts_round, '|')) : ''\"\n },\n {\n \"name\": \"time_to\",\n \"update\": \"ts_round !== '' \u0026\u0026 indexof(ts_round, '|') \u003e 0 ? slice(ts_round, indexof(ts_round, '|') + 1) : ''\"\n },\n {\n \"name\": \"g_param\",\n \"update\": \"time_from !== '' \u0026\u0026 time_to !== '' ? '_g=(time:(from:%27' + time_from + '%27,to:%27' + time_to + '%27))\u0026' : ''\"\n },\n {\n \"name\": \"raw_round\",\n \"update\": \"data('raw_all')[0] ? data('raw_all')[0].round_key : ''\"\n },\n {\n \"name\": \"active_round\",\n \"update\": \"raw_round\"\n },\n {\n \"name\": \"raw_fetched_str\",\n \"update\": \"data('raw_all')[0] ? data('raw_all')[0].fetched_at : ''\"\n },\n {\n \"name\": \"active_fetched\",\n \"update\": \"raw_fetched_str !== '' ? toDate(raw_fetched_str) : 0\"\n },\n {\n \"name\": \"tick\",\n \"value\": 0,\n \"on\": [\n {\n \"events\": {\n \"type\": \"timer\",\n \"throttle\": 100\n },\n \"update\": \"now()\"\n }\n ]\n },\n {\n \"name\": \"url_change_at\",\n \"value\": 0,\n \"on\": [\n {\n \"events\": {\n \"source\": \"window\",\n \"type\": \"hashchange\"\n },\n \"update\": \"now()\"\n },\n {\n \"events\": {\n \"source\": \"window\",\n \"type\": \"popstate\"\n },\n \"update\": \"now()\"\n }\n ]\n },\n {\n \"name\": \"fetch_tracker\",\n \"init\": \"{seen: 0, arrived_at: 0}\",\n \"on\": [\n {\n \"events\": {\n \"signal\": \"tick\"\n },\n \"update\": \"active_fetched \u003e 0 \u0026\u0026 active_fetched !== fetch_tracker.seen ? {seen: active_fetched, arrived_at: tick} : fetch_tracker\"\n }\n ]\n },\n {\n \"name\": \"loading_raw\",\n \"update\": \"len_active === 0 || ts_round === '' || active_round === '' || active_round !== ts_round || (url_change_at \u003e 0 \u0026\u0026 fetch_tracker.arrived_at \u003c url_change_at)\"\n },\n {\n \"name\": \"loading_started_at\",\n \"value\": 0,\n \"on\": [\n {\n \"events\": {\n \"signal\": \"tick\"\n },\n \"update\": \"loading_raw ? (loading_started_at === 0 ? tick : loading_started_at) : 0\"\n }\n ]\n },\n {\n \"name\": \"loading_elapsed\",\n \"update\": \"loading_started_at \u003e 0 ? tick - loading_started_at : 0\"\n },\n {\n \"name\": \"no_data\",\n \"update\": \"loading_raw \u0026\u0026 ts_round !== '' \u0026\u0026 len_raw === 0 \u0026\u0026 loading_elapsed \u003e 2000\"\n },\n {\n \"name\": \"loading\",\n \"update\": \"loading_raw \u0026\u0026 !no_data\"\n },\n {\n \"name\": \"loading_timeout\",\n \"update\": \"loading \u0026\u0026 loading_elapsed \u003e 15000\"\n },\n {\n \"name\": \"total_entities\",\n \"update\": \"len_raw\"\n },\n {\n \"name\": \"legendW\",\n \"value\": 138\n },\n {\n \"name\": \"buttonsH\",\n \"value\": 34\n },\n {\n \"name\": \"availW\",\n \"update\": \"width - 20 - legendW\"\n },\n {\n \"name\": \"n_groups\",\n \"value\": 0\n },\n {\n \"name\": \"availH\",\n \"update\": \"height - 20 - buttonsH - (group_by !== 'none' ? n_groups * (groupHeaderH + groupGap) : 0)\"\n },\n {\n \"name\": \"hexOffsetY\",\n \"update\": \"buttonsH\"\n },\n {\n \"name\": \"idealCols\",\n \"update\": \"total_entities \u003e 0 \u0026\u0026 availH \u003e 0 ? max(1, round(sqrt(total_entities * (availW / availH)))) : 1\"\n },\n {\n \"name\": \"idealRows\",\n \"update\": \"max(1, ceil(total_entities / idealCols))\"\n },\n {\n \"name\": \"hexRInitial\",\n \"update\": \"min(availW / (idealCols * 2 + 0), availH / (idealRows * 2 + 0))\"\n },\n {\n \"name\": \"maxColsAtHexR\",\n \"update\": \"max(idealCols, floor(availW / (max(3, hexRInitial) * 2)))\"\n },\n {\n \"name\": \"maxColsAtMinR\",\n \"update\": \"max(1, floor(availW / (3 * 2)))\"\n },\n {\n \"name\": \"gridCols\",\n \"update\": \"max(1, min(total_entities, min(maxColsAtHexR, maxColsAtMinR)))\"\n },\n {\n \"name\": \"gridRows\",\n \"update\": \"group_by === 'none' ? max(1, ceil(total_entities / gridCols)) : max(1, ceil(total_entities / gridCols) + max(0, n_groups - 1))\"\n },\n {\n \"name\": \"rByWidth\",\n \"update\": \"availW / (gridCols * 1.76 + 0.88)\"\n },\n {\n \"name\": \"rByHeight\",\n \"update\": \"availH / (gridRows * 1.54 + 0.92)\"\n },\n {\n \"name\": \"hexR\",\n \"update\": \"max(3, min(90, min(rByWidth, rByHeight)))\"\n },\n {\n \"name\": \"gapX\",\n \"update\": \"hexR * 1.76\"\n },\n {\n \"name\": \"gapY\",\n \"update\": \"hexR * 1.54\"\n },\n {\n \"name\": \"legendX\",\n \"update\": \"width - legendW + 4\"\n },\n {\n \"name\": \"tooltip\",\n \"value\": {},\n \"on\": [\n {\n \"events\": \"@hexagons:mouseover\",\n \"update\": \"datum\"\n },\n {\n \"events\": \"@hexagons:mouseout\",\n \"update\": \"{}\"\n }\n ]\n },\n {\n \"name\": \"selected_entity\",\n \"value\": null,\n \"on\": [\n {\n \"events\": \"@hexagons:click\",\n \"update\": \"{id: datum.entity_id, x: datum.x, y: datum.y}\"\n },\n {\n \"events\": \"@menu_backdrop:click\",\n \"update\": \"null\"\n },\n {\n \"events\": \"@menu_item_bg:click\",\n \"update\": \"null\"\n }\n ]\n },\n {\n \"name\": \"menu_x\",\n \"update\": \"selected_entity ? ((selected_entity.x + hexR + 4 + 248 \u003e width - legendW - 4) ? max(4, selected_entity.x - hexR - 248 - 4) : max(4, selected_entity.x + hexR + 4)) : 0\"\n },\n {\n \"name\": \"menu_y\",\n \"update\": \"selected_entity ? max(5, min(selected_entity.y - 30, height - (90 + menu_hoff) - 6)) : 0\"\n },\n {\n \"name\": \"tt_off\",\n \"update\": \"tooltip.entity_id ? (length(tooltip.entity_id) \u003c= 36 ? 0 : 14) : 0\"\n },\n {\n \"name\": \"spark_avg\",\n \"update\": \"length(data('spark_stat')) ? data('spark_stat')[0].vavg : null\"\n },\n {\n \"name\": \"spark_last\",\n \"update\": \"length(data('spark_series')) ? data('spark_series')[length(data('spark_series')) - 1].v : null\"\n },\n {\n \"name\": \"spark_delta\",\n \"update\": \"(spark_avg != null \u0026\u0026 spark_avg != 0 \u0026\u0026 spark_last != null) ? (spark_last - spark_avg) / spark_avg * 100 : null\"\n },\n {\n \"name\": \"spark_top\",\n \"update\": \"tt_off + 91\"\n },\n {\n \"name\": \"spark_bottom\",\n \"update\": \"tt_off + 121\"\n },\n {\n \"name\": \"menu_hoff\",\n \"update\": \"selected_entity ? (length(selected_entity.id) \u003e 36 ? 14 : 0) : 0\"\n }\n ],\n \"scales\": [\n {\n \"name\": \"status_color\",\n \"type\": \"ordinal\",\n \"domain\": [\n 0,\n 1,\n 2,\n 3\n ],\n \"range\": [\n \"#F6726A\",\n \"#FCD883\",\n \"#24C292\",\n \"#BFDBFF\"\n ]\n },\n {\n \"name\": \"cpu_color\",\n \"type\": \"threshold\",\n \"domain\": [\n 60,\n 80\n ],\n \"range\": [\n \"#24C292\",\n \"#FCD883\",\n \"#F6726A\"\n ]\n },\n {\n \"name\": \"storage_color\",\n \"type\": \"threshold\",\n \"domain\": [\n 10,\n 20\n ],\n \"range\": [\n \"#F6726A\",\n \"#FCD883\",\n \"#24C292\"\n ]\n },\n {\n \"name\": \"sparkX\",\n \"type\": \"point\",\n \"range\": [\n 14,\n 276\n ],\n \"domain\": {\n \"data\": \"spark_series\",\n \"field\": \"t\"\n }\n },\n {\n \"name\": \"sparkY\",\n \"type\": \"linear\",\n \"nice\": false,\n \"range\": [\n {\n \"signal\": \"spark_bottom\"\n },\n {\n \"signal\": \"spark_top\"\n }\n ],\n \"domain\": {\n \"signal\": \"[0, length(data('spark_stat')) \u0026\u0026 data('spark_stat')[0].vmax \u003e 0 ? data('spark_stat')[0].vmax : 1]\"\n }\n }\n ],\n \"marks\": [\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 5\n },\n \"y\": {\n \"value\": 17\n },\n \"text\": {\n \"value\": \"Color by:\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": 600\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 345\n },\n \"y\": {\n \"value\": 17\n },\n \"text\": {\n \"value\": \"Aggregation:\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": 600\n },\n \"fill\": {\n \"value\": \"#838C99\"\n },\n \"opacity\": {\n \"signal\": \"(metric === 'cpu' || metric === 'storage') ? 1 : 0.5\"\n }\n }\n }\n },\n {\n \"name\": \"pill_bg\",\n \"type\": \"rect\",\n \"from\": {\n \"data\": \"pills\"\n },\n \"encode\": {\n \"enter\": {},\n \"update\": {\n \"x\": {\n \"field\": \"x\"\n },\n \"x2\": {\n \"signal\": \"datum.x + datum.w\"\n },\n \"y\": {\n \"value\": 6\n },\n \"y2\": {\n \"value\": 28\n },\n \"cornerRadius\": {\n \"value\": 4\n },\n \"fill\": {\n \"signal\": \"((datum.group === 'metric' \u0026\u0026 datum.id === metric) || (datum.group === 'agg' \u0026\u0026 datum.id === effective_agg)) ? '#0077CC' : 'transparent'\"\n },\n \"stroke\": {\n \"signal\": \"((datum.group === 'metric' \u0026\u0026 datum.id === metric) || (datum.group === 'agg' \u0026\u0026 datum.id === effective_agg)) ? '#0064B0' : '#838C99'\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"opacity\": {\n \"signal\": \"(datum.group === 'agg' \u0026\u0026 (!(metric === 'cpu' || metric === 'storage') || indexof(datum.valid_for, metric) \u003c 0)) ? 0.5 : 1\"\n },\n \"cursor\": {\n \"signal\": \"(datum.group === 'agg' \u0026\u0026 (!(metric === 'cpu' || metric === 'storage') || indexof(datum.valid_for, metric) \u003c 0)) ? 'default' : 'pointer'\"\n }\n }\n }\n },\n {\n \"name\": \"pill_label\",\n \"type\": \"text\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"pills\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"datum.x + datum.w / 2\"\n },\n \"y\": {\n \"value\": 17\n },\n \"text\": {\n \"field\": \"label\"\n },\n \"align\": {\n \"value\": \"center\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": 500\n },\n \"fill\": {\n \"signal\": \"((datum.group === 'metric' \u0026\u0026 datum.id === metric) || (datum.group === 'agg' \u0026\u0026 datum.id === effective_agg)) ? '#FFFFFF' : '#838C99'\"\n },\n \"opacity\": {\n \"signal\": \"(datum.group === 'agg' \u0026\u0026 (!(metric === 'cpu' || metric === 'storage') || indexof(datum.valid_for, metric) \u003c 0)) ? 0.5 : 1\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"width - legendW - 4\"\n },\n \"y\": {\n \"value\": 17\n },\n \"text\": {\n \"signal\": \"total_entities === 0 ? '' : (total_entities \u003c 10000 ? 'Showing ' + total_entities + ' databases' : 'Showing top 10,000 databases (limit reached)')\"\n },\n \"align\": {\n \"value\": \"right\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n }\n }\n },\n {\n \"name\": \"hexagons\",\n \"type\": \"symbol\",\n \"from\": {\n \"data\": \"entities\"\n },\n \"encode\": {\n \"enter\": {\n \"cursor\": {\n \"value\": \"pointer\"\n }\n },\n \"update\": {\n \"x\": {\n \"field\": \"x\"\n },\n \"y\": {\n \"field\": \"y\"\n },\n \"size\": {\n \"field\": \"hexSize\"\n },\n \"fill\": [\n {\n \"test\": \"metric == 'status'\",\n \"scale\": \"status_color\",\n \"field\": \"status_num\"\n },\n {\n \"test\": \"datum.active_val == null\",\n \"value\": \"#BFDBFF\"\n },\n {\n \"test\": \"metric == 'cpu'\",\n \"scale\": \"cpu_color\",\n \"field\": \"active_val\"\n },\n {\n \"test\": \"metric == 'storage'\",\n \"scale\": \"storage_color\",\n \"field\": \"active_val\"\n },\n {\n \"value\": \"#BFDBFF\"\n }\n ],\n \"fillOpacity\": {\n \"value\": 0.92\n },\n \"shape\": {\n \"value\": \"M0,-1L0.866,-0.5L0.866,0.5L0,1L-0.866,0.5L-0.866,-0.5Z\"\n },\n \"strokeWidth\": [\n {\n \"test\": \"selected_entity \u0026\u0026 selected_entity.id === datum.entity_id\",\n \"value\": 3.5\n },\n {\n \"test\": \"tooltip.entity_id === datum.entity_id\",\n \"value\": 3\n },\n {\n \"value\": 1\n }\n ],\n \"stroke\": [\n {\n \"test\": \"selected_entity \u0026\u0026 selected_entity.id === datum.entity_id\",\n \"value\": \"#0077CC\"\n },\n {\n \"test\": \"tooltip.entity_id === datum.entity_id\",\n \"value\": \"#222\"\n },\n {\n \"value\": \"#FFFFFF\"\n }\n ],\n \"strokeOpacity\": [\n {\n \"test\": \"selected_entity \u0026\u0026 selected_entity.id === datum.entity_id\",\n \"value\": 1\n },\n {\n \"test\": \"tooltip.entity_id === datum.entity_id\",\n \"value\": 1\n },\n {\n \"value\": 0.3\n }\n ]\n }\n }\n },\n {\n \"name\": \"hex_hover\",\n \"type\": \"symbol\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"entities\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"field\": \"x\"\n },\n \"y\": {\n \"field\": \"y\"\n },\n \"size\": {\n \"field\": \"hexSize\"\n },\n \"shape\": {\n \"value\": \"M0,-1L0.866,-0.5L0.866,0.5L0,1L-0.866,0.5L-0.866,-0.5Z\"\n },\n \"fill\": {\n \"value\": \"#FFFFFF\"\n },\n \"fillOpacity\": {\n \"signal\": \"tooltip.entity_id === datum.entity_id ? 0.22 : 0\"\n }\n }\n }\n },\n {\n \"type\": \"group\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"legendX\"\n },\n \"y\": {\n \"signal\": \"buttonsH + 8\"\n }\n }\n },\n \"marks\": [\n {\n \"type\": \"text\",\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 0\n },\n \"y\": {\n \"value\": 0\n },\n \"text\": {\n \"value\": \"Status\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"opacity\": [\n {\n \"test\": \"metric == 'status'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"from\": {\n \"data\": \"status_legend\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 6\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"size\": {\n \"value\": 110\n },\n \"shape\": {\n \"value\": \"circle\"\n },\n \"fill\": {\n \"scale\": \"status_color\",\n \"field\": \"val\"\n }\n },\n \"update\": {\n \"opacity\": [\n {\n \"test\": \"metric == 'status'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"text\",\n \"from\": {\n \"data\": \"status_legend\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 18\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"datum.label + ' (' + datum.count + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'status'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n }\n ]\n },\n {\n \"type\": \"group\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"legendX\"\n },\n \"y\": {\n \"signal\": \"buttonsH + 8\"\n }\n }\n },\n \"marks\": [\n {\n \"type\": \"text\",\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 0\n },\n \"y\": {\n \"value\": 0\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"'CPU% (' + agg + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'cpu'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"from\": {\n \"data\": \"cpu_legend_stops\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 6\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"size\": {\n \"value\": 110\n },\n \"shape\": {\n \"value\": \"circle\"\n }\n },\n \"update\": {\n \"fill\": [\n {\n \"test\": \"datum.is_nodata\",\n \"value\": \"#BFDBFF\"\n },\n {\n \"scale\": \"cpu_color\",\n \"field\": \"val\"\n }\n ],\n \"opacity\": [\n {\n \"test\": \"metric == 'cpu'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"text\",\n \"from\": {\n \"data\": \"cpu_legend_stops\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 18\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"datum.label + ' (' + datum.count + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'cpu'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n }\n ]\n },\n {\n \"type\": \"group\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"legendX\"\n },\n \"y\": {\n \"signal\": \"buttonsH + 8\"\n }\n }\n },\n \"marks\": [\n {\n \"type\": \"text\",\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 0\n },\n \"y\": {\n \"value\": 0\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"'Free storage (' + agg + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'storage'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"from\": {\n \"data\": \"storage_legend_stops\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 6\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"size\": {\n \"value\": 110\n },\n \"shape\": {\n \"value\": \"circle\"\n }\n },\n \"update\": {\n \"fill\": [\n {\n \"test\": \"datum.is_nodata\",\n \"value\": \"#BFDBFF\"\n },\n {\n \"scale\": \"storage_color\",\n \"field\": \"val\"\n }\n ],\n \"opacity\": [\n {\n \"test\": \"metric == 'storage'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n },\n {\n \"type\": \"text\",\n \"from\": {\n \"data\": \"storage_legend_stops\"\n },\n \"encode\": {\n \"enter\": {\n \"x\": {\n \"value\": 18\n },\n \"y\": {\n \"signal\": \"28 + (datum.idx - 1) * 22\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 11\n },\n \"fill\": {\n \"value\": \"#838C99\"\n }\n },\n \"update\": {\n \"text\": {\n \"signal\": \"datum.label + ' (' + datum.count + ')'\"\n },\n \"opacity\": [\n {\n \"test\": \"metric == 'storage'\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ]\n }\n }\n }\n ]\n },\n {\n \"type\": \"group\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"tooltip.x + 18 + 290 \u003e width - legendW - 10 ? max(tooltip.x - 18 - 290, 5) : tooltip.x + 18\"\n },\n \"y\": {\n \"signal\": \"max(5, min(tooltip.y - 30, height - (tooltip.entity_id ? ((length(tooltip.entity_id) \u003c= 36 ? 0 : 14) + (metric == 'status' ? 127 : 197)) : 110) - 6))\"\n },\n \"width\": {\n \"value\": 290\n },\n \"height\": {\n \"signal\": \"tooltip.entity_id ? ((length(tooltip.entity_id) \u003c= 36 ? 0 : 14) + (metric == 'status' ? 127 : 197)) : 110\"\n },\n \"opacity\": [\n {\n \"test\": \"(tooltip.entity_id) \u0026\u0026 !selected_entity\",\n \"value\": 1\n },\n {\n \"value\": 0\n }\n ],\n \"fill\": {\n \"value\": \"#0E1728\"\n },\n \"stroke\": {\n \"value\": \"#2A3144\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"cornerRadius\": {\n \"value\": 8\n }\n }\n },\n \"marks\": [\n {\n \"type\": \"rect\",\n \"name\": \"spark_hl\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 8\n },\n \"width\": {\n \"value\": 274\n },\n \"y\": {\n \"signal\": \"tt_off + 62\"\n },\n \"height\": {\n \"value\": 63\n },\n \"fill\": {\n \"value\": \"#5A6B8C\"\n },\n \"fillOpacity\": {\n \"value\": 0.16\n },\n \"cornerRadius\": {\n \"value\": 6\n },\n \"opacity\": {\n \"signal\": \"(tooltip.entity_id \u0026\u0026 metric != 'status') ? 1 : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"value\": 12\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) \u003c= 36 ? [tooltip.entity_id] : [slice(tooltip.entity_id, 0, 36), slice(tooltip.entity_id, 36)]) : ['']\"\n },\n \"fontSize\": {\n \"value\": 13\n },\n \"lineHeight\": {\n \"value\": 15\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#fff\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) \u003c= 36 ? 30 : 44) : 30\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? 'Engine: ' + tooltip.engine : ''\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontWeight\": {\n \"value\": \"normal\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"value\": \"#9da4b3\"\n }\n }\n }\n },\n {\n \"type\": \"rule\",\n \"name\": \"tooltip_divider\",\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"x2\": {\n \"value\": 278\n },\n \"y\": {\n \"signal\": \"tooltip.entity_id ? (length(tooltip.entity_id) \u003c= 36 ? 47 : 61) : 47\"\n },\n \"stroke\": {\n \"value\": \"#39415a\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"opacity\": {\n \"signal\": \"tooltip.entity_id ? 0.5 : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tt_off + (metric == 'status' ? 56 : 133)\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? 'Status: ' + tooltip.status_label : ''\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontWeight\": [\n {\n \"test\": \"metric == 'status'\",\n \"value\": \"bold\"\n },\n {\n \"value\": \"normal\"\n }\n ],\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"signal\": \"metric == 'status' ? (tooltip.status_num == 0 ? '#F6726A' : tooltip.status_num == 1 ? '#FCD883' : tooltip.status_num == 2 ? '#24C292' : '#BFDBFF') : '#9da4b3'\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tt_off + (metric == 'status' ? 73 : (metric == 'cpu' ? 67 : 150))\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? 'CPU% (' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last') + '): ' + (tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] != null ? format(tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))], '.1f') + '%' : 'no data') : ''\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontWeight\": [\n {\n \"test\": \"metric == 'cpu'\",\n \"value\": \"bold\"\n },\n {\n \"value\": \"normal\"\n }\n ],\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"signal\": \"metric == 'cpu' ? (tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] == null ? '#9da4b3' : tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] \u003e= 80 ? '#F6726A' : tooltip[('cpu_' + (metric === 'cpu' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] \u003e= 60 ? '#FCD883' : '#24C292') : '#9da4b3'\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tt_off + (metric == 'status' ? 90 : (metric == 'storage' ? 67 : 150))\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? 'Free Storage (' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last') + '): ' + (tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] != null ? format(tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))], '.1f') + ' GB' : 'no data') : ''\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontWeight\": [\n {\n \"test\": \"metric == 'storage'\",\n \"value\": \"bold\"\n },\n {\n \"value\": \"normal\"\n }\n ],\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"signal\": \"metric == 'storage' ? (tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] == null ? '#9da4b3' : tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] \u003e= 20 ? '#24C292' : tooltip[('storage_' + (metric === 'storage' ? ((agg === 'min' || agg === 'max' || agg === 'avg' || agg === 'last') ? agg : 'last') : 'last'))] \u003e= 10 ? '#FCD883' : '#F6726A') : '#9da4b3'\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"name\": \"click_row\",\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 12\n },\n \"y\": {\n \"signal\": \"tt_off + (metric == 'status' ? 110 : 178)\"\n },\n \"text\": {\n \"signal\": \"tooltip.entity_id ? 'Click an hexagon to drill down' : ''\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontStyle\": {\n \"value\": \"italic\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"value\": \"#9da4b3\"\n }\n }\n }\n },\n {\n \"type\": \"area\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"spark_series\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"scale\": \"sparkX\",\n \"field\": \"t\"\n },\n \"y\": {\n \"scale\": \"sparkY\",\n \"field\": \"v\"\n },\n \"y2\": {\n \"signal\": \"spark_bottom\"\n },\n \"fill\": {\n \"signal\": \"metric == 'cpu' ? scale('cpu_color', tooltip.active_val) : (metric == 'storage' ? scale('storage_color', tooltip.active_val) : '#61a2ff')\"\n },\n \"fillOpacity\": {\n \"signal\": \"length(data('spark_stat')) \u0026\u0026 data('spark_stat')[0].vmax \u003e 0 ? 0.18 : 0\"\n },\n \"interpolate\": {\n \"value\": \"monotone\"\n },\n \"defined\": {\n \"signal\": \"datum.v != null\"\n }\n }\n }\n },\n {\n \"type\": \"line\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"spark_series\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"scale\": \"sparkX\",\n \"field\": \"t\"\n },\n \"y\": {\n \"scale\": \"sparkY\",\n \"field\": \"v\"\n },\n \"stroke\": {\n \"signal\": \"metric == 'cpu' ? scale('cpu_color', tooltip.active_val) : (metric == 'storage' ? scale('storage_color', tooltip.active_val) : '#61a2ff')\"\n },\n \"strokeWidth\": {\n \"value\": 1.75\n },\n \"interpolate\": {\n \"value\": \"monotone\"\n },\n \"defined\": {\n \"signal\": \"datum.v != null\"\n }\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"spark_series\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"scale\": \"sparkX\",\n \"field\": \"t\"\n },\n \"y\": {\n \"scale\": \"sparkY\",\n \"field\": \"v\"\n },\n \"size\": {\n \"value\": 18\n },\n \"fill\": {\n \"signal\": \"metric == 'cpu' ? scale('cpu_color', tooltip.active_val) : (metric == 'storage' ? scale('storage_color', tooltip.active_val) : '#61a2ff')\"\n },\n \"opacity\": {\n \"signal\": \"(length(data('spark_stat')) \u0026\u0026 data('spark_stat')[0].vn == 1 \u0026\u0026 datum.v != null) ? 1 : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"value\": 276\n },\n \"y\": {\n \"signal\": \"tt_off + 67\"\n },\n \"align\": {\n \"value\": \"right\"\n },\n \"text\": {\n \"signal\": \"(tooltip.entity_id \u0026\u0026 metric != 'status' \u0026\u0026 spark_delta != null) ? ('last vs avg ' + (spark_delta \u003e= 0 ? '+' : '') + format(spark_delta, '.1f') + '%') : ''\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fill\": {\n \"value\": \"#c3c8d4\"\n }\n }\n }\n }\n ]\n },\n {\n \"type\": \"rect\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2 - 120\"\n },\n \"x2\": {\n \"signal\": \"(width - legendW) / 2 + 120\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 - 45\"\n },\n \"y2\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 + 45\"\n },\n \"fill\": {\n \"value\": \"#1A1C21\"\n },\n \"fillOpacity\": {\n \"signal\": \"(loading || loading_timeout) ? 0.92 : 0\"\n },\n \"stroke\": {\n \"value\": \"#838C99\"\n },\n \"strokeOpacity\": {\n \"signal\": \"(loading || loading_timeout) ? 0.4 : 0\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"cornerRadius\": {\n \"value\": 12\n }\n }\n }\n },\n {\n \"type\": \"symbol\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"spinner_dots\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2 + 18 * cos(datum.i * PI / 4 - PI / 2)\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 - 8 + 18 * sin(datum.i * PI / 4 - PI / 2)\"\n },\n \"size\": {\n \"value\": 70\n },\n \"shape\": {\n \"value\": \"circle\"\n },\n \"fill\": {\n \"value\": \"#0077CC\"\n },\n \"opacity\": {\n \"signal\": \"loading ? 0.15 + 0.85 * (1 - (((floor(tick / 100) % 8) - datum.i + 8) % 8) / 7) : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 + 28\"\n },\n \"text\": {\n \"value\": \"Loading data…\"\n },\n \"align\": {\n \"value\": \"center\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontWeight\": {\n \"value\": 500\n },\n \"fill\": {\n \"value\": \"#FFFFFF\"\n },\n \"opacity\": {\n \"signal\": \"loading \u0026\u0026 !loading_timeout ? 1 : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2 + 28\"\n },\n \"text\": {\n \"value\": \"Still loading… (taking longer than usual)\"\n },\n \"align\": {\n \"value\": \"center\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fontWeight\": {\n \"value\": 500\n },\n \"fill\": {\n \"value\": \"#FFFFFF\"\n },\n \"opacity\": {\n \"signal\": \"loading_timeout ? 1 : 0\"\n }\n }\n }\n },\n {\n \"type\": \"text\",\n \"interactive\": false,\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"(width - legendW) / 2\"\n },\n \"y\": {\n \"signal\": \"buttonsH + (height - buttonsH) / 2\"\n },\n \"text\": {\n \"value\": \"No databases for the selected time range\"\n },\n \"align\": {\n \"value\": \"center\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 13\n },\n \"fontWeight\": {\n \"value\": 500\n },\n \"fill\": {\n \"value\": \"#838C99\"\n },\n \"opacity\": {\n \"signal\": \"no_data ? 1 : 0\"\n }\n }\n }\n },\n {\n \"name\": \"menu_backdrop\",\n \"type\": \"rect\",\n \"from\": {\n \"data\": \"menu_visible\"\n },\n \"encode\": {\n \"enter\": {\n \"cursor\": {\n \"value\": \"default\"\n }\n },\n \"update\": {\n \"x\": {\n \"value\": 0\n },\n \"y\": {\n \"value\": 0\n },\n \"x2\": {\n \"signal\": \"width\"\n },\n \"y2\": {\n \"signal\": \"height\"\n },\n \"fill\": {\n \"value\": \"#000000\"\n },\n \"fillOpacity\": {\n \"value\": 0\n }\n }\n }\n },\n {\n \"name\": \"menu_box\",\n \"type\": \"rect\",\n \"from\": {\n \"data\": \"menu_visible\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x\"\n },\n \"y\": {\n \"signal\": \"menu_y\"\n },\n \"width\": {\n \"value\": 248\n },\n \"height\": {\n \"signal\": \"90 + menu_hoff\"\n },\n \"fill\": {\n \"value\": \"#0E1728\"\n },\n \"stroke\": {\n \"value\": \"#2A3144\"\n },\n \"strokeWidth\": {\n \"value\": 1\n },\n \"cornerRadius\": {\n \"value\": 6\n }\n }\n }\n },\n {\n \"name\": \"menu_header\",\n \"type\": \"text\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"menu_visible\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x + 12\"\n },\n \"y\": {\n \"signal\": \"menu_y + 8\"\n },\n \"text\": {\n \"signal\": \"selected_entity ? (length(selected_entity.id) \u003c= 36 ? [selected_entity.id] : [slice(selected_entity.id, 0, 36), slice(selected_entity.id, 36)]) : ['']\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"top\"\n },\n \"fontSize\": {\n \"value\": 13\n },\n \"fontWeight\": {\n \"value\": \"bold\"\n },\n \"fill\": {\n \"value\": \"#FFFFFF\"\n },\n \"lineHeight\": {\n \"value\": 15\n }\n }\n }\n },\n {\n \"name\": \"menu_separator\",\n \"type\": \"rule\",\n \"from\": {\n \"data\": \"menu_visible\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x + 8\"\n },\n \"x2\": {\n \"signal\": \"menu_x + 240\"\n },\n \"y\": {\n \"signal\": \"menu_y + 26 + menu_hoff\"\n },\n \"stroke\": {\n \"value\": \"#2A3144\"\n },\n \"strokeWidth\": {\n \"value\": 1\n }\n }\n }\n },\n {\n \"name\": \"menu_item_bg\",\n \"type\": \"rect\",\n \"from\": {\n \"data\": \"menu_items_visible\"\n },\n \"encode\": {\n \"enter\": {\n \"cursor\": {\n \"value\": \"pointer\"\n }\n },\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x\"\n },\n \"y\": {\n \"signal\": \"menu_y + 30 + menu_hoff + datum.idx * 30\"\n },\n \"width\": {\n \"value\": 248\n },\n \"height\": {\n \"value\": 30\n },\n \"fill\": {\n \"value\": \"#0E1728\"\n },\n \"href\": {\n \"signal\": \"selected_entity ? (datum.id === 'details' ? ('/app/dashboards#/view/aws_rds_otel-36df60a8-6a6e-4f72-96ce-a3533d24901a?' + g_param + '_a=(filters:!((meta:(alias:!n,disabled:!f,index:%27metrics-*%27,key:DBInstanceIdentifier,negate:!f,params:(query:%27' + selected_entity.id + '%27),type:phrase),query:(match_phrase:(DBInstanceIdentifier:%27' + selected_entity.id + '%27)))),query:(language:kuery,query:%27%27))') : datum.id === 'metrics' ? ('/app/discover#/?_g=(time:(from:%27' + time_from + '%27,to:%27' + time_to + '%27))\u0026_a=(dataSource:(dataViewId:%27metrics-*%27,type:dataView),query:(language:kuery,query:%27' + 'DBInstanceIdentifier:%22' + selected_entity.id + '%22' + '%27))') : '') : ''\"\n },\n \"cornerRadiusBottomLeft\": {\n \"signal\": \"datum.idx === (length(data('menu_items_data')) - 1) ? 8 : 0\"\n },\n \"cornerRadiusBottomRight\": {\n \"signal\": \"datum.idx === (length(data('menu_items_data')) - 1) ? 8 : 0\"\n }\n },\n \"hover\": {\n \"fill\": {\n \"value\": \"#1A2640\"\n }\n }\n }\n },\n {\n \"name\": \"menu_item_label\",\n \"type\": \"text\",\n \"interactive\": false,\n \"from\": {\n \"data\": \"menu_items_visible\"\n },\n \"encode\": {\n \"update\": {\n \"x\": {\n \"signal\": \"menu_x + 14\"\n },\n \"y\": {\n \"signal\": \"menu_y + 30 + menu_hoff + datum.idx * 30 + 15.0\"\n },\n \"text\": {\n \"field\": \"label\"\n },\n \"align\": {\n \"value\": \"left\"\n },\n \"baseline\": {\n \"value\": \"middle\"\n },\n \"fontSize\": {\n \"value\": 12\n },\n \"fill\": {\n \"value\": \"#DFE5EF\"\n }\n }\n }\n }\n ],\n \"background\": \"transparent\",\n \"autosize\": {\n \"type\": \"fit\",\n \"contains\": \"padding\"\n }\n}" }, - { - "columnId": "c_read_lat", - "customLabel": true, - "fieldName": "c_read_lat", - "inMetricDimension": true, - "label": "Avg read latency (ms)", - "meta": { - "esType": "double", - "type": "number" - } + "title": "RDS databases — hexagon map", + "type": "vega", + "uiState": {} + }, + "title": "RDS databases — hexagon map (click an hex for actions)" + }, + "gridData": { + "h": 15, + "i": "rds-hexmap-0001-aaaa-bbbb-ccccdddd0000", + "sectionId": "aws-rds-list-section", + "w": 48, + "x": 0, + "y": 0 + }, + "panelIndex": "rds-hexmap-0001-aaaa-bbbb-ccccdddd0000", + "type": "legacy_vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "tbl-layer-tbl-instances": { + "columns": [ + { + "columnId": "DBInstanceIdentifier", + "customLabel": true, + "fieldName": "DBInstanceIdentifier", + "label": "DB instance", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "c_engine", + "customLabel": true, + "fieldName": "c_engine", + "inMetricDimension": true, + "label": "Engine", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "c_state_sort", + "customLabel": true, + "fieldName": "c_state_sort", + "inMetricDimension": true, + "label": "State order", + "meta": { + "esType": "integer", + "type": "number" + } + }, + { + "columnId": "c_state", + "customLabel": true, + "fieldName": "c_state", + "inMetricDimension": true, + "label": "State", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "c_account", + "customLabel": true, + "fieldName": "c_account", + "label": "Account", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "c_region", + "customLabel": true, + "fieldName": "c_region", + "label": "Region", + "meta": { + "esType": "keyword", + "type": "string" + } + }, + { + "columnId": "c_cpu", + "customLabel": true, + "fieldName": "c_cpu", + "inMetricDimension": true, + "label": "Avg CPU (%)", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + }, + { + "columnId": "c_conn", + "customLabel": true, + "fieldName": "c_conn", + "inMetricDimension": true, + "label": "Current connections", + "meta": { + "esType": "double", + "type": "number" + } + }, + { + "columnId": "c_mem", + "customLabel": true, + "fieldName": "c_mem", + "inMetricDimension": true, + "label": "Current free memory", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + }, + { + "columnId": "c_storage", + "customLabel": true, + "fieldName": "c_storage", + "inMetricDimension": true, + "label": "Current free storage", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + }, + { + "columnId": "c_read_iops", + "customLabel": true, + "fieldName": "c_read_iops", + "inMetricDimension": true, + "label": "Avg read IOPS", + "meta": { + "esType": "double", + "type": "number" + } + }, + { + "columnId": "c_write_iops", + "customLabel": true, + "fieldName": "c_write_iops", + "inMetricDimension": true, + "label": "Avg write IOPS", + "meta": { + "esType": "double", + "type": "number" + } + }, + { + "columnId": "c_read_lat", + "customLabel": true, + "fieldName": "c_read_lat", + "inMetricDimension": true, + "label": "Avg read latency (ms)", + "meta": { + "esType": "double", + "type": "number" + } + }, + { + "columnId": "c_write_lat", + "customLabel": true, + "fieldName": "c_write_lat", + "inMetricDimension": true, + "label": "Avg write latency (ms)", + "meta": { + "esType": "double", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n AND cloud.account.id IS NOT NULL\n| STATS\n c_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))) / 100.0,\n c_conn = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n c_mem = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeableMemory`, NULL))),\n c_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n c_read_iops = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReadIOPS`, NULL))),\n c_write_iops = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/WriteIOPS`, NULL))),\n c_read_lat = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReadLatency`, NULL))) * 1000,\n c_write_lat = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/WriteLatency`, NULL))) * 1000,\n state_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n state_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n c_binlog = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage`, NULL))),\n c_txid = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs`, NULL))),\n c_txlog = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration`, NULL))),\n c_replslot = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage`, NULL))),\n c_failedjobs = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FailedSQLServerAgentJobsCount`, NULL))),\n c_tempdb = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/TempDbDataFileUsage`, NULL))),\n c_swap = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/SwapUsage`, NULL)))\n BY DBInstanceIdentifier, c_account = cloud.account.id, c_region = cloud.region\n| EVAL\n c_engine = CASE(\n c_failedjobs IS NOT NULL OR c_tempdb IS NOT NULL, \"SQL Server\",\n c_txid IS NOT NULL OR c_txlog IS NOT NULL OR c_replslot IS NOT NULL, \"PostgreSQL\",\n c_binlog IS NOT NULL, \"MySQL / MariaDB\",\n c_swap IS NOT NULL, \"Oracle\",\n \"Other\"),\n c_state_sort = CASE(\n state_cpu IS NULL AND state_storage IS NULL, 4,\n state_cpu \u003e 80, 1,\n state_storage \u003c 10737418240, 2,\n 3),\n c_state = CASE(\n state_cpu IS NULL AND state_storage IS NULL, \"Unknown\",\n state_cpu \u003e 80, \"Saturated\",\n state_storage \u003c 10737418240, \"Low storage\",\n \"Healthy\")\n| SORT c_state_sort ASC" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n AND cloud.account.id IS NOT NULL\n| STATS\n c_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))) / 100.0,\n c_conn = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n c_mem = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeableMemory`, NULL))),\n c_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n c_read_iops = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReadIOPS`, NULL))),\n c_write_iops = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/WriteIOPS`, NULL))),\n c_read_lat = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReadLatency`, NULL))) * 1000,\n c_write_lat = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/WriteLatency`, NULL))) * 1000,\n state_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n state_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n c_binlog = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/BinLogDiskUsage`, NULL))),\n c_txid = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/MaximumUsedTransactionIDs`, NULL))),\n c_txlog = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/TransactionLogsGeneration`, NULL))),\n c_replslot = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReplicationSlotDiskUsage`, NULL))),\n c_failedjobs = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FailedSQLServerAgentJobsCount`, NULL))),\n c_tempdb = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/TempDbDataFileUsage`, NULL))),\n c_swap = MAX(max_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/SwapUsage`, NULL)))\n BY DBInstanceIdentifier, c_account = cloud.account.id, c_region = cloud.region\n| EVAL\n c_engine = CASE(\n c_failedjobs IS NOT NULL OR c_tempdb IS NOT NULL, \"SQL Server\",\n c_txid IS NOT NULL OR c_txlog IS NOT NULL OR c_replslot IS NOT NULL, \"PostgreSQL\",\n c_binlog IS NOT NULL, \"MySQL / MariaDB\",\n c_swap IS NOT NULL, \"Oracle\",\n \"Other\"),\n c_state_sort = CASE(\n state_cpu IS NULL AND state_storage IS NULL, 4,\n state_cpu \u003e 80, 1,\n state_storage \u003c 10737418240, 2,\n 3),\n c_state = CASE(\n state_cpu IS NULL AND state_storage IS NULL, \"Unknown\",\n state_cpu \u003e 80, \"Saturated\",\n state_storage \u003c 10737418240, \"Low storage\",\n \"Healthy\")\n| SORT c_state_sort ASC" + }, + "visualization": { + "columns": [ + { + "columnId": "DBInstanceIdentifier", + "isMetric": false, + "isTransposed": false, + "oneClickFilter": true, + "width": 220 + }, + { + "columnId": "c_engine", + "isMetric": true, + "isTransposed": false, + "oneClickFilter": true, + "width": 140 + }, + { + "columnId": "c_state_sort", + "hidden": true, + "isMetric": true, + "isTransposed": false + }, + { + "colorMapping": { + "assignments": [ + { + "color": { + "colorCode": "#ffc9c2", + "type": "colorCode" + }, + "rules": [ + { + "matchCase": true, + "matchEntireWord": true, + "pattern": "Saturated", + "type": "match" + } + ], + "touched": true + }, + { + "color": { + "colorCode": "#FFF3C2", + "type": "colorCode" + }, + "rules": [ + { + "matchCase": true, + "matchEntireWord": true, + "pattern": "Low storage", + "type": "match" + } + ], + "touched": true + }, + { + "color": { + "colorCode": "#BFDBFF", + "type": "colorCode" + }, + "rules": [ + { + "type": "raw", + "value": "Unknown" + } + ], + "touched": true + }, + { + "color": { + "colorCode": "#AEE8D2", + "type": "colorCode" + }, + "rules": [ + { + "type": "raw", + "value": "Healthy" + } + ], + "touched": true + } + ], + "colorMode": { + "type": "categorical" + }, + "paletteId": "default", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rules": [ + { + "type": "other" + } + ], + "touched": false + } + ] + }, + "colorMode": "badge", + "columnId": "c_state", + "isTransposed": false, + "width": 120 + }, + { + "columnId": "c_account", + "isMetric": false, + "isTransposed": false + }, + { + "columnId": "c_region", + "isMetric": false, + "isTransposed": false + }, + { + "columnId": "c_cpu", + "isMetric": true, + "isTransposed": false + }, + { + "columnId": "c_conn", + "isMetric": true, + "isTransposed": false + }, + { + "columnId": "c_mem", + "isMetric": true, + "isTransposed": false + }, + { + "columnId": "c_storage", + "isMetric": true, + "isTransposed": false + }, + { + "columnId": "c_read_iops", + "isMetric": true, + "isTransposed": false + }, + { + "columnId": "c_write_iops", + "isMetric": true, + "isTransposed": false + }, + { + "columnId": "c_read_lat", + "isMetric": true, + "isTransposed": false + }, + { + "columnId": "c_write_lat", + "isMetric": true, + "isTransposed": false + } + ], + "fitRowToContent": false, + "headerRowHeight": "single", + "headerRowHeightLines": 1, + "layerId": "tbl-layer-tbl-instances", + "layerType": "data", + "paging": { + "enabled": true, + "size": 25 + }, + "rowHeight": "single", + "rowHeightLines": 1, + "showRowNumbers": true, + "sorting": { + "columnId": "c_state_sort", + "direction": "asc" + } + } }, + "title": "", + "version": 2, + "visualizationType": "lnsDatatable" + }, + "description": "All RDS databases, ranked worst-first by state. Click a database to drill into its metrics. State reflects the latest values within a 5-minute freshness window. Avg CPU, read/write latency, and IOPS are averaged over the selected time range; free memory, free storage, and connections are current (last) values.", + "drilldowns": [ { - "columnId": "c_write_lat", - "customLabel": true, - "fieldName": "c_write_lat", - "inMetricDimension": true, - "label": "Avg write latency (ms)", - "meta": { - "esType": "double", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n AND cloud.account.id IS NOT NULL\n| STATS\n c_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))) / 100.0,\n c_conn = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n c_mem = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeableMemory`, NULL))),\n c_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n c_read_iops = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReadIOPS`, NULL))),\n c_write_iops = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/WriteIOPS`, NULL))),\n c_read_lat = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReadLatency`, NULL))) * 1000,\n c_write_lat = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/WriteLatency`, NULL))) * 1000,\n state_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n state_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)))\n BY DBInstanceIdentifier, c_account = cloud.account.id, c_region = cloud.region\n| EVAL\n c_state_sort = CASE(\n state_cpu IS NULL AND state_storage IS NULL, 4,\n state_cpu > 80, 1,\n state_storage < 5368709120, 2,\n 3),\n c_state = CASE(\n state_cpu IS NULL AND state_storage IS NULL, \"Unknown\",\n state_cpu > 80, \"saturated\",\n state_storage < 5368709120, \"low-storage\",\n \"healthy\")\n| SORT c_state_sort ASC" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n AND cloud.account.id IS NOT NULL\n| STATS\n c_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))) / 100.0,\n c_conn = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL))),\n c_mem = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeableMemory`, NULL))),\n c_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL))),\n c_read_iops = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReadIOPS`, NULL))),\n c_write_iops = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/WriteIOPS`, NULL))),\n c_read_lat = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/ReadLatency`, NULL))) * 1000,\n c_write_lat = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/WriteLatency`, NULL))) * 1000,\n state_cpu = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL))),\n state_storage = AVG(avg_over_time(CASE(stat == \"Average\",\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)))\n BY DBInstanceIdentifier, c_account = cloud.account.id, c_region = cloud.region\n| EVAL\n c_state_sort = CASE(\n state_cpu IS NULL AND state_storage IS NULL, 4,\n state_cpu > 80, 1,\n state_storage < 5368709120, 2,\n 3),\n c_state = CASE(\n state_cpu IS NULL AND state_storage IS NULL, \"Unknown\",\n state_cpu > 80, \"saturated\",\n state_storage < 5368709120, \"low-storage\",\n \"healthy\")\n| SORT c_state_sort ASC" - }, - "visualization": { - "columns": [ - { - "columnId": "DBInstanceIdentifier", - "isMetric": false, - "isTransposed": false, - "oneClickFilter": true, - "width": 220 - }, - { - "columnId": "c_state_sort", - "hidden": true, - "isMetric": true, - "isTransposed": false - }, - { - "colorMapping": { - "assignments": [ - { - "color": { - "colorCode": "#ffc9c2", - "type": "colorCode" - }, - "rules": [ - { - "type": "raw", - "value": "saturated" - } - ], - "touched": true + "dashboardRefName": "dashboard_drilldown_aws_rds_otel-36df60a8-6a6e-4f72-96ce-a3533d24901a", + "label": "1. View details", + "open_in_new_tab": false, + "trigger": "on_apply_filter", + "type": "dashboard_drilldown", + "use_filters": false, + "use_time_range": true }, { - "color": { - "colorCode": "#FFF3C2", - "type": "colorCode" - }, - "rules": [ - { - "type": "raw", - "value": "low-storage" - } - ], - "touched": true + "encode_url": true, + "label": "2. View metrics in Discover", + "open_in_new_tab": true, + "trigger": "on_click_value", + "type": "url_drilldown", + "url": "{{kibanaUrl}}/app/discover#/?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:'{{context.panel.timeRange.from}}',to:'{{context.panel.timeRange.to}}'))\u0026_a=(dataSource:(dataViewId:'metrics-*',type:dataView),filters:!((meta:(alias:!n,disabled:!f,index:'metrics-*',key:DBInstanceIdentifier,negate:!f,params:(query:'{{event.value}}'),type:phrase),query:(match_phrase:(DBInstanceIdentifier:'{{event.value}}')))),interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" }, { - "color": { - "colorCode": "#BFDBFF", - "type": "colorCode" - }, - "rules": [ - { - "type": "raw", - "value": "Unknown" - } - ], - "touched": true + "encode_url": false, + "label": "3. View in AWS console", + "open_in_new_tab": true, + "trigger": "on_click_value", + "type": "url_drilldown", + "url": "https://console.aws.amazon.com/rds/home#database:id={{event.value}};is-cluster=false" }, { - "color": { - "colorCode": "#AEE8D2", - "type": "colorCode" - }, - "rules": [ - { - "type": "raw", - "value": "healthy" - } - ], - "touched": true + "encode_url": false, + "label": "4. View Performance Insights in AWS", + "open_in_new_tab": true, + "trigger": "on_click_value", + "type": "url_drilldown", + "url": "https://console.aws.amazon.com/rds/home#performance-insights-v20206:/resourceId/{{event.value}}" } - ], - "colorMode": { - "type": "categorical" - }, - "paletteId": "default", - "specialAssignments": [ - { - "color": { - "type": "loop" - }, - "rules": [ - { - "type": "other" + ], + "title": "Databases" + }, + "gridData": { + "h": 16, + "i": "tbl-instances", + "sectionId": "aws-rds-list-section", + "w": 48, + "x": 0, + "y": 15 + }, + "panelIndex": "tbl-instances", + "type": "vis" + }, + { + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "layer-kpi-net-in": { + "columns": [ + { + "columnId": "col-kpi-net-in", + "customLabel": true, + "fieldName": "total_conn", + "inMetricDimension": true, + "label": "Max connections", + "meta": { + "esType": "long", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS\n peak_conn = MAX(max_over_time(\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Maximum\",\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_ts = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5\n| STATS total_conn = MAX(peak_conn)\n| KEEP total_conn" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS\n peak_conn = MAX(max_over_time(\n `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) WHERE stat == \"Maximum\",\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_ts = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5\n| STATS total_conn = MAX(peak_conn)\n| KEEP total_conn" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "layer-kpi-net-in", + "layerType": "data", + "metricAccessor": "col-kpi-net-in", + "primaryAlign": "left", + "primaryPosition": "top", + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xs", + "valueFontMode": "default", + "valuesTextSize": "s" } - ], - "touched": false - } - ] + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" }, - "colorMode": "badge", - "columnId": "c_state", - "isTransposed": false, - "width": 120 - }, - { - "columnId": "c_account", - "isMetric": false, - "isTransposed": false - }, - { - "columnId": "c_region", - "isMetric": false, - "isTransposed": false - }, - { - "columnId": "c_cpu", - "isMetric": true, - "isTransposed": false - }, - { - "columnId": "c_conn", - "isMetric": true, - "isTransposed": false - }, - { - "columnId": "c_mem", - "isMetric": true, - "isTransposed": false - }, - { - "columnId": "c_storage", - "isMetric": true, - "isTransposed": false - }, - { - "columnId": "c_read_iops", - "isMetric": true, - "isTransposed": false - }, - { - "columnId": "c_write_iops", - "isMetric": true, - "isTransposed": false - }, - { - "columnId": "c_read_lat", - "isMetric": true, - "isTransposed": false - }, - { - "columnId": "c_write_lat", - "isMetric": true, - "isTransposed": false - } - ], - "fitRowToContent": false, - "headerRowHeight": "single", - "headerRowHeightLines": 1, - "layerId": "tbl-layer-tbl-instances", - "layerType": "data", - "paging": { - "enabled": true, - "size": 25 + "description": "Highest concurrent connections observed on any single database — peak over the selected time range. Approaching an instance's connection limit can reject new clients.", + "hide_title": true, + "title": "" }, - "rowHeight": "single", - "rowHeightLines": 1, - "showRowNumbers": true, - "sorting": { - "columnId": "c_state_sort", - "direction": "asc" - } - } + "gridData": { + "h": 6, + "i": "kpi-net-in", + "sectionId": "aws-rds-per-database-section", + "w": 6, + "x": 0, + "y": 24 + }, + "panelIndex": "kpi-net-in", + "type": "vis" }, - "title": "", - "version": 2, - "visualizationType": "lnsDatatable" - }, - "description": "All RDS databases, ranked worst-first by state. Click a database to drill into its metrics. State reflects the latest values within a 5-minute freshness window. Avg CPU, read/write latency, and IOPS are averaged over the selected time range; free memory, free storage, and connections are current (last) values.", - "drilldowns": [ { - "encode_url": false, - "label": "View Performance Insights in AWS", - "open_in_new_tab": true, - "trigger": "on_click_value", - "type": "url_drilldown", - "url": "https://console.aws.amazon.com/rds/home#performance-insights-v20206:/resourceId/{{event.value}}" + "embeddableConfig": { + "attributes": { + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "indexPatternRefs": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "timeField": "@timestamp", + "title": "metrics-aws.rds.otel-*" + } + ], + "layers": { + "layer-kpi-net-out": { + "columns": [ + { + "columnId": "col-kpi-net-out", + "customLabel": true, + "fieldName": "total_storage", + "inMetricDimension": true, + "label": "Total free storage", + "meta": { + "esType": "long", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS\n storage_cur = AVG(avg_over_time(\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\",\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_ts = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5\n| STATS total_storage = SUM(storage_cur)\n| KEEP total_storage" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "needsRefresh": false, + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-*\n| WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\"\n| STATS\n storage_cur = AVG(avg_over_time(\n `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`)) WHERE stat == \"Average\",\n last_seen = MAX(@timestamp)\n BY DBInstanceIdentifier, cloud.region\n| INLINE STATS latest_ts = MAX(last_seen)\n| WHERE DATE_DIFF(\"minute\", last_seen, latest_ts) \u003c= 5\n| STATS total_storage = SUM(storage_cur)\n| KEEP total_storage" + }, + "visualization": { + "applyColorTo": "background", + "color": "#61a2ff00", + "colorMode": "background", + "layerId": "layer-kpi-net-out", + "layerType": "data", + "metricAccessor": "col-kpi-net-out", + "primaryAlign": "left", + "primaryPosition": "top", + "showBar": false, + "titlesTextAlign": "left", + "titlesTextSize": "xs", + "valueFontMode": "default", + "valuesTextSize": "s" + } + }, + "title": "", + "version": 2, + "visualizationType": "lnsMetric" + }, + "description": "Total free storage across all non-Aurora databases — the sum of each database's lowest observed free storage (bytes) over the selected time range. Falling values indicate cluster-wide disk pressure.", + "hide_title": true, + "title": "" + }, + "gridData": { + "h": 6, + "i": "kpi-net-out", + "sectionId": "aws-rds-per-database-section", + "w": 6, + "x": 0, + "y": 30 + }, + "panelIndex": "kpi-net-out", + "type": "vis" }, { - "encode_url": false, - "label": "View in AWS", - "open_in_new_tab": true, - "trigger": "on_click_value", - "type": "url_drilldown", - "url": "https://console.aws.amazon.com/rds/home#database:id={{event.value}};is-cluster=false" - } - ], - "title": "Databases" - }, - "gridData": { - "x": 0, - "y": 15, - "w": 48, - "h": 16, - "i": "tbl-instances", - "sectionId": "aws-rds-list-section" - }, - "panelIndex": "tbl-instances", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Highest concurrent connections observed on any single database — peak over the selected time range. Approaching an instance's connection limit can reject new clients.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" - } - ], - "layers": { - "layer-kpi-net-in": { - "columns": [ - { - "columnId": "col-kpi-net-in", - "customLabel": true, - "fieldName": "total_conn", - "inMetricDimension": true, - "label": "Max connections", - "meta": { - "esType": "long", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nFROM metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat IN (\"Maximum\", \"Minimum\") | INLINE STATS latest_global = MAX(@timestamp) | WHERE DATE_DIFF(\"minutes\", @timestamp, latest_global) <= 5 | STATS cpu_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL)), conn_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)), storage_cur = MIN(CASE(stat == \"Minimum\", `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)) BY DBInstanceIdentifier, cloud.region | EVAL state = CASE(cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\", cpu_cur > 80, \"saturated\", storage_cur < 5368709120, \"low-storage\", \"healthy\") | STATS total_conn = SUM(conn_cur) | KEEP total_conn" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "textBasedLanguages-datasource-layer-layer-kpi-net-in", - "type": "index-pattern" - } - ], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nFROM metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat IN (\"Maximum\", \"Minimum\") | INLINE STATS latest_global = MAX(@timestamp) | WHERE DATE_DIFF(\"minutes\", @timestamp, latest_global) <= 5 | STATS cpu_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL)), conn_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)), storage_cur = MIN(CASE(stat == \"Minimum\", `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)) BY DBInstanceIdentifier, cloud.region | EVAL state = CASE(cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\", cpu_cur > 80, \"saturated\", storage_cur < 5368709120, \"low-storage\", \"healthy\") | STATS total_conn = SUM(conn_cur) | KEEP total_conn" - }, - "visualization": { - "applyColorTo": "background", - "color": "#61a2ff00", - "colorMode": "background", - "layerId": "layer-kpi-net-in", - "layerType": "data", - "metricAccessor": "col-kpi-net-in", - "primaryAlign": "left", - "primaryPosition": "top", - "showBar": false, - "titlesTextAlign": "left", - "titlesTextSize": "xs", - "valueFontMode": "default", - "valuesTextSize": "s" - } - }, - "title": "", - "version": 2, - "visualizationType": "lnsMetric" - }, - "description": "Highest concurrent connections observed on any single database — peak over the selected time range. Approaching an instance's connection limit can reject new clients.", - "hide_title": true, - "title": "" - }, - "gridData": { - "h": 6, - "i": "kpi-net-in", - "sectionId": "aws-rds-per-database-section", - "w": 6, - "x": 0, - "y": 24 - }, - "panelIndex": "kpi-net-in", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Total free storage across all non-Aurora databases — the sum of each database's lowest observed free storage (bytes) over the selected time range. Falling values indicate cluster-wide disk pressure.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "indexPatternRefs": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "timeField": "@timestamp", - "title": "metrics-aws.rds.otel-*" - } - ], - "layers": { - "layer-kpi-net-out": { - "columns": [ - { - "columnId": "col-kpi-net-out", - "customLabel": true, - "fieldName": "total_storage", - "inMetricDimension": true, - "label": "Total free storage", - "meta": { - "esType": "long", - "type": "number" - }, - "params": { - "format": { - "id": "bytes", - "params": { - "decimals": 2 - } + "embeddableConfig": { + "attributes": { + "description": "Top 10 RDS databases by peak CPU utilization (%) over the selected time range. Reference line at 80% marks the high-CPU threshold; bars crossing it indicate CPU-bound databases.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-top10-cpu": { + "columns": [ + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "peak_cpu", + "customLabel": true, + "fieldName": "peak_cpu", + "inMetricDimension": true, + "label": "Max CPU", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | STATS peak_cpu = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) / 100.0 BY DBInstanceIdentifier, cloud.region | SORT peak_cpu DESC | LIMIT 10" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-top10-cpu", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | STATS peak_cpu = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) / 100.0 BY DBInstanceIdentifier, cloud.region | SORT peak_cpu DESC | LIMIT 10" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "peak_cpu" + ], + "layerId": "xy-layer-top10-cpu", + "layerType": "data", + "seriesType": "bar_horizontal", + "showGridlines": false, + "xAccessor": "DBInstanceIdentifier" + } + ], + "legend": { + "isVisible": false, + "position": "bottom" + }, + "preferredSeriesType": "bar_horizontal", + "valueLabels": "show" } - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nFROM metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat IN (\"Maximum\", \"Minimum\") | INLINE STATS latest_global = MAX(@timestamp) | WHERE DATE_DIFF(\"minutes\", @timestamp, latest_global) <= 5 | STATS cpu_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL)), conn_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)), storage_cur = MIN(CASE(stat == \"Minimum\", `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)) BY DBInstanceIdentifier, cloud.region | EVAL state = CASE(cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\", cpu_cur > 80, \"saturated\", storage_cur < 5368709120, \"low-storage\", \"healthy\") | STATS total_storage = SUM(storage_cur) | KEEP total_storage" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "textBasedLanguages-datasource-layer-layer-kpi-net-out", - "type": "index-pattern" - } - ], - "needsRefresh": false, - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nFROM metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat IN (\"Maximum\", \"Minimum\") | INLINE STATS latest_global = MAX(@timestamp) | WHERE DATE_DIFF(\"minutes\", @timestamp, latest_global) <= 5 | STATS cpu_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/CPUUtilization`, NULL)), conn_cur = MAX(CASE(stat == \"Maximum\", `metrics.amazonaws.com/AWS/RDS/DatabaseConnections`, NULL)), storage_cur = MIN(CASE(stat == \"Minimum\", `metrics.amazonaws.com/AWS/RDS/FreeStorageSpace`, NULL)) BY DBInstanceIdentifier, cloud.region | EVAL state = CASE(cpu_cur IS NULL AND conn_cur IS NULL AND storage_cur IS NULL, \"Unknown\", cpu_cur > 80, \"saturated\", storage_cur < 5368709120, \"low-storage\", \"healthy\") | STATS total_storage = SUM(storage_cur) | KEEP total_storage" - }, - "visualization": { - "applyColorTo": "background", - "color": "#61a2ff00", - "colorMode": "background", - "layerId": "layer-kpi-net-out", - "layerType": "data", - "metricAccessor": "col-kpi-net-out", - "primaryAlign": "left", - "primaryPosition": "top", - "showBar": false, - "titlesTextAlign": "left", - "titlesTextSize": "xs", - "valueFontMode": "default", - "valuesTextSize": "s" - } - }, - "title": "", - "version": 2, - "visualizationType": "lnsMetric" - }, - "description": "Total free storage across all non-Aurora databases — the sum of each database's lowest observed free storage (bytes) over the selected time range. Falling values indicate cluster-wide disk pressure.", - "hide_title": true, - "title": "" - }, - "gridData": { - "h": 6, - "i": "kpi-net-out", - "sectionId": "aws-rds-per-database-section", - "w": 6, - "x": 0, - "y": 30 - }, - "panelIndex": "kpi-net-out", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Top 10 RDS databases by peak CPU utilization (%) over the selected time range. Reference line at 80% marks the high-CPU threshold; bars crossing it indicate CPU-bound databases.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "xy-layer-top10-cpu": { - "columns": [ - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } }, - { - "columnId": "peak_cpu", - "customLabel": true, - "fieldName": "peak_cpu", - "inMetricDimension": true, - "label": "Max CPU", - "meta": { - "esType": "double", - "type": "number" - }, - "params": { - "format": { - "id": "percent", - "params": { - "decimals": 1 - } - } - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | STATS peak_cpu = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) / 100.0 BY DBInstanceIdentifier, cloud.region | SORT peak_cpu DESC | LIMIT 10" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-top10-cpu", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | STATS peak_cpu = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) / 100.0 BY DBInstanceIdentifier, cloud.region | SORT peak_cpu DESC | LIMIT 10" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + "title": "Top 10 RDS databases by CPU utilization", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Top 10 RDS databases by peak CPU utilization (%) over the selected time range.", + "title": "Top 10 RDS databases by CPU utilization" }, - "layers": [ - { - "accessors": [ - "peak_cpu" - ], - "layerId": "xy-layer-top10-cpu", - "layerType": "data", - "seriesType": "bar_horizontal", - "showGridlines": false, - "xAccessor": "DBInstanceIdentifier" - } - ], - "legend": { - "isVisible": false, - "position": "bottom" + "gridData": { + "h": 12, + "i": "top10-cpu", + "sectionId": "aws-rds-per-database-section", + "w": 14, + "x": 6, + "y": 24 }, - "preferredSeriesType": "bar_horizontal", - "valueLabels": "show" - } + "panelIndex": "top10-cpu", + "type": "vis" }, - "title": "Top 10 RDS databases by CPU utilization", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Top 10 RDS databases by peak CPU utilization (%) over the selected time range. Reference line at 80% marks the high-CPU threshold; bars crossing it indicate CPU-bound databases.", - "title": "Top 10 RDS databases by CPU utilization" - }, - "gridData": { - "h": 12, - "i": "top10-cpu", - "sectionId": "aws-rds-per-database-section", - "w": 14, - "x": 6, - "y": 24 - }, - "panelIndex": "top10-cpu", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Top 10 RDS databases by peak concurrent connections over the selected time range. Approaching the instance connection limit can reject new clients.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "xy-layer-top10-connections": { - "columns": [ - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } + { + "embeddableConfig": { + "attributes": { + "description": "Top 10 RDS databases by peak concurrent connections over the selected time range. Approaching the instance connection limit can reject new clients.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-top10-connections": { + "columns": [ + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "peak_conn", + "customLabel": true, + "fieldName": "peak_conn", + "inMetricDimension": true, + "label": "Max connections", + "meta": { + "esType": "double", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/DatabaseConnections` IS NOT NULL | STATS peak_conn = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) BY DBInstanceIdentifier, cloud.region | SORT peak_conn DESC | LIMIT 10" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-top10-connections", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/DatabaseConnections` IS NOT NULL | STATS peak_conn = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) BY DBInstanceIdentifier, cloud.region | SORT peak_conn DESC | LIMIT 10" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "peak_conn" + ], + "layerId": "xy-layer-top10-connections", + "layerType": "data", + "seriesType": "bar_horizontal", + "showGridlines": false, + "xAccessor": "DBInstanceIdentifier" + } + ], + "legend": { + "isVisible": false, + "position": "bottom" + }, + "preferredSeriesType": "bar_horizontal", + "valueLabels": "show" + } }, - { - "columnId": "peak_conn", - "customLabel": true, - "fieldName": "peak_conn", - "inMetricDimension": true, - "label": "Max connections", - "meta": { - "esType": "double", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/DatabaseConnections` IS NOT NULL | STATS peak_conn = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) BY DBInstanceIdentifier, cloud.region | SORT peak_conn DESC | LIMIT 10" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-top10-connections", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/DatabaseConnections` IS NOT NULL | STATS peak_conn = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/DatabaseConnections`)) BY DBInstanceIdentifier, cloud.region | SORT peak_conn DESC | LIMIT 10" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + "title": "Top 10 RDS databases by connections", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Top 10 RDS databases by peak concurrent connections over the selected time range. Approaching the instance connection limit can reject new clients.", + "title": "Top 10 RDS databases by connections" }, - "layers": [ - { - "accessors": [ - "peak_conn" - ], - "layerId": "xy-layer-top10-connections", - "layerType": "data", - "seriesType": "bar_horizontal", - "showGridlines": false, - "xAccessor": "DBInstanceIdentifier" - } - ], - "legend": { - "isVisible": false, - "position": "bottom" + "gridData": { + "h": 12, + "i": "top10-connections", + "sectionId": "aws-rds-per-database-section", + "w": 14, + "x": 20, + "y": 24 }, - "preferredSeriesType": "bar_horizontal", - "valueLabels": "show" - } + "panelIndex": "top10-connections", + "type": "vis" }, - "title": "Top 10 RDS databases by connections", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Top 10 RDS databases by peak concurrent connections over the selected time range. Approaching the instance connection limit can reject new clients.", - "title": "Top 10 RDS databases by connections" - }, - "gridData": { - "h": 12, - "i": "top10-connections", - "sectionId": "aws-rds-per-database-section", - "w": 14, - "x": 20, - "y": 24 - }, - "panelIndex": "top10-connections", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Top 10 RDS databases by peak read IOPS over the selected time range. High values flag read-heavy databases that may saturate storage throughput.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "xy-layer-top10-readiops": { - "columns": [ - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } + { + "embeddableConfig": { + "attributes": { + "description": "Top 10 RDS databases by peak read IOPS over the selected time range. High values flag read-heavy databases that may saturate storage throughput.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-top10-readiops": { + "columns": [ + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "peak_read_iops", + "customLabel": true, + "fieldName": "peak_read_iops", + "inMetricDimension": true, + "label": "Max read IOPS", + "meta": { + "esType": "double", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL | STATS peak_read_iops = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY DBInstanceIdentifier, cloud.region | SORT peak_read_iops DESC | LIMIT 10" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-top10-readiops", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL | STATS peak_read_iops = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY DBInstanceIdentifier, cloud.region | SORT peak_read_iops DESC | LIMIT 10" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "peak_read_iops" + ], + "layerId": "xy-layer-top10-readiops", + "layerType": "data", + "seriesType": "bar_horizontal", + "showGridlines": false, + "xAccessor": "DBInstanceIdentifier" + } + ], + "legend": { + "isVisible": false, + "position": "bottom" + }, + "preferredSeriesType": "bar_horizontal", + "valueLabels": "show" + } }, - { - "columnId": "peak_read_iops", - "customLabel": true, - "fieldName": "peak_read_iops", - "inMetricDimension": true, - "label": "Max read IOPS", - "meta": { - "esType": "double", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL | STATS peak_read_iops = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY DBInstanceIdentifier, cloud.region | SORT peak_read_iops DESC | LIMIT 10" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-top10-readiops", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Maximum\" AND `metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL | STATS peak_read_iops = MAX(max_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY DBInstanceIdentifier, cloud.region | SORT peak_read_iops DESC | LIMIT 10" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + "title": "Top 10 RDS databases by read IOPS", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Top 10 RDS databases by peak read IOPS over the selected time range. High values flag read-heavy databases that may saturate storage throughput.", + "title": "Top 10 RDS databases by read IOPS" }, - "layers": [ - { - "accessors": [ - "peak_read_iops" - ], - "layerId": "xy-layer-top10-readiops", - "layerType": "data", - "seriesType": "bar_horizontal", - "showGridlines": false, - "xAccessor": "DBInstanceIdentifier" - } - ], - "legend": { - "isVisible": false, - "position": "bottom" + "gridData": { + "h": 12, + "i": "top10-readiops", + "sectionId": "aws-rds-per-database-section", + "w": 14, + "x": 34, + "y": 24 }, - "preferredSeriesType": "bar_horizontal", - "valueLabels": "show" - } + "panelIndex": "top10-readiops", + "type": "vis" }, - "title": "Top 10 RDS databases by read IOPS", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Top 10 RDS databases by peak read IOPS over the selected time range. High values flag read-heavy databases that may saturate storage throughput.", - "title": "Top 10 RDS databases by read IOPS" - }, - "gridData": { - "h": 12, - "i": "top10-readiops", - "sectionId": "aws-rds-per-database-section", - "w": 14, - "x": 34, - "y": 24 - }, - "panelIndex": "top10-readiops", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Average freeable memory per database over time (bytes, averaged per bucket). Top 10 databases by freeable memory per bucket. Low or falling values indicate memory pressure.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "xy-layer-chart-memory": { - "columns": [ - { - "columnId": "timestamp", - "fieldName": "timestamp", - "meta": { - "esType": "date", - "type": "date" - } - }, - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } - }, - { - "columnId": "metric", - "customLabel": true, - "fieldName": "metric", - "inMetricDimension": true, - "label": "Freeable memory", - "meta": { - "esType": "double", - "type": "number" - }, - "params": { - "format": { - "id": "bytes", - "params": { - "decimals": 2 - } + { + "embeddableConfig": { + "attributes": { + "description": "Average freeable memory per database over time (bytes, averaged per bucket). Top 10 databases by freeable memory per bucket. Low or falling values indicate memory pressure.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-chart-memory": { + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "metric", + "customLabel": true, + "fieldName": "metric", + "inMetricDimension": true, + "label": "Freeable memory", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND `metrics.amazonaws.com/AWS/RDS/FreeableMemory` IS NOT NULL | WHERE stat == \"Average\" | STATS metric = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC, metric ASC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-chart-memory", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND `metrics.amazonaws.com/AWS/RDS/FreeableMemory` IS NOT NULL | WHERE stat == \"Average\" | STATS metric = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC, metric ASC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "metric" + ], + "layerId": "xy-layer-chart-memory", + "layerType": "data", + "seriesType": "line", + "showGridlines": false, + "splitAccessors": [ + "DBInstanceIdentifier" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "line", + "valueLabels": "hide" } - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND `metrics.amazonaws.com/AWS/RDS/FreeableMemory` IS NOT NULL | WHERE stat == \"Average\" | STATS metric = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC, metric ASC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-chart-memory", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND `metrics.amazonaws.com/AWS/RDS/FreeableMemory` IS NOT NULL | WHERE stat == \"Average\" | STATS metric = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/FreeableMemory`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC, metric ASC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + }, + "title": "Top 10 RDS databases by freeable memory", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Average freeable memory per database over time (bytes, averaged per bucket). Top 10 databases by freeable memory per bucket. Low or falling values indicate memory pressure.", + "title": "Top 10 RDS databases by freeable memory" }, - "layers": [ - { - "accessors": [ - "metric" - ], - "layerId": "xy-layer-chart-memory", - "layerType": "data", - "seriesType": "line", - "showGridlines": false, - "splitAccessors": [ - "DBInstanceIdentifier" - ], - "xAccessor": "timestamp" - } - ], - "legend": { - "isVisible": true, - "position": "bottom" + "gridData": { + "h": 12, + "i": "chart-memory", + "sectionId": "aws-rds-per-database-section", + "w": 16, + "x": 32, + "y": 12 }, - "preferredSeriesType": "line", - "valueLabels": "hide" - } + "panelIndex": "chart-memory", + "type": "vis" }, - "title": "Top 10 RDS databases by freeable memory", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Average freeable memory per database over time (bytes, averaged per bucket). Top 10 databases by freeable memory per bucket. Low or falling values indicate memory pressure.", - "title": "Top 10 RDS databases by freeable memory" - }, - "gridData": { - "h": 12, - "i": "chart-memory", - "sectionId": "aws-rds-per-database-section", - "w": 16, - "x": 32, - "y": 12 - }, - "panelIndex": "chart-memory", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Average CPU utilization (%) per database over time (averaged per bucket). Reference line at 80% marks the high-CPU threshold. Top 10 databases by CPU per bucket.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "ref-cpu-80": { - "columns": [ - { - "columnId": "alert_threshold", - "customLabel": true, - "fieldName": "alert_threshold", - "inMetricDimension": true, - "label": "High CPU (80%)", - "meta": { - "esType": "integer", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nROW alert_threshold = 0.8" - }, - "timeField": "@timestamp" - }, - "xy-layer-chart-cpu": { - "columns": [ - { - "columnId": "timestamp", - "fieldName": "timestamp", - "meta": { - "esType": "date", - "type": "date" - } - }, - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } - }, - { - "columnId": "metric", - "customLabel": true, - "fieldName": "metric", - "inMetricDimension": true, - "label": "CPU utilization", - "meta": { - "esType": "double", - "type": "number" - }, - "params": { - "format": { - "id": "percent", - "params": { - "decimals": 1 - } + { + "embeddableConfig": { + "attributes": { + "description": "Average CPU utilization (%) per database over time (averaged per bucket). Reference line at 80% marks the high-CPU threshold. Top 10 databases by CPU per bucket.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-chart-cpu": { + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "metric", + "customLabel": true, + "fieldName": "metric", + "inMetricDimension": true, + "label": "CPU utilization", + "meta": { + "esType": "double", + "type": "number" + }, + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + } + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | WHERE stat == \"Average\" | STATS metric = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) / 100.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC, metric DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-chart-cpu", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | WHERE stat == \"Average\" | STATS metric = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) / 100.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC, metric DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "metric" + ], + "layerId": "xy-layer-chart-cpu", + "layerType": "data", + "seriesType": "line", + "showGridlines": false, + "splitAccessors": [ + "DBInstanceIdentifier" + ], + "xAccessor": "timestamp" + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "line", + "valueLabels": "hide" } - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | WHERE stat == \"Average\" | STATS metric = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) / 100.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC, metric DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-chart-cpu", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" AND `metrics.amazonaws.com/AWS/RDS/CPUUtilization` IS NOT NULL | WHERE stat == \"Average\" | STATS metric = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/CPUUtilization`)) / 100.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | SORT timestamp ASC, metric DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + }, + "title": "Top 10 RDS databases by CPU utilization", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Average CPU utilization (%) per database over time (averaged per bucket). Top 10 databases by CPU per bucket.", + "title": "Top 10 RDS databases by CPU utilization" }, - "layers": [ - { - "accessors": [ - "metric" - ], - "layerId": "xy-layer-chart-cpu", - "layerType": "data", - "seriesType": "line", - "showGridlines": false, - "splitAccessors": [ - "DBInstanceIdentifier" - ], - "xAccessor": "timestamp" - }, - { - "accessors": [ - "alert_threshold" - ], - "layerId": "ref-cpu-80", - "layerType": "referenceLine", - "yConfig": [ - { - "axisMode": "left", - "color": "#bd271e", - "fill": "none", - "forAccessor": "alert_threshold", - "icon": "alert", - "iconPosition": "right", - "lineStyle": "dashed", - "lineWidth": 2 - } - ] - } - ], - "legend": { - "isVisible": true, - "position": "bottom" + "gridData": { + "h": 12, + "i": "chart-cpu", + "sectionId": "aws-rds-per-database-section", + "w": 16, + "x": 0, + "y": 0 }, - "preferredSeriesType": "line", - "valueLabels": "hide" - } + "panelIndex": "chart-cpu", + "type": "vis" }, - "title": "Top 10 RDS databases by CPU utilization", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Average CPU utilization (%) per database over time (averaged per bucket). Reference line at 80% marks the high-CPU threshold. Top 10 databases by CPU per bucket.", - "title": "Top 10 RDS databases by CPU utilization" - }, - "gridData": { - "h": 12, - "i": "chart-cpu", - "sectionId": "aws-rds-per-database-section", - "w": 16, - "x": 0, - "y": 0 - }, - "panelIndex": "chart-cpu", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Read IOPS per database over time — averaged per bucket. Top 10 databases by read IOPS per bucket.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "xy-layer-chart-iops-read": { - "columns": [ - { - "columnId": "timestamp", - "fieldName": "timestamp", - "meta": { - "esType": "date", - "type": "date" - } - }, - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } + { + "embeddableConfig": { + "attributes": { + "description": "Read IOPS per database over time — averaged per bucket. Top 10 databases by read IOPS per bucket.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-chart-iops-read": { + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "col_dr", + "customLabel": true, + "fieldName": "col_dr", + "inMetricDimension": true, + "label": "Read IOPS", + "meta": { + "esType": "double", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL) | STATS col_dr = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_dr IS NOT NULL | SORT timestamp ASC, col_dr DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-chart-iops-read", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL) | STATS col_dr = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_dr IS NOT NULL | SORT timestamp ASC, col_dr DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "col_dr" + ], + "layerId": "xy-layer-chart-iops-read", + "layerType": "data", + "seriesType": "line", + "showGridlines": false, + "splitAccessors": [ + "DBInstanceIdentifier" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "line", + "valueLabels": "hide" + } }, - { - "columnId": "col_dr", - "customLabel": true, - "fieldName": "col_dr", - "inMetricDimension": true, - "label": "Read IOPS", - "meta": { - "esType": "double", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL) | STATS col_dr = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_dr IS NOT NULL | SORT timestamp ASC, col_dr DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-chart-iops-read", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL) | STATS col_dr = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/ReadIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_dr IS NOT NULL | SORT timestamp ASC, col_dr DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + "title": "Top 10 RDS databases by read IOPS", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Read IOPS per database over time — averaged per bucket. Top 10 databases by read IOPS per bucket.", + "title": "Top 10 RDS databases by read IOPS" }, - "layers": [ - { - "accessors": [ - "col_dr" - ], - "layerId": "xy-layer-chart-iops-read", - "layerType": "data", - "seriesType": "line", - "showGridlines": false, - "splitAccessors": [ - "DBInstanceIdentifier" - ], - "xAccessor": "timestamp", - "yConfig": null - } - ], - "legend": { - "isVisible": true, - "position": "bottom" + "gridData": { + "h": 12, + "i": "chart-iops-read", + "sectionId": "aws-rds-per-database-section", + "w": 16, + "x": 16, + "y": 0 }, - "preferredSeriesType": "line", - "valueLabels": "hide" - } + "panelIndex": "chart-iops-read", + "type": "vis" }, - "title": "Top 10 RDS databases by read IOPS", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Read IOPS per database over time — averaged per bucket. Top 10 databases by read IOPS per bucket.", - "title": "Top 10 RDS databases by read IOPS" - }, - "gridData": { - "h": 12, - "i": "chart-iops-read", - "sectionId": "aws-rds-per-database-section", - "w": 16, - "x": 16, - "y": 0 - }, - "panelIndex": "chart-iops-read", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Write IOPS per database over time — averaged per bucket. Top 10 databases by write IOPS per bucket.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "xy-layer-chart-iops-write": { - "columns": [ - { - "columnId": "timestamp", - "fieldName": "timestamp", - "meta": { - "esType": "date", - "type": "date" - } - }, - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } + { + "embeddableConfig": { + "attributes": { + "description": "Write IOPS per database over time — averaged per bucket. Top 10 databases by write IOPS per bucket.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-chart-iops-write": { + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "col_dw", + "customLabel": true, + "fieldName": "col_dw", + "inMetricDimension": true, + "label": "Write IOPS", + "meta": { + "esType": "double", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL) | STATS col_dw = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_dw IS NOT NULL | SORT timestamp ASC, col_dw DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-chart-iops-write", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL) | STATS col_dw = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_dw IS NOT NULL | SORT timestamp ASC, col_dw DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "col_dw" + ], + "layerId": "xy-layer-chart-iops-write", + "layerType": "data", + "seriesType": "line", + "showGridlines": false, + "splitAccessors": [ + "DBInstanceIdentifier" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "line", + "valueLabels": "hide" + } }, - { - "columnId": "col_dw", - "customLabel": true, - "fieldName": "col_dw", - "inMetricDimension": true, - "label": "Write IOPS", - "meta": { - "esType": "double", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL) | STATS col_dw = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_dw IS NOT NULL | SORT timestamp ASC, col_dw DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-chart-iops-write", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/ReadIOPS` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/WriteIOPS` IS NOT NULL) | STATS col_dw = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/WriteIOPS`)) BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_dw IS NOT NULL | SORT timestamp ASC, col_dw DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + "title": "Top 10 RDS databases by write IOPS", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Write IOPS per database over time — averaged per bucket. Top 10 databases by write IOPS per bucket.", + "title": "Top 10 RDS databases by write IOPS" }, - "layers": [ - { - "accessors": [ - "col_dw" - ], - "layerId": "xy-layer-chart-iops-write", - "layerType": "data", - "seriesType": "line", - "showGridlines": false, - "splitAccessors": [ - "DBInstanceIdentifier" - ], - "xAccessor": "timestamp", - "yConfig": null - } - ], - "legend": { - "isVisible": true, - "position": "bottom" + "gridData": { + "h": 12, + "i": "chart-iops-write", + "sectionId": "aws-rds-per-database-section", + "w": 16, + "x": 32, + "y": 0 }, - "preferredSeriesType": "line", - "valueLabels": "hide" - } + "panelIndex": "chart-iops-write", + "type": "vis" }, - "title": "Top 10 RDS databases by write IOPS", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Write IOPS per database over time — averaged per bucket. Top 10 databases by write IOPS per bucket.", - "title": "Top 10 RDS databases by write IOPS" - }, - "gridData": { - "h": 12, - "i": "chart-iops-write", - "sectionId": "aws-rds-per-database-section", - "w": 16, - "x": 32, - "y": 0 - }, - "panelIndex": "chart-iops-write", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Network receive throughput per database over time (MiB/s, averaged per bucket). Top 10 databases by receive throughput per bucket.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "xy-layer-chart-net-rx": { - "columns": [ - { - "columnId": "timestamp", - "fieldName": "timestamp", - "meta": { - "esType": "date", - "type": "date" - } - }, - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } + { + "embeddableConfig": { + "attributes": { + "description": "Network receive throughput per database over time (MiB/s, averaged per bucket). Top 10 databases by receive throughput per bucket.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-chart-net-rx": { + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "col_ni", + "customLabel": true, + "fieldName": "col_ni", + "inMetricDimension": true, + "label": "Rx", + "meta": { + "esType": "double", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL) | STATS col_ni = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) / 1048576.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_ni IS NOT NULL | SORT timestamp ASC, col_ni DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-chart-net-rx", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL) | STATS col_ni = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) / 1048576.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_ni IS NOT NULL | SORT timestamp ASC, col_ni DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "col_ni" + ], + "layerId": "xy-layer-chart-net-rx", + "layerType": "data", + "seriesType": "line", + "showGridlines": false, + "splitAccessors": [ + "DBInstanceIdentifier" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "line", + "valueLabels": "hide" + } }, - { - "columnId": "col_ni", - "customLabel": true, - "fieldName": "col_ni", - "inMetricDimension": true, - "label": "Rx", - "meta": { - "esType": "double", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL) | STATS col_ni = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) / 1048576.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_ni IS NOT NULL | SORT timestamp ASC, col_ni DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-chart-net-rx", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL) | STATS col_ni = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput`)) / 1048576.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_ni IS NOT NULL | SORT timestamp ASC, col_ni DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + "title": "Top 10 RDS databases by network rx", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Network receive throughput per database over time (MiB/s, averaged per bucket). Top 10 databases by receive throughput per bucket.", + "title": "Top 10 RDS databases by network rx" }, - "layers": [ - { - "accessors": [ - "col_ni" - ], - "layerId": "xy-layer-chart-net-rx", - "layerType": "data", - "seriesType": "line", - "showGridlines": false, - "splitAccessors": [ - "DBInstanceIdentifier" - ], - "xAccessor": "timestamp", - "yConfig": null - } - ], - "legend": { - "isVisible": true, - "position": "bottom" + "gridData": { + "h": 12, + "i": "chart-net-rx", + "sectionId": "aws-rds-per-database-section", + "w": 16, + "x": 0, + "y": 12 }, - "preferredSeriesType": "line", - "valueLabels": "hide" - } + "panelIndex": "chart-net-rx", + "type": "vis" }, - "title": "Top 10 RDS databases by network rx", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Network receive throughput per database over time (MiB/s, averaged per bucket). Top 10 databases by receive throughput per bucket.", - "title": "Top 10 RDS databases by network rx" - }, - "gridData": { - "h": 12, - "i": "chart-net-rx", - "sectionId": "aws-rds-per-database-section", - "w": 16, - "x": 0, - "y": 12 - }, - "panelIndex": "chart-net-rx", - "type": "vis" - }, - { - "embeddableConfig": { - "attributes": { - "description": "Network transmit throughput per database over time (MiB/s, averaged per bucket). Top 10 databases by transmit throughput per bucket.", - "references": [], - "state": { - "adHocDataViews": { - "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { - "allowHidden": false, - "allowNoIndex": true, - "fieldFormats": {}, - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "managed": false, - "name": "metrics-aws.rds.otel-*", - "runtimeFieldMap": {}, - "sourceFilters": [], - "timeFieldName": "@timestamp", - "title": "metrics-aws.rds.otel-*", - "type": "esql" - } - }, - "datasourceStates": { - "textBased": { - "layers": { - "xy-layer-chart-net-tx": { - "columns": [ - { - "columnId": "timestamp", - "fieldName": "timestamp", - "meta": { - "esType": "date", - "type": "date" - } + { + "embeddableConfig": { + "attributes": { + "description": "Network transmit throughput per database over time (MiB/s, averaged per bucket). Top 10 databases by transmit throughput per bucket.", + "references": [], + "state": { + "adHocDataViews": { + "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf": { + "allowHidden": false, + "allowNoIndex": true, + "fieldFormats": {}, + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "managed": false, + "name": "metrics-aws.rds.otel-*", + "runtimeFieldMap": {}, + "sourceFilters": [], + "timeFieldName": "@timestamp", + "title": "metrics-aws.rds.otel-*", + "type": "esql" + } + }, + "datasourceStates": { + "textBased": { + "layers": { + "xy-layer-chart-net-tx": { + "columns": [ + { + "columnId": "timestamp", + "fieldName": "timestamp", + "meta": { + "esType": "date", + "type": "date" + } + }, + { + "columnId": "DBInstanceIdentifier", + "fieldName": "DBInstanceIdentifier", + "meta": { + "type": "string" + } + }, + { + "columnId": "col_no", + "customLabel": true, + "fieldName": "col_no", + "inMetricDimension": true, + "label": "Tx", + "meta": { + "esType": "double", + "type": "number" + } + } + ], + "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL) | STATS col_no = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) / 1048576.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_no IS NOT NULL | SORT timestamp ASC, col_no DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "timeField": "@timestamp" + } + } + } + }, + "filters": [], + "internalReferences": [ + { + "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", + "name": "indexpattern-datasource-layer-xy-layer-chart-net-tx", + "type": "index-pattern" + } + ], + "query": { + "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL) | STATS col_no = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) / 1048576.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_no IS NOT NULL | SORT timestamp ASC, col_no DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": false + }, + "layers": [ + { + "accessors": [ + "col_no" + ], + "layerId": "xy-layer-chart-net-tx", + "layerType": "data", + "seriesType": "line", + "showGridlines": false, + "splitAccessors": [ + "DBInstanceIdentifier" + ], + "xAccessor": "timestamp", + "yConfig": null + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "line", + "valueLabels": "hide" + } }, - { - "columnId": "DBInstanceIdentifier", - "fieldName": "DBInstanceIdentifier", - "meta": { - "type": "string" - } + "title": "Top 10 RDS databases by network tx", + "version": 2, + "visualizationType": "lnsXY" + }, + "description": "Network transmit throughput per database over time (MiB/s, averaged per bucket). Top 10 databases by transmit throughput per bucket.", + "title": "Top 10 RDS databases by network tx" + }, + "gridData": { + "h": 12, + "i": "chart-net-tx", + "sectionId": "aws-rds-per-database-section", + "w": 16, + "x": 16, + "y": 12 + }, + "panelIndex": "chart-net-tx", + "type": "vis" + } + ], + "pinned_panels": { + "panels": { + "ctrl-rds-account": { + "config": { + "dataViewRefName": "ctrl-rds-account:optionsListDataView", + "exclude": false, + "exists_selected": false, + "field_name": "cloud.account.id", + "ignore_validations": false, + "run_past_timeout": false, + "search_technique": "wildcard", + "selected_options": [], + "single_select": false, + "sort": { + "by": "_count", + "direction": "desc" }, - { - "columnId": "col_no", - "customLabel": true, - "fieldName": "col_no", - "inMetricDimension": true, - "label": "Tx", - "meta": { - "esType": "double", - "type": "number" - } - } - ], - "index": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL) | STATS col_no = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) / 1048576.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_no IS NOT NULL | SORT timestamp ASC, col_no DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "timeField": "@timestamp" - } - } - } - }, - "filters": [], - "internalReferences": [ - { - "id": "ccad7b1133a69c9f7e6e7e01f7a7937f158273890dea0030f085bad62093bfcf", - "name": "indexpattern-datasource-layer-xy-layer-chart-net-tx", - "type": "index-pattern" - } - ], - "query": { - "esql": "SET unmapped_fields = \"nullify\";\nTS metrics-aws.rds.otel-* | WHERE DBInstanceIdentifier IS NOT NULL AND DBInstanceIdentifier != \"\" | WHERE stat == \"Average\" AND (`metrics.amazonaws.com/AWS/RDS/NetworkReceiveThroughput` IS NOT NULL OR `metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput` IS NOT NULL) | STATS col_no = AVG(avg_over_time(`metrics.amazonaws.com/AWS/RDS/NetworkTransmitThroughput`)) / 1048576.0 BY timestamp = TBUCKET(50, ?_tstart, ?_tend), DBInstanceIdentifier, cloud.region | WHERE col_no IS NOT NULL | SORT timestamp ASC, col_no DESC, DBInstanceIdentifier ASC | LIMIT 10 BY timestamp" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": false + "title": "Account", + "use_global_filters": true, + "values_source": "field" + }, + "grow": true, + "order": 0, + "type": "options_list_control", + "width": "medium" }, - "layers": [ - { - "accessors": [ - "col_no" - ], - "layerId": "xy-layer-chart-net-tx", - "layerType": "data", - "seriesType": "line", - "showGridlines": false, - "splitAccessors": [ - "DBInstanceIdentifier" - ], - "xAccessor": "timestamp", - "yConfig": null - } - ], - "legend": { - "isVisible": true, - "position": "bottom" + "ctrl-rds-db-instance-id": { + "config": { + "dataViewRefName": "ctrl-rds-db-instance-id:optionsListDataView", + "exclude": false, + "exists_selected": false, + "field_name": "DBInstanceIdentifier", + "ignore_validations": false, + "run_past_timeout": false, + "search_technique": "wildcard", + "selected_options": [], + "single_select": false, + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "DB instance", + "use_global_filters": true, + "values_source": "field" + }, + "grow": true, + "order": 2, + "type": "options_list_control", + "width": "medium" }, - "preferredSeriesType": "line", - "valueLabels": "hide" - } - }, - "title": "Top 10 RDS databases by network tx", - "version": 2, - "visualizationType": "lnsXY" - }, - "description": "Network transmit throughput per database over time (MiB/s, averaged per bucket). Top 10 databases by transmit throughput per bucket.", - "title": "Top 10 RDS databases by network tx" - }, - "gridData": { - "h": 12, - "i": "chart-net-tx", - "sectionId": "aws-rds-per-database-section", - "w": 16, - "x": 16, - "y": 12 - }, - "panelIndex": "chart-net-tx", - "type": "vis" - } - ], - "pinned_panels": { - "panels": { - "ctrl-rds-account": { - "config": { - "dataViewRefName": "ctrl-rds-account:optionsListDataView", - "exclude": false, - "exists_selected": false, - "field_name": "cloud.account.id", - "ignore_validations": false, - "run_past_timeout": false, - "search_technique": "wildcard", - "selected_options": [], - "single_select": false, - "sort": { - "by": "_count", - "direction": "desc" - }, - "title": "Account", - "use_global_filters": true, - "values_source": "field" - }, - "grow": true, - "order": 0, - "type": "options_list_control", - "width": "medium" + "ctrl-rds-region": { + "config": { + "dataViewRefName": "ctrl-rds-region:optionsListDataView", + "exclude": false, + "exists_selected": false, + "field_name": "cloud.region", + "ignore_validations": false, + "run_past_timeout": false, + "search_technique": "wildcard", + "selected_options": [], + "single_select": false, + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "Region", + "use_global_filters": true, + "values_source": "field" + }, + "grow": true, + "order": 1, + "type": "options_list_control", + "width": "medium" + } + } }, - "ctrl-rds-db-instance-id": { - "config": { - "dataViewRefName": "ctrl-rds-db-instance-id:optionsListDataView", - "exclude": false, - "exists_selected": false, - "field_name": "DBInstanceIdentifier", - "ignore_validations": false, - "run_past_timeout": false, - "search_technique": "wildcard", - "selected_options": [], - "single_select": false, - "sort": { - "by": "_count", - "direction": "desc" + "sections": [ + { + "collapsed": false, + "gridData": { + "i": "aws-rds-overview-section", + "y": 2 + }, + "title": "Overview (Current status)" }, - "title": "DB instance", - "use_global_filters": true, - "values_source": "field" - }, - "grow": true, - "order": 2, - "type": "options_list_control", - "width": "medium" - }, - "ctrl-rds-region": { - "config": { - "dataViewRefName": "ctrl-rds-region:optionsListDataView", - "exclude": false, - "exists_selected": false, - "field_name": "cloud.region", - "ignore_validations": false, - "run_past_timeout": false, - "search_technique": "wildcard", - "selected_options": [], - "single_select": false, - "sort": { - "by": "_count", - "direction": "desc" + { + "collapsed": false, + "gridData": { + "i": "aws-rds-list-section", + "y": 3 + }, + "title": "List of RDS databases in the selected time range" }, - "title": "Region", - "use_global_filters": true, - "values_source": "field" - }, - "grow": true, - "order": 1, - "type": "options_list_control", - "width": "medium" - } - } + { + "collapsed": false, + "gridData": { + "i": "aws-rds-per-database-section", + "y": 4 + }, + "title": "Per database metrics" + } + ], + "timeFrom": "now-1h/h", + "timeRestore": true, + "timeTo": "now", + "title": "[AWS RDS OTel] Overview" }, - "sections": [ - { - "collapsed": false, - "gridData": { - "i": "aws-rds-overview-section", - "y": 2 + "coreMigrationVersion": "8.8.0", + "created_at": "2026-07-10T10:08:14.193Z", + "id": "aws_rds_otel-c92e1216-83f6-4de7-9d7f-1bcb42d5988a", + "references": [ + { + "id": "aws_rds_otel-36df60a8-6a6e-4f72-96ce-a3533d24901a", + "name": "tbl-instances:dashboard_drilldown_aws_rds_otel-36df60a8-6a6e-4f72-96ce-a3533d24901a", + "type": "dashboard" }, - "title": "Overview (Current status)" - }, - { - "collapsed": false, - "gridData": { - "i": "aws-rds-list-section", - "y": 3 + { + "id": "metrics-*", + "name": "ctrl-rds-account:optionsListDataView", + "type": "index-pattern" }, - "title": "List of RDS databases in the selected time range" - }, - { - "collapsed": false, - "gridData": { - "i": "aws-rds-per-database-section", - "y": 4 + { + "id": "metrics-*", + "name": "ctrl-rds-region:optionsListDataView", + "type": "index-pattern" }, - "title": "Per database metrics" - } + { + "id": "metrics-*", + "name": "ctrl-rds-db-instance-id:optionsListDataView", + "type": "index-pattern" + } ], - "timeRestore": false, - "title": "[AWS RDS OTel] Metrics" - }, - "coreMigrationVersion": "8.8.0", - "created_at": "2026-06-30T08:50:52.757Z", - "created_by": "u_LQY3UOHdVkYrbjy8PgOCQKR-fROZ1M0Vh7DvpOH6S40_0", - "id": "aws_rds_otel-c92e1216-83f6-4de7-9d7f-1bcb42d5988a", - "references": [ - { - "id": "metrics-*", - "name": "ctrl-rds-account:optionsListDataView", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "ctrl-rds-region:optionsListDataView", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "ctrl-rds-db-instance-id:optionsListDataView", - "type": "index-pattern" - } - ], - "type": "dashboard", - "typeMigrationVersion": "10.3.0", - "updated_by": "u_LQY3UOHdVkYrbjy8PgOCQKR-fROZ1M0Vh7DvpOH6S40_0" -} + "type": "dashboard", + "typeMigrationVersion": "10.3.0" +} \ No newline at end of file diff --git a/packages/aws_rds_otel/manifest.yml b/packages/aws_rds_otel/manifest.yml index ced15063131..f0d8e1a8b9a 100644 --- a/packages/aws_rds_otel/manifest.yml +++ b/packages/aws_rds_otel/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.6.0 name: aws_rds_otel title: "AWS RDS Metrics OpenTelemetry Assets" -version: 0.9.0 +version: 0.10.0 source: license: "Elastic-2.0" description: "AWS RDS Metrics OpenTelemetry Assets" @@ -22,9 +22,13 @@ discovery: datasets: - name: aws.rds.otel screenshots: - - src: /img/dashboard.png - title: Dashboard screenshot - size: 600x600 + - src: /img/aws_rds_overview_dashboard.png + title: AWS RDS Metrics OpenTelemetry Overview Dashboard + size: 3524x5306 + type: image/png + - src: /img/aws_rds_detail_dashboard.png + title: AWS RDS Metrics OpenTelemetry Drilldown Dashboard + size: 3524x4506 type: image/png icons: - src: /img/logo.svg