# Build a SLI

SLIs are key metrics that measure specific aspects of your service's performance and reliability. By following these steps, you'll learn to configure effective SLIs to monitor your service quality.

{% hint style="info" %}
Before writing a SLI query, the engine asks you to state whether you are defining a Value SLI (e.g. latency, MTTD) or a Percentage SLI (e.g. uptime, error rate). It does so to allow for maximum flexibility in terms of the Objective (SLO) you get to define later, as the two streams demand different treatment to produce error free results.
{% endhint %}

## Create a Value SLI

Follow these steps to create a Value Service Level Indicator (SLI):

1. Find and click on "Indicators" in the side navigation bar
2. Click the "+ New SLI" button to open the Create SLI modal
3. Choose "Value" as the type of SLI you'll be building
4. **Choose a metric query, aggregator, and filter**
   1. <mark style="color:orange;">**Allowed aggregators**</mark>**:** `COUNT`, `SUM`, `MAX`, `MIN`, `AVG`

      `n/a` is also an acceptable input; this will output an array of metrics without any aggregation
   2. <mark style="color:orange;">**You can create multiple queries**</mark> by clicking "+ New Query" and add a formula in the formula box to define the relationship between them.&#x20;
   3. <mark style="color:orange;">**Operators allowed on the formula builder**</mark>: `*` , `/`, `+`, `-` , `<` , `>` , `<=` , `>=,` `=` , `!=`
5. Provide a clear, descriptive name for your SLI and a description to explain its purpose and function.
6. Click the "Save" button to create your new Value SLI.

### Examples

{% tabs %}
{% tab title="List of Latencies" %}
**QUERY**

**A: SELECT** {`n/a`} {`latency_metric`} **FROM** {`key`} **WHERE** {`status_code < 500`}

Unit `ms`

Example implementation 👇

<figure><img src="/files/sS4izqoFcuoXHymkkpPF" alt=""><figcaption></figcaption></figure>

This SLI will output a stream of latencies like `{121,90,48,291,44,29,90,81...}`` ``seconds`
{% endtab %}

{% tab title="Average Latency" %}
**QUERY**

**A: SELECT** {`AVG`} {`latency_metric`} **FROM** {`key`} **WHERE** {`status_code < 500`}

Unit `ms`

Example Implementation 👇

<figure><img src="/files/fJn2XngCokZBTHNVJBov" alt=""><figcaption></figcaption></figure>

This SLI will output a the average latency of all the latencies sent within a period. For example, if the latencies sent were `{121,90,48,291,44,29,90,81} seconds`, the output of which would be 99.25 seconds.
{% endtab %}

{% tab title="Data Freshness" %}
**QUERY**

**A: SELECT** {`n/a`} {`external_timestamp_metric`} **FROM** {`key1`}&#x20;

**B: SELECT** {`n/a`} {`internal_timestamp_metric`} **FROM** {`key2`}&#x20;

Unit `epochs`

Formula: `A - B`

Example implementation 👇

<figure><img src="/files/ce7fGN47VlxJJgO9xxk4" alt=""><figcaption></figcaption></figure>

This SLI will output a stream of integers like `{2,5,1,1,2,1,1,3,...} epochs`.
{% endtab %}

{% tab title="Average Data Freshness" %}
**QUERY**

**A: SELECT** {`AVG`} {`external_timestamp_metric`} **FROM** {`key1`}&#x20;

**B: SELECT** {`AVG`} {`internal_timestamp_metric`} **FROM** {`key2`}&#x20;

Formula: `A - B`

Unit `epochs`

Example implementation 👇

<figure><img src="/files/3UcgUYIepcSLTnFFsHCl" alt=""><figcaption></figcaption></figure>

This SLI will output the average data freshness within a period. For example, if the `external_timestamp` averages to `1.2 epochs` and the `internal_timestamp` averages out to `1 epoch`, the SLI will output `0.2 epochs`.
{% endtab %}
{% endtabs %}

## Create a Percentage SLI

Follow these steps to create a Percentage Service Level Indicator (SLI):

1. Find and click on "Indicators" in the side navigation bar
2. Click the "+ New SLI" button to open the Create SLI modal
3. Choose "Percentage" as the type of SLI you'll be building
4. **Choose a metric query, aggregator, and filter**
   1. <mark style="color:orange;">**Allowed aggregators**</mark>**:** `COUNT`, `SUM`, `MAX`, `MIN`, `AVG`

      `n/a` is also an acceptable input; this will output an array of metrics without any aggregation
   2. <mark style="color:orange;">**You can create multiple queries**</mark> by clicking "+ New Query" and add a formula in the formula box to define the relationship between them
   3. <mark style="color:orange;">**Operators allowed on the formula builder**</mark>: `*` , `/`, `+`, `-` , `<` , `>` , `<=` , `>=,` `=` , `!=`
5. Provide a clear, descriptive name for your SLI and a description to explain its purpose and function
6. Click the "Save" button to create your new Percentage SLI

### Examples

{% tabs %}
{% tab title="Defining Uptime on slaOS" %}
**QUERY**

**A: SELECT** {`count`} {`*`} **FROM** {`key1`}  **WHERE** {`status_code < 500`}

**B: SELECT** {`count`} {`*`} **FROM** {`key2`}&#x20;

Formula : `A/B`

Example implementation 👇

<figure><img src="/files/kwIqabM4nRcXPRNvCq3R" alt=""><figcaption></figcaption></figure>

The SLI will output a ratio, where the numerator counts all the events where the status code is less than 500 and the denominator is all events.&#x20;
{% endtab %}

{% tab title="Pre-aggregated Uptime" %}
**QUERY**

**A: SELECT** {`n/a`} {`uptime_metric`} **FROM** {`key`} &#x20;

Example implementation 👇

<figure><img src="/files/bQSX1q0GV5NAABYh6YJA" alt=""><figcaption></figcaption></figure>

The SLI will output the average of the uptime metric over a time period. For example, if the uptime metric is passed hourly to slaOS as `{0.9998, 0.9992, 0.9892, 0.4819, 0.9999, 0.9759}`, the SLI output will be `0.90765` or `90.965%`
{% endtab %}

{% tab title="Error Rate" %}
**QUERY**

**A: SELECT** {`count`} {`*`} **FROM** {`key1`}  **WHERE** {`status_code >= 500`}

**B: SELECT** {`count`} {`*`} **FROM** {`key2`}&#x20;

Formula : `A/B`

Example implementation 👇

<figure><img src="/files/PwsoulEEZZBTkylzdSS8" alt=""><figcaption></figcaption></figure>

The SLI will output a ratio, where the numerator counts all the events where the status code is more than 500 and the denominator is all events.&#x20;
{% endtab %}
{% endtabs %}

<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rated.co/how-tos/tutorials/build-a-sli.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
