Skip to content

Feature upgrade docs #2

Merged
merged 5 commits into from
Jul 23, 2024
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
76 changes: 76 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,77 @@
# tfmod-prometheus

Prometheus is an open source monitoring and alerting tool designed for dynamic cloud systems and especially well suited for monitoring microservice architectures. Prometheus collects and stores metrics as time series data. Metrics are a key means in understanding an applications behavior and a critical facet of operations support. Collectively, "it collects metrics from configured targets at given intervals, evaluates rule expressions, displays the results, and can trigger alerts if some condition is observed to be true." - [prometheus.io](https://prometheus.io/)

This modules uses Helm to deploy Prometheus to a cluster using the official chart. By default this will install dependent charts/components:
- [alertmanager](https://github.com/prometheus-community/helm-charts/tree/main/charts/alertmanager)
- [kube-state-metrics](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-state-metrics)
- [prometheus-node-exporter](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-node-exporter)
- [prometheus-pushgateway](https://github.com/walker-tom/helm-charts/tree/main/charts/prometheus-pushgateway)

Versions are module variables, but latest versions are intended to be be reflected in the default values.

# CHANGELOG

* 0.0.1 -- 2024-07-23
- updated to latest versions for all components and helm chart (defined in default variables)
- created content in the README
- created changelog

<!-- BEGIN_TF_DOCS -->
## Requirements

| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.14.0 |
| <a name="requirement_helm"></a> [helm](#requirement\_helm) | >= 2.11.0 |
| <a name="requirement_kubernetes"></a> [kubernetes](#requirement\_kubernetes) | >= 2.23.0 |
| <a name="requirement_null"></a> [null](#requirement\_null) | >= 3.2.1 |

## Providers

| Name | Version |
|------|---------|
| <a name="provider_helm"></a> [helm](#provider\_helm) | >= 2.11.0 |
| <a name="provider_kubernetes"></a> [kubernetes](#provider\_kubernetes) | >= 2.23.0 |

## Modules

| Name | Source | Version |
|------|--------|---------|
| <a name="module_images"></a> [images](#module\_images) | git@github.e.it.census.gov:terraform-modules/aws-ecr-copy-images.git/ | 2.0.2 |

## Resources

| Name | Type |
|------|------|
| [helm_release.prometheus](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
| [kubernetes_namespace.ns](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace) | resource |
| [kubernetes_namespace.existing-ns](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/data-sources/namespace) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_alertmanager_tag"></a> [alertmanager\_tag](#input\_alertmanager\_tag) | The image tag of the alertmanager image. | `string` | `"v0.27.0"` | no |
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | The name of the cluster into which prometheus will be installed. | `string` | n/a | yes |
| <a name="input_create_namespace"></a> [create\_namespace](#input\_create\_namespace) | Indicates whether the `namespace` needs to be created ('true') or already exists (not `true`) | `bool` | `true` | no |
| <a name="input_kube_state_metrics_tag"></a> [kube\_state\_metrics\_tag](#input\_kube\_state\_metrics\_tag) | The image tag of the kube-state-metrics image. | `string` | `"v2.13.0"` | no |
| <a name="input_namespace"></a> [namespace](#input\_namespace) | The namespace to install the prometheus components. Defaults to 'prometheus' | `string` | `"prometheus"` | no |
| <a name="input_node_exporter_tag"></a> [node\_exporter\_tag](#input\_node\_exporter\_tag) | The image tag of the node-exporter image. | `string` | `"v1.8.2"` | no |
| <a name="input_profile"></a> [profile](#input\_profile) | AWS\_PROFILE to use to apply the terraform script. | `string` | `""` | no |
| <a name="input_prometheus_chart_version"></a> [prometheus\_chart\_version](#input\_prometheus\_chart\_version) | The version of prometheus to install into the cluster. | `string` | `"25.24.1"` | no |
| <a name="input_prometheus_config_reloader_tag"></a> [prometheus\_config\_reloader\_tag](#input\_prometheus\_config\_reloader\_tag) | The image tag of the prometheus-config-reloader image. | `string` | `"v0.75.1"` | no |
| <a name="input_prometheus_server_tag"></a> [prometheus\_server\_tag](#input\_prometheus\_server\_tag) | The image tag of prometheus server to install into the cluster. | `string` | `"v2.53.1"` | no |
| <a name="input_pushgateway_tag"></a> [pushgateway\_tag](#input\_pushgateway\_tag) | The image tag of the pushgateway image. | `string` | `"v1.9.0"` | no |
| <a name="input_rwo_storage_class"></a> [rwo\_storage\_class](#input\_rwo\_storage\_class) | Specify the storage class for read/write/once persistent volumes. | `string` | `"gp3-encrypted"` | no |

## Outputs

| Name | Description |
|------|-------------|
| <a name="output_alertmanager_headless_internal_endpoint"></a> [alertmanager\_headless\_internal\_endpoint](#output\_alertmanager\_headless\_internal\_endpoint) | n/a |
| <a name="output_alertmanager_internal_endpoint"></a> [alertmanager\_internal\_endpoint](#output\_alertmanager\_internal\_endpoint) | n/a |
| <a name="output_prometheus_server_internal_endpoint"></a> [prometheus\_server\_internal\_endpoint](#output\_prometheus\_server\_internal\_endpoint) | n/a |
| <a name="output_pushgateway_internal_endpoint"></a> [pushgateway\_internal\_endpoint](#output\_pushgateway\_internal\_endpoint) | n/a |
<!-- END_TF_DOCS -->
58 changes: 58 additions & 0 deletions examples/simple/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
provider "aws" {
profile = local.profile
region = local.region
}

provider "helm" {
kubernetes {
host = data.aws_eks_cluster.cluster.endpoint

cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority[0].data)
token = data.aws_eks_cluster_auth.cluster.token
}
}

provider "kubernetes" {
host = data.aws_eks_cluster.cluster.endpoint

cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority[0].data)
token = data.aws_eks_cluster_auth.cluster.token
}
Comment on lines +1 to +20
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if we are writing the sample for TG, then we should use provider generate in the terragrunt.hcl?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't really imagine ever trying the sample with Terragrunt. What I've been doing is testing each module just in pure Terraform with one of these examples and cover Terragrunt in another pass. I could be adding an additional step, but in my head I've wanted to be certain everything is right with the module in TF before introducing TG. If you think it's extra work, could save ourselves some time by skipping.


data "aws_eks_cluster" "cluster" {
name = local.cluster_name
}

data "aws_eks_cluster_auth" "cluster" {
name = local.cluster_name
}

locals {
region = "us-gov-east-1"
profile = "terraform"
cluster_name = "platform-test-1"
namespace = "prometheus"
create_namespace = "true"
Comment on lines +31 to +35
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bad juju


# tags = {
# project_number = "fs0000000078"
# project_name = "csvd_platformbaseline"
# project_role = "csvd_platformbaseline_app"
# organization = "census:ocio:csvd"
# created_by = "luther.coleman.mcginty@census.gov"
# created_for = "luther.coleman.mcginty@census.gov"
# created_reason = "Testing eks module operation"
# Terraform = "true"
# Terragrunt = "true"
# test_adjustment = "testing adding tags"
# }
}

module "prometheus" {
source = "../.."

profile = local.profile
cluster_name = local.cluster_name
namespace = local.namespace
create_namespace = local.create_namespace
}
16 changes: 8 additions & 8 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ resource "helm_release" "prometheus" {

# Prometheus chart:
set {
name = "configmapReload.prometheus.image.repository"
name = "configmapReload.prometheus.image.repository"
value = split(":", module.images.images[local.prom_config_reload_key].dest_full_path)[0]
}
set {
name = "configmapReload.prometheus.image.tag"
value = split(":", module.images.images[local.prom_config_reload_key].dest_full_path)[1]
}
set {
name = "server.image.repository"
name = "server.image.repository"
value = split(":", module.images.images[local.prom_key].dest_full_path)[0]
}
set {
Expand All @@ -71,15 +71,15 @@ resource "helm_release" "prometheus" {

# alertmanager subchart:
set {
name = "alertmanager.image.repository"
name = "alertmanager.image.repository"
value = split(":", module.images.images[local.alertman_key].dest_full_path)[0]
}
set {
name = "alertmanager.image.tag"
value = module.images.images[local.alertman_key].tag
}
set {
name = "alertmanager.configmapReload.image.repository"
name = "alertmanager.configmapReload.image.repository"
value = split(":", module.images.images[local.prom_config_reload_key].dest_full_path)[0]
}
set {
Expand All @@ -93,11 +93,11 @@ resource "helm_release" "prometheus" {

# kube-state-metrics subchart:
set {
name = "kube-state-metrics.image.registry"
name = "kube-state-metrics.image.registry"
value = module.images.images[local.ksm_key].dest_registry
}
set {
name = "kube-state-metrics.image.repository"
name = "kube-state-metrics.image.repository"
value = module.images.images[local.ksm_key].dest_repository
}
set {
Expand All @@ -112,7 +112,7 @@ resource "helm_release" "prometheus" {
}
set {
name = "prometheus-node-exporter.image.repository"
value = module.images.images[local.node_exporter_key].dest_repository
value = module.images.images[local.node_exporter_key].dest_repository
}
set {
name = "prometheus-node-exporter.image.tag"
Expand All @@ -121,7 +121,7 @@ resource "helm_release" "prometheus" {

# prometheus-pushgateway
set {
name = "prometheus-pushgateway.image.repository"
name = "prometheus-pushgateway.image.repository"
value = split(":", module.images.images[local.pushgateway_key].dest_full_path)[0]
}
set {
Expand Down
14 changes: 7 additions & 7 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -26,53 +26,53 @@ variable "create_namespace" {
variable "prometheus_chart_version" {
description = "The version of prometheus to install into the cluster."
type = string
default = "24.3.0"
default = "25.24.1"
}

# The `APP VERSION` of the output found while determining the chart version
variable "prometheus_server_tag" {
description = "The image tag of prometheus server to install into the cluster."
type = string
default = "v2.46.0"
default = "v2.53.1"
}

# helm show values prometheus-community/prometheus | less
variable "prometheus_config_reloader_tag" {
description = "The image tag of the prometheus-config-reloader image."
type = string
default = "v0.67.0"
default = "v0.75.1"
}

# The `APP VERSION` of the output:
# helm search repo prometheus-community/alertmanager
variable "alertmanager_tag" {
description = "The image tag of the alertmanager image."
type = string
default = "v0.26.0"
default = "v0.27.0"
}

# The `APP VERSION` of the output:
# helm search repo prometheus-community/kube-state-metrics
variable "kube_state_metrics_tag" {
description = "The image tag of the kube-state-metrics image."
type = string
default = "v2.6.0"
default = "v2.13.0"
}

# The `APP VERSION` of the output:
# helm search repo prometheus-community/prometheus-node-exporter
variable "node_exporter_tag" {
description = "The image tag of the node-exporter image."
type = string
default = "v1.8.1"
default = "v1.8.2"
}

# The `APP VERSION` of the output:
# helm search repo prometheus-community/prometheus-pushgateway
variable "pushgateway_tag" {
description = "The image tag of the pushgateway image."
type = string
default = "v1.6.0"
default = "v1.9.0"
}

variable "rwo_storage_class" {
Expand Down