Skip to content

Commit cee2348

Browse files
Merge pull request #4 from letsgodevops/feat/rds
Add module for RDS monitoring
2 parents fadf731 + a951b1b commit cee2348

File tree

5 files changed

+159
-0
lines changed

5 files changed

+159
-0
lines changed

modules/dashboards/rds/README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# RDS Dashboard
2+
3+
Provides basic metrics for RDS instance
4+
Those include:
5+
* Summary of instance size & storage
6+
* CPU, Memory, Storage utilization
7+
* Active connections
8+
* IOPS and Network statistics
9+
10+
## Example
11+
```
12+
module "dashboard" {
13+
source = "github.com/letsgodevops/terraform-aws-cloudwatch//modules/dashboards/rds"
14+
15+
section_name = "My database"
16+
db_instance = aws_db_instance.this
17+
}
18+
```
19+
20+
21+
## Preview
22+
![Preview](./preview.png)

modules/dashboards/rds/main.tf

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
locals {
2+
metrics = {
3+
rds = {
4+
DBInstanceIdentifier = ["AWS/RDS", "WriteLatency", "DBInstanceIdentifier", var.db_instance.identifier],
5+
DatabaseConnections = ["AWS/RDS", "DatabaseConnections", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
6+
MaximumUsedTransactionIDs = ["AWS/RDS", "MaximumUsedTransactionIDs", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
7+
8+
FreeableMemory = ["AWS/RDS", "FreeableMemory", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Minimum" }],
9+
SwapUsage = ["AWS/RDS", "SwapUsage", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
10+
FreeStorageSpace = ["AWS/RDS", "FreeStorageSpace", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Minimum" }],
11+
12+
CPUUtilization = ["AWS/RDS", "CPUUtilization", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
13+
CPUCreditUsage = ["AWS/RDS", "CPUCreditUsage", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
14+
CPUCreditBalance = ["AWS/RDS", "CPUCreditBalance", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Minimum" }],
15+
CPUSurplusCreditsCharged = ["AWS/RDS", "CPUSurplusCreditsCharged", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
16+
CPUSurplusCreditBalance = ["AWS/RDS", "CPUSurplusCreditBalance", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Minimum" }],
17+
18+
WriteThroughput = ["AWS/RDS", "WriteThroughput", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
19+
ReadThroughput = ["AWS/RDS", "ReadThroughput", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
20+
21+
ReadIOPS = ["AWS/RDS", "ReadIOPS", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
22+
WriteIOPS = ["AWS/RDS", "WriteIOPS", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
23+
24+
ReadLatency = ["AWS/RDS", "ReadLatency", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
25+
DiskQueueDepth = ["AWS/RDS", "DiskQueueDepth", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
26+
27+
TransactionLogsDiskUsage = ["AWS/RDS", "TransactionLogsDiskUsage", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
28+
TransactionLogsGeneration = ["AWS/RDS", "TransactionLogsGeneration", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
29+
OldestReplicationSlotLag = ["AWS/RDS", "OldestReplicationSlotLag", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
30+
ReplicationSlotDiskUsage = ["AWS/RDS", "ReplicationSlotDiskUsage", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
31+
32+
NetworkReceiveThroughput = ["AWS/RDS", "NetworkReceiveThroughput", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
33+
NetworkTransmitThroughput = ["AWS/RDS", "NetworkTransmitThroughput", "DBInstanceIdentifier", var.db_instance.identifier, { "stat" = "Maximum" }],
34+
}
35+
}
36+
}
37+
38+
module "name" {
39+
source = "../../../modules/widgets/text"
40+
41+
text = "RDS: ${var.section_name}"
42+
details = "Instance: ${var.db_instance.instance_class}; Storage:${var.db_instance.allocated_storage}GB"
43+
}
44+
45+
module "summary" {
46+
source = "../../../modules/widgets/value"
47+
48+
name = "RDS Summary: ${var.db_instance.identifier}"
49+
metrics = [
50+
local.metrics.rds.DatabaseConnections,
51+
local.metrics.rds.FreeStorageSpace,
52+
local.metrics.rds.FreeableMemory,
53+
local.metrics.rds.SwapUsage,
54+
local.metrics.rds.CPUUtilization,
55+
local.metrics.rds.CPUCreditBalance,
56+
]
57+
58+
width = 24
59+
}
60+
61+
module "memory" {
62+
source = "../../../modules/widgets/value-chart"
63+
64+
name = "memory"
65+
metrics = [local.metrics.rds.FreeableMemory, local.metrics.rds.SwapUsage]
66+
}
67+
68+
module "cpu" {
69+
source = "../../../modules/widgets/value-chart"
70+
71+
name = "cpu"
72+
metrics = [local.metrics.rds.CPUUtilization]
73+
}
74+
75+
module "storage" {
76+
source = "../../../modules/widgets/value-chart"
77+
78+
name = "storage"
79+
metrics = [local.metrics.rds.FreeStorageSpace]
80+
}
81+
82+
module "connections" {
83+
source = "../../../modules/widgets/value-chart"
84+
85+
name = "connections"
86+
metrics = [local.metrics.rds.DatabaseConnections]
87+
}
88+
89+
module "credits" {
90+
source = "../../../modules/widgets/value-chart"
91+
92+
name = "credits"
93+
metrics = [local.metrics.rds.CPUCreditUsage, local.metrics.rds.CPUCreditBalance,
94+
local.metrics.rds.CPUSurplusCreditsCharged, local.metrics.rds.CPUSurplusCreditBalance]
95+
}
96+
97+
module "read_write" {
98+
source = "../../../modules/widgets/value-chart"
99+
100+
name = "read/write"
101+
metrics = [local.metrics.rds.ReadIOPS, local.metrics.rds.WriteIOPS]
102+
}
103+
104+
module "network" {
105+
source = "../../../modules/widgets/value-chart"
106+
107+
name = "network"
108+
metrics = [local.metrics.rds.NetworkReceiveThroughput, local.metrics.rds.NetworkTransmitThroughput]
109+
}

modules/dashboards/rds/outputs.tf

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
output "widgets" {
2+
value = concat(
3+
[
4+
module.name.widget,
5+
module.summary.widget
6+
],
7+
module.memory.widgets,
8+
module.cpu.widgets,
9+
module.storage.widgets,
10+
module.connections.widgets,
11+
module.credits.widgets,
12+
module.read_write.widgets,
13+
module.network.widgets
14+
)
15+
}

modules/dashboards/rds/prevoew.png

176 KB
Loading
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
variable "section_name" {
2+
type = string
3+
description = "Service display name"
4+
}
5+
6+
variable "db_instance" {
7+
type = object({
8+
instance_class = string
9+
allocated_storage = number
10+
identifier = string
11+
})
12+
description = "Direct link to the rds_instance resource"
13+
}

0 commit comments

Comments
 (0)