These examples show how to identify different types of criteria and qualifiers when creating SLIs.
Each example includes how to formulate the SLI when using the Build Query mode or the Write Formula mode.
For all events, return true
if duration_ms < 1000
.
Total (Valid) Events | Successful Events |
---|---|
duration_ms < 1000 |
LT($duration_ms, 1000)
A trace root does not have a parent.
This SLI returns true
for trace roots whose response duration is under 100, false
for trace roots whose duration is over 100, and null
for non-roots.
Total (Valid) Events | Successful Events |
---|---|
trace.parent_id does-not-exist | duration_ms < 100 |
IF(
NOT(EXISTS($trace.parent_id)),
LT($duration_ms, 100)
)
Our qualifier here is whether request.path
is /home
.
If it is, then this SLI only returns true
if both duration_ms
is under 100, and there is no error message.
Total (Valid) Events | Successful Events |
---|---|
request.path = /home | duration_ms < 100 app.error does-not-exist |
IF(
EQUALS($request.path, "/home"),
AND(
LT($duration_ms, 100),
NOT(EXISTS($app.error)),
)
)
The qualifier here is events that hit the /main
endpoint, using the method POST
, and are not marked as error code 401
.
The criterion is that events must have a status code of 200
.
In addition, if they are part of a batch, then data processing must have taken less than 5 ms per item.
This example is not supported in the Build Query mode because the DIV()
and IF()
operators are only supported within a derived column.
IF(
AND(
EQUALS($request.path, "main"),
EQUALS($request.method, "POST"),
NOT(EQUALS($response.status_code, 401))
),
AND(
EQUALS($response.status_code, 200),
LT(
DIV(
$duration_ms,
IF($app.batch, $app.batch_total_datapoints, 5)
),
5
)
)
)