Skip to content

Commit 0cab46d

Browse files
committed
working with default exports from instances
1 parent 11e81bc commit 0cab46d

5 files changed

Lines changed: 55 additions & 80 deletions

File tree

infrastructure/environments/production/main.tf

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ provider "aws" {
3434
locals {
3535
project_name = "finishline"
3636
environment = "production"
37+
38+
# Extract ALB ARN suffix for CloudWatch metrics
39+
# Full ARN: arn:aws:elasticloadbalancing:region:account:loadbalancer/app/name/id
40+
# Suffix needed: app/name/id
41+
alb_arn_suffix = try(split("loadbalancer/", data.aws_lb.eb_alb.arn)[1], "")
3742
}
3843

3944
#############
@@ -253,6 +258,31 @@ resource "aws_sns_topic" "alerts" {
253258
}
254259
}
255260

261+
#############
262+
# Data Source: Fetch Autoscaling Group Name
263+
#############
264+
# Query AWS directly to get the actual autoscaling group name
265+
data "aws_autoscaling_groups" "eb_asg" {
266+
filter {
267+
name = "tag:elasticbeanstalk:environment-name"
268+
values = [module.elasticbeanstalk.environment_name]
269+
}
270+
271+
depends_on = [module.elasticbeanstalk]
272+
}
273+
274+
#############
275+
# Data Source: Fetch Application Load Balancer
276+
#############
277+
# Query AWS directly to get the actual ALB for metrics
278+
data "aws_lb" "eb_alb" {
279+
tags = {
280+
"elasticbeanstalk:environment-name" = module.elasticbeanstalk.environment_name
281+
}
282+
283+
depends_on = [module.elasticbeanstalk]
284+
}
285+
256286
#############
257287
# Monitoring Module
258288
#############
@@ -263,7 +293,8 @@ module "monitoring" {
263293
environment = local.environment
264294
aws_region = var.aws_region
265295
eb_environment_name = module.elasticbeanstalk.environment_name
266-
eb_autoscaling_group_name = module.elasticbeanstalk.autoscaling_groups[0]
296+
eb_autoscaling_group_name = data.aws_autoscaling_groups.eb_asg.names[0]
297+
alb_arn_suffix = local.alb_arn_suffix
267298
rds_instance_id = module.rds.db_instance_id
268299
log_retention_days = 30
269300
sns_topic_arn = aws_sns_topic.alerts.arn

infrastructure/modules/monitoring/main.tf

Lines changed: 8 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -27,44 +27,24 @@ resource "aws_cloudwatch_dashboard" "main" {
2727
}
2828
}
2929
},
30-
# EC2 Memory Utilization
3130
{
3231
type = "metric"
3332
properties = {
3433
metrics = [
35-
["CWAgent", "mem_used_percent", "AutoScalingGroupName", var.eb_autoscaling_group_name, { stat = "Average" }]
36-
]
37-
period = 300
38-
stat = "Average"
39-
region = var.aws_region
40-
title = "EC2 Memory Utilization (%)"
41-
yAxis = {
42-
left = {
43-
min = 0
44-
max = 100
45-
}
46-
}
47-
}
48-
},
49-
# EB Request Count
50-
{
51-
type = "metric"
52-
properties = {
53-
metrics = [
54-
["AWS/ElasticBeanstalk", "RequestCount", "EnvironmentName", var.eb_environment_name, { stat = "Sum" }]
34+
["AWS/ApplicationELB", "RequestCount", "LoadBalancer", var.alb_arn_suffix, { stat = "Sum" }]
5535
]
5636
period = 300
5737
stat = "Sum"
5838
region = var.aws_region
5939
title = "Request Count"
6040
}
6141
},
62-
# HTTP 5xx Errors
42+
# HTTP 5xx Errors (Target Responses)
6343
{
6444
type = "metric"
6545
properties = {
6646
metrics = [
67-
["AWS/ElasticBeanstalk", "ApplicationRequests5xx", "EnvironmentName", var.eb_environment_name, { stat = "Sum" }]
47+
["AWS/ApplicationELB", "HTTPCode_Target_5XX_Count", "LoadBalancer", var.alb_arn_suffix, { stat = "Sum" }]
6848
]
6949
period = 300
7050
stat = "Sum"
@@ -176,68 +156,22 @@ resource "aws_cloudwatch_metric_alarm" "eb_cpu_high" {
176156
}
177157
}
178158

179-
# High Memory Alarm
180-
resource "aws_cloudwatch_metric_alarm" "eb_memory_high" {
181-
alarm_name = "${var.project_name}-${var.environment}-eb-memory-high"
182-
comparison_operator = "GreaterThanThreshold"
183-
evaluation_periods = 2
184-
metric_name = "mem_used_percent"
185-
namespace = "CWAgent"
186-
period = 300
187-
statistic = "Average"
188-
threshold = 80
189-
alarm_description = "This metric monitors EC2 memory utilization"
190-
alarm_actions = [var.sns_topic_arn]
191-
192-
dimensions = {
193-
AutoScalingGroupName = var.eb_autoscaling_group_name
194-
}
195-
196-
tags = {
197-
Environment = var.environment
198-
Project = var.project_name
199-
}
200-
}
201-
202-
# Critical Memory Alarm
203-
resource "aws_cloudwatch_metric_alarm" "eb_memory_critical" {
204-
alarm_name = "${var.project_name}-${var.environment}-eb-memory-critical"
205-
comparison_operator = "GreaterThanThreshold"
206-
evaluation_periods = 2
207-
metric_name = "mem_used_percent"
208-
namespace = "CWAgent"
209-
period = 300
210-
statistic = "Average"
211-
threshold = 90
212-
alarm_description = "This metric monitors EC2 memory utilization - CRITICAL"
213-
alarm_actions = [var.sns_topic_arn]
214-
215-
dimensions = {
216-
AutoScalingGroupName = var.eb_autoscaling_group_name
217-
}
218-
219-
tags = {
220-
Environment = var.environment
221-
Project = var.project_name
222-
}
223-
}
224-
225159
# HTTP 5xx Error Rate Alarm
226160
# This monitors server errors which indicate application health issues
227-
resource "aws_cloudwatch_metric_alarm" "eb_http_5xx_errors" {
228-
alarm_name = "${var.project_name}-${var.environment}-eb-http-5xx-high"
161+
resource "aws_cloudwatch_metric_alarm" "alb_http_5xx_errors" {
162+
alarm_name = "${var.project_name}-${var.environment}-alb-http-5xx-high"
229163
comparison_operator = "GreaterThanThreshold"
230164
evaluation_periods = 2
231-
metric_name = "ApplicationRequests5xx"
232-
namespace = "AWS/ElasticBeanstalk"
165+
metric_name = "HTTPCode_Target_5XX_Count"
166+
namespace = "AWS/ApplicationELB"
233167
period = 300
234168
statistic = "Sum"
235169
threshold = 10 # Alert if more than 10 5xx errors in 5 minutes
236170
alarm_description = "High rate of HTTP 5xx errors indicates application issues"
237171
alarm_actions = [var.sns_topic_arn]
238172

239173
dimensions = {
240-
EnvironmentName = var.eb_environment_name
174+
LoadBalancer = var.alb_arn_suffix
241175
}
242176

243177
tags = {

infrastructure/modules/monitoring/variables.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ variable "eb_autoscaling_group_name" {
2525
type = string
2626
}
2727

28+
variable "alb_arn_suffix" {
29+
description = "Application Load Balancer ARN suffix for metrics"
30+
type = string
31+
}
32+
2833
variable "rds_instance_id" {
2934
description = "RDS instance ID"
3035
type = string

infrastructure/modules/rds/main.tf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ resource "aws_cloudwatch_metric_alarm" "database_cpu" {
8080
alarm_actions = var.alarm_actions
8181

8282
dimensions = {
83-
DBInstanceIdentifier = aws_db_instance.main.id
83+
DBInstanceIdentifier = aws_db_instance.main.identifier
8484
}
8585

8686
tags = {
@@ -102,7 +102,7 @@ resource "aws_cloudwatch_metric_alarm" "database_memory" {
102102
alarm_actions = var.alarm_actions
103103

104104
dimensions = {
105-
DBInstanceIdentifier = aws_db_instance.main.id
105+
DBInstanceIdentifier = aws_db_instance.main.identifier
106106
}
107107

108108
tags = {
@@ -124,7 +124,7 @@ resource "aws_cloudwatch_metric_alarm" "database_storage" {
124124
alarm_actions = var.alarm_actions
125125

126126
dimensions = {
127-
DBInstanceIdentifier = aws_db_instance.main.id
127+
DBInstanceIdentifier = aws_db_instance.main.identifier
128128
}
129129

130130
tags = {
@@ -146,7 +146,7 @@ resource "aws_cloudwatch_metric_alarm" "database_connections" {
146146
alarm_actions = var.alarm_actions
147147

148148
dimensions = {
149-
DBInstanceIdentifier = aws_db_instance.main.id
149+
DBInstanceIdentifier = aws_db_instance.main.identifier
150150
}
151151

152152
tags = {

infrastructure/modules/rds/outputs.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
# RDS Module Outputs
22

33
output "db_instance_id" {
4-
description = "The RDS instance ID"
4+
description = "The RDS instance identifier (for CloudWatch metrics)"
5+
value = aws_db_instance.main.identifier
6+
}
7+
8+
output "db_instance_resource_id" {
9+
description = "The RDS instance resource ID (DbiResourceId)"
510
value = aws_db_instance.main.id
611
}
712

0 commit comments

Comments
 (0)