Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
180 changes: 0 additions & 180 deletions README.md

This file was deleted.

2 changes: 1 addition & 1 deletion infra/eks-cluster/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ provider "aws" {
}

module "eks-cluster" {
source = "../modules/eks"
source = "../../modules/eks"
cluster_name = var.cluster_name
role_name = var.role_name
vpc_subnets = var.vpc_subnets
Expand Down
2 changes: 1 addition & 1 deletion infra/tag-policy/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ provider "aws" {
}

module "tag-policy" {
source = "../../../modules/tag-policy"
source = "../../modules/tag-policy"
region = var.region
policy_name = var.policy_name
policy_type = var.policy_type
Expand Down
165 changes: 165 additions & 0 deletions modules/cloudwatch/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
provider "aws" {
region = var.aws_region
}

data "aws_sns_topic" "cloudwatch_sns_topic" {
name = var.sns_topic_name
}

data "aws_autoscaling_group" "example" {
count = length(var.autoscaling_group_name) > 0 ? 1 : 0
name = var.autoscaling_group_name
}

data "aws_instances" "asg_instances" {
count = length(var.autoscaling_group_name) > 0 ? 1 : 0
instance_tags = {
"aws:autoscaling:groupName" = data.aws_autoscaling_group.example[0].name
}
}

locals {
combined_instance_ids = distinct(concat(
length(var.autoscaling_group_name) > 0 ? data.aws_instances.asg_instances[0].ids : [],
var.instance_ids
))
}

output "instance_ids" {
value = local.combined_instance_ids
}

data "aws_instance" "instances" {
for_each = toset(local.combined_instance_ids)
instance_id = each.value
}

locals {
instance_alarms = {
for id in local.combined_instance_ids : id => {
disk_utilization = "demo-disk-utilization-alarm-${id}"
memory_utilization = "demo-memory-utilization-alarm-${id}"
cpu_utilization = "demo-cpu-utilization-alarm-${id}"
status_check_fail = "demo-status-check-fail-alarm-${id}"
cpu_credit_usage = "demo-cpu-credit-usage-alarm-${id}"
}
}
}

resource "aws_cloudwatch_metric_alarm" "disk_utilization_alarm" {
for_each = local.instance_alarms

alarm_name = each.value.disk_utilization
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = var.evaluation_periods
metric_name = "disk_used_percent"
namespace = "CWAgent"
period = var.alarm_period
statistic = "Average"
threshold = var.alarm_threshold
treat_missing_data = "missing"
insufficient_data_actions = var.alarm_actions

dimensions = {
InstanceId = each.key
device = "xvda1"
fstype = "xfs"
path = "/"
}

alarm_description = "This metric monitors EC2 disk utilization for instance ${each.key}"
actions_enabled = true
alarm_actions = [data.aws_sns_topic.cloudwatch_sns_topic.arn]
}

resource "aws_cloudwatch_metric_alarm" "memory_utilization_alarm" {
for_each = local.instance_alarms

alarm_name = each.value.memory_utilization
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = var.evaluation_periods
metric_name = "mem_used_percent"
namespace = "CWAgent"
period = var.alarm_period
statistic = "Average"
threshold = var.alarm_threshold
treat_missing_data = "missing"
insufficient_data_actions = var.alarm_actions

dimensions = {
InstanceId = each.key
}

alarm_description = "This metric monitors EC2 memory utilization for instance ${each.key}"
actions_enabled = true
alarm_actions = [data.aws_sns_topic.cloudwatch_sns_topic.arn]
}

resource "aws_cloudwatch_metric_alarm" "cpu_utilization_alarm" {
for_each = local.instance_alarms

alarm_name = each.value.cpu_utilization
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = var.evaluation_periods
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = var.alarm_period
statistic = "Average"
threshold = var.alarm_threshold
treat_missing_data = "missing"
insufficient_data_actions = var.alarm_actions

dimensions = {
InstanceId = each.key
}

alarm_description = "This metric monitors EC2 CPU utilization for instance ${each.key}"
actions_enabled = true
alarm_actions = [data.aws_sns_topic.cloudwatch_sns_topic.arn]
}

resource "aws_cloudwatch_metric_alarm" "status_check_fail_alarm" {
for_each = local.instance_alarms

alarm_name = each.value.status_check_fail
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = var.evaluation_periods
metric_name = "StatusCheckFailed"
namespace = "AWS/EC2"
period = var.alarm_period
statistic = "Average"
threshold = 1
treat_missing_data = "missing"
insufficient_data_actions = var.alarm_actions

dimensions = {
InstanceId = each.key
}

alarm_description = "This metric monitors EC2 status check failures for instance ${each.key}"
actions_enabled = true
alarm_actions = [data.aws_sns_topic.cloudwatch_sns_topic.arn]
}

resource "aws_cloudwatch_metric_alarm" "cpu_credit_usage_alarm" {
for_each = local.instance_alarms

alarm_name = each.value.cpu_credit_usage
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = var.evaluation_periods
metric_name = "CPUCreditUsage"
namespace = "AWS/EC2"
period = var.alarm_period
statistic = "Average"
threshold = var.alarm_threshold
treat_missing_data = "missing"
insufficient_data_actions = var.alarm_actions

dimensions = {
InstanceId = each.key
}

alarm_description = "This metric monitors EC2 CPU credit usage for instance ${each.key}"
actions_enabled = true
alarm_actions = [data.aws_sns_topic.cloudwatch_sns_topic.arn]
}
21 changes: 21 additions & 0 deletions modules/cloudwatch/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
output "disk_utilization_alarm_arns" {
description = "The ARNs of the disk utilization CloudWatch alarms"
value = { for id, alarm in aws_cloudwatch_metric_alarm.disk_utilization_alarm : id => alarm.arn }
}

output "memory_utilization_alarm_arns" {
description = "The ARNs of the memory utilization CloudWatch alarms"
value = { for id, alarm in aws_cloudwatch_metric_alarm.memory_utilization_alarm : id => alarm.arn }
}

output "cpu_utilization_alarm_arns" {
description = "The ARNs of the CPU utilization CloudWatch alarms"
value = { for id, alarm in aws_cloudwatch_metric_alarm.cpu_utilization_alarm : id => alarm.arn }
}

output "status_check_fail_alarm_arns" {
description = "The ARNs of the status check fail CloudWatch alarms"
value = { for id, alarm in aws_cloudwatch_metric_alarm.status_check_fail_alarm : id => alarm.arn }
}


Loading