Skip to content

Commit 7298dd5

Browse files
☀ projected k8s-manifests-github from 11c55da
Source-holobranch: k8s-manifests-github Source-commit: 11c55da Source: 11c55da
2 parents 3a057f8 + 11c55da commit 7298dd5

3 files changed

Lines changed: 262 additions & 1 deletion

File tree

‎grafana/ConfigMap/grafana.yaml‎

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
apiVersion: v1
22
data:
3+
contactpoints.yaml: |
4+
apiVersion: 1
5+
contactPoints:
6+
- name: cluster-alerts-email
7+
orgId: 1
8+
receivers:
9+
- settings:
10+
addresses: ${ALERT_EMAIL_TO}
11+
singleEmail: false
12+
type: email
13+
uid: cluster-alerts-email
314
dashboardproviders.yaml: |
415
apiVersion: 1
516
providers:
@@ -17,10 +28,12 @@ data:
1728
- isDefault: true
1829
name: Prometheus
1930
type: prometheus
31+
uid: prometheus
2032
url: http://prometheus-server.prometheus.svc.cluster.local
2133
- access: proxy
2234
name: Loki
2335
type: loki
36+
uid: loki
2437
url: http://loki.loki.svc.cluster.local:3100
2538
version: 1
2639
download_dashboards.sh: |
@@ -86,6 +99,201 @@ data:
8699
provisioning = /etc/grafana/provisioning
87100
[server]
88101
domain = metrics.sandbox.k8s.phl.io
102+
[smtp]
103+
enabled = true
104+
from_name = Cluster Monitoring
105+
host = smtp.postmarkapp.com:587
106+
policies.yaml: |
107+
apiVersion: 1
108+
policies:
109+
- group_by:
110+
- alertname
111+
- namespace
112+
- name
113+
group_interval: 5m
114+
group_wait: 30s
115+
orgId: 1
116+
receiver: cluster-alerts-email
117+
repeat_interval: 12h
118+
rules.yaml: |
119+
apiVersion: 1
120+
groups:
121+
- folder: Certificates
122+
interval: 5m
123+
name: cert-manager
124+
orgId: 1
125+
rules:
126+
- annotations:
127+
description: renewalTime is over a day in the past and renewal hasn't happened.
128+
The cert is probably still valid, so nothing looks broken yet — which is exactly
129+
how this failure mode hides. Check `kubectl get challenges -A` for a stuck
130+
challenge.
131+
summary: 'Certificate {{ $labels.namespace }}/{{ $labels.name }} is overdue
132+
for renewal'
133+
condition: C
134+
data:
135+
- datasourceUid: prometheus
136+
model:
137+
expr: time() - certmanager_certificate_renewal_timestamp_seconds
138+
instant: true
139+
refId: A
140+
refId: A
141+
relativeTimeRange:
142+
from: 600
143+
to: 0
144+
- datasourceUid: __expr__
145+
model:
146+
conditions:
147+
- evaluator:
148+
params:
149+
- 86400
150+
type: gt
151+
expression: A
152+
refId: C
153+
type: threshold
154+
refId: C
155+
execErrState: OK
156+
for: 1h
157+
labels:
158+
severity: warning
159+
noDataState: OK
160+
title: CertRenewalOverdue
161+
uid: cert-renewal-overdue
162+
- annotations:
163+
description: Challenge in flight for over an hour. Healthy ones resolve in seconds.
164+
If its Order is gone it must be deleted by name, or it starves every future
165+
renewal for this hostname.
166+
summary: 'ACME challenge stuck for {{ $labels.namespace }}/{{ $labels.name
167+
}}'
168+
condition: C
169+
data:
170+
- datasourceUid: prometheus
171+
model:
172+
expr: certmanager_certificate_challenge_status
173+
instant: true
174+
refId: A
175+
refId: A
176+
relativeTimeRange:
177+
from: 600
178+
to: 0
179+
- datasourceUid: __expr__
180+
model:
181+
conditions:
182+
- evaluator:
183+
params:
184+
- 0
185+
type: gt
186+
expression: A
187+
refId: C
188+
type: threshold
189+
refId: C
190+
execErrState: OK
191+
for: 1h
192+
labels:
193+
severity: warning
194+
noDataState: OK
195+
title: CertChallengeStuck
196+
uid: cert-challenge-stuck
197+
- annotations:
198+
description: Renewal starts at 30 days, so this has been failing for a week
199+
or more.
200+
summary: 'Certificate {{ $labels.namespace }}/{{ $labels.name }} expires
201+
within 21 days'
202+
condition: C
203+
data:
204+
- datasourceUid: prometheus
205+
model:
206+
expr: certmanager_certificate_expiration_timestamp_seconds - time()
207+
instant: true
208+
refId: A
209+
refId: A
210+
relativeTimeRange:
211+
from: 600
212+
to: 0
213+
- datasourceUid: __expr__
214+
model:
215+
conditions:
216+
- evaluator:
217+
params:
218+
- 1814400
219+
type: lt
220+
expression: A
221+
refId: C
222+
type: threshold
223+
refId: C
224+
execErrState: OK
225+
for: 1h
226+
labels:
227+
severity: warning
228+
noDataState: OK
229+
title: CertExpiringSoon
230+
uid: cert-expiring-soon
231+
- annotations:
232+
description: Under a week to expiry. Users will see browser warnings when this
233+
lapses.
234+
summary: 'Certificate {{ $labels.namespace }}/{{ $labels.name }} expires
235+
within 7 days'
236+
condition: C
237+
data:
238+
- datasourceUid: prometheus
239+
model:
240+
expr: certmanager_certificate_expiration_timestamp_seconds - time()
241+
instant: true
242+
refId: A
243+
refId: A
244+
relativeTimeRange:
245+
from: 600
246+
to: 0
247+
- datasourceUid: __expr__
248+
model:
249+
conditions:
250+
- evaluator:
251+
params:
252+
- 604800
253+
type: lt
254+
expression: A
255+
refId: C
256+
type: threshold
257+
refId: C
258+
execErrState: OK
259+
for: 10m
260+
labels:
261+
severity: critical
262+
noDataState: OK
263+
title: CertExpiringCritical
264+
uid: cert-expiring-critical
265+
- annotations:
266+
description: No certificate can be issued or renewed through this issuer.
267+
summary: 'ClusterIssuer {{ $labels.name }} is not Ready'
268+
condition: C
269+
data:
270+
- datasourceUid: prometheus
271+
model:
272+
expr: certmanager_clusterissuer_ready_status{condition="True"}
273+
instant: true
274+
refId: A
275+
refId: A
276+
relativeTimeRange:
277+
from: 600
278+
to: 0
279+
- datasourceUid: __expr__
280+
model:
281+
conditions:
282+
- evaluator:
283+
params:
284+
- 1
285+
type: lt
286+
expression: A
287+
refId: C
288+
type: threshold
289+
refId: C
290+
execErrState: OK
291+
for: 15m
292+
labels:
293+
severity: critical
294+
noDataState: OK
295+
title: ClusterIssuerNotReady
296+
uid: clusterissuer-not-ready
89297
kind: ConfigMap
90298
metadata:
91299
labels:

‎grafana/Deployment/grafana.yaml‎

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ spec:
2121
template:
2222
metadata:
2323
annotations:
24-
checksum/config: 72c936e8e1ff007758598b923885b11f3001441e27b8b2f9b2c466de0def2f1e
24+
checksum/config: 25260123a4e6ba00201f2dd3fd0a5afafb2e7db07bd3e3cc764cde04ea9dc9e0
2525
checksum/dashboards-json-config: 4f1a6849aba728c6f66b9b27a78f020f7f74b2cb327597cec42eedc8ab62986a
2626
checksum/sc-dashboard-provider-config: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
2727
labels:
@@ -49,6 +49,30 @@ spec:
4949
value: /var/lib/grafana/plugins
5050
- name: GF_PATHS_PROVISIONING
5151
value: /etc/grafana/provisioning
52+
- name: ALERT_EMAIL_TO
53+
valueFrom:
54+
secretKeyRef:
55+
key: recipients
56+
name: grafana-smtp
57+
optional: true
58+
- name: GF_SMTP_FROM_ADDRESS
59+
valueFrom:
60+
secretKeyRef:
61+
key: from-address
62+
name: grafana-smtp
63+
optional: true
64+
- name: GF_SMTP_PASSWORD
65+
valueFrom:
66+
secretKeyRef:
67+
key: password
68+
name: grafana-smtp
69+
optional: true
70+
- name: GF_SMTP_USER
71+
valueFrom:
72+
secretKeyRef:
73+
key: user
74+
name: grafana-smtp
75+
optional: true
5276
image: grafana/grafana:9.2.5
5377
imagePullPolicy: IfNotPresent
5478
livenessProbe:
@@ -76,6 +100,15 @@ spec:
76100
- mountPath: /etc/grafana/provisioning/datasources/datasources.yaml
77101
name: config
78102
subPath: datasources.yaml
103+
- mountPath: /etc/grafana/provisioning/alerting/contactpoints.yaml
104+
name: config
105+
subPath: contactpoints.yaml
106+
- mountPath: /etc/grafana/provisioning/alerting/policies.yaml
107+
name: config
108+
subPath: policies.yaml
109+
- mountPath: /etc/grafana/provisioning/alerting/rules.yaml
110+
name: config
111+
subPath: rules.yaml
79112
- mountPath: /etc/grafana/provisioning/dashboards/dashboardproviders.yaml
80113
name: config
81114
subPath: dashboardproviders.yaml
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: bitnami.com/v1alpha1
2+
kind: SealedSecret
3+
metadata:
4+
name: grafana-smtp
5+
namespace: grafana
6+
spec:
7+
encryptedData:
8+
from-address: >-
9+
AgBMPexC9kIlK+TFolqa2Bbw5u5JvfQ91biez6qHky39Em5pm+Gfg5RU8X83NJQYIoGtNp2mjeAQyWRsc+W7Xyj/vw+OOuJ/1K6iCzGS29gaQAMRjyChCMLNpf2dVhm9LNQlR4/aN22UP8fFTf0OqT3YAAFkKRd5ViCKOkXX6Sipwmv6cfiKJUqMK0LtngAKp1RUTh2M6wJISDvIkV+tyFUqrteQD+LOHNg79p13B/+rFG9L3+yXhltm2gSiDJXW4byDMN+pZWmW9XC8x/gmIBh57TXwPFvtUfM89vpJwBeuoJPpW5Rg2pjYS7zyGmL7RqKJmztRKqp3ilPTP0GR+ZC6uLDRpJ9afkHCsrcOsULF6VkadX34aPtF60uYWlnm3CRG9fY0Au29wfxo5VWfWeUVf8obpAXWvXbKjiNEhPf3BwLGuk3ytoaQTeoLAbi83fBnTAWA3VXuN+NF4OYzQUXBdI0rsMmaiD24W7pKWgtVAsX+R147JhkZSpzTstfd9PhEE5v36uHd0q71Y6MU6FF813GtrzD7wSkmdjmSs+h4zpK20LUjErto7c6lXhj8Uf+X1bcS5cBs2X293PovrjSQ384euzdLFG2P34Q6ls0L4bQtwPja4hQJQT0YcxIBZ6IVbG1NQeKKsYIgJTJ40GrwJpZzxwFjk1feBE/vwrrh+fkOawFCeEjKkYIp8IxV7OhV6S2E1EqteF4a3sQfGx8t34n6jRGMTrvZ3Q==
10+
password: >-
11+
AgCZUNFtDA4l+wTpsrMsfCgDyMgEDfBBKNifH+doemPgONdxs6aUQBdD02x/T7qWQCE20hit6S9aJh5JnGsxi+/wJ86QticchM9WUKdtwLWrZr0Lg7mCyNZYLRZo5oX+G/rCdYC975Bjgw4L86AT5bR+Y6lQ9Gj2OZnm743QMnOqXxNncUjFRJZRCRfTzSy2JUfKU70ZMO3Ddgh1C+BD1efmXzbdLfV6AJ+QW/SJLbOWKVDjJttTywYiPIi/kKWiKoXykVzCUOCkIJBOYgv5kvAUVo/UrX2BLAgHh6yTc5a6C1SUyEwiqhv6Dp/ukXQD2ruDcoWJHEDX7AsmvQXiO0ryFIUFXOsmaeHd5OYjmRU5W40FHbkMqWOUS/gN1wFR3RyFFSXZDFTULRaC4/RWBHUycW93ClmeqZPv/m2udu4MMco19967xLh4n+IAc6iTwkCOSg+eOOrTgt5GL/a+GsNG3vXY0ptSMH/rweG6KAgF8fIRXZlHhxFwe5p6p8RW3N4IkcZY1sDewMhQvxU6ZY/QAu/VAiD49Pz3gALMARmjUsHMQEA/ORYn9xJrIDd7Y0nKEqllZB25uQP6LcvLHqNKXkleKdSkhKUQpelTtrj+axYk0RVXTpaXTgCeD8xNza7eJ2nuQ/GRgs1LwvGD6CHQil3VoAa4qWrwP5zxTTEpBHUNVuR6LXhF7MlnUfVaBID0hRh6HHeoLonZ0983deHnyO1yft6y/D7vaXJbFqGl9dfF1RY=
12+
recipients: >-
13+
AgAnBHf//CL7+82ZZ7/uQiHBcCmzNcIrxPBfK0PKVYP2e68SZXusEqaW2QBSGv5ZZY0m/NQfcaMzHojcHtciPRTNOu+RAVyEF93w6pull74PMfyNwmZQZuwr7Yo6kiDUwFz3iS+fDUacJ/4jzgtF0LGLFw+DAQPryXcbdhQWG4jvs69hZZxp90o2VN72Q8kmlgwcy48/iJYqRXiWx7fbFX02Nnep+SEuYhkau7ilk3rXAchFRJsIikZ9g0RjBk5hLK7pJPIJQNlk0cgRXYulzHO6R445+kv4CMzgV0pJz5ZxOcse9d6NRjn6fnPK5PYm/WgkPGyuKHcVaNlDcSdtUMb+eSbCmcKAplR0aGNoSgPi23Ozu4i7PwwVv09mNq2k8uiJaVFzsctIeG0SdFyueQQuGyzhiqY/D9Wy9Z0LI9NUSBgOCRwCzl54dy5JFEPYFIUGhXQGlWlNiGHaYowbvIaxqy+F2gN+MYmW+yL/N2oCLv7MzfBovHshzv4t6S5DwYbVf/P5EqbUJsqDp2eXsDfKdJk/hsLAmVAVROCB9ma62lloqQ4kK7A2WeZq/zJichIe0QfG5LdCJC/Q6kzQMQSs6+gV89+OvwCMEZBYv1+uX94jH/dHZ7gqbh27u+7+bNNHy/84QZbk8ZPb4HgScOTU9vfekOWN4fJXxHD7GyJt0koz37yhmCxFLcXUuGmz2hVvJE+2KwD3xU9cGpW8
14+
user: >-
15+
AgCSO/1AEYzE0FzKL66pNCdgsA6ILAbruTa9etC2rXEhSsX64krJ8cr08pBHQ4W3SMIDW4otTABGCnSt5Shi5XToRx4+p2xLoadLxlCAvF8TTsiayKA9Dj/h1r+eRJ5B/XlXxLR/cir+HI1WWE8cpMz1+7PSIJKoC6jPkc0woh5RUtecxDFU78zzPEWoZxItli0WrBdvZAcBWwX+P5ErNv0qlZZoiCApQocTGMHb/U9etO8W0r4bqkto0w71i94Z5grjg68M0jHVnyytUdM84Hf+VF0cpW+XhulEJT3fGQgAN+LiUTrUiRx9TqHC1iWbEwFRCKl6/yY/72i5D4MnbnfOGa5R52hl2ewzDg/DKr3Uulu1rsX06M31yq2RqTib2WZwkSEE/3vhOLUx7MbrRBfBOURoCPJP3sW48hBYGnZmowULbrHs1ZyKx1ClWRJEqZdx1rWWy6fBhh+5OTfXbNGv5JgFKMflCkeNf4y0jv+Ck1hVG7Gc0Yook/AVquhecN77uRBho3WJ7/opv93HvNw+2/2/1NpAd+9To6pzBS01qZj946yo+QNtLWKl/RTVkCESGayLIGeH6V6fbq/xUluuF+EOEJm7ylNHTOtaUmF+fN8zCwiHVI+xRjqHIpjyu5/M3M1uII7BSg/1RzJXjKq10dk+eNUwA4mrroooFvTumqJbDcVkrxeRTArooYdORTP+t1ckCgdNA1f7986/1eK5cJK4RKjhnXP8pRO7VtKbVK3bBWA=
16+
template:
17+
metadata:
18+
name: grafana-smtp
19+
namespace: grafana
20+
type: Opaque

0 commit comments

Comments
 (0)