annotate alert_rules.py @ 87:598e75e8e2d7

pdm lock
author drewp@bigasterisk.com
date Mon, 26 Aug 2024 16:32:35 -0700
parents ce7c4a918832
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
drewp@bigasterisk.com
parents:
diff changeset
1 """
drewp@bigasterisk.com
parents:
diff changeset
2 pdm run invoke push-config
drewp@bigasterisk.com
parents:
diff changeset
3
drewp@bigasterisk.com
parents:
diff changeset
4 docs: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
drewp@bigasterisk.com
parents:
diff changeset
5 "Whenever the alert expression results in one or more vector
drewp@bigasterisk.com
parents:
diff changeset
6 elements at a given point in time, the alert counts as active for
drewp@bigasterisk.com
parents:
diff changeset
7 these elements' label sets."
drewp@bigasterisk.com
parents:
diff changeset
8 also https://www.metricfire.com/blog/top-5-prometheus-alertmanager-gotchas/#Missing-metrics
drewp@bigasterisk.com
parents:
diff changeset
9
drewp@bigasterisk.com
parents:
diff changeset
10 """
drewp@bigasterisk.com
parents:
diff changeset
11
drewp@bigasterisk.com
parents:
diff changeset
12 import json
drewp@bigasterisk.com
parents:
diff changeset
13
drewp@bigasterisk.com
parents:
diff changeset
14
49
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
15 def pomRules():
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
16 return [
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
17 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
18 "alert": "frequent_upstream_connect_failures",
51
df44473de6a1 let connection failure alerts finish sooner
drewp@bigasterisk.com
parents: 49
diff changeset
19 "expr": "max_over_time(rate(sum by (envoy_cluster_name) (envoy_cluster_upstream_cx_connect_fail))[1h]) > 0"
49
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
20 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
21 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
22 "alert": "high_logging_pomerium",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
23 "for": "3h",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
24 "labels": {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
25 "severity": "waste"
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
26 },
82
drewp@bigasterisk.com
parents: 81
diff changeset
27 "expr": 'sum by (container) (rate(kubelet_container_log_filesystem_used_bytes{container="pomerium"}[1h])) > 50k',
49
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
28 "annotations": {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
29 "summary": "high log output rate"
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
30 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
31 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
32 ]
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
33
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
34
23
drewp@bigasterisk.com
parents:
diff changeset
35 def k8sRules():
drewp@bigasterisk.com
parents:
diff changeset
36 # from https://awesome-prometheus-alerts.grep.to/rules.html
drewp@bigasterisk.com
parents:
diff changeset
37 return [
drewp@bigasterisk.com
parents:
diff changeset
38 {
34
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
39 "alert": "metricsTargetMissing",
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
40 "expr": 'up{job!~"cm-acme-.*"} == 0',
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
41 'for': '10m',
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
42 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
43 "severity": "critical"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
44 },
23
drewp@bigasterisk.com
parents:
diff changeset
45 "annotations": {
34
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
46 "summary": "metrics target missing (instance {{ $labels.instance }})",
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
47 "description": "A metrics target has disappeared. An exporter might be crashed.\n VALUE = {{ $value }}",
23
drewp@bigasterisk.com
parents:
diff changeset
48 },
drewp@bigasterisk.com
parents:
diff changeset
49 },
drewp@bigasterisk.com
parents:
diff changeset
50 {
drewp@bigasterisk.com
parents:
diff changeset
51 "alert": "KubernetesMemoryPressure",
drewp@bigasterisk.com
parents:
diff changeset
52 "expr": 'kube_node_status_condition{condition="MemoryPressure",status="true"} == 1',
drewp@bigasterisk.com
parents:
diff changeset
53 "for": "2m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
54 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
55 "severity": "critical"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
56 },
23
drewp@bigasterisk.com
parents:
diff changeset
57 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
58 "summary": "Kubernetes memory pressure (instance {{ $labels.instance }})",
drewp@bigasterisk.com
parents:
diff changeset
59 "description": "{{ $labels.node }} has MemoryPressure condition\n VALUE = {{ $value }}",
drewp@bigasterisk.com
parents:
diff changeset
60 },
drewp@bigasterisk.com
parents:
diff changeset
61 },
drewp@bigasterisk.com
parents:
diff changeset
62 {
drewp@bigasterisk.com
parents:
diff changeset
63 "alert": "KubernetesDiskPressure",
drewp@bigasterisk.com
parents:
diff changeset
64 "expr": 'kube_node_status_condition{condition="DiskPressure",status="true"} == 1',
drewp@bigasterisk.com
parents:
diff changeset
65 "for": "2m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
66 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
67 "severity": "critical"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
68 },
23
drewp@bigasterisk.com
parents:
diff changeset
69 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
70 "summary": "Kubernetes disk pressure (instance {{ $labels.instance }})",
drewp@bigasterisk.com
parents:
diff changeset
71 "description": "{{ $labels.node }} has DiskPressure condition\n VALUE = {{ $value }}",
drewp@bigasterisk.com
parents:
diff changeset
72 },
drewp@bigasterisk.com
parents:
diff changeset
73 },
drewp@bigasterisk.com
parents:
diff changeset
74 {
drewp@bigasterisk.com
parents:
diff changeset
75 "alert": "KubernetesOutOfDisk",
drewp@bigasterisk.com
parents:
diff changeset
76 "expr": 'kube_node_status_condition{condition="OutOfDisk",status="true"} == 1',
drewp@bigasterisk.com
parents:
diff changeset
77 "for": "2m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
78 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
79 "severity": "critical"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
80 },
23
drewp@bigasterisk.com
parents:
diff changeset
81 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
82 "summary": "Kubernetes out of disk (instance {{ $labels.instance }})",
drewp@bigasterisk.com
parents:
diff changeset
83 "description": "{{ $labels.node }} has OutOfDisk condition\n VALUE = {{ $value }}",
drewp@bigasterisk.com
parents:
diff changeset
84 },
drewp@bigasterisk.com
parents:
diff changeset
85 },
drewp@bigasterisk.com
parents:
diff changeset
86 {
drewp@bigasterisk.com
parents:
diff changeset
87 "alert": "KubernetesJobFailed",
drewp@bigasterisk.com
parents:
diff changeset
88 "expr": "kube_job_status_failed > 0",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
89 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
90 "severity": "warning"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
91 },
23
drewp@bigasterisk.com
parents:
diff changeset
92 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
93 "summary": "Kubernetes Job failed (instance {{ $labels.instance }})",
drewp@bigasterisk.com
parents:
diff changeset
94 "description": "Job {{$labels.namespace}}/{{$labels.exported_job}} failed to complete\n VALUE = {{ $value }}",
drewp@bigasterisk.com
parents:
diff changeset
95 },
drewp@bigasterisk.com
parents:
diff changeset
96 },
drewp@bigasterisk.com
parents:
diff changeset
97 {
drewp@bigasterisk.com
parents:
diff changeset
98 "alert": "KubernetesPodCrashLooping",
drewp@bigasterisk.com
parents:
diff changeset
99 "expr": "increase(kube_pod_container_status_restarts_total[1m]) > 3",
drewp@bigasterisk.com
parents:
diff changeset
100 "for": "2m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
101 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
102 "severity": "warning"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
103 },
23
drewp@bigasterisk.com
parents:
diff changeset
104 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
105 "summary": "Kubernetes pod crash looping (instance {{ $labels.instance }})",
drewp@bigasterisk.com
parents:
diff changeset
106 "description": "Pod {{ $labels.pod }} is crash looping\n VALUE = {{ $value }}",
drewp@bigasterisk.com
parents:
diff changeset
107 },
drewp@bigasterisk.com
parents:
diff changeset
108 },
drewp@bigasterisk.com
parents:
diff changeset
109 {
48
drewp@bigasterisk.com
parents: 45
diff changeset
110 "alert": "KubernetesClientCertificateExpiresNextWeek",
drewp@bigasterisk.com
parents: 45
diff changeset
111 "expr": 'apiserver_client_certificate_expiration_seconds_count{job="apiserver"} > 0 and histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job="apiserver"}[5m]))) < 7*24*60*60',
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
112 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
113 "severity": "warning"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
114 },
23
drewp@bigasterisk.com
parents:
diff changeset
115 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
116 "summary": "Kubernetes client certificate expires next week (instance {{ $labels.instance }})",
drewp@bigasterisk.com
parents:
diff changeset
117 "description": "A client certificate used to authenticate to the apiserver is expiring next week.\n VALUE = {{ $value }}",
drewp@bigasterisk.com
parents:
diff changeset
118 },
drewp@bigasterisk.com
parents:
diff changeset
119 },
drewp@bigasterisk.com
parents:
diff changeset
120 {
drewp@bigasterisk.com
parents:
diff changeset
121 "alert": "container_waiting",
34
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
122 "expr": "sum by (namespace, pod, container)(kube_pod_container_status_waiting!=0)",
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
123 "annotations": {
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
124 "description": '',
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
125 "dashboard": "https://bigasterisk.com/k/clusters/local/namespaces/{{ $labels.namespace }}/pods/{{ $labels.pod }}",
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
126 },
81
5767d3fd170f denoise
drewp@bigasterisk.com
parents: 80
diff changeset
127 "for": "10m",
23
drewp@bigasterisk.com
parents:
diff changeset
128 },
drewp@bigasterisk.com
parents:
diff changeset
129 ]
drewp@bigasterisk.com
parents:
diff changeset
130
drewp@bigasterisk.com
parents:
diff changeset
131
32
eb1de82c93aa refactor the merging of all the groups
drewp@bigasterisk.com
parents: 31
diff changeset
132 def allRules(ctx):
23
drewp@bigasterisk.com
parents:
diff changeset
133 return {
drewp@bigasterisk.com
parents:
diff changeset
134 "groups": [
drewp@bigasterisk.com
parents:
diff changeset
135 {
drewp@bigasterisk.com
parents:
diff changeset
136 "name": "k8s",
28
e114edff93dc more explicit intervals. try to get a single day of notification out of a disk err increase
drewp@bigasterisk.com
parents: 27
diff changeset
137 "interval": "1m",
23
drewp@bigasterisk.com
parents:
diff changeset
138 "rules": k8sRules(),
drewp@bigasterisk.com
parents:
diff changeset
139 },
drewp@bigasterisk.com
parents:
diff changeset
140 {
49
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
141 "name": "pomerium_proxy",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
142 "interval": "1m",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
143 "rules": pomRules(),
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
144 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
145 {
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
146 "name":
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
147 "Outages",
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
148 "interval":
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
149 "1m",
23
drewp@bigasterisk.com
parents:
diff changeset
150 "rules": [
drewp@bigasterisk.com
parents:
diff changeset
151 {
drewp@bigasterisk.com
parents:
diff changeset
152 "alert": "powereagleStalled",
drewp@bigasterisk.com
parents:
diff changeset
153 "expr": "rate(house_power_w[100m]) == 0",
drewp@bigasterisk.com
parents:
diff changeset
154 "for": "0m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
155 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
156 "severity": "losingData"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
157 },
23
drewp@bigasterisk.com
parents:
diff changeset
158 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
159 "summary": "power eagle data stalled",
drewp@bigasterisk.com
parents:
diff changeset
160 "description": "logs at https://bigasterisk.com/k/clusters/local/namespaces/default/deployments/power-eagle/logs",
drewp@bigasterisk.com
parents:
diff changeset
161 },
drewp@bigasterisk.com
parents:
diff changeset
162 },
drewp@bigasterisk.com
parents:
diff changeset
163 {
drewp@bigasterisk.com
parents:
diff changeset
164 "alert": "powereagleAbsent",
drewp@bigasterisk.com
parents:
diff changeset
165 "expr": "absent_over_time(house_power_w[5m])",
drewp@bigasterisk.com
parents:
diff changeset
166 "for": "2m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
167 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
168 "severity": "losingData"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
169 },
23
drewp@bigasterisk.com
parents:
diff changeset
170 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
171 "summary": "power eagle data missing",
drewp@bigasterisk.com
parents:
diff changeset
172 "description": "logs at https://bigasterisk.com/k/clusters/local/namespaces/default/deployments/power-eagle/logs",
drewp@bigasterisk.com
parents:
diff changeset
173 },
drewp@bigasterisk.com
parents:
diff changeset
174 },
drewp@bigasterisk.com
parents:
diff changeset
175 {
drewp@bigasterisk.com
parents:
diff changeset
176 "alert": "absent_zigbee",
drewp@bigasterisk.com
parents:
diff changeset
177 "expr": 'absent(container_last_seen{container="zigbee2mqtt"})',
81
5767d3fd170f denoise
drewp@bigasterisk.com
parents: 80
diff changeset
178 "for": "10m",
23
drewp@bigasterisk.com
parents:
diff changeset
179 },
drewp@bigasterisk.com
parents:
diff changeset
180 {
drewp@bigasterisk.com
parents:
diff changeset
181 "alert": "net_routes_sync",
drewp@bigasterisk.com
parents:
diff changeset
182 "expr": 'rate(starlette_request_duration_seconds_count{app_name="net_routes",path="/routes"}[5m]) < 1/70',
drewp@bigasterisk.com
parents:
diff changeset
183 "for": "10m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
184 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
185 "severity": "houseUsersAffected"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
186 },
23
drewp@bigasterisk.com
parents:
diff changeset
187 "annotations": {
80
drewp@bigasterisk.com
parents: 76
diff changeset
188 "summary": "net_routes is not getting regular updates from net_routes_input",
23
drewp@bigasterisk.com
parents:
diff changeset
189 },
drewp@bigasterisk.com
parents:
diff changeset
190 },
drewp@bigasterisk.com
parents:
diff changeset
191 ],
drewp@bigasterisk.com
parents:
diff changeset
192 },
drewp@bigasterisk.com
parents:
diff changeset
193 {
48
drewp@bigasterisk.com
parents: 45
diff changeset
194 "name": "disk_errs",
drewp@bigasterisk.com
parents: 45
diff changeset
195 "interval": "2d",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
196 "rules": [{
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
197 "alert": "zpool_device_error_increase",
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
198 "labels": {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
199 "severity": "warning"
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
200 },
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
201 "expr": 'increase(zpool_device_error_count[3d]) > 0',
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
202 }, {
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
203 "alert": "zpool_device_error_count",
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
204 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
205 "severity": "warning"
28
e114edff93dc more explicit intervals. try to get a single day of notification out of a disk err increase
drewp@bigasterisk.com
parents: 27
diff changeset
206 },
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
207 "expr": 'zpool_device_error_count > 0',
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
208 }],
28
e114edff93dc more explicit intervals. try to get a single day of notification out of a disk err increase
drewp@bigasterisk.com
parents: 27
diff changeset
209 },
e114edff93dc more explicit intervals. try to get a single day of notification out of a disk err increase
drewp@bigasterisk.com
parents: 27
diff changeset
210 {
49
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
211 "name": "lighting",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
212 "interval": "5m",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
213 "rules": [{
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
214 "alert": "light_bridge_no_mqtt",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
215 "expr": 'mqtt_connected{job="light-bridge"} != 1',
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
216 }],
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
217 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
218 {
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
219 "name":
34
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
220 "front_door",
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
221 "interval":
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
222 "5m",
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
223 "rules": [
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
224 {
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
225 "alert": "front_door_reader_esp32_no_mqtt",
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
226 'expr': 'hw_connected{job="fingerprint"} < 1',
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
227 "annotations": {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
228 "summary": "see https://bigasterisk.com/front-door-lock/"
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
229 },
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
230 },
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
231 {
48
drewp@bigasterisk.com
parents: 45
diff changeset
232 "alert": "front_door_reader_svc_down",
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
233 'expr': 'up{job="fingerprint"} < 1',
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
234 "annotations": {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
235 "summary": "see https://bigasterisk.com/front-door-lock/"
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
236 },
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
237 },
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
238 {
48
drewp@bigasterisk.com
parents: 45
diff changeset
239 "alert": "front_door_reader_svc_reader_no_mqtt",
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
240 'expr': 'mqtt_connected{job="fingerprint"} < 1',
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
241 "annotations": {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
242 "summary": "see https://bigasterisk.com/front-door-lock/"
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
243 },
34
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
244 },
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
245 {
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
246 "alert": "front_door_lock_svc_down",
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
247 'expr': 'up{job="front-door-lock"} < 1',
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
248 "annotations": {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
249 "summary": "see https://bigasterisk.com/front-door-lock/"
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
250 },
34
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
251 },
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
252 {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
253 "alert": "front_door_lock_svc_no_mqtt",
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
254 'expr': 'mqtt_connected{job="front-door-lock"} < 1',
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
255 "annotations": {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
256 "summary": "see https://bigasterisk.com/front-door-lock/"
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
257 },
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
258 },
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
259 {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
260 "alert": "front_door_lock_esp32_no_mqtt",
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
261 'expr': 'hw_connected{job="front-door-lock"} < 1',
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
262 "annotations": {
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
263 "summary": "see https://bigasterisk.com/front-door-lock/"
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
264 },
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
265 },
86
ce7c4a918832 front door display rule
drewp@bigasterisk.com
parents: 82
diff changeset
266 {
ce7c4a918832 front door display rule
drewp@bigasterisk.com
parents: 82
diff changeset
267 "alert": "front_door_display_low_traffic",
ce7c4a918832 front door display rule
drewp@bigasterisk.com
parents: 82
diff changeset
268 'expr': 'rate(lan_bytes_sent_from_total{mac="00:e0:4c:68:0a:19"}[3m]) < 20',
ce7c4a918832 front door display rule
drewp@bigasterisk.com
parents: 82
diff changeset
269 "annotations": {
ce7c4a918832 front door display rule
drewp@bigasterisk.com
parents: 82
diff changeset
270 },
ce7c4a918832 front door display rule
drewp@bigasterisk.com
parents: 82
diff changeset
271 },
36
2bc188c4117a rules updates, incl front door group
drewp@bigasterisk.com
parents: 34
diff changeset
272 ],
34
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
273 },
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
274 {
49
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
275 "name":
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
276 "net_routes",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
277 "interval":
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
278 "5m",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
279 "rules": [
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
280 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
281 "alert": "no_house_ip_service",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
282 "expr": 'absent(kube_service_spec_external_ip{service="net-route-input-allowed",external_ip="10.2.0.133"})'
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
283 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
284 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
285 "alert": "no_net_routes_running",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
286 "expr": 'absent(python_info{job="net-routes"})'
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
287 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
288 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
289 "alert": "allowed_check_never_returned_200",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
290 'expr': 'starlette_requests_total{app_name="net_route_input",method="GET",path="/api/allowed",status_code="200"} < 1'
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
291 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
292 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
293 "alert": "allowed_check_never_returned_403",
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
294 'expr': 'starlette_requests_total{app_name="net_route_input",method="GET",path="/api/allowed",status_code="403"} < 1'
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
295 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
296 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
297 'alert': 'net_route_input_eval_cal_loop_is_down',
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
298 'expr': 'eval_cal_up!=1'
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
299 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
300 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
301 'alert': 'net_route_input_mongo_loop_is_down',
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
302 'expr': 'mongo_to_net_routes_up!=1'
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
303 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
304 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
305 'alert': 'gcalendarwatch_hasnt_succeeded_on_any_currentEvents_requests',
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
306 'expr': 'starlette_requests_total{app_name="gcalendarwatch",method="GET",path="/graph/currentEvents",status_code="200"} < 1'
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
307 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
308 {
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
309 'alert': 'gcalendarwatch_current_events_loop_is_down',
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
310 'expr': 'current_events_up != 1'
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
311 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
312 ],
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
313 },
febc20caabcb more alerts
drewp@bigasterisk.com
parents: 48
diff changeset
314 {
41
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
315 "name": "http",
37
6e27d280b598 watch https cert ages (testing with 45d)
drewp@bigasterisk.com
parents: 36
diff changeset
316 "interval": "1h",
41
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
317 'rules': [
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
318 {
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
319 'alert': 'old_https_certs',
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
320 'expr': 'min by (source) (x509_cert_enddate - now())/86400 < 15',
48
drewp@bigasterisk.com
parents: 45
diff changeset
321 },
drewp@bigasterisk.com
parents: 45
diff changeset
322 {
41
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
323 'alert': 'high_500_response_rate',
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
324 'expr': 'avg_over_time(rate(sum by (envoy_cluster_name) (envoy_cluster_internal_upstream_rq_xx{envoy_response_code_class="5"})[20m])) > 0.02',
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
325 },
407ee7fbda13 rm double metrics; add alert for too-many-500s
drewp@bigasterisk.com
parents: 40
diff changeset
326 ],
37
6e27d280b598 watch https cert ages (testing with 45d)
drewp@bigasterisk.com
parents: 36
diff changeset
327 },
6e27d280b598 watch https cert ages (testing with 45d)
drewp@bigasterisk.com
parents: 36
diff changeset
328 {
42
2f87ecd2a754 fix ping; add ping to prime
drewp@bigasterisk.com
parents: 41
diff changeset
329 "name": "ping",
2f87ecd2a754 fix ping; add ping to prime
drewp@bigasterisk.com
parents: 41
diff changeset
330 "interval": "1m",
2f87ecd2a754 fix ping; add ping to prime
drewp@bigasterisk.com
parents: 41
diff changeset
331 "rules": [{
2f87ecd2a754 fix ping; add ping to prime
drewp@bigasterisk.com
parents: 41
diff changeset
332 "alert": "ping_failed",
2f87ecd2a754 fix ping; add ping to prime
drewp@bigasterisk.com
parents: 41
diff changeset
333 "expr": 'max_over_time(probe_success{job="ping"}[1m]) < 1',
82
drewp@bigasterisk.com
parents: 81
diff changeset
334 "for": "10m",
42
2f87ecd2a754 fix ping; add ping to prime
drewp@bigasterisk.com
parents: 41
diff changeset
335 }]
2f87ecd2a754 fix ping; add ping to prime
drewp@bigasterisk.com
parents: 41
diff changeset
336 },
2f87ecd2a754 fix ping; add ping to prime
drewp@bigasterisk.com
parents: 41
diff changeset
337 {
34
3b91d52b007d rules tuning
drewp@bigasterisk.com
parents: 32
diff changeset
338 "name":
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
339 "alerts",
23
drewp@bigasterisk.com
parents:
diff changeset
340 "rules": [
drewp@bigasterisk.com
parents:
diff changeset
341 {
drewp@bigasterisk.com
parents:
diff changeset
342 "alert": "kube_node_status_bad_condition",
drewp@bigasterisk.com
parents:
diff changeset
343 "for": "2h",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
344 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
345 "severity": "warning"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
346 },
23
drewp@bigasterisk.com
parents:
diff changeset
347 "expr": 'kube_node_status_condition{condition=~".*Pressure",status="true"} > 0',
drewp@bigasterisk.com
parents:
diff changeset
348 },
drewp@bigasterisk.com
parents:
diff changeset
349 {
drewp@bigasterisk.com
parents:
diff changeset
350 "alert": "housePower",
28
e114edff93dc more explicit intervals. try to get a single day of notification out of a disk err increase
drewp@bigasterisk.com
parents: 27
diff changeset
351 "for": "1h",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
352 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
353 "severity": "waste"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
354 },
23
drewp@bigasterisk.com
parents:
diff changeset
355 "expr": "house_power_w > 4000",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
356 "annotations": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
357 "summary": "house power usage over 4KW"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
358 },
23
drewp@bigasterisk.com
parents:
diff changeset
359 },
drewp@bigasterisk.com
parents:
diff changeset
360 {
drewp@bigasterisk.com
parents:
diff changeset
361 "alert": "host_root_fs_space_low",
drewp@bigasterisk.com
parents:
diff changeset
362 "for": "20m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
363 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
364 "severity": "warning"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
365 },
82
drewp@bigasterisk.com
parents: 81
diff changeset
366 "expr": 'disk_used_percent{path="/"} > 85',
23
drewp@bigasterisk.com
parents:
diff changeset
367 },
drewp@bigasterisk.com
parents:
diff changeset
368 {
drewp@bigasterisk.com
parents:
diff changeset
369 "alert": "zpool_space_low",
drewp@bigasterisk.com
parents:
diff changeset
370 "for": "20m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
371 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
372 "severity": "warning"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
373 },
23
drewp@bigasterisk.com
parents:
diff changeset
374 "expr": 'last_over_time(zfs_pool_free_bytes{pool="stor7"}[1h]) < 100G',
drewp@bigasterisk.com
parents:
diff changeset
375 },
drewp@bigasterisk.com
parents:
diff changeset
376 {
drewp@bigasterisk.com
parents:
diff changeset
377 "alert": "disk_week_incr",
drewp@bigasterisk.com
parents:
diff changeset
378 "for": "20m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
379 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
380 "severity": "warning"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
381 },
23
drewp@bigasterisk.com
parents:
diff changeset
382 "expr": 'round(increase(disk_used{path=~"/my/.*"}[1d])/1M) > 5000',
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
383 "annotations": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
384 "summary": "high mb/week on zfs dir"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
385 },
23
drewp@bigasterisk.com
parents:
diff changeset
386 },
drewp@bigasterisk.com
parents:
diff changeset
387 {
drewp@bigasterisk.com
parents:
diff changeset
388 "alert": "high_logging",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
389 "for": "3h",
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
390 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
391 "severity": "waste"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
392 },
76
009527a145d0 add kube-state-metrics scrape; loosen some high-logging thresholds
drewp@bigasterisk.com
parents: 67
diff changeset
393 "expr": 'sum by (namespace, pod, container) (rate(kubelet_container_log_filesystem_used_bytes{container!="pomerium"}[3h])) > 10k',
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
394 "annotations": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
395 "summary": "high log output rate"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
396 },
23
drewp@bigasterisk.com
parents:
diff changeset
397 },
drewp@bigasterisk.com
parents:
diff changeset
398 {
drewp@bigasterisk.com
parents:
diff changeset
399 "alert": "stale_process",
drewp@bigasterisk.com
parents:
diff changeset
400 "for": "1d",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
401 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
402 "severity": "dataRisk"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
403 },
23
drewp@bigasterisk.com
parents:
diff changeset
404 "expr": "round((time() - filestat_modification_time/1e9) / 86400) > 14",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
405 "annotations": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
406 "summary": "process time is old"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
407 },
23
drewp@bigasterisk.com
parents:
diff changeset
408 },
drewp@bigasterisk.com
parents:
diff changeset
409 {
drewp@bigasterisk.com
parents:
diff changeset
410 "alert": "starlette",
drewp@bigasterisk.com
parents:
diff changeset
411 "for": "1m",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
412 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
413 "severity": "fix"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
414 },
23
drewp@bigasterisk.com
parents:
diff changeset
415 "expr": 'starlette_request_duration_seconds_created{app_name="starlette"}',
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
416 "annotations": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
417 "summary": "set starlette app name"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
418 },
23
drewp@bigasterisk.com
parents:
diff changeset
419 },
drewp@bigasterisk.com
parents:
diff changeset
420 {
drewp@bigasterisk.com
parents:
diff changeset
421 "alert": "ssl_certs_expiring_soon",
drewp@bigasterisk.com
parents:
diff changeset
422 "expr": "min((min_over_time(probe_ssl_earliest_cert_expiry[1d])-time())/86400) < 10",
31
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
423 "labels": {
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
424 "severity": "warning"
d39a8038227b reformat
drewp@bigasterisk.com
parents: 28
diff changeset
425 },
23
drewp@bigasterisk.com
parents:
diff changeset
426 "annotations": {
drewp@bigasterisk.com
parents:
diff changeset
427 "summary": "cert expiring soon. See https://bigasterisk.com/grafana/d/z1YtDa3Gz/certs?orgId=1\nVALUE = {{ $value }}"
drewp@bigasterisk.com
parents:
diff changeset
428 },
drewp@bigasterisk.com
parents:
diff changeset
429 },
drewp@bigasterisk.com
parents:
diff changeset
430 ],
drewp@bigasterisk.com
parents:
diff changeset
431 },
32
eb1de82c93aa refactor the merging of all the groups
drewp@bigasterisk.com
parents: 31
diff changeset
432 ] + hostsExpectedOnline(ctx)['groups']
23
drewp@bigasterisk.com
parents:
diff changeset
433 }
drewp@bigasterisk.com
parents:
diff changeset
434
drewp@bigasterisk.com
parents:
diff changeset
435
drewp@bigasterisk.com
parents:
diff changeset
436 def _runJson(ctx, cmd):
drewp@bigasterisk.com
parents:
diff changeset
437 return json.loads(ctx.run(cmd, hide="stdout").stdout)
drewp@bigasterisk.com
parents:
diff changeset
438
drewp@bigasterisk.com
parents:
diff changeset
439
drewp@bigasterisk.com
parents:
diff changeset
440 def hostsExpectedOnline(ctx):
drewp@bigasterisk.com
parents:
diff changeset
441 return _runJson(ctx, "cd /my/serv/lanscape; pdm run python hosts_expected_online.py")