1
+ import base.pkg.kusion_kubernetes.api.core.v1 as corev1
2
+ import base.pkg.kusion_prometheus.monitoring.v1 as monitoringv1
3
+ import base.pkg.kusion_prometheus.monitoring.v1alpha1 as monitoringv1alpha1
4
+
5
+
6
+ # 1. creates an AlertmanagerConfig that sends notifications to a fictitious webhook service.
7
+ _alertmanager_config: monitoringv1alpha1.AlertmanagerConfig{
8
+ metadata = {
9
+ name = "config-example"
10
+ namespace = _common_namespace
11
+ labels = {
12
+ "alertmanagerConfig" = "example"
13
+ }
14
+ }
15
+ spec = {
16
+ route = {
17
+ groupBy = ["job"]
18
+ groupWait = "30s"
19
+ groupInterval = "5m"
20
+ repeatInterval = "12h"
21
+ receiver = "webhook"
22
+ }
23
+ receivers = [
24
+ {
25
+ name = "webhook"
26
+ webhookConfigs = [
27
+ {
28
+ url = "http://example.com/"
29
+ }
30
+ ]
31
+ }
32
+ ]
33
+ }
34
+ }
35
+
36
+ # 2. create an alertmanager cluster with 3 replicas and configured with alertmanager config
37
+ _alertmanager: monitoringv1.Alertmanager{
38
+ metadata = {
39
+ name = "example"
40
+ namespace = _common_namespace
41
+ }
42
+ spec = {
43
+ replicas = 3
44
+ # using AlertmanagerConfig for global configuration
45
+ alertmanagerConfiguration = {
46
+ name = _alertmanager_config.metadata.name
47
+ }
48
+ }
49
+ }
50
+
51
+ # 3. expose alertmanager service
52
+ _alertmanager_svc: corev1.Service{
53
+ metadata = {
54
+ name = "alertmanager-example"
55
+ namespace = _common_namespace
56
+ }
57
+ spec = {
58
+ selector = {
59
+ "alertmanager" = _alertmanager.metadata.name
60
+ }
61
+ ports = [
62
+ {
63
+ name = "web"
64
+ port = 9093
65
+ targetPort = "web"
66
+ }
67
+ {
68
+ name = "reloader-web"
69
+ port = 8080
70
+ targetPort = "reloader-web"
71
+ }
72
+ ]
73
+ sessionAffinity = "ClientIP"
74
+ }
75
+ }
76
+
77
+ # 4. create a prometheus instance, intergated with alertmanager cluster
78
+ _prometheus: monitoringv1.Prometheus{
79
+ metadata = {
80
+ name = "example"
81
+ namespace = _common_namespace
82
+ }
83
+ spec = {
84
+ # specify service account, default sa has no permissions
85
+ serviceAccountName = _rbac_name
86
+ replicas = 1
87
+ # ruleSelector is nil meaning that the operator picks up no rule
88
+ ruleSelector = {
89
+ matchLabels = {
90
+ "role" = "alert-rules"
91
+ "prometheus" = "example"
92
+ }
93
+ }
94
+ serviceMonitorSelector = {
95
+ matchLabels = {
96
+ "prometheus" = "example"
97
+ }
98
+ }
99
+ # intergating with alert manager by its service
100
+ alerting = {
101
+ alertmanagers = [
102
+ {
103
+ name = _alertmanager_svc.metadata.name
104
+ namespace = _alertmanager_svc.metadata.namespace
105
+ port = _alertmanager_svc.spec.ports[0].name
106
+ }
107
+ ]
108
+ }
109
+ }
110
+ }
111
+
112
+ # 5. expose prometheus service
113
+ _prometheus_svc: corev1.Service{
114
+ metadata = {
115
+ name = "prometheus-example"
116
+ namespace = _common_namespace
117
+ }
118
+ spec = {
119
+ selector = {
120
+ "prometheus" = _prometheus.metadata.name
121
+ }
122
+ ports = [
123
+ {
124
+ name = "web"
125
+ port = 9090
126
+ targetPort = "web"
127
+ }
128
+ {
129
+ name = "reloader-web"
130
+ port = 8080
131
+ targetPort = "reloader-web"
132
+ }
133
+ ]
134
+ sessionAffinity = "ClientIP"
135
+ }
136
+ }
0 commit comments