From 705810d81aeb4144c68e4b02accdf7523575d606 Mon Sep 17 00:00:00 2001
From: Sheogorath <sheogorath@shivering-isles.com>
Date: Sun, 13 Nov 2022 04:05:58 +0100
Subject: [PATCH] feat(blog): Add SLO for blog

---
 apps/k8s01/blog/kustomization.yaml |  1 +
 apps/k8s01/blog/slo.yaml           | 41 ++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 apps/k8s01/blog/slo.yaml

diff --git a/apps/k8s01/blog/kustomization.yaml b/apps/k8s01/blog/kustomization.yaml
index edf59a4db..4497d900a 100644
--- a/apps/k8s01/blog/kustomization.yaml
+++ b/apps/k8s01/blog/kustomization.yaml
@@ -6,6 +6,7 @@ resources:
   - certificate.yaml
   - blog.yaml
   - ingress.yaml
+  - slo.yaml
   - ../../../shared/networkpolicies/allow-from-ingress.yaml
   - ../../../shared/resourcequotas/default.yaml
 patchesStrategicMerge:
diff --git a/apps/k8s01/blog/slo.yaml b/apps/k8s01/blog/slo.yaml
new file mode 100644
index 000000000..cc6f5d05c
--- /dev/null
+++ b/apps/k8s01/blog/slo.yaml
@@ -0,0 +1,41 @@
+apiVersion: sloth.slok.dev/v1
+kind: PrometheusServiceLevel
+metadata:
+  name: requests-blog
+  namespace: mastblogodon
+spec:
+  service: "blog"
+  slos:
+    - name: "requests-availability"
+      objective: 99
+      description: "blog SLO based on availability for HTTP request responses."
+      sli:
+        events:
+          errorQuery: sum(rate(nginx_ingress_controller_requests{exported_namespace="blog",ingress="blog",status=~"(5..|429)"}[{{.window}}]))
+          totalQuery: sum(rate(nginx_ingress_controller_requests{exported_namespace="blog",ingress="blog"}[{{.window}}]))
+      alerting:
+        name: blogHighErrorRate
+        labels:
+          category: "availability"
+        annotations:
+          summary: "High error rate on 'blog' requests responses"
+    - name: "requests-latency"
+      objective: 99
+      description: "Warn that we apiserver responses are being slow and this will affect the clients  (kubectl users, controllers...)."
+      labels:
+        category: latency
+      sli:
+        events:
+          error_query: |
+            (
+              sum(rate(nginx_ingress_controller_request_duration_seconds_count{exported_namespace="blog",ingress="blog",method!="WATCH"}[{{.window}}]))
+              -
+              sum(rate(nginx_ingress_controller_request_duration_seconds_bucket{exported_namespace="blog",ingress="blog",le="0.25",verb!="WATCH"}[{{.window}}]))
+            )
+          total_query: sum(rate(nginx_ingress_controller_request_duration_seconds_count{exported_namespace="blog",ingress="blog",method!="WATCH"}[{{.window}}]))
+      alerting:
+        name: blogLatencyAlert
+        labels:
+          category: "latency"
+        annotations:
+          summary: "Slow responses on 'blog' requests responses. More than 1% take more than 250ms."
-- 
GitLab