Kubernetes APIserver

# This example shows the same example as kubernetes-apiserver.yml but using OpenSLO spec.
# It will generate the Prometheus rules in a Prometheus rules format.
#
# Take into account that OpenSLO spec has the concept of single SLO with multiple objectives
#
# `sloth generate -i ./examples/openslo-kubernetes-apiserver.yml`
#
apiVersion: openslo/v1alpha
kind: SLO
metadata:
  name: requests-availability-openslo
  displayName: Requests Availability
spec:
  service: k8s-apiserver
  description: "Apiserver are returning correctly the requests to the clients (kubectl users, controllers...)."
  budgetingMethod: Occurrences
  objectives:
    - ratioMetrics:
        good:
          source: prometheus
          queryType: promql
          query: sum(rate(apiserver_request_total{code!~"(5..|429)"}[{{.window}}]))
        total:
          source: prometheus
          queryType: promql
          query: sum(rate(apiserver_request_total[{{.window}}]))
      target: 0.999

  timeWindows:
    - count: 30
      unit: Day

---
apiVersion: openslo/v1alpha
kind: SLO
metadata:
  name: requests-latency-openslo
  displayName: Requests Latency
spec:
  service: k8s-apiserver
  description: "Apiserver responses are being fast enough and this will affect the clients (kubectl users, controllers...)."
  budgetingMethod: Occurrences
  objectives:
    - ratioMetrics:
        good:
          source: prometheus
          queryType: promql
          query: sum(rate(apiserver_request_duration_seconds_bucket{le="0.4",verb!="WATCH"}[{{.window}}]))
        total:
          source: prometheus
          queryType: promql
          query: sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[{{.window}}]))
      target: 0.99

    - ratioMetrics:
        good:
          source: prometheus
          queryType: promql
          query: sum(rate(apiserver_request_duration_seconds_bucket{le="5",verb!="WATCH"}[{{.window}}]))
        total:
          source: prometheus
          queryType: promql
          query: sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[{{.window}}]))
      target: 0.999

  timeWindows:
    - count: 30
      unit: Day
---
# Code generated by Sloth (dev): https://github.com/slok/sloth.
# DO NOT EDIT.

groups:
- name: sloth-slo-sli-recordings-k8s-apiserver-requests-availability-openslo-0
  rules:
  - record: slo:sli_error:ratio_rate5m
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_total{code!~"(5..|429)"}[5m]))
          )
          /
          (
            sum(rate(apiserver_request_total[5m]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_window: 5m
  - record: slo:sli_error:ratio_rate30m
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_total{code!~"(5..|429)"}[30m]))
          )
          /
          (
            sum(rate(apiserver_request_total[30m]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_window: 30m
  - record: slo:sli_error:ratio_rate1h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_total{code!~"(5..|429)"}[1h]))
          )
          /
          (
            sum(rate(apiserver_request_total[1h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_window: 1h
  - record: slo:sli_error:ratio_rate2h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_total{code!~"(5..|429)"}[2h]))
          )
          /
          (
            sum(rate(apiserver_request_total[2h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_window: 2h
  - record: slo:sli_error:ratio_rate6h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_total{code!~"(5..|429)"}[6h]))
          )
          /
          (
            sum(rate(apiserver_request_total[6h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_window: 6h
  - record: slo:sli_error:ratio_rate1d
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_total{code!~"(5..|429)"}[1d]))
          )
          /
          (
            sum(rate(apiserver_request_total[1d]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_window: 1d
  - record: slo:sli_error:ratio_rate3d
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_total{code!~"(5..|429)"}[3d]))
          )
          /
          (
            sum(rate(apiserver_request_total[3d]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_window: 3d
  - record: slo:sli_error:ratio_rate30d
    expr: |
      sum_over_time(slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-availability-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-availability-openslo-0"}[30d])
      / ignoring (sloth_window)
      count_over_time(slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-availability-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-availability-openslo-0"}[30d])
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_window: 30d
- name: sloth-slo-meta-recordings-k8s-apiserver-requests-availability-openslo-0
  rules:
  - record: slo:objective:ratio
    expr: vector(0.9990000000000001)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
  - record: slo:error_budget:ratio
    expr: vector(1-0.9990000000000001)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
  - record: slo:time_period:days
    expr: vector(30)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
  - record: slo:current_burn_rate:ratio
    expr: |
      slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-availability-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-availability-openslo-0"}
      / on(sloth_id, sloth_slo, sloth_service) group_left
      slo:error_budget:ratio{sloth_id="k8s-apiserver-requests-availability-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-availability-openslo-0"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
  - record: slo:period_burn_rate:ratio
    expr: |
      slo:sli_error:ratio_rate30d{sloth_id="k8s-apiserver-requests-availability-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-availability-openslo-0"}
      / on(sloth_id, sloth_slo, sloth_service) group_left
      slo:error_budget:ratio{sloth_id="k8s-apiserver-requests-availability-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-availability-openslo-0"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
  - record: slo:period_error_budget_remaining:ratio
    expr: 1 - slo:period_burn_rate:ratio{sloth_id="k8s-apiserver-requests-availability-openslo-0",
      sloth_service="k8s-apiserver", sloth_slo="requests-availability-openslo-0"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
  - record: sloth_slo_info
    expr: vector(1)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-availability-openslo-0
      sloth_mode: cli-gen-openslo
      sloth_objective: "99.9"
      sloth_service: k8s-apiserver
      sloth_slo: requests-availability-openslo-0
      sloth_spec: openslo/v1alpha
      sloth_version: dev

---
# Code generated by Sloth (dev): https://github.com/slok/sloth.
# DO NOT EDIT.

groups:
- name: sloth-slo-sli-recordings-k8s-apiserver-requests-latency-openslo-0
  rules:
  - record: slo:sli_error:ratio_rate5m
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="0.4",verb!="WATCH"}[5m]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[5m]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_window: 5m
  - record: slo:sli_error:ratio_rate30m
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="0.4",verb!="WATCH"}[30m]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[30m]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_window: 30m
  - record: slo:sli_error:ratio_rate1h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="0.4",verb!="WATCH"}[1h]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[1h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_window: 1h
  - record: slo:sli_error:ratio_rate2h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="0.4",verb!="WATCH"}[2h]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[2h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_window: 2h
  - record: slo:sli_error:ratio_rate6h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="0.4",verb!="WATCH"}[6h]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[6h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_window: 6h
  - record: slo:sli_error:ratio_rate1d
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="0.4",verb!="WATCH"}[1d]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[1d]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_window: 1d
  - record: slo:sli_error:ratio_rate3d
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="0.4",verb!="WATCH"}[3d]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[3d]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_window: 3d
  - record: slo:sli_error:ratio_rate30d
    expr: |
      sum_over_time(slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-latency-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-0"}[30d])
      / ignoring (sloth_window)
      count_over_time(slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-latency-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-0"}[30d])
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_window: 30d
- name: sloth-slo-meta-recordings-k8s-apiserver-requests-latency-openslo-0
  rules:
  - record: slo:objective:ratio
    expr: vector(0.99)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
  - record: slo:error_budget:ratio
    expr: vector(1-0.99)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
  - record: slo:time_period:days
    expr: vector(30)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
  - record: slo:current_burn_rate:ratio
    expr: |
      slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-latency-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-0"}
      / on(sloth_id, sloth_slo, sloth_service) group_left
      slo:error_budget:ratio{sloth_id="k8s-apiserver-requests-latency-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-0"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
  - record: slo:period_burn_rate:ratio
    expr: |
      slo:sli_error:ratio_rate30d{sloth_id="k8s-apiserver-requests-latency-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-0"}
      / on(sloth_id, sloth_slo, sloth_service) group_left
      slo:error_budget:ratio{sloth_id="k8s-apiserver-requests-latency-openslo-0", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-0"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
  - record: slo:period_error_budget_remaining:ratio
    expr: 1 - slo:period_burn_rate:ratio{sloth_id="k8s-apiserver-requests-latency-openslo-0",
      sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-0"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
  - record: sloth_slo_info
    expr: vector(1)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-0
      sloth_mode: cli-gen-openslo
      sloth_objective: "99"
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-0
      sloth_spec: openslo/v1alpha
      sloth_version: dev
- name: sloth-slo-sli-recordings-k8s-apiserver-requests-latency-openslo-1
  rules:
  - record: slo:sli_error:ratio_rate5m
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="5",verb!="WATCH"}[5m]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[5m]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_window: 5m
  - record: slo:sli_error:ratio_rate30m
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="5",verb!="WATCH"}[30m]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[30m]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_window: 30m
  - record: slo:sli_error:ratio_rate1h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="5",verb!="WATCH"}[1h]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[1h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_window: 1h
  - record: slo:sli_error:ratio_rate2h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="5",verb!="WATCH"}[2h]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[2h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_window: 2h
  - record: slo:sli_error:ratio_rate6h
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="5",verb!="WATCH"}[6h]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[6h]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_window: 6h
  - record: slo:sli_error:ratio_rate1d
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="5",verb!="WATCH"}[1d]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[1d]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_window: 1d
  - record: slo:sli_error:ratio_rate3d
    expr: |-
      (
        1 - (
          (
            sum(rate(apiserver_request_duration_seconds_bucket{le="5",verb!="WATCH"}[3d]))
          )
          /
          (
            sum(rate(apiserver_request_duration_seconds_count{verb!="WATCH"}[3d]))
          )
        )
      )
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_window: 3d
  - record: slo:sli_error:ratio_rate30d
    expr: |
      sum_over_time(slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-latency-openslo-1", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-1"}[30d])
      / ignoring (sloth_window)
      count_over_time(slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-latency-openslo-1", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-1"}[30d])
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_window: 30d
- name: sloth-slo-meta-recordings-k8s-apiserver-requests-latency-openslo-1
  rules:
  - record: slo:objective:ratio
    expr: vector(0.9990000000000001)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
  - record: slo:error_budget:ratio
    expr: vector(1-0.9990000000000001)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
  - record: slo:time_period:days
    expr: vector(30)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
  - record: slo:current_burn_rate:ratio
    expr: |
      slo:sli_error:ratio_rate5m{sloth_id="k8s-apiserver-requests-latency-openslo-1", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-1"}
      / on(sloth_id, sloth_slo, sloth_service) group_left
      slo:error_budget:ratio{sloth_id="k8s-apiserver-requests-latency-openslo-1", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-1"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
  - record: slo:period_burn_rate:ratio
    expr: |
      slo:sli_error:ratio_rate30d{sloth_id="k8s-apiserver-requests-latency-openslo-1", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-1"}
      / on(sloth_id, sloth_slo, sloth_service) group_left
      slo:error_budget:ratio{sloth_id="k8s-apiserver-requests-latency-openslo-1", sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-1"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
  - record: slo:period_error_budget_remaining:ratio
    expr: 1 - slo:period_burn_rate:ratio{sloth_id="k8s-apiserver-requests-latency-openslo-1",
      sloth_service="k8s-apiserver", sloth_slo="requests-latency-openslo-1"}
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
  - record: sloth_slo_info
    expr: vector(1)
    labels:
      cmd: examplesgen.sh
      sloth_id: k8s-apiserver-requests-latency-openslo-1
      sloth_mode: cli-gen-openslo
      sloth_objective: "99.9"
      sloth_service: k8s-apiserver
      sloth_slo: requests-latency-openslo-1
      sloth_spec: openslo/v1alpha
      sloth_version: dev