Skip to content

Commit 770e1f6

Browse files
authored
refactor: do not use templates/prometheus-values.yaml and set necessary values in the eks-kube-prometheus-stack.tf file (#196)
1 parent a370b7d commit 770e1f6

File tree

3 files changed

+245
-253
lines changed

3 files changed

+245
-253
lines changed

terraform/layer2-k8s/eks-kube-prometheus-stack.tf

Lines changed: 244 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,250 @@ locals {
44
enabled = local.helm_releases[index(local.helm_releases.*.id, "kube-prometheus-stack")].enabled
55
chart = local.helm_releases[index(local.helm_releases.*.id, "kube-prometheus-stack")].chart
66
repository = local.helm_releases[index(local.helm_releases.*.id, "kube-prometheus-stack")].repository
7-
chart_version = local.helm_releases[index(local.helm_releases.*.id, "kube-prometheus-stack")].version
7+
chart_version = local.helm_releases[index(local.helm_releases.*.id, "kube-prometheus-stack")].chart_version
88
namespace = local.helm_releases[index(local.helm_releases.*.id, "kube-prometheus-stack")].namespace
99
}
10-
grafana_password = local.kube_prometheus_stack.enabled ? random_string.grafana_password[0].result : "test123"
11-
grafana_domain_name = "grafana-${local.domain_suffix}"
12-
prometheus_domain_name = "prometheus-${local.domain_suffix}"
13-
alertmanager_domain_name = "alertmanager-${local.domain_suffix}"
10+
grafana_password = local.kube_prometheus_stack.enabled ? random_string.grafana_password[0].result : "test123"
11+
grafana_domain_name = "grafana-${local.domain_suffix}"
12+
prometheus_domain_name = "prometheus-${local.domain_suffix}"
13+
alertmanager_domain_name = "alertmanager-${local.domain_suffix}"
14+
kube_prometheus_stack_values = <<VALUES
15+
# Prometheus Server parameters
16+
prometheus:
17+
ingress:
18+
enabled: true
19+
annotations:
20+
kubernetes.io/ingress.class: nginx
21+
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
22+
nginx.ingress.kubernetes.io/whitelist-source-range: ${local.ip_whitelist}
23+
path: /
24+
hosts:
25+
- ${local.prometheus_domain_name}
26+
tls:
27+
- hosts:
28+
- ${local.prometheus_domain_name}
29+
prometheusSpec:
30+
serviceMonitorSelectorNilUsesHelmValues: false
31+
storageSpec:
32+
volumeClaimTemplate:
33+
spec:
34+
storageClassName: advanced
35+
accessModes: ["ReadWriteOnce"]
36+
resources:
37+
requests:
38+
storage: 30Gi
39+
resources:
40+
requests:
41+
cpu: 200m
42+
memory: 1024Mi
43+
limits:
44+
cpu: 400m
45+
memory: 1024Mi
46+
affinity:
47+
nodeAffinity:
48+
requiredDuringSchedulingIgnoredDuringExecution:
49+
nodeSelectorTerms:
50+
- matchExpressions:
51+
- key: eks.amazonaws.com/capacityType
52+
operator: In
53+
values:
54+
- ON_DEMAND
1455
15-
kube_prometheus_stack_template = templatefile("${path.module}/templates/prometheus-values.yaml",
16-
{
17-
prometheus_domain_name = local.prometheus_domain_name
18-
alertmanager_domain_name = local.alertmanager_domain_name
19-
ip_whitelist = local.ip_whitelist
20-
default_region = local.region
21-
grafana_domain_name = local.grafana_domain_name
22-
grafana_password = local.grafana_password
23-
role_arn = local.kube_prometheus_stack.enabled ? module.aws_iam_grafana[0].role_arn : ""
24-
gitlab_client_id = local.grafana_gitlab_client_id
25-
gitlab_client_secret = local.grafana_gitlab_client_secret
26-
gitlab_group = local.grafana_gitlab_group
27-
alertmanager_slack_url = local.alertmanager_slack_url
28-
alertmanager_slack_channel = local.alertmanager_slack_channel
29-
})
56+
prometheusOperator:
57+
affinity:
58+
nodeAffinity:
59+
requiredDuringSchedulingIgnoredDuringExecution:
60+
nodeSelectorTerms:
61+
- matchExpressions:
62+
- key: eks.amazonaws.com/capacityType
63+
operator: In
64+
values:
65+
- ON_DEMAND
66+
VALUES
67+
68+
kube_prometheus_stack_grafana_values = <<VALUES
69+
# Grafana settings
70+
grafana:
71+
enabled: true
72+
image:
73+
tag: 7.2.0
74+
deploymentStrategy:
75+
type: Recreate
76+
adminPassword: "${local.grafana_password}"
77+
serviceAccount:
78+
annotations:
79+
"eks.amazonaws.com/role-arn": ${local.kube_prometheus_stack.enabled ? module.aws_iam_grafana[0].role_arn : ""}
80+
ingress:
81+
enabled: true
82+
annotations:
83+
kubernetes.io/ingress.class: nginx
84+
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
85+
path: /
86+
hosts:
87+
- ${local.grafana_domain_name}
88+
tls:
89+
- hosts:
90+
- ${local.grafana_domain_name}
91+
env:
92+
# all values must be quoted
93+
GF_SERVER_ROOT_URL: "https://${local.grafana_domain_name}"
94+
GF_USERS_ALLOW_SIGN_UP: "false"
95+
GF_AUTH_GITLAB_ENABLED: "true"
96+
GF_AUTH_GITLAB_ALLOW_SIGN_UP: "true"
97+
GF_AUTH_GITLAB_CLIENT_ID: "${local.grafana_gitlab_client_id}"
98+
GF_AUTH_GITLAB_CLIENT_SECRET: "${local.grafana_gitlab_client_secret}"
99+
GF_AUTH_GITLAB_SCOPES: "read_api"
100+
GF_AUTH_GITLAB_AUTH_URL: "https://gitlab.com/oauth/authorize"
101+
GF_AUTH_GITLAB_TOKEN_URL: "https://gitlab.com/oauth/token"
102+
GF_AUTH_GITLAB_API_URL: "https://gitlab.com/api/v4"
103+
GF_AUTH_GITLAB_ALLOWED_GROUPS: "${local.grafana_gitlab_group}"
104+
105+
persistence:
106+
enabled: false
107+
108+
sidecar:
109+
datasources:
110+
enabled: true
111+
112+
datasources:
113+
datasources.yaml:
114+
apiVersion: 1
115+
datasources:
116+
- name: CloudWatch
117+
type: cloudwatch
118+
jsonData:
119+
authType: credentials
120+
defaultRegion: "${local.region}"
121+
- name: Loki
122+
type: loki
123+
url: http://loki-stack.loki:3100
124+
jsonData:
125+
maxLines: 1000
126+
127+
dashboardProviders:
128+
dashboardproviders.yaml:
129+
apiVersion: 1
130+
providers:
131+
- name: 'logs'
132+
orgId: 1
133+
folder: 'logs'
134+
type: file
135+
disableDeletion: true
136+
editable: true
137+
options:
138+
path: /var/lib/grafana/dashboards/logs
139+
- name: 'k8s'
140+
orgId: 1
141+
folder: 'k8s'
142+
type: file
143+
disableDeletion: true
144+
editable: true
145+
options:
146+
path: /var/lib/grafana/dashboards/k8s
147+
148+
dashboards:
149+
logs:
150+
logs:
151+
## Dashboard for quick search application logs for loki with two datasources loki and prometheus - https://grafana.com/grafana/dashboards/12019
152+
url: https://grafana-dashboards.maddevs.org/common/aws-eks-base/loki-dashboard-quick-search.json
153+
154+
k8s:
155+
nginx-ingress:
156+
## Dashboard for nginx-ingress metrics - https://grafana.com/grafana/dashboards/9614
157+
gnetId: 9614
158+
datasource: Prometheus
159+
loki-promtail:
160+
## Dashboard for loki and promtail metrics - https://grafana.com/grafana/dashboards/10880
161+
gnetId: 10880
162+
datasource: Prometheus
163+
cluster-autoscaler:
164+
## Dashboard for cluster-autoscaler metrics - https://grafana.com/grafana/dashboards/3831
165+
gnetId: 3831
166+
datasource: Prometheus
167+
168+
affinity:
169+
nodeAffinity:
170+
requiredDuringSchedulingIgnoredDuringExecution:
171+
nodeSelectorTerms:
172+
- matchExpressions:
173+
- key: eks.amazonaws.com/capacityType
174+
operator: In
175+
values:
176+
- SPOT
177+
VALUES
178+
179+
kube_prometheus_stack_alertmanager_values = <<VALUES
180+
# Alertmanager parameters
181+
alertmanager:
182+
enabled: false
183+
ingress:
184+
enabled: true
185+
annotations:
186+
kubernetes.io/ingress.class: nginx
187+
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
188+
nginx.ingress.kubernetes.io/whitelist-source-range: ${local.ip_whitelist}
189+
path: /
190+
hosts:
191+
- ${local.alertmanager_domain_name}
192+
tls:
193+
- hosts:
194+
- ${local.alertmanager_domain_name}
195+
alertmanagerSpec:
196+
storage:
197+
volumeClaimTemplate:
198+
spec:
199+
storageClassName: advanced
200+
accessModes: ["ReadWriteOnce"]
201+
resources:
202+
requests:
203+
storage: 10Gi
204+
config:
205+
global:
206+
resolve_timeout: 5m
207+
slack_api_url: ${local.alertmanager_slack_url}
208+
route:
209+
group_by: ['job']
210+
group_wait: 30s
211+
group_interval: 5m
212+
repeat_interval: 12h
213+
receiver: 'null'
214+
routes:
215+
- match:
216+
alertname: Watchdog
217+
receiver: 'null'
218+
- match:
219+
receiver: "slack-notifications"
220+
continue: true
221+
receivers:
222+
- name: 'null'
223+
- name: 'slack-notifications'
224+
slack_configs:
225+
- channel: ${local.alertmanager_slack_channel}
226+
send_resolved: true
227+
icon_url: https://avatars3.githubusercontent.com/u/3380462
228+
username: 'AlertManager'
229+
color: '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}'
230+
title: '[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}'
231+
text: |-
232+
{{ range .Alerts }}
233+
{{ if .Annotations.summary }}*Alert:* - {{ .Annotations.summary }} - `{{ .Labels.severity }}`{{ end }}
234+
*Description:* {{ .Annotations.message }}
235+
*Details:*
236+
{{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
237+
{{ end }}
238+
{{ end }}
239+
icon_emoji: '{{ template "slack.default.iconemoji" . }}'
240+
241+
affinity:
242+
nodeAffinity:
243+
requiredDuringSchedulingIgnoredDuringExecution:
244+
nodeSelectorTerms:
245+
- matchExpressions:
246+
- key: eks.amazonaws.com/capacityType
247+
operator: In
248+
values:
249+
- ON_DEMAND
250+
VALUES
30251
}
31252

32253
#tfsec:ignore:kubernetes-network-no-public-egress tfsec:ignore:kubernetes-network-no-public-ingress
@@ -177,7 +398,9 @@ resource "helm_release" "prometheus_operator" {
177398
max_history = var.helm_release_history_size
178399

179400
values = [
180-
local.kube_prometheus_stack_template
401+
local.kube_prometheus_stack_values,
402+
local.kube_prometheus_stack_grafana_values,
403+
local.kube_prometheus_stack_alertmanager_values
181404
]
182405

183406
}

terraform/layer2-k8s/helm-releases.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ releases:
105105
enabled: true
106106
chart: kube-prometheus-stack
107107
repository: https://prometheus-community.github.io/helm-charts
108-
version: 13.12.0
108+
chart_version: 13.12.0
109109
namespace: monitoring
110110
- id: loki-stack
111111
enabled: true

0 commit comments

Comments
 (0)