Slo class
A Service-Level Objective (SLO) describes the level of desired good service. It consists of a service-level indicator (SLI), a performance goal, and a period over which the objective is to be evaluated against that goal. The SLO can use SLIs defined in a number of different manners. Typical SLOs might include "99% of requests in each rolling week have latency below 200 milliseconds" or "99.5% of requests in each calendar month return successfully."
To get more information about Slo, see:
- API documentation
- How-to Guides
- Monitoring API Documentation
- Service Monitoring
Example Usage
Monitoring Slo Appengine
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const _default = gcp.monitoring.getAppEngineService({
moduleId: "default",
});
const appengSlo = new gcp.monitoring.Slo("appeng_slo", {
service: _default.then(_default => _default.serviceId),
sloId: "ae-slo",
displayName: "Test SLO for App Engine",
goal: 0.9,
calendarPeriod: "DAY",
basicSli: {
latency: {
threshold: "1s",
},
},
userLabels: {
my_key: "my_value",
my_other_key: "my_other_value",
},
});
import pulumi
import pulumi_gcp as gcp
default = gcp.monitoring.get_app_engine_service(module_id="default")
appeng_slo = gcp.monitoring.Slo("appeng_slo",
service=default.service_id,
slo_id="ae-slo",
display_name="Test SLO for App Engine",
goal=0.9,
calendar_period="DAY",
basic_sli={
"latency": {
"threshold": "1s",
},
},
user_labels={
"my_key": "my_value",
"my_other_key": "my_other_value",
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var @default = Gcp.Monitoring.GetAppEngineService.Invoke(new()
{
ModuleId = "default",
});
var appengSlo = new Gcp.Monitoring.Slo("appeng_slo", new()
{
Service = @default.Apply(@default => @default.Apply(getAppEngineServiceResult => getAppEngineServiceResult.ServiceId)),
SloId = "ae-slo",
DisplayName = "Test SLO for App Engine",
Goal = 0.9,
CalendarPeriod = "DAY",
BasicSli = new Gcp.Monitoring.Inputs.SloBasicSliArgs
{
Latency = new Gcp.Monitoring.Inputs.SloBasicSliLatencyArgs
{
Threshold = "1s",
},
},
UserLabels =
{
{ "my_key", "my_value" },
{ "my_other_key", "my_other_value" },
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/monitoring"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_default, err := monitoring.GetAppEngineService(ctx, &monitoring.GetAppEngineServiceArgs{
ModuleId: "default",
}, nil)
if err != nil {
return err
}
_, err = monitoring.NewSlo(ctx, "appeng_slo", &monitoring.SloArgs{
Service: pulumi.String(_default.ServiceId),
SloId: pulumi.String("ae-slo"),
DisplayName: pulumi.String("Test SLO for App Engine"),
Goal: pulumi.Float64(0.9),
CalendarPeriod: pulumi.String("DAY"),
BasicSli: &monitoring.SloBasicSliArgs{
Latency: &monitoring.SloBasicSliLatencyArgs{
Threshold: pulumi.String("1s"),
},
},
UserLabels: pulumi.StringMap{
"my_key": pulumi.String("my_value"),
"my_other_key": pulumi.String("my_other_value"),
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
data "gcp_monitoring_getappengineservice" "default" {
module_id = "default"
}
resource "gcp_monitoring_slo" "appeng_slo" {
service = data.gcp_monitoring_getappengineservice.default.service_id
slo_id = "ae-slo"
display_name = "Test SLO for App Engine"
goal = 0.9
calendar_period = "DAY"
basic_sli = {
latency = {
threshold = "1s"
}
}
user_labels = {
"my_key" = "my_value"
"my_other_key" = "my_other_value"
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.monitoring.MonitoringFunctions;
import com.pulumi.gcp.monitoring.inputs.GetAppEngineServiceArgs;
import com.pulumi.gcp.monitoring.Slo;
import com.pulumi.gcp.monitoring.SloArgs;
import com.pulumi.gcp.monitoring.inputs.SloBasicSliArgs;
import com.pulumi.gcp.monitoring.inputs.SloBasicSliLatencyArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var default = MonitoringFunctions.getAppEngineService(GetAppEngineServiceArgs.builder()
.moduleId("default")
.build());
var appengSlo = new Slo("appengSlo", SloArgs.builder()
.service(default_.serviceId())
.sloId("ae-slo")
.displayName("Test SLO for App Engine")
.goal(0.9)
.calendarPeriod("DAY")
.basicSli(SloBasicSliArgs.builder()
.latency(SloBasicSliLatencyArgs.builder()
.threshold("1s")
.build())
.build())
.userLabels(Map.ofEntries(
Map.entry("my_key", "my_value"),
Map.entry("my_other_key", "my_other_value")
))
.build());
}
}
resources:
appengSlo:
type: gcp:monitoring:Slo
name: appeng_slo
properties:
service: ${default.serviceId}
sloId: ae-slo
displayName: Test SLO for App Engine
goal: 0.9
calendarPeriod: DAY
basicSli:
latency:
threshold: 1s
userLabels:
my_key: my_value
my_other_key: my_other_value
variables:
default:
fn::invoke:
function: gcp:monitoring:getAppEngineService
arguments:
moduleId: default
Monitoring Slo Request Based
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const customsrv = new gcp.monitoring.CustomService("customsrv", {
serviceId: "custom-srv-request-slos",
displayName: "My Custom Service",
});
const requestBasedSlo = new gcp.monitoring.Slo("request_based_slo", {
service: customsrv.serviceId,
sloId: "consumed-api-slo",
displayName: "Test SLO with request based SLI (good total ratio)",
goal: 0.9,
rollingPeriodDays: 30,
requestBasedSli: {
distributionCut: {
distributionFilter: "metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" ",
range: {
max: 0.5,
},
},
},
});
import pulumi
import pulumi_gcp as gcp
customsrv = gcp.monitoring.CustomService("customsrv",
service_id="custom-srv-request-slos",
display_name="My Custom Service")
request_based_slo = gcp.monitoring.Slo("request_based_slo",
service=customsrv.service_id,
slo_id="consumed-api-slo",
display_name="Test SLO with request based SLI (good total ratio)",
goal=0.9,
rolling_period_days=30,
request_based_sli={
"distribution_cut": {
"distribution_filter": "metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" ",
"range": {
"max": 0.5,
},
},
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var customsrv = new Gcp.Monitoring.CustomService("customsrv", new()
{
ServiceId = "custom-srv-request-slos",
DisplayName = "My Custom Service",
});
var requestBasedSlo = new Gcp.Monitoring.Slo("request_based_slo", new()
{
Service = customsrv.ServiceId,
SloId = "consumed-api-slo",
DisplayName = "Test SLO with request based SLI (good total ratio)",
Goal = 0.9,
RollingPeriodDays = 30,
RequestBasedSli = new Gcp.Monitoring.Inputs.SloRequestBasedSliArgs
{
DistributionCut = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutArgs
{
DistributionFilter = "metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" ",
Range = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutRangeArgs
{
Max = 0.5,
},
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/monitoring"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
customsrv, err := monitoring.NewCustomService(ctx, "customsrv", &monitoring.CustomServiceArgs{
ServiceId: pulumi.String("custom-srv-request-slos"),
DisplayName: pulumi.String("My Custom Service"),
})
if err != nil {
return err
}
_, err = monitoring.NewSlo(ctx, "request_based_slo", &monitoring.SloArgs{
Service: customsrv.ServiceId,
SloId: pulumi.String("consumed-api-slo"),
DisplayName: pulumi.String("Test SLO with request based SLI (good total ratio)"),
Goal: pulumi.Float64(0.9),
RollingPeriodDays: pulumi.Int(30),
RequestBasedSli: &monitoring.SloRequestBasedSliArgs{
DistributionCut: &monitoring.SloRequestBasedSliDistributionCutArgs{
DistributionFilter: pulumi.String("metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" "),
Range: &monitoring.SloRequestBasedSliDistributionCutRangeArgs{
Max: pulumi.Float64(0.5),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_monitoring_customservice" "customsrv" {
service_id = "custom-srv-request-slos"
display_name = "My Custom Service"
}
resource "gcp_monitoring_slo" "request_based_slo" {
service = gcp_monitoring_customservice.customsrv.service_id
slo_id = "consumed-api-slo"
display_name = "Test SLO with request based SLI (good total ratio)"
goal = 0.9
rolling_period_days = 30
request_based_sli = {
distribution_cut = {
distribution_filter = "metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" "
range = {
max = 0.5
}
}
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.monitoring.CustomService;
import com.pulumi.gcp.monitoring.CustomServiceArgs;
import com.pulumi.gcp.monitoring.Slo;
import com.pulumi.gcp.monitoring.SloArgs;
import com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliArgs;
import com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutArgs;
import com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutRangeArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var customsrv = new CustomService("customsrv", CustomServiceArgs.builder()
.serviceId("custom-srv-request-slos")
.displayName("My Custom Service")
.build());
var requestBasedSlo = new Slo("requestBasedSlo", SloArgs.builder()
.service(customsrv.serviceId())
.sloId("consumed-api-slo")
.displayName("Test SLO with request based SLI (good total ratio)")
.goal(0.9)
.rollingPeriodDays(30)
.requestBasedSli(SloRequestBasedSliArgs.builder()
.distributionCut(SloRequestBasedSliDistributionCutArgs.builder()
.distributionFilter("metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" ")
.range(SloRequestBasedSliDistributionCutRangeArgs.builder()
.max(0.5)
.build())
.build())
.build())
.build());
}
}
resources:
customsrv:
type: gcp:monitoring:CustomService
properties:
serviceId: custom-srv-request-slos
displayName: My Custom Service
requestBasedSlo:
type: gcp:monitoring:Slo
name: request_based_slo
properties:
service: ${customsrv.serviceId}
sloId: consumed-api-slo
displayName: Test SLO with request based SLI (good total ratio)
goal: 0.9
rollingPeriodDays: 30
requestBasedSli:
distributionCut:
distributionFilter: 'metric.type="serviceruntime.googleapis.com/api/request_latencies" resource.type="api" '
range:
max: 0.5
Monitoring Slo Windows Based Good Bad Metric Filter
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as std from "@pulumi/std";
const customsrv = new gcp.monitoring.CustomService("customsrv", {
serviceId: "custom-srv-windows-slos",
displayName: "My Custom Service",
});
const windowsBased = new gcp.monitoring.Slo("windows_based", {
service: customsrv.serviceId,
displayName: "Test SLO with window based SLI",
goal: 0.95,
calendarPeriod: "FORTNIGHT",
windowsBasedSli: {
windowPeriod: "400s",
goodBadMetricFilter: std.join({
separator: " AND ",
input: [
"metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"",
"resource.type=\"uptime_url\"",
],
}).then(invoke => invoke.result),
},
});
import pulumi
import pulumi_gcp as gcp
import pulumi_std as std
customsrv = gcp.monitoring.CustomService("customsrv",
service_id="custom-srv-windows-slos",
display_name="My Custom Service")
windows_based = gcp.monitoring.Slo("windows_based",
service=customsrv.service_id,
display_name="Test SLO with window based SLI",
goal=0.95,
calendar_period="FORTNIGHT",
windows_based_sli={
"window_period": "400s",
"good_bad_metric_filter": std.join(separator=" AND ",
input=[
"metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"",
"resource.type=\"uptime_url\"",
]).result,
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Std = Pulumi.Std;
return await Deployment.RunAsync(() =>
{
var customsrv = new Gcp.Monitoring.CustomService("customsrv", new()
{
ServiceId = "custom-srv-windows-slos",
DisplayName = "My Custom Service",
});
var windowsBased = new Gcp.Monitoring.Slo("windows_based", new()
{
Service = customsrv.ServiceId,
DisplayName = "Test SLO with window based SLI",
Goal = 0.95,
CalendarPeriod = "FORTNIGHT",
WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs
{
WindowPeriod = "400s",
GoodBadMetricFilter = Std.Join.Invoke(new()
{
Separator = " AND ",
Input = new[]
{
"metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"",
"resource.type=\"uptime_url\"",
},
}).Apply(invoke => invoke.Result),
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/monitoring"
"github.com/pulumi/pulumi-std/sdk/go/std"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
customsrv, err := monitoring.NewCustomService(ctx, "customsrv", &monitoring.CustomServiceArgs{
ServiceId: pulumi.String("custom-srv-windows-slos"),
DisplayName: pulumi.String("My Custom Service"),
})
if err != nil {
return err
}
invokeJoin, err := std.Join(ctx, &std.JoinArgs{
Separator: " AND ",
Input: []string{
"metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"",
"resource.type=\"uptime_url\"",
},
}, nil)
if err != nil {
return err
}
_, err = monitoring.NewSlo(ctx, "windows_based", &monitoring.SloArgs{
Service: customsrv.ServiceId,
DisplayName: pulumi.String("Test SLO with window based SLI"),
Goal: pulumi.Float64(0.95),
CalendarPeriod: pulumi.String("FORTNIGHT"),
WindowsBasedSli: &monitoring.SloWindowsBasedSliArgs{
WindowPeriod: pulumi.String("400s"),
GoodBadMetricFilter: pulumi.String(invokeJoin.Result),
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
std = {
source = "pulumi/std"
}
}
}
resource "gcp_monitoring_customservice" "customsrv" {
service_id = "custom-srv-windows-slos"
display_name = "My Custom Service"
}
resource "gcp_monitoring_slo" "windows_based" {
service = gcp_monitoring_customservice.customsrv.service_id
display_name = "Test SLO with window based SLI"
goal = 0.95
calendar_period = "FORTNIGHT"
windows_based_sli = {
window_period = "400s"
good_bad_metric_filter = join(" AND ", ["metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"", "resource.type=\"uptime_url\""])
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.monitoring.CustomService;
import com.pulumi.gcp.monitoring.CustomServiceArgs;
import com.pulumi.gcp.monitoring.Slo;
import com.pulumi.gcp.monitoring.SloArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;
import com.pulumi.std.StdFunctions;
import com.pulumi.std.inputs.JoinArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var customsrv = new CustomService("customsrv", CustomServiceArgs.builder()
.serviceId("custom-srv-windows-slos")
.displayName("My Custom Service")
.build());
var windowsBased = new Slo("windowsBased", SloArgs.builder()
.service(customsrv.serviceId())
.displayName("Test SLO with window based SLI")
.goal(0.95)
.calendarPeriod("FORTNIGHT")
.windowsBasedSli(SloWindowsBasedSliArgs.builder()
.windowPeriod("400s")
.goodBadMetricFilter(StdFunctions.join(JoinArgs.builder()
.separator(" AND ")
.input(
"metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"",
"resource.type=\"uptime_url\"")
.build()).result())
.build())
.build());
}
}
resources:
customsrv:
type: gcp:monitoring:CustomService
properties:
serviceId: custom-srv-windows-slos
displayName: My Custom Service
windowsBased:
type: gcp:monitoring:Slo
name: windows_based
properties:
service: ${customsrv.serviceId}
displayName: Test SLO with window based SLI
goal: 0.95
calendarPeriod: FORTNIGHT
windowsBasedSli:
windowPeriod: 400s
goodBadMetricFilter:
fn::invoke:
function: std:join
arguments:
separator: ' AND '
input:
- metric.type="monitoring.googleapis.com/uptime_check/check_passed"
- resource.type="uptime_url"
return: result
Monitoring Slo Windows Based Metric Mean
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as std from "@pulumi/std";
const customsrv = new gcp.monitoring.CustomService("customsrv", {
serviceId: "custom-srv-windows-slos",
displayName: "My Custom Service",
});
const windowsBased = new gcp.monitoring.Slo("windows_based", {
service: customsrv.serviceId,
displayName: "Test SLO with window based SLI",
goal: 0.9,
rollingPeriodDays: 20,
windowsBasedSli: {
windowPeriod: "600s",
metricMeanInRange: {
timeSeries: std.join({
separator: " AND ",
input: [
"metric.type=\"agent.googleapis.com/cassandra/client_request/latency/95p\"",
"resource.type=\"gce_instance\"",
],
}).then(invoke => invoke.result),
range: {
max: 5,
},
},
},
});
import pulumi
import pulumi_gcp as gcp
import pulumi_std as std
customsrv = gcp.monitoring.CustomService("customsrv",
service_id="custom-srv-windows-slos",
display_name="My Custom Service")
windows_based = gcp.monitoring.Slo("windows_based",
service=customsrv.service_id,
display_name="Test SLO with window based SLI",
goal=0.9,
rolling_period_days=20,
windows_based_sli={
"window_period": "600s",
"metric_mean_in_range": {
"time_series": std.join(separator=" AND ",
input=[
"metric.type=\"agent.googleapis.com/cassandra/client_request/latency/95p\"",
"resource.type=\"gce_instance\"",
]).result,
"range": {
"max": float(5),
},
},
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Std = Pulumi.Std;
return await Deployment.RunAsync(() =>
{
var customsrv = new Gcp.Monitoring.CustomService("customsrv", new()
{
ServiceId = "custom-srv-windows-slos",
DisplayName = "My Custom Service",
});
var windowsBased = new Gcp.Monitoring.Slo("windows_based", new()
{
Service = customsrv.ServiceId,
DisplayName = "Test SLO with window based SLI",
Goal = 0.9,
RollingPeriodDays = 20,
WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs
{
WindowPeriod = "600s",
MetricMeanInRange = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricMeanInRangeArgs
{
TimeSeries = Std.Join.Invoke(new()
{
Separator = " AND ",
Input = new[]
{
"metric.type=\"agent.googleapis.com/cassandra/client_request/latency/95p\"",
"resource.type=\"gce_instance\"",
},
}).Apply(invoke => invoke.Result),
Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricMeanInRangeRangeArgs
{
Max = 5.0,
},
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/monitoring"
"github.com/pulumi/pulumi-std/sdk/go/std"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
customsrv, err := monitoring.NewCustomService(ctx, "customsrv", &monitoring.CustomServiceArgs{
ServiceId: pulumi.String("custom-srv-windows-slos"),
DisplayName: pulumi.String("My Custom Service"),
})
if err != nil {
return err
}
invokeJoin, err := std.Join(ctx, &std.JoinArgs{
Separator: " AND ",
Input: []string{
"metric.type=\"agent.googleapis.com/cassandra/client_request/latency/95p\"",
"resource.type=\"gce_instance\"",
},
}, nil)
if err != nil {
return err
}
_, err = monitoring.NewSlo(ctx, "windows_based", &monitoring.SloArgs{
Service: customsrv.ServiceId,
DisplayName: pulumi.String("Test SLO with window based SLI"),
Goal: pulumi.Float64(0.9),
RollingPeriodDays: pulumi.Int(20),
WindowsBasedSli: &monitoring.SloWindowsBasedSliArgs{
WindowPeriod: pulumi.String("600s"),
MetricMeanInRange: &monitoring.SloWindowsBasedSliMetricMeanInRangeArgs{
TimeSeries: pulumi.String(invokeJoin.Result),
Range: &monitoring.SloWindowsBasedSliMetricMeanInRangeRangeArgs{
Max: pulumi.Float64(5),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
std = {
source = "pulumi/std"
}
}
}
resource "gcp_monitoring_customservice" "customsrv" {
service_id = "custom-srv-windows-slos"
display_name = "My Custom Service"
}
resource "gcp_monitoring_slo" "windows_based" {
service = gcp_monitoring_customservice.customsrv.service_id
display_name = "Test SLO with window based SLI"
goal = 0.9
rolling_period_days = 20
windows_based_sli = {
window_period = "600s"
metric_mean_in_range = {
time_series = join(" AND ", ["metric.type=\"agent.googleapis.com/cassandra/client_request/latency/95p\"", "resource.type=\"gce_instance\""])
range = {
max = 5
}
}
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.monitoring.CustomService;
import com.pulumi.gcp.monitoring.CustomServiceArgs;
import com.pulumi.gcp.monitoring.Slo;
import com.pulumi.gcp.monitoring.SloArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricMeanInRangeArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricMeanInRangeRangeArgs;
import com.pulumi.std.StdFunctions;
import com.pulumi.std.inputs.JoinArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var customsrv = new CustomService("customsrv", CustomServiceArgs.builder()
.serviceId("custom-srv-windows-slos")
.displayName("My Custom Service")
.build());
var windowsBased = new Slo("windowsBased", SloArgs.builder()
.service(customsrv.serviceId())
.displayName("Test SLO with window based SLI")
.goal(0.9)
.rollingPeriodDays(20)
.windowsBasedSli(SloWindowsBasedSliArgs.builder()
.windowPeriod("600s")
.metricMeanInRange(SloWindowsBasedSliMetricMeanInRangeArgs.builder()
.timeSeries(StdFunctions.join(JoinArgs.builder()
.separator(" AND ")
.input(
"metric.type=\"agent.googleapis.com/cassandra/client_request/latency/95p\"",
"resource.type=\"gce_instance\"")
.build()).result())
.range(SloWindowsBasedSliMetricMeanInRangeRangeArgs.builder()
.max(5.0)
.build())
.build())
.build())
.build());
}
}
resources:
customsrv:
type: gcp:monitoring:CustomService
properties:
serviceId: custom-srv-windows-slos
displayName: My Custom Service
windowsBased:
type: gcp:monitoring:Slo
name: windows_based
properties:
service: ${customsrv.serviceId}
displayName: Test SLO with window based SLI
goal: 0.9
rollingPeriodDays: 20
windowsBasedSli:
windowPeriod: 600s
metricMeanInRange:
timeSeries:
fn::invoke:
function: std:join
arguments:
separator: ' AND '
input:
- metric.type="agent.googleapis.com/cassandra/client_request/latency/95p"
- resource.type="gce_instance"
return: result
range:
max: 5
Monitoring Slo Windows Based Metric Sum
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as std from "@pulumi/std";
const customsrv = new gcp.monitoring.CustomService("customsrv", {
serviceId: "custom-srv-windows-slos",
displayName: "My Custom Service",
});
const windowsBased = new gcp.monitoring.Slo("windows_based", {
service: customsrv.serviceId,
displayName: "Test SLO with window based SLI",
goal: 0.9,
rollingPeriodDays: 20,
windowsBasedSli: {
windowPeriod: "400s",
metricSumInRange: {
timeSeries: std.join({
separator: " AND ",
input: [
"metric.type=\"monitoring.googleapis.com/uptime_check/request_latency\"",
"resource.type=\"uptime_url\"",
],
}).then(invoke => invoke.result),
range: {
max: 5000,
},
},
},
});
import pulumi
import pulumi_gcp as gcp
import pulumi_std as std
customsrv = gcp.monitoring.CustomService("customsrv",
service_id="custom-srv-windows-slos",
display_name="My Custom Service")
windows_based = gcp.monitoring.Slo("windows_based",
service=customsrv.service_id,
display_name="Test SLO with window based SLI",
goal=0.9,
rolling_period_days=20,
windows_based_sli={
"window_period": "400s",
"metric_sum_in_range": {
"time_series": std.join(separator=" AND ",
input=[
"metric.type=\"monitoring.googleapis.com/uptime_check/request_latency\"",
"resource.type=\"uptime_url\"",
]).result,
"range": {
"max": float(5000),
},
},
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Std = Pulumi.Std;
return await Deployment.RunAsync(() =>
{
var customsrv = new Gcp.Monitoring.CustomService("customsrv", new()
{
ServiceId = "custom-srv-windows-slos",
DisplayName = "My Custom Service",
});
var windowsBased = new Gcp.Monitoring.Slo("windows_based", new()
{
Service = customsrv.ServiceId,
DisplayName = "Test SLO with window based SLI",
Goal = 0.9,
RollingPeriodDays = 20,
WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs
{
WindowPeriod = "400s",
MetricSumInRange = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricSumInRangeArgs
{
TimeSeries = Std.Join.Invoke(new()
{
Separator = " AND ",
Input = new[]
{
"metric.type=\"monitoring.googleapis.com/uptime_check/request_latency\"",
"resource.type=\"uptime_url\"",
},
}).Apply(invoke => invoke.Result),
Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricSumInRangeRangeArgs
{
Max = 5000.0,
},
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/monitoring"
"github.com/pulumi/pulumi-std/sdk/go/std"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
customsrv, err := monitoring.NewCustomService(ctx, "customsrv", &monitoring.CustomServiceArgs{
ServiceId: pulumi.String("custom-srv-windows-slos"),
DisplayName: pulumi.String("My Custom Service"),
})
if err != nil {
return err
}
invokeJoin, err := std.Join(ctx, &std.JoinArgs{
Separator: " AND ",
Input: []string{
"metric.type=\"monitoring.googleapis.com/uptime_check/request_latency\"",
"resource.type=\"uptime_url\"",
},
}, nil)
if err != nil {
return err
}
_, err = monitoring.NewSlo(ctx, "windows_based", &monitoring.SloArgs{
Service: customsrv.ServiceId,
DisplayName: pulumi.String("Test SLO with window based SLI"),
Goal: pulumi.Float64(0.9),
RollingPeriodDays: pulumi.Int(20),
WindowsBasedSli: &monitoring.SloWindowsBasedSliArgs{
WindowPeriod: pulumi.String("400s"),
MetricSumInRange: &monitoring.SloWindowsBasedSliMetricSumInRangeArgs{
TimeSeries: pulumi.String(invokeJoin.Result),
Range: &monitoring.SloWindowsBasedSliMetricSumInRangeRangeArgs{
Max: pulumi.Float64(5000),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
std = {
source = "pulumi/std"
}
}
}
resource "gcp_monitoring_customservice" "customsrv" {
service_id = "custom-srv-windows-slos"
display_name = "My Custom Service"
}
resource "gcp_monitoring_slo" "windows_based" {
service = gcp_monitoring_customservice.customsrv.service_id
display_name = "Test SLO with window based SLI"
goal = 0.9
rolling_period_days = 20
windows_based_sli = {
window_period = "400s"
metric_sum_in_range = {
time_series = join(" AND ", ["metric.type=\"monitoring.googleapis.com/uptime_check/request_latency\"", "resource.type=\"uptime_url\""])
range = {
max = 5000
}
}
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.monitoring.CustomService;
import com.pulumi.gcp.monitoring.CustomServiceArgs;
import com.pulumi.gcp.monitoring.Slo;
import com.pulumi.gcp.monitoring.SloArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricSumInRangeArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricSumInRangeRangeArgs;
import com.pulumi.std.StdFunctions;
import com.pulumi.std.inputs.JoinArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var customsrv = new CustomService("customsrv", CustomServiceArgs.builder()
.serviceId("custom-srv-windows-slos")
.displayName("My Custom Service")
.build());
var windowsBased = new Slo("windowsBased", SloArgs.builder()
.service(customsrv.serviceId())
.displayName("Test SLO with window based SLI")
.goal(0.9)
.rollingPeriodDays(20)
.windowsBasedSli(SloWindowsBasedSliArgs.builder()
.windowPeriod("400s")
.metricSumInRange(SloWindowsBasedSliMetricSumInRangeArgs.builder()
.timeSeries(StdFunctions.join(JoinArgs.builder()
.separator(" AND ")
.input(
"metric.type=\"monitoring.googleapis.com/uptime_check/request_latency\"",
"resource.type=\"uptime_url\"")
.build()).result())
.range(SloWindowsBasedSliMetricSumInRangeRangeArgs.builder()
.max(5000.0)
.build())
.build())
.build())
.build());
}
}
resources:
customsrv:
type: gcp:monitoring:CustomService
properties:
serviceId: custom-srv-windows-slos
displayName: My Custom Service
windowsBased:
type: gcp:monitoring:Slo
name: windows_based
properties:
service: ${customsrv.serviceId}
displayName: Test SLO with window based SLI
goal: 0.9
rollingPeriodDays: 20
windowsBasedSli:
windowPeriod: 400s
metricSumInRange:
timeSeries:
fn::invoke:
function: std:join
arguments:
separator: ' AND '
input:
- metric.type="monitoring.googleapis.com/uptime_check/request_latency"
- resource.type="uptime_url"
return: result
range:
max: 5000
Monitoring Slo Windows Based Ratio Threshold
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as std from "@pulumi/std";
const customsrv = new gcp.monitoring.CustomService("customsrv", {
serviceId: "custom-srv-windows-slos",
displayName: "My Custom Service",
});
const windowsBased = new gcp.monitoring.Slo("windows_based", {
service: customsrv.serviceId,
displayName: "Test SLO with window based SLI",
goal: 0.9,
rollingPeriodDays: 20,
windowsBasedSli: {
windowPeriod: "100s",
goodTotalRatioThreshold: {
threshold: 0.1,
performance: {
distributionCut: {
distributionFilter: std.join({
separator: " AND ",
input: [
"metric.type=\"serviceruntime.googleapis.com/api/request_latencies\"",
"resource.type=\"consumed_api\"",
],
}).then(invoke => invoke.result),
range: {
min: 1,
max: 9,
},
},
},
},
},
});
import pulumi
import pulumi_gcp as gcp
import pulumi_std as std
customsrv = gcp.monitoring.CustomService("customsrv",
service_id="custom-srv-windows-slos",
display_name="My Custom Service")
windows_based = gcp.monitoring.Slo("windows_based",
service=customsrv.service_id,
display_name="Test SLO with window based SLI",
goal=0.9,
rolling_period_days=20,
windows_based_sli={
"window_period": "100s",
"good_total_ratio_threshold": {
"threshold": 0.1,
"performance": {
"distribution_cut": {
"distribution_filter": std.join(separator=" AND ",
input=[
"metric.type=\"serviceruntime.googleapis.com/api/request_latencies\"",
"resource.type=\"consumed_api\"",
]).result,
"range": {
"min": float(1),
"max": float(9),
},
},
},
},
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Std = Pulumi.Std;
return await Deployment.RunAsync(() =>
{
var customsrv = new Gcp.Monitoring.CustomService("customsrv", new()
{
ServiceId = "custom-srv-windows-slos",
DisplayName = "My Custom Service",
});
var windowsBased = new Gcp.Monitoring.Slo("windows_based", new()
{
Service = customsrv.ServiceId,
DisplayName = "Test SLO with window based SLI",
Goal = 0.9,
RollingPeriodDays = 20,
WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs
{
WindowPeriod = "100s",
GoodTotalRatioThreshold = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdArgs
{
Threshold = 0.1,
Performance = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs
{
DistributionCut = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs
{
DistributionFilter = Std.Join.Invoke(new()
{
Separator = " AND ",
Input = new[]
{
"metric.type=\"serviceruntime.googleapis.com/api/request_latencies\"",
"resource.type=\"consumed_api\"",
},
}).Apply(invoke => invoke.Result),
Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs
{
Min = 1.0,
Max = 9.0,
},
},
},
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/monitoring"
"github.com/pulumi/pulumi-std/sdk/go/std"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
customsrv, err := monitoring.NewCustomService(ctx, "customsrv", &monitoring.CustomServiceArgs{
ServiceId: pulumi.String("custom-srv-windows-slos"),
DisplayName: pulumi.String("My Custom Service"),
})
if err != nil {
return err
}
invokeJoin, err := std.Join(ctx, &std.JoinArgs{
Separator: " AND ",
Input: []string{
"metric.type=\"serviceruntime.googleapis.com/api/request_latencies\"",
"resource.type=\"consumed_api\"",
},
}, nil)
if err != nil {
return err
}
_, err = monitoring.NewSlo(ctx, "windows_based", &monitoring.SloArgs{
Service: customsrv.ServiceId,
DisplayName: pulumi.String("Test SLO with window based SLI"),
Goal: pulumi.Float64(0.9),
RollingPeriodDays: pulumi.Int(20),
WindowsBasedSli: &monitoring.SloWindowsBasedSliArgs{
WindowPeriod: pulumi.String("100s"),
GoodTotalRatioThreshold: &monitoring.SloWindowsBasedSliGoodTotalRatioThresholdArgs{
Threshold: pulumi.Float64(0.1),
Performance: &monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs{
DistributionCut: &monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs{
DistributionFilter: pulumi.String(invokeJoin.Result),
Range: &monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs{
Min: pulumi.Float64(1),
Max: pulumi.Float64(9),
},
},
},
},
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
std = {
source = "pulumi/std"
}
}
}
resource "gcp_monitoring_customservice" "customsrv" {
service_id = "custom-srv-windows-slos"
display_name = "My Custom Service"
}
resource "gcp_monitoring_slo" "windows_based" {
service = gcp_monitoring_customservice.customsrv.service_id
display_name = "Test SLO with window based SLI"
goal = 0.9
rolling_period_days = 20
windows_based_sli = {
window_period = "100s"
good_total_ratio_threshold = {
threshold = 0.1
performance = {
distribution_cut = {
distribution_filter = join(" AND ", ["metric.type=\"serviceruntime.googleapis.com/api/request_latencies\"", "resource.type=\"consumed_api\""])
range = {
min = 1
max = 9
}
}
}
}
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.monitoring.CustomService;
import com.pulumi.gcp.monitoring.CustomServiceArgs;
import com.pulumi.gcp.monitoring.Slo;
import com.pulumi.gcp.monitoring.SloArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs;
import com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs;
import com.pulumi.std.StdFunctions;
import com.pulumi.std.inputs.JoinArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var customsrv = new CustomService("customsrv", CustomServiceArgs.builder()
.serviceId("custom-srv-windows-slos")
.displayName("My Custom Service")
.build());
var windowsBased = new Slo("windowsBased", SloArgs.builder()
.service(customsrv.serviceId())
.displayName("Test SLO with window based SLI")
.goal(0.9)
.rollingPeriodDays(20)
.windowsBasedSli(SloWindowsBasedSliArgs.builder()
.windowPeriod("100s")
.goodTotalRatioThreshold(SloWindowsBasedSliGoodTotalRatioThresholdArgs.builder()
.threshold(0.1)
.performance(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs.builder()
.distributionCut(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs.builder()
.distributionFilter(StdFunctions.join(JoinArgs.builder()
.separator(" AND ")
.input(
"metric.type=\"serviceruntime.googleapis.com/api/request_latencies\"",
"resource.type=\"consumed_api\"")
.build()).result())
.range(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs.builder()
.min(1.0)
.max(9.0)
.build())
.build())
.build())
.build())
.build())
.build());
}
}
resources:
customsrv:
type: gcp:monitoring:CustomService
properties:
serviceId: custom-srv-windows-slos
displayName: My Custom Service
windowsBased:
type: gcp:monitoring:Slo
name: windows_based
properties:
service: ${customsrv.serviceId}
displayName: Test SLO with window based SLI
goal: 0.9
rollingPeriodDays: 20
windowsBasedSli:
windowPeriod: 100s
goodTotalRatioThreshold:
threshold: 0.1
performance:
distributionCut:
distributionFilter:
fn::invoke:
function: std:join
arguments:
separator: ' AND '
input:
- metric.type="serviceruntime.googleapis.com/api/request_latencies"
- resource.type="consumed_api"
return: result
range:
min: 1
max: 9
Import
Slo can be imported using any of these accepted formats:
{{project}}/{{name}}{{project}} {{name}}{{name}}
When using the pulumi import command, Slo can be imported using one of the formats above. For example:
$ pulumi import gcp:monitoring/slo:Slo default {{project}}/{{name}}
$ terraform import google_monitoring_slo.default "{{project}} {{name}}"
$ pulumi import gcp:monitoring/slo:Slo default {{name}}
Constructors
- Slo(String name, {SloArgs? args, CustomResourceOptions? options})
-
Creates a new Slo.
nameThe Pulumi resource name.argsArguments used to configure this Slo. The set of arguments for Slo.optionsResource options controlling this resource's behavior. - Slo.reference(String urn)
- Creates a typed reference to an existing Slo resource.
Properties
-
basicSli
↔ Output<
SloBasicSli?> -
Basic Service-Level Indicator (SLI) on a well-known service type.
Performance will be computed on the basis of pre-defined metrics.
SLIs are used to measure and calculate the quality of the Service's
performance with respect to a single aspect of service quality.
Exactly one of the following must be set:
basicSli,requestBasedSli,windowsBasedSliStructure is documented below.latefinal -
calendarPeriod
↔ Output<
String?> -
A calendar period, semantically "since the start of the current
<calendarPeriod>".
Possible values are:
DAY,WEEK,FORTNIGHT,MONTH.latefinal -
childResources
→ Set<
Resource> -
finalinherited
-
completionSources
↔ Map<
String, IOutputCompletionSource> -
latefinalinherited
-
deletionPolicy
↔ Output<
String> -
Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
When a 'terraform destroy' or 'pulumi up' would delete the resource,
the command will fail if this field is set to "PREVENT" in Terraform state.
When set to "ABANDON", the command will remove the resource from Terraform
management without updating or deleting the resource in the API.
When set to "DELETE", deleting the resource is allowed.
latefinal
-
displayName
↔ Output<
String?> -
Name used for UI elements listing this SLO.
latefinal
-
goal
↔ Output<
double> -
The fraction of service that must be good in order for this objective
to be met. 0 < goal <= 0.999
latefinal
- hashCode → int
-
The hash code for this object.
no setterinherited
-
id
↔ Output<
String> -
getter/setter pairinherited
- isCustom → bool
-
Returns whether this resource is provider-managed.
no setterinherited
- isProtected → bool
-
Returns whether this resource is protected from deletion.
no setterinherited
- isRemote → bool
-
Whether this resource is registered as remote.
no setterinherited
- isResourceReference → bool
-
Whether this instance represents a resource value returned over RPC.
finalinherited
-
name
↔ Output<
String> -
The full resource name for this service. The syntax is:
projects/
PROJECT_ID_OR_NUMBER/services/SERVICE_ID/serviceLevelObjectives/SLO_NAMElatefinal -
project
↔ Output<
String> -
The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
latefinal
-
requestBasedSli
↔ Output<
SloRequestBasedSli?> -
A request-based SLI defines a SLI for which atomic units of
service are counted directly.
A SLI describes a good service.
It is used to measure and calculate the quality of the Service's
performance with respect to a single aspect of service quality.
Exactly one of the following must be set:
basicSli,requestBasedSli,windowsBasedSliStructure is documented below.latefinal -
resourceTransforms
→ List<
ResourceTransform> -
Inherited/explicit async transforms.
no setterinherited
-
rollingPeriodDays
↔ Output<
int?> -
A rolling time period, semantically "in the past X days".
Must be between 1 to 30 days, inclusive.
latefinal
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
service
↔ Output<
String> -
ID of the service to which this SLO belongs.
latefinal
-
sloId
↔ Output<
String> -
The id to use for this ServiceLevelObjective. If omitted, an id will be generated instead.
latefinal
-
transformations
→ List<
ResourceTransformation> -
Inherited/explicit legacy transformations.
no setterinherited
-
urn
↔ Output<
String> -
latefinalinherited
-
userLabels
↔ Output<
Map< String, String> ?> -
This field is intended to be used for organizing and identifying the AlertPolicy
objects.The field can contain up to 64 entries. Each key and value is limited
to 63 Unicode characters or 128 bytes, whichever is smaller. Labels and values
can contain only lowercase letters, numerals, underscores, and dashes. Keys
must begin with a letter.
latefinal
-
windowsBasedSli
↔ Output<
SloWindowsBasedSli?> -
A windows-based SLI defines the criteria for time windows.
goodService is defined based off the count of these time windows
for which the provided service was of good quality.
A SLI describes a good service. It is used to measure and calculate
the quality of the Service's performance with respect to a single
aspect of service quality.
Exactly one of the following must be set:
basicSli,requestBasedSli,windowsBasedSliStructure is documented below.latefinal
Methods
-
failId(
Object error) → void -
Completes this resource ID with an error when registration fails.
inherited
-
failOutputs(
Object error) → void -
Completes all output properties with
error.inherited -
failUrn(
Object error) → void -
Completes this resource URN with an error when registration fails.
inherited
-
getProvider(
String moduleMember) → ProviderResource? -
Returns provider for
moduleMember's package, if configured.inherited -
getResourceName(
) → String -
Returns this resource's logical name.
inherited
-
getResourceType(
) → String -
Returns this resource's Pulumi type token.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
registerOutput<
T> (String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output< T> -
Registers a dynamic output property for this resource.
inherited
-
resolveId(
String? value, {required bool isKnown}) → void -
Resolves the provider-assigned ID for this resource.
inherited
-
resolveOutputs(
Struct outputs) → void -
Resolves all output properties from a monitor response payload.
inherited
-
resolveUrn(
String value) → void -
Resolves this resource's URN once assigned by the engine.
inherited
-
serializeProperties(
Map< String, dynamic> properties) → Future<Struct> -
Serializes resource properties for RPC transmission.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited