diff --git a/sloth.slok.dev/prometheusservicelevel_v1.json b/sloth.slok.dev/prometheusservicelevel_v1.json new file mode 100644 index 00000000..5197268b --- /dev/null +++ b/sloth.slok.dev/prometheusservicelevel_v1.json @@ -0,0 +1,246 @@ +{ + "description": "PrometheusServiceLevel is the expected service quality level using Prometheus as the backend used by Sloth.", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "type": "object" + }, + "spec": { + "description": "ServiceLevelSpec is the spec for a PrometheusServiceLevel.", + "properties": { + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Labels are the Prometheus labels that will have all the recording and alerting rules generated for the service SLOs.", + "type": "object" + }, + "service": { + "description": "Service is the application of the SLOs.", + "type": "string" + }, + "slos": { + "description": "SLOs are the SLOs of the service.", + "items": { + "description": "SLO is the configuration/declaration of the service level objective of a service.", + "properties": { + "alerting": { + "description": "Alerting is the configuration with all the things related with the SLO alerts.", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations are the Prometheus annotations that will have all the alerts generated by this SLO.", + "type": "object" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Labels are the Prometheus labels that will have all the alerts generated by this SLO.", + "type": "object" + }, + "name": { + "description": "Name is the name used by the alerts generated for this SLO.", + "type": "string" + }, + "pageAlert": { + "description": "Page alert refers to the critical alert (check multiwindow-multiburn alerts).", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations are the Prometheus annotations for the specific alert.", + "type": "object" + }, + "disable": { + "description": "Disable disables the alert and makes Sloth not generating this alert. This can be helpful for example to disable ticket(warning) alerts.", + "type": "boolean" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Labels are the Prometheus labels for the specific alert. For example can be useful to route the Page alert to specific Slack channel.", + "type": "object" + } + }, + "type": "object", + "additionalProperties": false + }, + "ticketAlert": { + "description": "TicketAlert alert refers to the warning alert (check multiwindow-multiburn alerts).", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations are the Prometheus annotations for the specific alert.", + "type": "object" + }, + "disable": { + "description": "Disable disables the alert and makes Sloth not generating this alert. This can be helpful for example to disable ticket(warning) alerts.", + "type": "boolean" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Labels are the Prometheus labels for the specific alert. For example can be useful to route the Page alert to specific Slack channel.", + "type": "object" + } + }, + "type": "object", + "additionalProperties": false + } + }, + "type": "object", + "additionalProperties": false + }, + "description": { + "description": "Description is the description of the SLO.", + "type": "string" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Labels are the Prometheus labels that will have all the recording and alerting rules for this specific SLO. These labels are merged with the previous level labels.", + "type": "object" + }, + "name": { + "description": "Name is the name of the SLO.", + "maxLength": 128, + "type": "string" + }, + "objective": { + "description": "Objective is target of the SLO the percentage (0, 100] (e.g 99.9).", + "type": "number" + }, + "sli": { + "description": "SLI is the indicator (service level indicator) for this specific SLO.", + "properties": { + "events": { + "description": "Events is the events SLI type.", + "properties": { + "errorQuery": { + "description": "ErrorQuery is a Prometheus query that will get the number/count of events that we consider that are bad for the SLO (e.g \"http 5xx\", \"latency > 250ms\"...). Requires the usage of `{{.window}}` template variable.", + "type": "string" + }, + "totalQuery": { + "description": "TotalQuery is a Prometheus query that will get the total number/count of events for the SLO (e.g \"all http requests\"...). Requires the usage of `{{.window}}` template variable.", + "type": "string" + } + }, + "required": [ + "errorQuery", + "totalQuery" + ], + "type": "object", + "additionalProperties": false + }, + "plugin": { + "description": "Plugin is the pluggable SLI type.", + "properties": { + "id": { + "description": "Name is the name of the plugin that needs to load.", + "type": "string" + }, + "options": { + "additionalProperties": { + "type": "string" + }, + "description": "Options are the options used for the plugin.", + "type": "object" + } + }, + "required": [ + "id" + ], + "type": "object", + "additionalProperties": false + }, + "raw": { + "description": "Raw is the raw SLI type.", + "properties": { + "errorRatioQuery": { + "description": "ErrorRatioQuery is a Prometheus query that will get the raw error ratio (0-1) for the SLO.", + "type": "string" + } + }, + "required": [ + "errorRatioQuery" + ], + "type": "object", + "additionalProperties": false + } + }, + "type": "object", + "additionalProperties": false + } + }, + "required": [ + "alerting", + "name", + "objective", + "sli" + ], + "type": "object", + "additionalProperties": false + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "service" + ], + "type": "object", + "additionalProperties": false + }, + "status": { + "properties": { + "lastPromOpRulesSuccessfulGenerated": { + "description": "LastPromOpRulesGeneration tells the last atemp made for a successful SLO rules generate.", + "format": "date-time", + "type": "string" + }, + "observedGeneration": { + "description": "ObservedGeneration tells the generation was acted on, normally this is required to stop an infinite loop when the status is updated because it sends a watch updated event to the watchers of the K8s object.", + "format": "int64", + "type": "integer" + }, + "processedSLOs": { + "description": "ProcessedSLOs tells how many SLOs haven been processed for Prometheus operator.", + "type": "integer" + }, + "promOpRulesGenerated": { + "description": "PromOpRulesGenerated tells if the rules for prometheus operator CRD have been generated.", + "type": "boolean" + }, + "promOpRulesGeneratedSLOs": { + "description": "PromOpRulesGeneratedSLOs tells how many SLOs have been processed and generated for Prometheus operator successfully.", + "type": "integer" + } + }, + "required": [ + "observedGeneration", + "processedSLOs", + "promOpRulesGenerated", + "promOpRulesGeneratedSLOs" + ], + "type": "object", + "additionalProperties": false + } + }, + "type": "object" +}