M_sloFix
rforstner 2022-03-02 17:28:34 +01:00
parent ca289de238
commit 4b5edfccf7
24 changed files with 727 additions and 109 deletions

View File

@ -1,7 +1,7 @@
terraform {
required_providers {
dynatrace = {
version = "1.9.1"
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}

View File

@ -0,0 +1,2 @@
# ManagementZone Variables
variable "dashboard_id" { default = ""}

View File

@ -0,0 +1,20 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
}
resource "dynatrace_dashboard_sharing" main {
enabled = true
preset = true
permissions {
permission {
type = "ALL"
level = "VIEW"
}
}
dashboard_id = "${var.dashboard_id}"
}

View File

@ -0,0 +1,4 @@
# ManagementZone Variables
variable "mzName" { default = "" }
variable "mzId" { default = "" }
variable "env" { default = ""}

View File

@ -0,0 +1,340 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
}
resource dynatrace_dashboard main {
dashboard_metadata {
name = "${var.mzName} ${var.env}"
owner = "Arnel.Arnautovic@partner.bmw.de"
shared = true
tags = ["${var.mzName}"]
filter {
timeframe = "-24h to now"
}
}
tile {
name = "Custom chart"
configured = true
tile_type = "CUSTOM_CHARTING"
bounds {
height = 304
left = 38
top = 228
width = 1064
}
filter {
management_zone {
name = "${var.mzName}"
id = "${var.mzId}"
}
}
filter_config {
type = "MIXED"
custom_name = "Failure rate (HTTP 4xx/5xx errors)"
default_name = "Custom chart"
chart_config {
type = "TIMESERIES"
legend = true
result_metadata {
config {
custom_color = "#ff0000"
key = "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE"
last_modified = 1617956393463
}
config {
custom_color = "#fff29a"
key = "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE"
last_modified = 1617956441725
}
}
series {
type = "BAR"
aggregation = "AVG"
aggregation_rate = "TOTAL"
entity_type = "SERVICE"
metric = "builtin:service.errors.fourxx.rate"
# sort_ascending = false
# sort_column = false
}
series {
type = "BAR"
aggregation = "AVG"
aggregation_rate = "TOTAL"
entity_type = "SERVICE"
metric = "builtin:service.errors.fivexx.rate"
# sort_ascending = false
sort_column = true
}
}
filters {
filter {
entity_type = "SERVICE"
match {
key = "AUTO_TAGS"
values = ["Environment:${var.env}"]
}
}
}
}
}
tile {
name = "Problems"
configured = true
tile_type = "OPEN_PROBLEMS"
bounds {
height = 152
left = 950
top = 38
width = 152
}
filter {
management_zone {
name = "${var.mzName}"
id = "${var.mzId}"
}
}
}
tile {
name = "Overall Health"
configured = true
tile_type = "HEADER"
bounds {
height = 38
left = 38
top = 0
width = 1064
}
filter {
management_zone {
name = "${var.mzName}"
id = "${var.mzId}"
}
}
}
tile {
name = "Markdown"
configured = true
markdown = <<-EOT
---
EOT
tile_type = "MARKDOWN"
bounds {
height = 38
left = 38
top = 532
width = 1064
}
}
tile {
name = "Custom chart"
configured = true
tile_type = "CUSTOM_CHARTING"
bounds {
height = 304
left = 38
top = 570
width = 1064
}
filter {
management_zone {
name = "${var.mzName}"
id = "${var.mzId}"
}
}
filter_config {
type = "MIXED"
custom_name = "Response time, Request Count and Number of Errors"
default_name = "Custom chart"
chart_config {
type = "TIMESERIES"
legend = true
result_metadata {
config {
custom_color = "#008cdb"
key = "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE"
last_modified = 1595275720776
}
config {
custom_color = "#b4e5f9"
key = "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE"
last_modified = 1595275686773
}
config {
custom_color = "#ef651f"
key = "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE"
last_modified = 1595275955999
}
}
series {
type = "LINE"
aggregation = "AVG"
aggregation_rate = "TOTAL"
entity_type = "SERVICE"
metric = "builtin:service.response.time"
# sort_ascending = false
# sort_column = false
}
series {
type = "BAR"
aggregation = "NONE"
aggregation_rate = "TOTAL"
entity_type = "SERVICE"
metric = "builtin:service.requestCount.total"
# sort_ascending = false
# sort_column = false
}
series {
type = "BAR"
aggregation = "NONE"
aggregation_rate = "TOTAL"
entity_type = "SERVICE"
metric = "builtin:service.errors.total.count"
# sort_ascending = false
sort_column = true
}
}
filters {
filter {
entity_type = "SERVICE"
match {
key = "AUTO_TAGS"
values = ["Environment:${var.env}"]
}
}
}
}
}
tile {
name = "Markdown"
configured = true
markdown = <<-EOT
---
EOT
tile_type = "MARKDOWN"
bounds {
height = 38
left = 38
top = 190
width = 1064
}
}
tile {
name = ""
chart_visible = true
configured = true
tile_type = "DATABASES_OVERVIEW"
bounds {
height = 152
left = 646
top = 38
width = 190
}
filter {
management_zone {
name = "${var.mzName}"
id = "${var.mzId}"
}
}
filter_config {
type = "DATABASE"
custom_name = "Databases"
default_name = "Databases"
chart_config {
type = "TIMESERIES"
legend = true
}
filters {
filter {
entity_type = "DATABASE"
match {
key = "AUTO_TAGS"
values = ["Environment:${var.env}"]
}
}
}
}
}
tile {
name = ""
chart_visible = true
configured = true
tile_type = "SERVICES"
bounds {
height = 152
left = 342
top = 38
width = 190
}
filter {
management_zone {
name = "${var.mzName}"
id = "${var.mzId}"
}
}
filter_config {
type = "SERVICE"
custom_name = "Services"
default_name = "Services"
chart_config {
type = "TIMESERIES"
legend = true
}
filters {
filter {
entity_type = "SERVICE"
match {
key = "AUTO_TAGS"
values = ["Environment:${var.env}"]
}
}
}
}
}
tile {
name = ""
chart_visible = true
configured = true
tile_type = "HOSTS"
bounds {
height = 152
left = 38
top = 38
width = 190
}
filter {
management_zone {
name = "${var.mzName}"
id = "${var.mzId}"
}
}
filter_config {
type = "HOST"
custom_name = "Hosts"
default_name = "Hosts"
chart_config {
type = "TIMESERIES"
legend = true
}
filters {
filter {
entity_type = "HOST"
match {
key = "AUTO_TAGS"
values = ["Environment:${var.env}"]
}
}
}
}
}
}
output "id" {
value = dynatrace_dashboard.main.id
}

View File

@ -1,7 +1,7 @@
terraform {
required_providers {
dynatrace = {
version = "1.9.1"
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}

View File

@ -0,0 +1,23 @@
# ManagementZone Variables
variable "name" { default = "" }
variable "description" { default = "" }
variable "ownerMail" { default = "" }
variable "evaluation" { default = "AGGREGATE" } //currently nothing else possible
#Target and warning percentage of the SLO as integer
variable "target" { default = "98" }
variable "warning" { default = "99" }
#Timeframe of the default evaluation timeframe
variable "timeframe" { default = "-1d" }
#Metrics to be evaluated, must result in a percentage metric
variable "metric_expression" { default = "" }
##Optional Fields
variable "entitySelector" { default = "" }

View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
}
resource dynatrace_slo main {
name = "${var.name}"
description = "${var.description}"
evaluation = "${var.evaluation}"
timeframe = "${var.timeframe}"
target = "${var.target}"
warning = "${var.warning}"
metric_expression = "${var.metric_expression}"
filter = "${var.entitySelector}"
}
output "id" {
value = dynatrace_slo.main.id
}

View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "cnpreprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable CNPREPROD_ENV_URL {}
variable CNPREPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.CNPREPROD_ENV_URL}"
dt_api_token = "${var.CNPREPROD_API_TOKEN}"
}

25
cnpreprod/slo/main.tf Normal file
View File

@ -0,0 +1,25 @@
variable CNPREPROD_ENV_URL {}
variable CNPREPROD_API_TOKEN {}
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "cnpreprod/slo/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
provider "dynatrace" {
dt_env_url = "${var.CNPREPROD_ENV_URL}"
dt_api_token = "${var.CNPREPROD_API_TOKEN}"
}

View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "cnprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable CNPROD_ENV_URL {}
variable CNPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.CNPROD_ENV_URL}"
dt_api_token = "${var.CNPROD_API_TOKEN}"
}

25
cnprod/slo/main.tf Normal file
View File

@ -0,0 +1,25 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "cnprod/slo/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable CNPROD_ENV_URL {}
variable CNPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.CNPROD_ENV_URL}"
dt_api_token = "${var.CNPROD_API_TOKEN}"
}

View File

@ -1,22 +0,0 @@
terraform {
required_providers {
dynatrace = {
version = "1.9.1"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "eupreprod/CD_ABC/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable "EMEAPREPROD" {}
provider "dynatrace" {
dt_env_url = "https://qqk70169.live.dynatrace.com"
dt_api_token = "${var.EMEAPREPROD}"
}

View File

@ -1,28 +0,0 @@
module ap1 {
source = "../../_dynatrace-base-modules/dynatrace-alerting-profile"
mzId = module.mz1.id
alertingProfileName = "Test123"
delay_AVAILABILITY = 0
delay_CUSTOM_ALERT = 10
delay_ERROR = 30
delay_MONITORING_UNAVAILABLE = 20
delay_PERFORMANCE = 10
delay_RESOURCE_CONTENTION = 0
#Tag Filters
include_mode = "INCLUDE_ALL"
tag_filters = [{
context = "CONTEXTLESS"
key = "Environment"
value = "PROD"
},
{
context = "CONTEXTLESS"
key = "ms-id"
value = "ABC"
}
]
}

View File

@ -1,30 +0,0 @@
module mz1 {
source = "../../_dynatrace-base-modules/dynatrace-management-zone"
mzName = "ABsC"
app_meta_ms-id = "AsBC"
app_meta_compass-id = "AsBC"
app_meta_app-id = "AsBC"
app_meta_app-name = "ABsC"
DatabaseSelector ="type(SERVICE),databaseName.exists(),toRelationship.calls(type(SERVICE),tag(\"ms-id:am-proxy\",\"ms-id:am-cns\"))"
ServiceSelector ="type(Service),tag(\"ms-id:am-proxy\",\"ms-id:am-cns\")"
HostSelector ="type(HOST),tag(\"ms-id:am-proxy\",\"ms-id:am-cns\")"
}
module mz2 {
source = "../../_dynatrace-base-modules/dynatrace-management-zone"
mzName = "CD"
app_meta_ms-id = "CD"
app_meta_compass-id = "CD"
app_meta_app-id = "CD"
app_meta_app-name = "CD"
DatabaseSelector ="type(SERVICE),databaseName.exists(),toRelationship.calls(type(SERVICE),tag(\"ms-id:am-proxy\",\"ms-id:am-cns\"))"
ServiceSelector ="type(Service),tag(\"ms-id:am-proxy\",\"ms-id:am-cns\")"
HostSelector ="type(HOST),tag(\"ms-id:am-proxy\",\"ms-id:am-cns\")"
}

View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "eupreprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable EUPREPROD_ENV_URL {}
variable EUPREPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.EUPREPROD_ENV_URL}"
dt_api_token = "${var.EUPREPROD_API_TOKEN}"
}

View File

@ -1,27 +0,0 @@
locals {}
terraform {
required_providers {
dynatrace = {
version = "1.9.1"
source = "dynatrace-oss/dynatrace"
}
}
}
module apps {
source = "./apps"
mzName = "ABfdfC1"
app_meta_ms-id = "ABC2"
app_meta_compass-id = "ABC3"
app_meta_app-id = "ABC4"
app_meta_app-name = "ABC5"
DatabaseSelector ="selector sdstatement"
ServiceSelector ="selector statement"
HostSelector ="selector statement"
}

26
eupreprod/slo/main.tf Normal file
View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "eupreprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable EUPREPROD_ENV_URL {}
variable EUPREPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.EUPREPROD_ENV_URL}"
dt_api_token = "${var.EUPREPROD_API_TOKEN}"
}

View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "euprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable EUPROD_ENV_URL {}
variable EUPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.EUPROD_ENV_URL}"
dt_api_token = "${var.EUPROD_API_TOKEN}"
}

26
euprod/slo/main.tf Normal file
View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "euprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable EUPROD_ENV_URL {}
variable EUPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.EUPROD_ENV_URL}"
dt_api_token = "${var.EUPROD_API_TOKEN}"
}

View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "napreprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable NAPREPROD_ENV_URL {}
variable NAPREPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.NAPREPROD_ENV_URL}"
dt_api_token = "${var.NAPREPROD_API_TOKEN}"
}

26
napreprod/slo/main.tf Normal file
View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "napreprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable NAPREPROD_ENV_URL {}
variable NAPREPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.NAPREPROD_ENV_URL}"
dt_api_token = "${var.NAPREPROD_API_TOKEN}"
}

View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "naprod/calculated_service_metrics/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable NAPROD_ENV_URL {}
variable NAPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.NAPROD_ENV_URL}"
dt_api_token = "${var.NAPROD_API_TOKEN}"
}

26
naprod/slo/main.tf Normal file
View File

@ -0,0 +1,26 @@
terraform {
required_providers {
dynatrace = {
version = "1.10.0"
source = "dynatrace-oss/dynatrace"
}
}
backend "s3" {
bucket = "coco-dynatrace-tfstate"
key = "naprod/slo/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "coco-dynatrace-tfstate"
encrypt = true
}
}
variable NAPROD_ENV_URL {}
variable NAPROD_API_TOKEN {}
provider "dynatrace" {
dt_env_url = "${var.NAPROD_ENV_URL}"
dt_api_token = "${var.NAPROD_API_TOKEN}"
}