From caeebe0e1a4c47d1f5e6181dedfced17331ea6e7 Mon Sep 17 00:00:00 2001 From: Vijay Chintalapati Date: Thu, 6 Apr 2023 02:04:29 -0700 Subject: [PATCH] Make creation of Grafana Data Source and Folder configurable (#145) * Made the cluster variable visible in dashboards * Made the repo reusable with multiple EKS clusters * Relabled the input variable from create_grafana_data_source to create_prometheus_data_source --- README.md | 2 ++ main.tf | 2 ++ modules/eks-monitoring/README.md | 3 ++- modules/eks-monitoring/dashboards/cluster.json | 2 +- modules/eks-monitoring/dashboards/kubelet.json | 2 +- .../dashboards/namespace-workloads.json | 2 +- modules/eks-monitoring/dashboards/nodes.json | 2 +- modules/eks-monitoring/dashboards/workloads.json | 2 +- modules/eks-monitoring/main.tf | 6 ++++-- modules/eks-monitoring/patterns/java/README.md | 2 ++ modules/eks-monitoring/patterns/java/main.tf | 2 ++ .../eks-monitoring/patterns/java/variables.tf | 12 ++++++++++++ modules/eks-monitoring/rules.tf | 1 + modules/eks-monitoring/variables.tf | 16 ++++++++++++---- outputs.tf | 4 ++-- variables.tf | 12 ++++++++++++ 16 files changed, 58 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index d8a1f3d..568e5f8 100644 --- a/README.md +++ b/README.md @@ -188,6 +188,8 @@ No modules. | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| | [aws\_region](#input\_aws\_region) | AWS Region | `string` | n/a | yes | +| [create\_dashboard\_folder](#input\_create\_dashboard\_folder) | Boolean flag to enable Amazon Managed Grafana folder and dashboards | `bool` | `false` | no | +| [create\_prometheus\_data\_source](#input\_create\_prometheus\_data\_source) | Boolean flag to enable Amazon Managed Grafana datasource | `bool` | `false` | no | | [enable\_alertmanager](#input\_enable\_alertmanager) | Creates Amazon Managed Service for Prometheus AlertManager for all workloads | `bool` | `false` | no | | [enable\_managed\_prometheus](#input\_enable\_managed\_prometheus) | Creates a new Amazon Managed Service for Prometheus Workspace | `bool` | `true` | no | | [grafana\_api\_key](#input\_grafana\_api\_key) | Grafana API key for the Amazon Managed Grafana workspace | `string` | n/a | yes | diff --git a/main.tf b/main.tf index ca65706..8911b42 100644 --- a/main.tf +++ b/main.tf @@ -25,6 +25,7 @@ provider "grafana" { } resource "grafana_data_source" "amp" { + count = var.create_prometheus_data_source ? 1 : 0 type = "prometheus" name = local.name is_default = true @@ -39,5 +40,6 @@ resource "grafana_data_source" "amp" { # dashboards resource "grafana_folder" "this" { + count = var.create_dashboard_folder ? 1 : 0 title = "Observability Accelerator Dashboards" } diff --git a/modules/eks-monitoring/README.md b/modules/eks-monitoring/README.md index 6300df3..319a293 100644 --- a/modules/eks-monitoring/README.md +++ b/modules/eks-monitoring/README.md @@ -75,11 +75,12 @@ This module makes use of the open source [kube-prometheus-stack](https://github. | [enable\_logs](#input\_enable\_logs) | Using AWS For FluentBit to collect cluster and application logs to Amazon CloudWatch | `bool` | `true` | no | | [enable\_nginx](#input\_enable\_nginx) | Enable NGINX workloads monitoring, alerting and default dashboards | `bool` | `false` | no | | [enable\_node\_exporter](#input\_enable\_node\_exporter) | Enables or disables Node exporter. Disabling this might affect some data in the dashboards | `bool` | `true` | no | +| [enable\_recording\_rules](#input\_enable\_recording\_rules) | Enables or disables Managed Prometheus recording rules | `bool` | `true` | no | | [enable\_tracing](#input\_enable\_tracing) | (Experimental) Enables tracing with AWS X-Ray. This changes the deploy mode of the collector to daemon set. Requirement: adot add-on <= 0.58-build.0 | `bool` | `false` | no | | [helm\_config](#input\_helm\_config) | Helm Config for Prometheus | `any` | `{}` | no | | [irsa\_iam\_permissions\_boundary](#input\_irsa\_iam\_permissions\_boundary) | IAM permissions boundary for IRSA roles | `string` | `null` | no | | [irsa\_iam\_role\_path](#input\_irsa\_iam\_role\_path) | IAM role path for IRSA roles | `string` | `"/"` | no | -| [java\_config](#input\_java\_config) | Configuration object for Java/JMX monitoring |
object({
enable_alerting_rules = bool
scrape_sample_limit = number
})
|
{
"enable_alerting_rules": true,
"scrape_sample_limit": 1000
}
| no | +| [java\_config](#input\_java\_config) | Configuration object for Java/JMX monitoring |
object({
enable_alerting_rules = bool
enable_recording_rules = bool
scrape_sample_limit = number
})
|
{
"enable_alerting_rules": true,
"enable_recording_rules": true,
"scrape_sample_limit": 1000
}
| no | | [ksm\_config](#input\_ksm\_config) | Kube State metrics configuration |
object({
create_namespace = bool
k8s_namespace = string
helm_chart_name = string
helm_chart_version = string
helm_release_name = string
helm_repo_url = string
helm_settings = map(string)
helm_values = map(any)

scrape_interval = string
scrape_timeout = string
})
|
{
"create_namespace": true,
"helm_chart_name": "kube-state-metrics",
"helm_chart_version": "4.24.0",
"helm_release_name": "kube-state-metrics",
"helm_repo_url": "https://prometheus-community.github.io/helm-charts",
"helm_settings": {},
"helm_values": {},
"k8s_namespace": "kube-system",
"scrape_interval": "60s",
"scrape_timeout": "15s"
}
| no | | [logs\_config](#input\_logs\_config) | Configuration object for logs collection |
object({
cw_log_retention_days = number
})
|
{
"cw_log_retention_days": 90
}
| no | | [managed\_prometheus\_workspace\_endpoint](#input\_managed\_prometheus\_workspace\_endpoint) | Amazon Managed Prometheus Workspace Endpoint | `string` | `""` | no | diff --git a/modules/eks-monitoring/dashboards/cluster.json b/modules/eks-monitoring/dashboards/cluster.json index af88e93..1750341 100644 --- a/modules/eks-monitoring/dashboards/cluster.json +++ b/modules/eks-monitoring/dashboards/cluster.json @@ -2945,7 +2945,7 @@ "uid": "$datasource" }, "definition": "", - "hide": 2, + "hide": 0, "includeAll": false, "multi": false, "name": "cluster", diff --git a/modules/eks-monitoring/dashboards/kubelet.json b/modules/eks-monitoring/dashboards/kubelet.json index 8dcbf3c..d9aa8eb 100644 --- a/modules/eks-monitoring/dashboards/kubelet.json +++ b/modules/eks-monitoring/dashboards/kubelet.json @@ -2148,7 +2148,7 @@ "uid": "$datasource" }, "definition": "", - "hide": 2, + "hide": 0, "includeAll": false, "label": "cluster", "multi": false, diff --git a/modules/eks-monitoring/dashboards/namespace-workloads.json b/modules/eks-monitoring/dashboards/namespace-workloads.json index a1a1732..52b91cc 100644 --- a/modules/eks-monitoring/dashboards/namespace-workloads.json +++ b/modules/eks-monitoring/dashboards/namespace-workloads.json @@ -2542,7 +2542,7 @@ "uid": "$datasource" }, "definition": "", - "hide": 2, + "hide": 0, "includeAll": false, "multi": false, "name": "cluster", diff --git a/modules/eks-monitoring/dashboards/nodes.json b/modules/eks-monitoring/dashboards/nodes.json index 8a32402..7525258 100644 --- a/modules/eks-monitoring/dashboards/nodes.json +++ b/modules/eks-monitoring/dashboards/nodes.json @@ -1402,7 +1402,7 @@ "uid": "$datasource" }, "definition": "", - "hide": 2, + "hide": 0, "includeAll": false, "multi": false, "name": "cluster", diff --git a/modules/eks-monitoring/dashboards/workloads.json b/modules/eks-monitoring/dashboards/workloads.json index f50402c..0fbd614 100644 --- a/modules/eks-monitoring/dashboards/workloads.json +++ b/modules/eks-monitoring/dashboards/workloads.json @@ -2139,7 +2139,7 @@ "uid": "$datasource" }, "definition": "", - "hide": 2, + "hide": 0, "includeAll": false, "multi": false, "name": "cluster", diff --git a/modules/eks-monitoring/main.tf b/modules/eks-monitoring/main.tf index 9373a33..46c630b 100644 --- a/modules/eks-monitoring/main.tf +++ b/modules/eks-monitoring/main.tf @@ -153,11 +153,13 @@ module "helm_addon" { } module "java_monitoring" { - source = "./patterns/java" - count = var.enable_java ? 1 : 0 + source = "./patterns/java" + count = var.enable_java ? 1 : 0 + enable_dashboards = var.enable_dashboards managed_prometheus_workspace_id = var.managed_prometheus_workspace_id enable_alerting_rules = var.java_config.enable_alerting_rules + enable_recording_rules = var.java_config.enable_recording_rules dashboards_folder_id = var.dashboards_folder_id } diff --git a/modules/eks-monitoring/patterns/java/README.md b/modules/eks-monitoring/patterns/java/README.md index ce3de3a..3e36617 100644 --- a/modules/eks-monitoring/patterns/java/README.md +++ b/modules/eks-monitoring/patterns/java/README.md @@ -42,6 +42,8 @@ No modules. |------|-------------|------|---------|:--------:| | [dashboards\_folder\_id](#input\_dashboards\_folder\_id) | Grafana folder ID for automatic dashboards | `string` | n/a | yes | | [enable\_alerting\_rules](#input\_enable\_alerting\_rules) | Enables or disables Managed Prometheus alerting rules | `bool` | `true` | no | +| [enable\_dashboards](#input\_enable\_dashboards) | Enables or disables curated dashboards | `bool` | `true` | no | +| [enable\_recording\_rules](#input\_enable\_recording\_rules) | Enables or disables Managed Prometheus recording rules | `bool` | `true` | no | | [managed\_prometheus\_workspace\_id](#input\_managed\_prometheus\_workspace\_id) | Amazon Managed Prometheus Workspace ID | `string` | `null` | no | ## Outputs diff --git a/modules/eks-monitoring/patterns/java/main.tf b/modules/eks-monitoring/patterns/java/main.tf index 328ea7e..78ca387 100644 --- a/modules/eks-monitoring/patterns/java/main.tf +++ b/modules/eks-monitoring/patterns/java/main.tf @@ -1,4 +1,5 @@ resource "aws_prometheus_rule_group_namespace" "recording_rules" { + count = var.enable_recording_rules ? 1 : 0 name = "accelerator-java-rules" workspace_id = var.managed_prometheus_workspace_id data = <