@@ -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}
0 commit comments