Terraform Module for Datadog Monitors on AWS
Terraform module to provision Datadog Monitors
on AWS.
Usage
Simple setup
Create simple Datadog monitors with default configurations.
module "datadog" {
source = "app.terraform.io/ncodelibrary/datadog/aws"
version = "0.1.3"
system = true
lambda = true
k8s = true
ecs = true
rds = true
elb = true
alb = true
tags = {
Owner = "example@nclouds.com"
}
}
For more details on a working example, please visit examples/simple
Advanced Setup
If you want to create Datadog monitors with custom configuration e.g custom metrics, custom tags for triggers, custom notification templates etc., you can use the module like this:
module "datadog" {
source = "app.terraform.io/ncodelibrary/datadog/aws"
version = "0.1.3"
system = true
elb = true
tags = {
Owner = "example@nclouds.com"
}
system_queries = {
disk_total = "avg:system.disk.total"
mem_total = "avg:system.mem.total"
disk_free = "avg:system.disk.free"
mem_used = "avg:system.mem.used"
load = "avg:system.load.norm.5"
cpu = "avg:system.cpu.idle"
}
elb_queries = {
surge_queue_length = "avg:aws.elb.surge_queue_length"
active_connection = "avg:aws.elb.active_connection_count"
unhealthy_host = "avg:aws.elb.unhealthy_host_count"
response_time = "avg:aws.elb.target_response_time.average"
request_count = "avg:aws.elb.request_count"
healthy_host = "avg:aws.elb.healthy_host_count"
spill_over = "avg:aws.elb.spillover_count"
count_4xx = "avg:aws.elb.httpcode_elb_4xx"
count_5xx = "avg:aws.elb.httpcode_elb_5xx"
latency = "avg:aws.elb.latency"
}
system_trigger_by = "{host,Environment}"
elb_trigger_by = "{host,region,Environment}"
elb_alert_message = <<EOF
Value: {{value}}
Name: {{host.name}}
Region: {{region.name}}
Environment: {{Environment.name}}
{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}
{{#is_alert}}@pagerduty{{/is_alert}}
{{#is_warning}}@pagerduty{{/is_warning}}
{{#is_recovery}}@pagerduty{{/is_recovery}}
@slack-alerts
EOF
system_alert_message = <<EOF
Value: {{value}}
Name: {{host.name}}
Region: {{region.name}}
Environment: {{Environment.name}}
{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}
{{#is_alert}}@pagerduty{{/is_alert}}
{{#is_warning}}@pagerduty{{/is_warning}}
{{#is_recovery}}@pagerduty{{/is_recovery}}
@slack-alerts
EOF
}
For more options refer to a working example at examples/advanced
Examples
Here are some working examples of using this module:
Requirements
Name | Version |
---|---|
terraform | >= 0.12 |
Providers
No providers.
Modules
Name | Source | Version |
---|---|---|
active_connection | ./modules/datadog-monitor | |
alb_4xx | ./modules/datadog-monitor | |
alb_5xx | ./modules/datadog-monitor | |
alb_active_connection | ./modules/datadog-monitor | |
alb_healthy_host_count | ./modules/datadog-monitor | |
alb_rejected | ./modules/datadog-monitor | |
alb_request_count | ./modules/datadog-monitor | |
alb_target_response_time | ./modules/datadog-monitor | |
alb_unhealthy_host_count | ./modules/datadog-monitor | |
cpu_utilization | ./modules/datadog-monitor | |
crashloopbackoff | ./modules/datadog-monitor | |
current_conn | ./modules/datadog-monitor | |
diff_in_nodes_daemonset | ./modules/datadog-monitor | |
diff_in_replica_replicaset | ./modules/datadog-monitor | |
diff_in_replica_statefulset | ./modules/datadog-monitor | |
diff_in_replicas_deployment | ./modules/datadog-monitor | |
ec_failover | ./modules/datadog-monitor | |
ecs_cluster_cpu_reservation | ./modules/datadog-monitor | |
ecs_cluster_cpu_utilization | ./modules/datadog-monitor | |
ecs_cluster_mem_reservation | ./modules/datadog-monitor | |
ecs_cluster_mem_utilization | ./modules/datadog-monitor | |
ecs_service_cpu_utilization | ./modules/datadog-monitor | |
ecs_service_mem_utilization | ./modules/datadog-monitor | |
ecs_task_count | ./modules/datadog-monitor | |
elb_4xx | ./modules/datadog-monitor | |
elb_5xx | ./modules/datadog-monitor | |
elb_healthy_host_count | ./modules/datadog-monitor | |
elb_latency | ./modules/datadog-monitor | |
elb_request_count | ./modules/datadog-monitor | |
elb_spillover | ./modules/datadog-monitor | |
elb_surge_queue_length | ./modules/datadog-monitor | |
elb_target_response_time | ./modules/datadog-monitor | |
elb_unhealthy_host_count | ./modules/datadog-monitor | |
engine_cpu_utilization | ./modules/datadog-monitor | |
evictions | ./modules/datadog-monitor | |
failover | ./modules/datadog-monitor | |
host_mem | ./modules/datadog-monitor | |
imagepull_backoff | ./modules/datadog-monitor | |
job_failed | ./modules/datadog-monitor | |
lag | ./modules/datadog-monitor | |
lambda_concurrent_executions | ./modules/datadog-monitor | |
lambda_duration | ./modules/datadog-monitor | |
lambda_errors | ./modules/datadog-monitor | |
lambda_throtttle_executions | ./modules/datadog-monitor | |
memc_mem | ./modules/datadog-monitor | |
node_disk_pressure | ./modules/datadog-monitor | |
node_mem_pressure | ./modules/datadog-monitor | |
node_nw_unavailable | ./modules/datadog-monitor | |
node_out_of_disk | ./modules/datadog-monitor | |
pod_memory | ./modules/datadog-monitor | |
rds_burst_balance | ./modules/datadog-monitor | |
rds_cpu_utilization | ./modules/datadog-monitor | |
rds_cpucredit_balance | ./modules/datadog-monitor | |
rds_db_connections | ./modules/datadog-monitor | |
rds_disk_queuedepth | ./modules/datadog-monitor | |
rds_disk_usage | ./modules/datadog-monitor | |
rds_mem_utilization | ./modules/datadog-monitor | |
rds_read_iops | ./modules/datadog-monitor | |
rds_read_latency | ./modules/datadog-monitor | |
rds_read_throughput | ./modules/datadog-monitor | |
rds_replica_lag | ./modules/datadog-monitor | |
rds_write_iops | ./modules/datadog-monitor | |
rds_write_latency | ./modules/datadog-monitor | |
rds_write_throughput | ./modules/datadog-monitor | |
redis_mem | ./modules/datadog-monitor | |
system_cpu | ./modules/datadog-monitor | |
system_disk | ./modules/datadog-monitor | |
system_load | ./modules/datadog-monitor | |
system_mem | ./modules/datadog-monitor | |
unable_to_place_event | ./modules/datadog-monitor | |
unscheduled_nodes | ./modules/datadog-monitor |
Resources
No resources.
Inputs
Name | Description | Type | Default | Required |
---|---|---|---|---|
alb | variable to enable elb monitors creation | bool |
false |
no |
alb_queries | Variabls for defining datadog alb queries. | map |
{ |
no |
ec | variable to enable Elasticache monitors creation | bool |
false |
no |
ec_alert_message | Alert message to add in Elasticache monitors. | string |
"Value: {{value}}\nCluster: {{cacheclusterid.name}}\nNode: {{cachenodeid.name}}\nRegion: {{region.name}}\nEnvironment: {{Environment.name}}\n\n{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}\n{{#is_alert}}@pagerduty{{/is_alert}}\n{{#is_warning}}@pagerduty{{/is_warning}}\n{{#is_recovery}}@pagerduty{{/is_recovery}}\n@slack-alerts\n" |
no |
ec_queries | Variabls for defining datadog Elasticache queries. | map |
{ |
no |
ec_trigger_by | Tags to trigger a separate alert for each tag mentioned. | string |
"{cacheclusterid,cachenodeid,Environment}" |
no |
ecs | Enable ecs monitors creation | bool |
false |
no |
ecs_alert_message | Alert message to add in all ecs monitors. | string |
"Cluster: {{clustername.name}}\nService: {{servicename.name}}\nEnvironment: {{Environment.name}}\n\n{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}\n{{#is_alert}}@pagerduty{{/is_alert}}\n{{#is_warning}}@pagerduty{{/is_warning}}\n{{#is_recovery}}@pagerduty{{/is_recovery}}\n@slack-alerts\n" |
no |
ecs_queries | Variables for defining datadog ecs queries. | map |
{ |
no |
ecs_trigger_by | Tags to trigger a separate alert for each tag mentioned. | string |
"{clustername,servicename,region,Environment}" |
no |
elb | variable to enable elb monitors creation | bool |
false |
no |
elb_alert_message | Alert message to add in all AWS elb and alb monitors. | string |
"Value: {{value}}\nName: {{host.name}}\nRegion: {{region.name}}\nEnvironment: {{Environment.name}}\n\n{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}\n{{#is_alert}}@pagerduty{{/is_alert}}\n{{#is_warning}}@pagerduty{{/is_warning}}\n{{#is_recovery}}@pagerduty{{/is_recovery}}\n@slack-alerts\n" |
no |
elb_queries | Variabls for defining datadog elb queries. | map |
{ |
no |
elb_trigger_by | Tags to trigger a separate alert for each tag mentioned. | string |
"{host,region,Environment}" |
no |
from | Datadog Monitor option to evaluate data from tag defined.. | map |
{ |
no |
k8s | variable to enable Kubernetes monitors creation | bool |
false |
no |
k8s_alert_message | Alert message to add in k8s monitors. | string |
"Cluster: {{kubernetes_cluster.name}} \nStatefulset: {{statefulset.name}} \nReplicaset: {{replicaset.name}}\nDeployment: {{deployment.name}} \nPod: {{pod_name.name}}\nValue: {{value}}\nName: {{host.name}}\nRegion: {{region.name}}\nEnvironment: {{Environment.name}}\n\n{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}\n{{#is_alert}}@pagerduty{{/is_alert}}\n{{#is_warning}}@pagerduty{{/is_warning}}\n{{#is_recovery}}@pagerduty{{/is_recovery}}\n@slack-alerts\n" |
no |
k8s_pod_trigger_by | Tags to trigger a separate alert for each tag mentioned. | string |
"{pod_name,replicaset,deployment,kube_namespace,kubernetes_cluster}" |
no |
k8s_queries | Variabls for defining datadog kubernetes queries. This works for eks also. | map |
{ |
no |
k8s_trigger_by | Tags to trigger a separate alert for each tag mentioned. | string |
"{statefulset,kubernetes_cluster,kube_namespace,replicaset,node}" |
no |
lambda | variable to enable lambda monitors creation | bool |
false |
no |
lambda_alert_message | Alert message to add in AWS Lambda monitors. | string |
"Value: {{value}}\nFunction: {{functionname.name}}\nRegion: {{region.name}}\nEnvironment: {{Environment.name}}\n\n{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}\n{{#is_alert}}@pagerduty{{/is_alert}}\n{{#is_warning}}@pagerduty{{/is_warning}}\n{{#is_recovery}}@pagerduty{{/is_recovery}}\n@slack-alerts\n" |
no |
lambda_queries | Variabls for defining datadog AWS Lambda queries. | map |
{ |
no |
lambda_trigger_by | Tags to trigger a separate alert for each tag mentioned. | string |
"{functionname,Environment}" |
no |
name | Name/Title for datadog monitors | map |
{ |
no |
rds | Enable rds monitors creation | bool |
false |
no |
rds_alert_message | Alert message to add in all rds monitors. | string |
"Value: {{value}}\nRDS Name: {{dbinstanceidentifier.name}}\nRegion: {{region.name}}\nEnvironment: {{Environment.name}}\n\n{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}\n{{#is_alert}}@pagerduty{{/is_alert}}\n{{#is_warning}}@pagerduty{{/is_warning}}\n{{#is_recovery}}@pagerduty{{/is_recovery}}\n@slack-alerts\n" |
no |
rds_queries | Variabls for defining datadog rds queries. | map |
{ |
no |
rds_trigger_by | Tags to trigger a separate alert for each tag mentioned. | string |
"{Environment,dbinstanceidentifier,region}" |
no |
system | variable to enable system monitors creation | bool |
false |
no |
system_alert_message | Alert message to add in system monitors. | string |
"Value: {{value}}\nName: {{host.name}}\nRegion: {{region.name}}\nEnvironment: {{Environment.name}}\n\n{{#is_no_data}}Not receiving data @pagerduty{{/is_no_data}}\n{{#is_alert}}@pagerduty{{/is_alert}}\n{{#is_warning}}@pagerduty{{/is_warning}}\n{{#is_recovery}}@pagerduty{{/is_recovery}}\n@slack-alerts\n" |
no |
system_queries | Variabls for defining datadog alb queries. | map |
{ |
no |
system_trigger_by | Tags to trigger a separate alert for each tag mentioned. | string |
"{host,Environment}" |
no |
tags | Tags to apply to all resources | map |
{} |
no |
Outputs
Name | Description |
---|---|
output | n/a |
Contributing
If you want to contribute to this repository check all the guidelines specified here before submitting a new PR.