Initial commit
This commit is contained in:
commit
35ad394eec
184
context.tf
Normal file
184
context.tf
Normal file
@ -0,0 +1,184 @@
|
||||
module "this" {
|
||||
source = "cloudposse/label/null"
|
||||
version = "0.24.1" # requires Terraform >= 0.13.0
|
||||
|
||||
enabled = var.enabled
|
||||
namespace = var.namespace
|
||||
environment = var.environment
|
||||
stage = var.stage
|
||||
name = var.name
|
||||
delimiter = var.delimiter
|
||||
attributes = var.attributes
|
||||
tags = var.tags
|
||||
additional_tag_map = var.additional_tag_map
|
||||
label_order = var.label_order
|
||||
regex_replace_chars = var.regex_replace_chars
|
||||
id_length_limit = var.id_length_limit
|
||||
label_key_case = var.label_key_case
|
||||
label_value_case = var.label_value_case
|
||||
|
||||
context = var.context
|
||||
}
|
||||
|
||||
# Copy contents of cloudposse/terraform-null-label/variables.tf here
|
||||
|
||||
variable "context" {
|
||||
type = any
|
||||
default = {
|
||||
enabled = true
|
||||
namespace = null
|
||||
environment = null
|
||||
stage = null
|
||||
name = null
|
||||
delimiter = null
|
||||
attributes = []
|
||||
tags = {}
|
||||
additional_tag_map = {}
|
||||
regex_replace_chars = null
|
||||
label_order = []
|
||||
id_length_limit = null
|
||||
label_key_case = null
|
||||
label_value_case = null
|
||||
}
|
||||
description = <<-EOT
|
||||
Single object for setting entire context at once.
|
||||
See description of individual variables for details.
|
||||
Leave string and numeric variables as `null` to use default value.
|
||||
Individual variable settings (non-null) override settings in context object,
|
||||
except for attributes, tags, and additional_tag_map, which are merged.
|
||||
EOT
|
||||
|
||||
validation {
|
||||
condition = lookup(var.context, "label_key_case", null) == null ? true : contains(["lower", "title", "upper"], var.context["label_key_case"])
|
||||
error_message = "Allowed values: `lower`, `title`, `upper`."
|
||||
}
|
||||
|
||||
validation {
|
||||
condition = lookup(var.context, "label_value_case", null) == null ? true : contains(["lower", "title", "upper", "none"], var.context["label_value_case"])
|
||||
error_message = "Allowed values: `lower`, `title`, `upper`, `none`."
|
||||
}
|
||||
}
|
||||
|
||||
variable "enabled" {
|
||||
type = bool
|
||||
default = null
|
||||
description = "Set to false to prevent the module from creating any resources"
|
||||
}
|
||||
|
||||
variable "namespace" {
|
||||
type = string
|
||||
default = null
|
||||
description = "Namespace, which could be your organization name or abbreviation, e.g. 'eg' or 'cp'"
|
||||
}
|
||||
|
||||
variable "environment" {
|
||||
type = string
|
||||
default = null
|
||||
description = "Environment, e.g. 'uw2', 'us-west-2', OR 'prod', 'staging', 'dev', 'UAT'"
|
||||
}
|
||||
|
||||
variable "stage" {
|
||||
type = string
|
||||
default = null
|
||||
description = "Stage, e.g. 'prod', 'staging', 'dev', OR 'source', 'build', 'test', 'deploy', 'release'"
|
||||
}
|
||||
|
||||
variable "name" {
|
||||
type = string
|
||||
default = null
|
||||
description = "Solution name, e.g. 'app' or 'jenkins'"
|
||||
}
|
||||
|
||||
variable "delimiter" {
|
||||
type = string
|
||||
default = null
|
||||
description = <<-EOT
|
||||
Delimiter to be used between `namespace`, `environment`, `stage`, `name` and `attributes`.
|
||||
Defaults to `-` (hyphen). Set to `""` to use no delimiter at all.
|
||||
EOT
|
||||
}
|
||||
|
||||
variable "attributes" {
|
||||
type = list(string)
|
||||
default = []
|
||||
description = "Additional attributes (e.g. `1`)"
|
||||
}
|
||||
|
||||
variable "tags" {
|
||||
type = map(string)
|
||||
default = {}
|
||||
description = "Additional tags (e.g. `map('BusinessUnit','XYZ')`"
|
||||
}
|
||||
|
||||
variable "additional_tag_map" {
|
||||
type = map(string)
|
||||
default = {}
|
||||
description = "Additional tags for appending to tags_as_list_of_maps. Not added to `tags`."
|
||||
}
|
||||
|
||||
variable "label_order" {
|
||||
type = list(string)
|
||||
default = null
|
||||
description = <<-EOT
|
||||
The naming order of the id output and Name tag.
|
||||
Defaults to ["namespace", "environment", "stage", "name", "attributes"].
|
||||
You can omit any of the 5 elements, but at least one must be present.
|
||||
EOT
|
||||
}
|
||||
|
||||
variable "regex_replace_chars" {
|
||||
type = string
|
||||
default = null
|
||||
description = <<-EOT
|
||||
Regex to replace chars with empty string in `namespace`, `environment`, `stage` and `name`.
|
||||
If not set, `"/[^a-zA-Z0-9-]/"` is used to remove all characters other than hyphens, letters and digits.
|
||||
EOT
|
||||
}
|
||||
|
||||
variable "id_length_limit" {
|
||||
type = number
|
||||
default = null
|
||||
description = <<-EOT
|
||||
Limit `id` to this many characters (minimum 6).
|
||||
Set to `0` for unlimited length.
|
||||
Set to `null` for default, which is `0`.
|
||||
Does not affect `id_full`.
|
||||
EOT
|
||||
validation {
|
||||
condition = var.id_length_limit == null ? true : var.id_length_limit >= 6 || var.id_length_limit == 0
|
||||
error_message = "The id_length_limit must be >= 6 if supplied (not null), or 0 for unlimited length."
|
||||
}
|
||||
}
|
||||
|
||||
variable "label_key_case" {
|
||||
type = string
|
||||
default = null
|
||||
description = <<-EOT
|
||||
The letter case of label keys (`tag` names) (i.e. `name`, `namespace`, `environment`, `stage`, `attributes`) to use in `tags`.
|
||||
Possible values: `lower`, `title`, `upper`.
|
||||
Default value: `title`.
|
||||
EOT
|
||||
|
||||
validation {
|
||||
condition = var.label_key_case == null ? true : contains(["lower", "title", "upper"], var.label_key_case)
|
||||
error_message = "Allowed values: `lower`, `title`, `upper`."
|
||||
}
|
||||
}
|
||||
|
||||
variable "label_value_case" {
|
||||
type = string
|
||||
default = null
|
||||
description = <<-EOT
|
||||
The letter case of output label values (also used in `tags` and `id`).
|
||||
Possible values: `lower`, `title`, `upper` and `none` (no transformation).
|
||||
Default value: `lower`.
|
||||
EOT
|
||||
|
||||
validation {
|
||||
condition = var.label_value_case == null ? true : contains(["lower", "title", "upper", "none"], var.label_value_case)
|
||||
error_message = "Allowed values: `lower`, `title`, `upper`, `none`."
|
||||
}
|
||||
}
|
||||
#### End of copy of cloudposse/terraform-null-label/variables.tf
|
||||
|
||||
|
||||
9
main.tf
Normal file
9
main.tf
Normal file
@ -0,0 +1,9 @@
|
||||
module "datadog_integration" {
|
||||
source = "cloudposse/datadog-integration/aws"
|
||||
version = "0.11.0"
|
||||
namespace = "plaap"
|
||||
stage = "test"
|
||||
name = "datadog-integration"
|
||||
integrations = [ "all" ]
|
||||
}
|
||||
|
||||
137
monitors.tf
Normal file
137
monitors.tf
Normal file
@ -0,0 +1,137 @@
|
||||
# Monitor CPU Utilisation
|
||||
resource "datadog_monitor" "cpumonitor" {
|
||||
name = "cpu monitor"
|
||||
type = "metric alert"
|
||||
message = "CPU usage alert"
|
||||
query = "avg(last_1m):avg:system.cpu.system{*} by {host} > 60"
|
||||
monitor_thresholds {
|
||||
ok = 20
|
||||
warning = 50
|
||||
critical = 60
|
||||
}
|
||||
}
|
||||
|
||||
# Monitor Memory Utilisation
|
||||
resource "datadog_monitor" "memorymonitor" {
|
||||
name = "Usable Memory"
|
||||
type = "query alert"
|
||||
evaluation_delay = "15"
|
||||
include_tags = true
|
||||
locked = false
|
||||
message = "Plaaper de plaaper de plaap"
|
||||
new_host_delay = 300
|
||||
no_data_timeframe = 0
|
||||
#notify_audit = 0
|
||||
#notify_no_data = 0
|
||||
priority = 0
|
||||
renotify_interval = 0
|
||||
require_full_window = true
|
||||
#restricted_roles = []
|
||||
timeout_h = 0
|
||||
query = "max(last_5m):avg:system.mem.usable{*} by {host} / avg:system.mem.total{*} by {host} * 100 < 5"
|
||||
|
||||
monitor_thresholds {
|
||||
critical = 5
|
||||
warning = 10
|
||||
}
|
||||
}
|
||||
|
||||
# Monitor System Load
|
||||
resource "datadog_monitor" "systemload" {
|
||||
name = "System Load"
|
||||
type = "query alert"
|
||||
evaluation_delay = "15"
|
||||
include_tags = true
|
||||
locked = false
|
||||
new_host_delay = 300
|
||||
no_data_timeframe = 0
|
||||
#notify_audit = false
|
||||
priority = 0
|
||||
renotify_interval = 0
|
||||
require_full_window = true
|
||||
#restricted_roles = []
|
||||
tags = []
|
||||
timeout_h = 0
|
||||
message = "System Load exceeding set Thresholg, please investigate"
|
||||
query = "min(last_30m):( avg:system.load.norm.5{*} by {host} ) > 2.5"
|
||||
|
||||
monitor_thresholds {
|
||||
critical = "2.5"
|
||||
warning = "2"
|
||||
}
|
||||
|
||||
}
|
||||
# Monitor Disk Utilisation
|
||||
resource "datadog_monitor" "disk_usage" {
|
||||
name = "Disk Space"
|
||||
type = "query alert"
|
||||
evaluation_delay = 15
|
||||
include_tags = true
|
||||
locked = false
|
||||
new_host_delay = 300
|
||||
no_data_timeframe = 0
|
||||
#notify_audit = 0
|
||||
priority = 0
|
||||
renotify_interval = 0
|
||||
require_full_window = true
|
||||
#restricted_roles = []
|
||||
tags = []
|
||||
timeout_h = 0
|
||||
message = "Disk Usage is exceeding set threshold, please investigate"
|
||||
query = "max(last_5m):avg:system.disk.in_use{*} by {host,device} * 100 > 90"
|
||||
|
||||
monitor_thresholds {
|
||||
critical = "90"
|
||||
warning = "80"
|
||||
}
|
||||
}
|
||||
|
||||
# Monitor Disk Inode Usage
|
||||
resource "datadog_monitor" "disk_inodes" {
|
||||
name = "Disk Inodes Usage"
|
||||
type = "query alert"
|
||||
evaluation_delay = 15
|
||||
include_tags = true
|
||||
locked = false
|
||||
new_host_delay = 300
|
||||
no_data_timeframe = 0
|
||||
#notify_audit = 0
|
||||
priority = 0
|
||||
renotify_interval = 0
|
||||
require_full_window = true
|
||||
#restricted_roles = []
|
||||
tags = []
|
||||
timeout_h = 0
|
||||
message = "Disk Inode Usage is exceeding set threshold, please investigate"
|
||||
query = "min(last_5m):avg:system.fs.inodes.in_use{*} by {host,device} * 100 > 95"
|
||||
|
||||
monitor_thresholds {
|
||||
critical = "95"
|
||||
warning = "90"
|
||||
}
|
||||
}
|
||||
|
||||
# Monitor Disk Space Forecast
|
||||
resource "datadog_monitor" "disk_forecast" {
|
||||
name = "Disk Usage Forecast"
|
||||
type = "query alert"
|
||||
evaluation_delay = 15
|
||||
include_tags = true
|
||||
locked = false
|
||||
new_host_delay = 300
|
||||
no_data_timeframe = 0
|
||||
#notify_audit = 0
|
||||
priority = 0
|
||||
renotify_interval = 0
|
||||
require_full_window = true
|
||||
#restricted_roles = []
|
||||
tags = []
|
||||
timeout_h = 0
|
||||
message = "Disk Usage is exceeding set threshold, please investigate"
|
||||
query = "max(next_1w):forecast(avg:system.disk.in_use{*} by {host,device} * 100, 'linear', 1, interval='60m', history='1w', model='default') >= 80"
|
||||
|
||||
monitor_thresholds {
|
||||
critical = "80"
|
||||
warning = "72"
|
||||
}
|
||||
}
|
||||
16
outputs.tf
Normal file
16
outputs.tf
Normal file
@ -0,0 +1,16 @@
|
||||
output "aws_account_id" {
|
||||
value = module.datadog_integration.aws_account_id
|
||||
description = "AWS Account ID of the IAM Role for Datadog to use for this integration"
|
||||
}
|
||||
|
||||
output "aws_role_name" {
|
||||
value = module.datadog_integration.aws_role_name
|
||||
description = "Name of the AWS IAM Role for Datadog to use for this integration"
|
||||
}
|
||||
|
||||
output "datadog_external_id" {
|
||||
value = module.datadog_integration.datadog_external_id
|
||||
description = "Datadog integration external ID"
|
||||
}
|
||||
|
||||
|
||||
33
variables.tf
Normal file
33
variables.tf
Normal file
@ -0,0 +1,33 @@
|
||||
variable "region" {
|
||||
type = string
|
||||
description = "The AWS region that the resources to be monitored reside in"
|
||||
}
|
||||
|
||||
variable "api_key" {
|
||||
type = string
|
||||
description = "The api_key that is used to send logs, metrics and traces to the datadog account"
|
||||
}
|
||||
|
||||
variable "app_key" {
|
||||
type = string
|
||||
description = "The app_key that is used to manipulate the datadog API"
|
||||
}
|
||||
|
||||
variable "datadog_site" {
|
||||
type = string
|
||||
description = "Datadog site to connect to (EU or US)"
|
||||
default = "https://api.datadoghq.eu/"
|
||||
}
|
||||
|
||||
variable "aws_profile" {
|
||||
type = string
|
||||
description = "Which AWS account is this for"
|
||||
}
|
||||
|
||||
variable "prefix_slug" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "team" {
|
||||
type = string
|
||||
}
|
||||
18
versions.tf
Normal file
18
versions.tf
Normal file
@ -0,0 +1,18 @@
|
||||
terraform {
|
||||
required_version = ">= 0.13.0"
|
||||
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
#version = ">= 2.0"
|
||||
}
|
||||
local = {
|
||||
source = "hashicorp/local"
|
||||
version = ">= 1.3"
|
||||
}
|
||||
datadog = {
|
||||
source = "datadog/datadog"
|
||||
#version = ">= 2.12"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user