feat: publish existing API surface to preview

PiperOrigin-RevId: 706891138
This commit is contained in:
Google APIs 2024-12-16 17:35:55 -08:00 committed by Copybara-Service
parent edf305fd74
commit fa515f8be9
24 changed files with 6783 additions and 0 deletions

View file

@ -0,0 +1,42 @@
# This build file includes a target for the Ruby wrapper library for
# google-cloud-monitoring.
# This is an API workspace, having public visibility by default makes perfect sense.
package(default_visibility = ["//visibility:public"])
# Export yaml configs.
exports_files(glob(["*.yaml"]))
load(
"@com_google_googleapis_imports//:imports.bzl",
"ruby_cloud_gapic_library",
"ruby_gapic_assembly_pkg",
)
# Generates a Ruby wrapper client for monitoring.
# Ruby wrapper clients are versionless, but are generated from source protos
# for a particular service version, v3 in this case.
ruby_cloud_gapic_library(
name = "monitoring_ruby_wrapper",
srcs = ["//google/monitoring/v3:monitoring_proto_with_info"],
extra_protoc_parameters = [
"ruby-cloud-gem-name=google-cloud-monitoring",
"ruby-cloud-env-prefix=MONITORING",
"ruby-cloud-wrapper-of=v3:0.15",
"ruby-cloud-product-url=https://cloud.google.com/monitoring",
"ruby-cloud-api-id=monitoring.googleapis.com",
"ruby-cloud-api-shortname=monitoring",
"ruby-cloud-migration-version=1.0",
],
ruby_cloud_description = "Cloud Monitoring collects metrics, events, and metadata from Google Cloud, Amazon Web Services (AWS), hosted uptime probes, and application instrumentation.",
ruby_cloud_title = "Cloud Monitoring",
transport = "grpc",
)
# Open Source package.
ruby_gapic_assembly_pkg(
name = "google-cloud-monitoring-ruby",
deps = [
":monitoring_ruby_wrapper",
],
)

View file

@ -0,0 +1,444 @@
# This file was automatically generated by BuildFileGenerator
# https://github.com/googleapis/rules_gapic/tree/master/bazel
# Most of the manual changes to this file will be overwritten.
# It's **only** allowed to change the following rule attribute values:
# - names of *_gapic_assembly_* rules
# - certain parameters of *_gapic_library rules, including but not limited to:
# * extra_protoc_parameters
# * extra_protoc_file_parameters
# The complete list of preserved parameters can be found in the source code.
# buildifier: disable=load-on-top
# This is an API workspace, having public visibility by default makes perfect sense.
package(default_visibility = ["//visibility:public"])
##############################################################################
# Common
##############################################################################
# buildifier: disable=same-origin-load
load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info")
load("@rules_proto//proto:defs.bzl", "proto_library")
proto_library(
name = "monitoring_proto",
srcs = [
"alert.proto",
"alert_service.proto",
"common.proto",
"dropped_labels.proto",
"group.proto",
"group_service.proto",
"metric.proto",
"metric_service.proto",
"mutation_record.proto",
"notification.proto",
"notification_service.proto",
"query_service.proto",
"service.proto",
"service_service.proto",
"snooze.proto",
"snooze_service.proto",
"span_context.proto",
"uptime.proto",
"uptime_service.proto",
],
deps = [
"//google/api:annotations_proto",
"//google/api:client_proto",
"//google/api:distribution_proto",
"//google/api:field_behavior_proto",
"//google/api:field_info_proto",
"//google/api:label_proto",
"//google/api:launch_stage_proto",
"//google/api:metric_proto",
"//google/api:monitored_resource_proto",
"//google/api:resource_proto",
"//google/longrunning:operations_proto",
"//google/rpc:status_proto",
"//google/type:calendar_period_proto",
"//google/type:timeofday_proto",
"@com_google_protobuf//:duration_proto",
"@com_google_protobuf//:empty_proto",
"@com_google_protobuf//:field_mask_proto",
"@com_google_protobuf//:timestamp_proto",
"@com_google_protobuf//:wrappers_proto",
],
)
proto_library_with_info(
name = "monitoring_proto_with_info",
deps = [
":monitoring_proto",
"//google/cloud:common_resources_proto",
],
)
##############################################################################
# Java
##############################################################################
# buildifier: disable=same-origin-load
load(
"@com_google_googleapis_imports//:imports.bzl",
"java_gapic_assembly_gradle_pkg",
"java_gapic_library",
"java_gapic_test",
"java_grpc_library",
"java_proto_library",
)
java_proto_library(
name = "monitoring_java_proto",
deps = [":monitoring_proto"],
)
java_grpc_library(
name = "monitoring_java_grpc",
srcs = [":monitoring_proto"],
deps = [":monitoring_java_proto"],
)
java_gapic_library(
name = "monitoring_java_gapic",
srcs = [":monitoring_proto_with_info"],
gapic_yaml = "monitoring_gapic.yaml",
grpc_service_config = "monitoring_grpc_service_config.json",
rest_numeric_enums = True,
service_yaml = "monitoring.yaml",
test_deps = [
":monitoring_java_grpc",
],
transport = "grpc",
deps = [
":monitoring_java_proto",
"//google/api:api_java_proto",
],
)
java_gapic_test(
name = "monitoring_java_gapic_test_suite",
test_classes = [
"com.google.cloud.monitoring.v3.AlertPolicyServiceClientTest",
"com.google.cloud.monitoring.v3.GroupServiceClientTest",
"com.google.cloud.monitoring.v3.MetricServiceClientTest",
"com.google.cloud.monitoring.v3.NotificationChannelServiceClientTest",
"com.google.cloud.monitoring.v3.QueryServiceClientTest",
"com.google.cloud.monitoring.v3.ServiceMonitoringServiceClientTest",
"com.google.cloud.monitoring.v3.SnoozeServiceClientTest",
"com.google.cloud.monitoring.v3.UptimeCheckServiceClientTest",
],
runtime_deps = [":monitoring_java_gapic_test"],
)
# Open Source Packages
java_gapic_assembly_gradle_pkg(
name = "google-cloud-monitoring-v3-java",
include_samples = True,
transport = "grpc",
deps = [
":monitoring_java_gapic",
":monitoring_java_grpc",
":monitoring_java_proto",
":monitoring_proto",
],
)
##############################################################################
# Go
##############################################################################
# buildifier: disable=same-origin-load
load(
"@com_google_googleapis_imports//:imports.bzl",
"go_gapic_assembly_pkg",
"go_gapic_library",
"go_proto_library",
)
go_proto_library(
name = "monitoring_go_proto",
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
importpath = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb",
protos = [":monitoring_proto"],
deps = [
"//google/api:annotations_go_proto",
"//google/api:api_go_proto",
"//google/api:distribution_go_proto",
"//google/api:label_go_proto",
"//google/api:metric_go_proto",
"//google/api:monitoredres_go_proto",
"//google/longrunning:longrunning_go_proto",
"//google/rpc:status_go_proto",
"//google/type:calendar_period_go_proto",
"//google/type:timeofday_go_proto",
],
)
go_gapic_library(
name = "monitoring_go_gapic",
srcs = [":monitoring_proto_with_info"],
grpc_service_config = "monitoring_grpc_service_config.json",
importpath = "cloud.google.com/go/monitoring/apiv3/v2;monitoring",
metadata = True,
release_level = "beta",
rest_numeric_enums = True,
service_yaml = "monitoring.yaml",
transport = "grpc",
deps = [
":monitoring_go_proto",
"//google/api:metric_go_proto",
"//google/api:monitoredres_go_proto",
"//google/longrunning:longrunning_go_proto",
"@com_google_cloud_go_longrunning//:go_default_library",
"@com_google_cloud_go_longrunning//autogen:go_default_library",
"@io_bazel_rules_go//proto/wkt:duration_go_proto",
],
)
# Open Source Packages
go_gapic_assembly_pkg(
name = "gapi-cloud-monitoring-v3-go",
deps = [
":monitoring_go_gapic",
":monitoring_go_gapic_srcjar-metadata.srcjar",
":monitoring_go_gapic_srcjar-snippets.srcjar",
":monitoring_go_gapic_srcjar-test.srcjar",
":monitoring_go_proto",
],
)
##############################################################################
# Python
##############################################################################
# buildifier: disable=same-origin-load
load(
"@com_google_googleapis_imports//:imports.bzl",
"py_gapic_assembly_pkg",
"py_gapic_library",
"py_test",
)
py_gapic_library(
name = "monitoring_py_gapic",
srcs = [":monitoring_proto"],
grpc_service_config = "monitoring_grpc_service_config.json",
opt_args = ["python-gapic-namespace=google.cloud"],
rest_numeric_enums = True,
service_yaml = "monitoring.yaml",
transport = "grpc",
deps = [
],
)
py_test(
name = "monitoring_py_gapic_test",
srcs = [
"monitoring_py_gapic_pytest.py",
"monitoring_py_gapic_test.py",
],
legacy_create_init = False,
deps = [":monitoring_py_gapic"],
)
# Open Source Packages
py_gapic_assembly_pkg(
name = "monitoring-v3-py",
deps = [
":monitoring_py_gapic",
],
)
##############################################################################
# PHP
##############################################################################
# buildifier: disable=same-origin-load
load(
"@com_google_googleapis_imports//:imports.bzl",
"php_gapic_assembly_pkg",
"php_gapic_library",
"php_proto_library",
)
php_proto_library(
name = "monitoring_php_proto",
deps = [":monitoring_proto"],
)
php_gapic_library(
name = "monitoring_php_gapic",
srcs = [":monitoring_proto_with_info"],
grpc_service_config = "monitoring_grpc_service_config.json",
migration_mode = "MIGRATING",
rest_numeric_enums = True,
service_yaml = "monitoring.yaml",
transport = "grpc+rest",
deps = [
":monitoring_php_proto",
],
)
# Open Source Packages
php_gapic_assembly_pkg(
name = "google-cloud-monitoring-v3-php",
deps = [
":monitoring_php_gapic",
":monitoring_php_proto",
],
)
##############################################################################
# Node.js
##############################################################################
# buildifier: disable=same-origin-load
load(
"@com_google_googleapis_imports//:imports.bzl",
"nodejs_gapic_assembly_pkg",
"nodejs_gapic_library",
)
nodejs_gapic_library(
name = "monitoring_nodejs_gapic",
package_name = "@google-cloud/monitoring",
src = ":monitoring_proto_with_info",
extra_protoc_parameters = ["metadata"],
grpc_service_config = "monitoring_grpc_service_config.json",
main_service = "monitoring",
package = "google.monitoring.v3",
rest_numeric_enums = True,
service_yaml = "monitoring.yaml",
transport = "grpc",
deps = [],
)
nodejs_gapic_assembly_pkg(
name = "monitoring-v3-nodejs",
deps = [
":monitoring_nodejs_gapic",
":monitoring_proto",
],
)
##############################################################################
# Ruby
##############################################################################
# buildifier: disable=same-origin-load
load(
"@com_google_googleapis_imports//:imports.bzl",
"ruby_cloud_gapic_library",
"ruby_gapic_assembly_pkg",
"ruby_grpc_library",
"ruby_proto_library",
)
ruby_proto_library(
name = "monitoring_ruby_proto",
deps = [":monitoring_proto"],
)
ruby_grpc_library(
name = "monitoring_ruby_grpc",
srcs = [":monitoring_proto"],
deps = [":monitoring_ruby_proto"],
)
ruby_cloud_gapic_library(
name = "monitoring_ruby_gapic",
srcs = [":monitoring_proto_with_info"],
extra_protoc_parameters = [
"ruby-cloud-api-id=monitoring.googleapis.com",
"ruby-cloud-api-shortname=monitoring",
"ruby-cloud-env-prefix=MONITORING",
"ruby-cloud-gem-name=google-cloud-monitoring-v3",
"ruby-cloud-product-url=https://cloud.google.com/monitoring",
],
grpc_service_config = "monitoring_grpc_service_config.json",
rest_numeric_enums = True,
ruby_cloud_description = "Cloud Monitoring collects metrics, events, and metadata from Google Cloud, Amazon Web Services (AWS), hosted uptime probes, and application instrumentation.",
ruby_cloud_title = "Cloud Monitoring V3",
service_yaml = "monitoring.yaml",
transport = "grpc",
deps = [
":monitoring_ruby_grpc",
":monitoring_ruby_proto",
],
)
# Open Source Packages
ruby_gapic_assembly_pkg(
name = "google-cloud-monitoring-v3-ruby",
deps = [
":monitoring_ruby_gapic",
":monitoring_ruby_grpc",
":monitoring_ruby_proto",
],
)
##############################################################################
# C#
##############################################################################
# buildifier: disable=same-origin-load
load(
"@com_google_googleapis_imports//:imports.bzl",
"csharp_gapic_assembly_pkg",
"csharp_gapic_library",
"csharp_grpc_library",
"csharp_proto_library",
)
csharp_proto_library(
name = "monitoring_csharp_proto",
extra_opts = [],
deps = [":monitoring_proto"],
)
csharp_grpc_library(
name = "monitoring_csharp_grpc",
srcs = [":monitoring_proto"],
deps = [":monitoring_csharp_proto"],
)
csharp_gapic_library(
name = "monitoring_csharp_gapic",
srcs = [":monitoring_proto_with_info"],
common_resources_config = "@gax_dotnet//:Google.Api.Gax/ResourceNames/CommonResourcesConfig.json",
grpc_service_config = "monitoring_grpc_service_config.json",
rest_numeric_enums = True,
service_yaml = "monitoring.yaml",
transport = "grpc",
deps = [
":monitoring_csharp_grpc",
":monitoring_csharp_proto",
],
)
# Open Source Packages
csharp_gapic_assembly_pkg(
name = "google-cloud-monitoring-v3-csharp",
deps = [
":monitoring_csharp_gapic",
":monitoring_csharp_grpc",
":monitoring_csharp_proto",
],
)
##############################################################################
# C++
##############################################################################
# buildifier: disable=same-origin-load
load(
"@com_google_googleapis_imports//:imports.bzl",
"cc_grpc_library",
"cc_proto_library",
)
cc_proto_library(
name = "monitoring_cc_proto",
deps = [":monitoring_proto"],
)
cc_grpc_library(
name = "monitoring_cc_grpc",
srcs = [":monitoring_proto"],
grpc_only = True,
deps = [":monitoring_cc_proto"],
)

View file

@ -0,0 +1,820 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/common.proto";
import "google/monitoring/v3/mutation_record.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/wrappers.proto";
import "google/rpc/status.proto";
import "google/type/timeofday.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "AlertProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// A description of the conditions under which some aspect of your system is
// considered to be "unhealthy" and the ways to notify people or services about
// this state. For an overview of alerting policies, see
// [Introduction to Alerting](https://cloud.google.com/monitoring/alerts/).
//
message AlertPolicy {
option (google.api.resource) = {
type: "monitoring.googleapis.com/AlertPolicy"
pattern: "projects/{project}/alertPolicies/{alert_policy}"
pattern: "organizations/{organization}/alertPolicies/{alert_policy}"
pattern: "folders/{folder}/alertPolicies/{alert_policy}"
pattern: "*"
};
// Documentation that is included in the notifications and incidents
// pertaining to this policy.
message Documentation {
// Links to content such as playbooks, repositories, and other resources.
message Link {
// A short display name for the link. The display name must not be empty
// or exceed 63 characters. Example: "playbook".
string display_name = 1;
// The url of a webpage.
// A url can be templatized by using variables
// in the path or the query parameters. The total length of a URL should
// not exceed 2083 characters before and after variable expansion.
// Example: "https://my_domain.com/playbook?name=${resource.name}"
string url = 2;
}
// The body of the documentation, interpreted according to `mime_type`.
// The content may not exceed 8,192 Unicode characters and may not exceed
// more than 10,240 bytes when encoded in UTF-8 format, whichever is
// smaller. This text can be [templatized by using
// variables](https://cloud.google.com/monitoring/alerts/doc-variables#doc-vars).
string content = 1;
// The format of the `content` field. Presently, only the value
// `"text/markdown"` is supported. See
// [Markdown](https://en.wikipedia.org/wiki/Markdown) for more information.
string mime_type = 2;
// Optional. The subject line of the notification. The subject line may not
// exceed 10,240 bytes. In notifications generated by this policy, the
// contents of the subject line after variable expansion will be truncated
// to 255 bytes or shorter at the latest UTF-8 character boundary. The
// 255-byte limit is recommended by [this
// thread](https://stackoverflow.com/questions/1592291/what-is-the-email-subject-length-limit).
// It is both the limit imposed by some third-party ticketing products and
// it is common to define textual fields in databases as VARCHAR(255).
//
// The contents of the subject line can be [templatized by using
// variables](https://cloud.google.com/monitoring/alerts/doc-variables#doc-vars).
// If this field is missing or empty, a default subject line will be
// generated.
string subject = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. Links to content such as playbooks, repositories, and other
// resources. This field can contain up to 3 entries.
repeated Link links = 4 [(google.api.field_behavior) = OPTIONAL];
}
// A condition is a true/false test that determines when an alerting policy
// should open an incident. If a condition evaluates to true, it signifies
// that something is wrong.
message Condition {
option (google.api.resource) = {
type: "monitoring.googleapis.com/AlertPolicyCondition"
pattern: "projects/{project}/alertPolicies/{alert_policy}/conditions/{condition}"
pattern: "organizations/{organization}/alertPolicies/{alert_policy}/conditions/{condition}"
pattern: "folders/{folder}/alertPolicies/{alert_policy}/conditions/{condition}"
pattern: "*"
};
// Specifies how many time series must fail a predicate to trigger a
// condition. If not specified, then a `{count: 1}` trigger is used.
message Trigger {
// A type of trigger.
oneof type {
// The absolute number of time series that must fail
// the predicate for the condition to be triggered.
int32 count = 1;
// The percentage of time series that must fail the
// predicate for the condition to be triggered.
double percent = 2;
}
}
// A condition control that determines how metric-threshold conditions
// are evaluated when data stops arriving.
// This control doesn't affect metric-absence policies.
enum EvaluationMissingData {
// An unspecified evaluation missing data option. Equivalent to
// EVALUATION_MISSING_DATA_NO_OP.
EVALUATION_MISSING_DATA_UNSPECIFIED = 0;
// If there is no data to evaluate the condition, then evaluate the
// condition as false.
EVALUATION_MISSING_DATA_INACTIVE = 1;
// If there is no data to evaluate the condition, then evaluate the
// condition as true.
EVALUATION_MISSING_DATA_ACTIVE = 2;
// Do not evaluate the condition to any value if there is no data.
EVALUATION_MISSING_DATA_NO_OP = 3;
}
// A condition type that compares a collection of time series
// against a threshold.
message MetricThreshold {
// Options used when forecasting the time series and testing
// the predicted value against the threshold.
message ForecastOptions {
// Required. The length of time into the future to forecast whether a
// time series will violate the threshold. If the predicted value is
// found to violate the threshold, and the violation is observed in all
// forecasts made for the configured `duration`, then the time series is
// considered to be failing.
// The forecast horizon can range from 1 hour to 60 hours.
google.protobuf.Duration forecast_horizon = 1
[(google.api.field_behavior) = REQUIRED];
}
// Required. A
// [filter](https://cloud.google.com/monitoring/api/v3/filters) that
// identifies which time series should be compared with the threshold.
//
// The filter is similar to the one that is specified in the
// [`ListTimeSeries`
// request](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list)
// (that call is useful to verify the time series that will be retrieved /
// processed). The filter must specify the metric type and the resource
// type. Optionally, it can specify resource labels and metric labels.
// This field must not exceed 2048 Unicode characters in length.
string filter = 2 [(google.api.field_behavior) = REQUIRED];
// Specifies the alignment of data points in individual time series as
// well as how to combine the retrieved time series together (such as
// when aggregating multiple streams on each resource to a single
// stream for each resource or when aggregating streams across all
// members of a group of resources). Multiple aggregations
// are applied in the order specified.
//
// This field is similar to the one in the [`ListTimeSeries`
// request](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
// It is advisable to use the `ListTimeSeries` method when debugging this
// field.
repeated Aggregation aggregations = 8;
// A [filter](https://cloud.google.com/monitoring/api/v3/filters) that
// identifies a time series that should be used as the denominator of a
// ratio that will be compared with the threshold. If a
// `denominator_filter` is specified, the time series specified by the
// `filter` field will be used as the numerator.
//
// The filter must specify the metric type and optionally may contain
// restrictions on resource type, resource labels, and metric labels.
// This field may not exceed 2048 Unicode characters in length.
string denominator_filter = 9;
// Specifies the alignment of data points in individual time series
// selected by `denominatorFilter` as
// well as how to combine the retrieved time series together (such as
// when aggregating multiple streams on each resource to a single
// stream for each resource or when aggregating streams across all
// members of a group of resources).
//
// When computing ratios, the `aggregations` and
// `denominator_aggregations` fields must use the same alignment period
// and produce time series that have the same periodicity and labels.
repeated Aggregation denominator_aggregations = 10;
// When this field is present, the `MetricThreshold` condition forecasts
// whether the time series is predicted to violate the threshold within
// the `forecast_horizon`. When this field is not set, the
// `MetricThreshold` tests the current value of the timeseries against the
// threshold.
ForecastOptions forecast_options = 12;
// The comparison to apply between the time series (indicated by `filter`
// and `aggregation`) and the threshold (indicated by `threshold_value`).
// The comparison is applied on each time series, with the time series
// on the left-hand side and the threshold on the right-hand side.
//
// Only `COMPARISON_LT` and `COMPARISON_GT` are supported currently.
ComparisonType comparison = 4;
// A value against which to compare the time series.
double threshold_value = 5;
// The amount of time that a time series must violate the
// threshold to be considered failing. Currently, only values
// that are a multiple of a minute--e.g., 0, 60, 120, or 300
// seconds--are supported. If an invalid value is given, an
// error will be returned. When choosing a duration, it is useful to
// keep in mind the frequency of the underlying time series data
// (which may also be affected by any alignments specified in the
// `aggregations` field); a good duration is long enough so that a single
// outlier does not generate spurious alerts, but short enough that
// unhealthy states are detected and alerted on quickly.
google.protobuf.Duration duration = 6;
// The number/percent of time series for which the comparison must hold
// in order for the condition to trigger. If unspecified, then the
// condition will trigger if the comparison is true for any of the
// time series that have been identified by `filter` and `aggregations`,
// or by the ratio, if `denominator_filter` and `denominator_aggregations`
// are specified.
Trigger trigger = 7;
// A condition control that determines how metric-threshold conditions
// are evaluated when data stops arriving. To use this control, the value
// of the `duration` field must be greater than or equal to 60 seconds.
EvaluationMissingData evaluation_missing_data = 11;
}
// A condition type that checks that monitored resources
// are reporting data. The configuration defines a metric and
// a set of monitored resources. The predicate is considered in violation
// when a time series for the specified metric of a monitored
// resource does not include any data in the specified `duration`.
message MetricAbsence {
// Required. A
// [filter](https://cloud.google.com/monitoring/api/v3/filters) that
// identifies which time series should be compared with the threshold.
//
// The filter is similar to the one that is specified in the
// [`ListTimeSeries`
// request](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list)
// (that call is useful to verify the time series that will be retrieved /
// processed). The filter must specify the metric type and the resource
// type. Optionally, it can specify resource labels and metric labels.
// This field must not exceed 2048 Unicode characters in length.
string filter = 1 [(google.api.field_behavior) = REQUIRED];
// Specifies the alignment of data points in individual time series as
// well as how to combine the retrieved time series together (such as
// when aggregating multiple streams on each resource to a single
// stream for each resource or when aggregating streams across all
// members of a group of resources). Multiple aggregations
// are applied in the order specified.
//
// This field is similar to the one in the [`ListTimeSeries`
// request](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
// It is advisable to use the `ListTimeSeries` method when debugging this
// field.
repeated Aggregation aggregations = 5;
// The amount of time that a time series must fail to report new
// data to be considered failing. The minimum value of this field
// is 120 seconds. Larger values that are a multiple of a
// minute--for example, 240 or 300 seconds--are supported.
// If an invalid value is given, an
// error will be returned. The `Duration.nanos` field is
// ignored.
google.protobuf.Duration duration = 2;
// The number/percent of time series for which the comparison must hold
// in order for the condition to trigger. If unspecified, then the
// condition will trigger if the comparison is true for any of the
// time series that have been identified by `filter` and `aggregations`.
Trigger trigger = 3;
}
// A condition type that checks whether a log message in the [scoping
// project](https://cloud.google.com/monitoring/api/v3#project_name)
// satisfies the given filter. Logs from other projects in the metrics
// scope are not evaluated.
message LogMatch {
// Required. A logs-based filter. See [Advanced Logs
// Queries](https://cloud.google.com/logging/docs/view/advanced-queries)
// for how this filter should be constructed.
string filter = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. A map from a label key to an extractor expression, which is
// used to extract the value for this label key. Each entry in this map is
// a specification for how data should be extracted from log entries that
// match `filter`. Each combination of extracted values is treated as a
// separate rule for the purposes of triggering notifications. Label keys
// and corresponding values can be used in notifications generated by this
// condition.
//
// Please see [the documentation on logs-based metric
// `valueExtractor`s](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.metrics#LogMetric.FIELDS.value_extractor)
// for syntax and examples.
map<string, string> label_extractors = 2;
}
// A condition type that allows alerting policies to be defined using
// [Monitoring Query Language](https://cloud.google.com/monitoring/mql).
message MonitoringQueryLanguageCondition {
// [Monitoring Query Language](https://cloud.google.com/monitoring/mql)
// query that outputs a boolean stream.
string query = 1;
// The amount of time that a time series must violate the
// threshold to be considered failing. Currently, only values
// that are a multiple of a minute--e.g., 0, 60, 120, or 300
// seconds--are supported. If an invalid value is given, an
// error will be returned. When choosing a duration, it is useful to
// keep in mind the frequency of the underlying time series data
// (which may also be affected by any alignments specified in the
// `aggregations` field); a good duration is long enough so that a single
// outlier does not generate spurious alerts, but short enough that
// unhealthy states are detected and alerted on quickly.
google.protobuf.Duration duration = 2;
// The number/percent of time series for which the comparison must hold
// in order for the condition to trigger. If unspecified, then the
// condition will trigger if the comparison is true for any of the
// time series that have been identified by `filter` and `aggregations`,
// or by the ratio, if `denominator_filter` and `denominator_aggregations`
// are specified.
Trigger trigger = 3;
// A condition control that determines how metric-threshold conditions
// are evaluated when data stops arriving.
EvaluationMissingData evaluation_missing_data = 4;
}
// A condition type that allows alerting policies to be defined using
// [Prometheus Query Language
// (PromQL)](https://prometheus.io/docs/prometheus/latest/querying/basics/).
//
// The PrometheusQueryLanguageCondition message contains information
// from a Prometheus alerting rule and its associated rule group.
//
// A Prometheus alerting rule is described
// [here](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/).
// The semantics of a Prometheus alerting rule is described
// [here](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#rule).
//
// A Prometheus rule group is described
// [here](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/).
// The semantics of a Prometheus rule group is described
// [here](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#rule_group).
//
// Because Cloud Alerting has no representation of a Prometheus rule
// group resource, we must embed the information of the parent rule
// group inside each of the conditions that refer to it. We must also
// update the contents of all Prometheus alerts in case the information
// of their rule group changes.
//
// The PrometheusQueryLanguageCondition protocol buffer combines the
// information of the corresponding rule group and alerting rule.
// The structure of the PrometheusQueryLanguageCondition protocol buffer
// does NOT mimic the structure of the Prometheus rule group and alerting
// rule YAML declarations. The PrometheusQueryLanguageCondition protocol
// buffer may change in the future to support future rule group and/or
// alerting rule features. There are no new such features at the present
// time (2023-06-26).
message PrometheusQueryLanguageCondition {
// Required. The PromQL expression to evaluate. Every evaluation cycle
// this expression is evaluated at the current time, and all resultant
// time series become pending/firing alerts. This field must not be empty.
string query = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. Alerts are considered firing once their PromQL expression was
// evaluated to be "true" for this long.
// Alerts whose PromQL expression was not evaluated to be "true" for
// long enough are considered pending.
// Must be a non-negative duration or missing.
// This field is optional. Its default value is zero.
google.protobuf.Duration duration = 2
[(google.api.field_behavior) = OPTIONAL];
// Optional. How often this rule should be evaluated.
// Must be a positive multiple of 30 seconds or missing.
// This field is optional. Its default value is 30 seconds.
// If this PrometheusQueryLanguageCondition was generated from a
// Prometheus alerting rule, then this value should be taken from the
// enclosing rule group.
google.protobuf.Duration evaluation_interval = 3
[(google.api.field_behavior) = OPTIONAL];
// Optional. Labels to add to or overwrite in the PromQL query result.
// Label names [must be
// valid](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
// Label values can be [templatized by using
// variables](https://cloud.google.com/monitoring/alerts/doc-variables#doc-vars).
// The only available variable names are the names of the labels in the
// PromQL result, including "__name__" and "value". "labels" may be empty.
map<string, string> labels = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. The rule group name of this alert in the corresponding
// Prometheus configuration file.
//
// Some external tools may require this field to be populated correctly
// in order to refer to the original Prometheus configuration file.
// The rule group name and the alert name are necessary to update the
// relevant AlertPolicies in case the definition of the rule group changes
// in the future.
//
// This field is optional. If this field is not empty, then it must
// contain a valid UTF-8 string.
// This field may not exceed 2048 Unicode characters in length.
string rule_group = 5 [(google.api.field_behavior) = OPTIONAL];
// Optional. The alerting rule name of this alert in the corresponding
// Prometheus configuration file.
//
// Some external tools may require this field to be populated correctly
// in order to refer to the original Prometheus configuration file.
// The rule group name and the alert name are necessary to update the
// relevant AlertPolicies in case the definition of the rule group changes
// in the future.
//
// This field is optional. If this field is not empty, then it must be a
// [valid Prometheus label
// name](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
// This field may not exceed 2048 Unicode characters in length.
string alert_rule = 6 [(google.api.field_behavior) = OPTIONAL];
// Optional. Whether to disable metric existence validation for this
// condition.
//
// This allows alerting policies to be defined on metrics that do not yet
// exist, improving advanced customer workflows such as configuring
// alerting policies using Terraform.
//
// Users with the `monitoring.alertPolicyViewer` role are able to see the
// name of the non-existent metric in the alerting policy condition.
bool disable_metric_validation = 7
[(google.api.field_behavior) = OPTIONAL];
}
// A condition that allows alerting policies to be defined using GoogleSQL.
// SQL conditions examine a sliding window of logs using GoogleSQL.
// Alert policies with SQL conditions may incur additional billing.
message SqlCondition {
// Used to schedule the query to run every so many minutes.
message Minutes {
// Required. Number of minutes between runs. The interval must be
// greater than or equal to 5 minutes and less than or equal to 1440
// minutes.
int32 periodicity = 1 [(google.api.field_behavior) = REQUIRED];
}
// Used to schedule the query to run every so many hours.
message Hourly {
// Required. The number of hours between runs. Must be greater than or
// equal to 1 hour and less than or equal to 48 hours.
int32 periodicity = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. The number of minutes after the hour (in UTC) to run the
// query. Must be greater than or equal to 0 minutes and less than or
// equal to 59 minutes. If left unspecified, then an arbitrary offset
// is used.
optional int32 minute_offset = 2
[(google.api.field_behavior) = OPTIONAL];
}
// Used to schedule the query to run every so many days.
message Daily {
// Required. The number of days between runs. Must be greater than or
// equal to 1 day and less than or equal to 31 days.
int32 periodicity = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. The time of day (in UTC) at which the query should run. If
// left unspecified, the server picks an arbitrary time of day and runs
// the query at the same time each day.
google.type.TimeOfDay execution_time = 2
[(google.api.field_behavior) = OPTIONAL];
}
// A test that checks if the number of rows in the result set
// violates some threshold.
message RowCountTest {
// Required. The comparison to apply between the number of rows returned
// by the query and the threshold.
ComparisonType comparison = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The value against which to compare the row count.
int64 threshold = 2 [(google.api.field_behavior) = REQUIRED];
}
// A test that uses an alerting result in a boolean column produced by
// the SQL query.
message BooleanTest {
// Required. The name of the column containing the boolean value. If the
// value in a row is NULL, that row is ignored.
string column = 1 [(google.api.field_behavior) = REQUIRED];
}
// Required. The Log Analytics SQL query to run, as a string. The query
// must conform to the required shape. Specifically, the query must not
// try to filter the input by time. A filter will automatically be
// applied to filter the input so that the query receives all rows
// received since the last time the query was run.
//
// For example, the following query extracts all log entries containing an
// HTTP request:
//
// SELECT
// timestamp, log_name, severity, http_request, resource, labels
// FROM
// my-project.global._Default._AllLogs
// WHERE
// http_request IS NOT NULL
string query = 1 [(google.api.field_behavior) = REQUIRED];
// The schedule indicates how often the query should be run.
oneof schedule {
// Schedule the query to execute every so many minutes.
Minutes minutes = 2;
// Schedule the query to execute every so many hours.
Hourly hourly = 3;
// Schedule the query to execute every so many days.
Daily daily = 4;
}
// The test to be run against the SQL result set.
oneof evaluate {
// Test the row count against a threshold.
RowCountTest row_count_test = 5;
// Test the boolean value in the indicated column.
BooleanTest boolean_test = 6;
}
}
// Required if the condition exists. The unique resource name for this
// condition. Its format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[POLICY_ID]/conditions/[CONDITION_ID]
//
// `[CONDITION_ID]` is assigned by Cloud Monitoring when the
// condition is created as part of a new or updated alerting policy.
//
// When calling the
// [alertPolicies.create][google.monitoring.v3.AlertPolicyService.CreateAlertPolicy]
// method, do not include the `name` field in the conditions of the
// requested alerting policy. Cloud Monitoring creates the
// condition identifiers and includes them in the new policy.
//
// When calling the
// [alertPolicies.update][google.monitoring.v3.AlertPolicyService.UpdateAlertPolicy]
// method to update a policy, including a condition `name` causes the
// existing condition to be updated. Conditions without names are added to
// the updated policy. Existing conditions are deleted if they are not
// updated.
//
// Best practice is to preserve `[CONDITION_ID]` if you make only small
// changes, such as those to condition thresholds, durations, or trigger
// values. Otherwise, treat the change as a new condition and let the
// existing condition be deleted.
string name = 12;
// A short name or phrase used to identify the condition in dashboards,
// notifications, and incidents. To avoid confusion, don't use the same
// display name for multiple conditions in the same policy.
string display_name = 6;
// Only one of the following condition types will be specified.
oneof condition {
// A condition that compares a time series against a threshold.
MetricThreshold condition_threshold = 1;
// A condition that checks that a time series continues to
// receive new data points.
MetricAbsence condition_absent = 2;
// A condition that checks for log messages matching given constraints. If
// set, no other conditions can be present.
LogMatch condition_matched_log = 20;
// A condition that uses the Monitoring Query Language to define
// alerts.
MonitoringQueryLanguageCondition condition_monitoring_query_language = 19;
// A condition that uses the Prometheus query language to define alerts.
PrometheusQueryLanguageCondition condition_prometheus_query_language = 21;
// A condition that periodically evaluates a SQL query result.
SqlCondition condition_sql = 22;
}
}
// Operators for combining conditions.
enum ConditionCombinerType {
// An unspecified combiner.
COMBINE_UNSPECIFIED = 0;
// Combine conditions using the logical `AND` operator. An
// incident is created only if all the conditions are met
// simultaneously. This combiner is satisfied if all conditions are
// met, even if they are met on completely different resources.
AND = 1;
// Combine conditions using the logical `OR` operator. An incident
// is created if any of the listed conditions is met.
OR = 2;
// Combine conditions using logical `AND` operator, but unlike the regular
// `AND` option, an incident is created only if all conditions are met
// simultaneously on at least one resource.
AND_WITH_MATCHING_RESOURCE = 3;
}
// Control over how the notification channels in `notification_channels`
// are notified when this alert fires.
message AlertStrategy {
// Control over the rate of notifications sent to this alerting policy's
// notification channels.
message NotificationRateLimit {
// Not more than one notification per `period`.
google.protobuf.Duration period = 1;
}
// Control when notifications will be sent out.
enum NotificationPrompt {
// No strategy specified. Treated as error.
NOTIFICATION_PROMPT_UNSPECIFIED = 0;
// Notify when an incident is opened.
OPENED = 1;
// Notify when an incident is closed.
CLOSED = 3;
}
// Control over how the notification channels in `notification_channels`
// are notified when this alert fires, on a per-channel basis.
message NotificationChannelStrategy {
// The full REST resource name for the notification channels that these
// settings apply to. Each of these correspond to the name field in one
// of the NotificationChannel objects referenced in the
// notification_channels field of this AlertPolicy.
// The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]
repeated string notification_channel_names = 1;
// The frequency at which to send reminder notifications for open
// incidents.
google.protobuf.Duration renotify_interval = 2;
}
// Required for log-based alerting policies, i.e. policies with a `LogMatch`
// condition.
//
// This limit is not implemented for alerting policies that do not have
// a LogMatch condition.
NotificationRateLimit notification_rate_limit = 1;
// For log-based alert policies, the notification prompts is always
// [OPENED]. For non log-based alert policies, the notification prompts can
// be [OPENED] or [OPENED, CLOSED].
repeated NotificationPrompt notification_prompts = 2;
// If an alerting policy that was active has no data for this long, any open
// incidents will close
google.protobuf.Duration auto_close = 3;
// Control how notifications will be sent out, on a per-channel basis.
repeated NotificationChannelStrategy notification_channel_strategy = 4;
}
// An enumeration of possible severity level for an alerting policy.
enum Severity {
// No severity is specified. This is the default value.
SEVERITY_UNSPECIFIED = 0;
// This is the highest severity level. Use this if the problem could
// cause significant damage or downtime.
CRITICAL = 1;
// This is the medium severity level. Use this if the problem could
// cause minor damage or downtime.
ERROR = 2;
// This is the lowest severity level. Use this if the problem is not causing
// any damage or downtime, but could potentially lead to a problem in the
// future.
WARNING = 3;
}
// Identifier. Required if the policy exists. The resource name for this
// policy. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[ALERT_POLICY_ID]
//
// `[ALERT_POLICY_ID]` is assigned by Cloud Monitoring when the policy
// is created. When calling the
// [alertPolicies.create][google.monitoring.v3.AlertPolicyService.CreateAlertPolicy]
// method, do not include the `name` field in the alerting policy passed as
// part of the request.
string name = 1 [(google.api.field_behavior) = IDENTIFIER];
// A short name or phrase used to identify the policy in dashboards,
// notifications, and incidents. To avoid confusion, don't use the same
// display name for multiple policies in the same project. The name is
// limited to 512 Unicode characters.
//
// The convention for the display_name of a PrometheusQueryLanguageCondition
// is "{rule group name}/{alert name}", where the {rule group name} and
// {alert name} should be taken from the corresponding Prometheus
// configuration file. This convention is not enforced.
// In any case the display_name is not a unique key of the AlertPolicy.
string display_name = 2;
// Documentation that is included with notifications and incidents related to
// this policy. Best practice is for the documentation to include information
// to help responders understand, mitigate, escalate, and correct the
// underlying problems detected by the alerting policy. Notification channels
// that have limited capacity might not show this documentation.
Documentation documentation = 13;
// User-supplied key/value data 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.
//
// Note that Prometheus {alert name} is a
// [valid Prometheus label
// names](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels),
// whereas Prometheus {rule group} is an unrestricted UTF-8 string.
// This means that they cannot be stored as-is in user labels, because
// they may contain characters that are not allowed in user-label values.
map<string, string> user_labels = 16;
// A list of conditions for the policy. The conditions are combined by AND or
// OR according to the `combiner` field. If the combined conditions evaluate
// to true, then an incident is created. A policy can have from one to six
// conditions.
// If `condition_time_series_query_language` is present, it must be the only
// `condition`.
// If `condition_monitoring_query_language` is present, it must be the only
// `condition`.
repeated Condition conditions = 12;
// How to combine the results of multiple conditions to determine if an
// incident should be opened.
// If `condition_time_series_query_language` is present, this must be
// `COMBINE_UNSPECIFIED`.
ConditionCombinerType combiner = 6;
// Whether or not the policy is enabled. On write, the default interpretation
// if unset is that the policy is enabled. On read, clients should not make
// any assumption about the state if it has not been populated. The
// field should always be populated on List and Get operations, unless
// a field projection has been specified that strips it out.
google.protobuf.BoolValue enabled = 17;
// Read-only description of how the alerting policy is invalid. This field is
// only set when the alerting policy is invalid. An invalid alerting policy
// will not generate incidents.
google.rpc.Status validity = 18;
// Identifies the notification channels to which notifications should be sent
// when incidents are opened or closed or when new violations occur on
// an already opened incident. Each element of this array corresponds to
// the `name` field in each of the
// [`NotificationChannel`][google.monitoring.v3.NotificationChannel]
// objects that are returned from the [`ListNotificationChannels`]
// [google.monitoring.v3.NotificationChannelService.ListNotificationChannels]
// method. The format of the entries in this field is:
//
// projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]
repeated string notification_channels = 14;
// A read-only record of the creation of the alerting policy. If provided
// in a call to create or update, this field will be ignored.
MutationRecord creation_record = 10;
// A read-only record of the most recent change to the alerting policy. If
// provided in a call to create or update, this field will be ignored.
MutationRecord mutation_record = 11;
// Control over how this alerting policy's notification channels are notified.
AlertStrategy alert_strategy = 21;
// Optional. The severity of an alerting policy indicates how important
// incidents generated by that policy are. The severity level will be
// displayed on the Incident detail page and in notifications.
Severity severity = 22 [(google.api.field_behavior) = OPTIONAL];
}

View file

@ -0,0 +1,258 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/alert.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "AlertServiceProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The AlertPolicyService API is used to manage (list, create, delete,
// edit) alert policies in Cloud Monitoring. An alerting policy is
// a description of the conditions under which some aspect of your
// system is considered to be "unhealthy" and the ways to notify
// people or services about this state. In addition to using this API, alert
// policies can also be managed through
// [Cloud Monitoring](https://cloud.google.com/monitoring/docs/),
// which can be reached by clicking the "Monitoring" tab in
// [Cloud console](https://console.cloud.google.com/).
service AlertPolicyService {
option (google.api.default_host) = "monitoring.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/monitoring,"
"https://www.googleapis.com/auth/monitoring.read";
// Lists the existing alerting policies for the workspace.
rpc ListAlertPolicies(ListAlertPoliciesRequest)
returns (ListAlertPoliciesResponse) {
option (google.api.http) = {
get: "/v3/{name=projects/*}/alertPolicies"
};
option (google.api.method_signature) = "name";
}
// Gets a single alerting policy.
rpc GetAlertPolicy(GetAlertPolicyRequest) returns (AlertPolicy) {
option (google.api.http) = {
get: "/v3/{name=projects/*/alertPolicies/*}"
};
option (google.api.method_signature) = "name";
}
// Creates a new alerting policy.
//
// Design your application to single-thread API calls that modify the state of
// alerting policies in a single project. This includes calls to
// CreateAlertPolicy, DeleteAlertPolicy and UpdateAlertPolicy.
rpc CreateAlertPolicy(CreateAlertPolicyRequest) returns (AlertPolicy) {
option (google.api.http) = {
post: "/v3/{name=projects/*}/alertPolicies"
body: "alert_policy"
};
option (google.api.method_signature) = "name,alert_policy";
}
// Deletes an alerting policy.
//
// Design your application to single-thread API calls that modify the state of
// alerting policies in a single project. This includes calls to
// CreateAlertPolicy, DeleteAlertPolicy and UpdateAlertPolicy.
rpc DeleteAlertPolicy(DeleteAlertPolicyRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v3/{name=projects/*/alertPolicies/*}"
};
option (google.api.method_signature) = "name";
}
// Updates an alerting policy. You can either replace the entire policy with
// a new one or replace only certain fields in the current alerting policy by
// specifying the fields to be updated via `updateMask`. Returns the
// updated alerting policy.
//
// Design your application to single-thread API calls that modify the state of
// alerting policies in a single project. This includes calls to
// CreateAlertPolicy, DeleteAlertPolicy and UpdateAlertPolicy.
rpc UpdateAlertPolicy(UpdateAlertPolicyRequest) returns (AlertPolicy) {
option (google.api.http) = {
patch: "/v3/{alert_policy.name=projects/*/alertPolicies/*}"
body: "alert_policy"
};
option (google.api.method_signature) = "update_mask,alert_policy";
}
}
// The protocol for the `CreateAlertPolicy` request.
message CreateAlertPolicyRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) in which
// to create the alerting policy. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
//
// Note that this field names the parent container in which the alerting
// policy will be written, not the name of the created policy. |name| must be
// a host project of a Metrics Scope, otherwise INVALID_ARGUMENT error will
// return. The alerting policy that is returned will have a name that contains
// a normalized representation of this name as a prefix but adds a suffix of
// the form `/alertPolicies/[ALERT_POLICY_ID]`, identifying the policy in the
// container.
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/AlertPolicy"
}
];
// Required. The requested alerting policy. You should omit the `name` field
// in this policy. The name will be returned in the new policy, including a
// new `[ALERT_POLICY_ID]` value.
AlertPolicy alert_policy = 2 [(google.api.field_behavior) = REQUIRED];
}
// The protocol for the `GetAlertPolicy` request.
message GetAlertPolicyRequest {
// Required. The alerting policy to retrieve. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[ALERT_POLICY_ID]
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/AlertPolicy"
}
];
}
// The protocol for the `ListAlertPolicies` request.
message ListAlertPoliciesRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) whose
// alert policies are to be listed. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
//
// Note that this field names the parent container in which the alerting
// policies to be listed are stored. To retrieve a single alerting policy
// by name, use the
// [GetAlertPolicy][google.monitoring.v3.AlertPolicyService.GetAlertPolicy]
// operation, instead.
string name = 4 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/AlertPolicy"
}
];
// Optional. If provided, this field specifies the criteria that must be met
// by alert policies to be included in the response.
//
// For more details, see [sorting and
// filtering](https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
string filter = 5 [(google.api.field_behavior) = OPTIONAL];
// Optional. A comma-separated list of fields by which to sort the result.
// Supports the same set of field references as the `filter` field. Entries
// can be prefixed with a minus sign to sort by the field in descending order.
//
// For more details, see [sorting and
// filtering](https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
string order_by = 6 [(google.api.field_behavior) = OPTIONAL];
// Optional. The maximum number of results to return in a single response.
int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. If this field is not empty then it must contain the
// `nextPageToken` value returned by a previous call to this method. Using
// this field causes the method to return more results from the previous
// method call.
string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}
// The protocol for the `ListAlertPolicies` response.
message ListAlertPoliciesResponse {
// The returned alert policies.
repeated AlertPolicy alert_policies = 3;
// If there might be more results than were returned, then this field is set
// to a non-empty value. To see the additional results,
// use that value as `page_token` in the next call to this method.
string next_page_token = 2;
// The total number of alert policies in all pages. This number is only an
// estimate, and may change in subsequent pages. https://aip.dev/158
int32 total_size = 4;
}
// The protocol for the `UpdateAlertPolicy` request.
message UpdateAlertPolicyRequest {
// Optional. A list of alerting policy field names. If this field is not
// empty, each listed field in the existing alerting policy is set to the
// value of the corresponding field in the supplied policy (`alert_policy`),
// or to the field's default value if the field is not in the supplied
// alerting policy. Fields not listed retain their previous value.
//
// Examples of valid field masks include `display_name`, `documentation`,
// `documentation.content`, `documentation.mime_type`, `user_labels`,
// `user_label.nameofkey`, `enabled`, `conditions`, `combiner`, etc.
//
// If this field is empty, then the supplied alerting policy replaces the
// existing policy. It is the same as deleting the existing policy and
// adding the supplied policy, except for the following:
//
// + The new policy will have the same `[ALERT_POLICY_ID]` as the former
// policy. This gives you continuity with the former policy in your
// notifications and incidents.
// + Conditions in the new policy will keep their former `[CONDITION_ID]` if
// the supplied condition includes the `name` field with that
// `[CONDITION_ID]`. If the supplied condition omits the `name` field,
// then a new `[CONDITION_ID]` is created.
google.protobuf.FieldMask update_mask = 2
[(google.api.field_behavior) = OPTIONAL];
// Required. The updated alerting policy or the updated values for the
// fields listed in `update_mask`.
// If `update_mask` is not empty, any fields in this policy that are
// not in `update_mask` are ignored.
AlertPolicy alert_policy = 3 [(google.api.field_behavior) = REQUIRED];
}
// The protocol for the `DeleteAlertPolicy` request.
message DeleteAlertPolicyRequest {
// Required. The alerting policy to delete. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[ALERT_POLICY_ID]
//
// For more information, see [AlertPolicy][google.monitoring.v3.AlertPolicy].
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/AlertPolicy"
}
];
}

View file

@ -0,0 +1,499 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/distribution.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "CommonProto";
option java_package = "com.google.monitoring.v3";
option objc_class_prefix = "GMON";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// A single strongly-typed value.
message TypedValue {
// The typed value field.
oneof value {
// A Boolean value: `true` or `false`.
bool bool_value = 1;
// A 64-bit integer. Its range is approximately &plusmn;9.2x10<sup>18</sup>.
int64 int64_value = 2;
// A 64-bit double-precision floating-point number. Its magnitude
// is approximately &plusmn;10<sup>&plusmn;300</sup> and it has 16
// significant digits of precision.
double double_value = 3;
// A variable-length string value.
string string_value = 4;
// A distribution value.
google.api.Distribution distribution_value = 5;
}
}
// Describes a time interval:
//
// * Reads: A half-open time interval. It includes the end time but
// excludes the start time: `(startTime, endTime]`. The start time
// must be specified, must be earlier than the end time, and should be
// no older than the data retention period for the metric.
// * Writes: A closed time interval. It extends from the start time to the end
// time,
// and includes both: `[startTime, endTime]`. Valid time intervals
// depend on the
// [`MetricKind`](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.metricDescriptors#MetricKind)
// of the metric value. The end time must not be earlier than the start
// time, and the end time must not be more than 25 hours in the past or more
// than five minutes in the future.
// * For `GAUGE` metrics, the `startTime` value is technically optional; if
// no value is specified, the start time defaults to the value of the
// end time, and the interval represents a single point in time. If both
// start and end times are specified, they must be identical. Such an
// interval is valid only for `GAUGE` metrics, which are point-in-time
// measurements. The end time of a new interval must be at least a
// millisecond after the end time of the previous interval.
// * For `DELTA` metrics, the start time and end time must specify a
// non-zero interval, with subsequent points specifying contiguous and
// non-overlapping intervals. For `DELTA` metrics, the start time of
// the next interval must be at least a millisecond after the end time
// of the previous interval.
// * For `CUMULATIVE` metrics, the start time and end time must specify a
// non-zero interval, with subsequent points specifying the same
// start time and increasing end times, until an event resets the
// cumulative value to zero and sets a new start time for the following
// points. The new start time must be at least a millisecond after the
// end time of the previous interval.
// * The start time of a new interval must be at least a millisecond after
// the
// end time of the previous interval because intervals are closed. If the
// start time of a new interval is the same as the end time of the
// previous interval, then data written at the new start time could
// overwrite data written at the previous end time.
message TimeInterval {
// Required. The end of the time interval.
google.protobuf.Timestamp end_time = 2;
// Optional. The beginning of the time interval. The default value
// for the start time is the end time. The start time must not be
// later than the end time.
google.protobuf.Timestamp start_time = 1;
}
// Describes how to combine multiple time series to provide a different view of
// the data. Aggregation of time series is done in two steps. First, each time
// series in the set is _aligned_ to the same time interval boundaries, then the
// set of time series is optionally _reduced_ in number.
//
// Alignment consists of applying the `per_series_aligner` operation
// to each time series after its data has been divided into regular
// `alignment_period` time intervals. This process takes _all_ of the data
// points in an alignment period, applies a mathematical transformation such as
// averaging, minimum, maximum, delta, etc., and converts them into a single
// data point per period.
//
// Reduction is when the aligned and transformed time series can optionally be
// combined, reducing the number of time series through similar mathematical
// transformations. Reduction involves applying a `cross_series_reducer` to
// all the time series, optionally sorting the time series into subsets with
// `group_by_fields`, and applying the reducer to each subset.
//
// The raw time series data can contain a huge amount of information from
// multiple sources. Alignment and reduction transforms this mass of data into
// a more manageable and representative collection of data, for example "the
// 95% latency across the average of all tasks in a cluster". This
// representative data can be more easily graphed and comprehended, and the
// individual time series data is still available for later drilldown. For more
// details, see [Filtering and
// aggregation](https://cloud.google.com/monitoring/api/v3/aggregation).
message Aggregation {
// The `Aligner` specifies the operation that will be applied to the data
// points in each alignment period in a time series. Except for
// `ALIGN_NONE`, which specifies that no operation be applied, each alignment
// operation replaces the set of data values in each alignment period with
// a single value: the result of applying the operation to the data values.
// An aligned time series has a single data value at the end of each
// `alignment_period`.
//
// An alignment operation can change the data type of the values, too. For
// example, if you apply a counting operation to boolean values, the data
// `value_type` in the original time series is `BOOLEAN`, but the `value_type`
// in the aligned result is `INT64`.
enum Aligner {
// No alignment. Raw data is returned. Not valid if cross-series reduction
// is requested. The `value_type` of the result is the same as the
// `value_type` of the input.
ALIGN_NONE = 0;
// Align and convert to
// [DELTA][google.api.MetricDescriptor.MetricKind.DELTA].
// The output is `delta = y1 - y0`.
//
// This alignment is valid for
// [CUMULATIVE][google.api.MetricDescriptor.MetricKind.CUMULATIVE] and
// `DELTA` metrics. If the selected alignment period results in periods
// with no data, then the aligned value for such a period is created by
// interpolation. The `value_type` of the aligned result is the same as
// the `value_type` of the input.
ALIGN_DELTA = 1;
// Align and convert to a rate. The result is computed as
// `rate = (y1 - y0)/(t1 - t0)`, or "delta over time".
// Think of this aligner as providing the slope of the line that passes
// through the value at the start and at the end of the `alignment_period`.
//
// This aligner is valid for `CUMULATIVE`
// and `DELTA` metrics with numeric values. If the selected alignment
// period results in periods with no data, then the aligned value for
// such a period is created by interpolation. The output is a `GAUGE`
// metric with `value_type` `DOUBLE`.
//
// If, by "rate", you mean "percentage change", see the
// `ALIGN_PERCENT_CHANGE` aligner instead.
ALIGN_RATE = 2;
// Align by interpolating between adjacent points around the alignment
// period boundary. This aligner is valid for `GAUGE` metrics with
// numeric values. The `value_type` of the aligned result is the same as the
// `value_type` of the input.
ALIGN_INTERPOLATE = 3;
// Align by moving the most recent data point before the end of the
// alignment period to the boundary at the end of the alignment
// period. This aligner is valid for `GAUGE` metrics. The `value_type` of
// the aligned result is the same as the `value_type` of the input.
ALIGN_NEXT_OLDER = 4;
// Align the time series by returning the minimum value in each alignment
// period. This aligner is valid for `GAUGE` and `DELTA` metrics with
// numeric values. The `value_type` of the aligned result is the same as
// the `value_type` of the input.
ALIGN_MIN = 10;
// Align the time series by returning the maximum value in each alignment
// period. This aligner is valid for `GAUGE` and `DELTA` metrics with
// numeric values. The `value_type` of the aligned result is the same as
// the `value_type` of the input.
ALIGN_MAX = 11;
// Align the time series by returning the mean value in each alignment
// period. This aligner is valid for `GAUGE` and `DELTA` metrics with
// numeric values. The `value_type` of the aligned result is `DOUBLE`.
ALIGN_MEAN = 12;
// Align the time series by returning the number of values in each alignment
// period. This aligner is valid for `GAUGE` and `DELTA` metrics with
// numeric or Boolean values. The `value_type` of the aligned result is
// `INT64`.
ALIGN_COUNT = 13;
// Align the time series by returning the sum of the values in each
// alignment period. This aligner is valid for `GAUGE` and `DELTA`
// metrics with numeric and distribution values. The `value_type` of the
// aligned result is the same as the `value_type` of the input.
ALIGN_SUM = 14;
// Align the time series by returning the standard deviation of the values
// in each alignment period. This aligner is valid for `GAUGE` and
// `DELTA` metrics with numeric values. The `value_type` of the output is
// `DOUBLE`.
ALIGN_STDDEV = 15;
// Align the time series by returning the number of `True` values in
// each alignment period. This aligner is valid for `GAUGE` metrics with
// Boolean values. The `value_type` of the output is `INT64`.
ALIGN_COUNT_TRUE = 16;
// Align the time series by returning the number of `False` values in
// each alignment period. This aligner is valid for `GAUGE` metrics with
// Boolean values. The `value_type` of the output is `INT64`.
ALIGN_COUNT_FALSE = 24;
// Align the time series by returning the ratio of the number of `True`
// values to the total number of values in each alignment period. This
// aligner is valid for `GAUGE` metrics with Boolean values. The output
// value is in the range [0.0, 1.0] and has `value_type` `DOUBLE`.
ALIGN_FRACTION_TRUE = 17;
// Align the time series by using [percentile
// aggregation](https://en.wikipedia.org/wiki/Percentile). The resulting
// data point in each alignment period is the 99th percentile of all data
// points in the period. This aligner is valid for `GAUGE` and `DELTA`
// metrics with distribution values. The output is a `GAUGE` metric with
// `value_type` `DOUBLE`.
ALIGN_PERCENTILE_99 = 18;
// Align the time series by using [percentile
// aggregation](https://en.wikipedia.org/wiki/Percentile). The resulting
// data point in each alignment period is the 95th percentile of all data
// points in the period. This aligner is valid for `GAUGE` and `DELTA`
// metrics with distribution values. The output is a `GAUGE` metric with
// `value_type` `DOUBLE`.
ALIGN_PERCENTILE_95 = 19;
// Align the time series by using [percentile
// aggregation](https://en.wikipedia.org/wiki/Percentile). The resulting
// data point in each alignment period is the 50th percentile of all data
// points in the period. This aligner is valid for `GAUGE` and `DELTA`
// metrics with distribution values. The output is a `GAUGE` metric with
// `value_type` `DOUBLE`.
ALIGN_PERCENTILE_50 = 20;
// Align the time series by using [percentile
// aggregation](https://en.wikipedia.org/wiki/Percentile). The resulting
// data point in each alignment period is the 5th percentile of all data
// points in the period. This aligner is valid for `GAUGE` and `DELTA`
// metrics with distribution values. The output is a `GAUGE` metric with
// `value_type` `DOUBLE`.
ALIGN_PERCENTILE_05 = 21;
// Align and convert to a percentage change. This aligner is valid for
// `GAUGE` and `DELTA` metrics with numeric values. This alignment returns
// `((current - previous)/previous) * 100`, where the value of `previous` is
// determined based on the `alignment_period`.
//
// If the values of `current` and `previous` are both 0, then the returned
// value is 0. If only `previous` is 0, the returned value is infinity.
//
// A 10-minute moving mean is computed at each point of the alignment period
// prior to the above calculation to smooth the metric and prevent false
// positives from very short-lived spikes. The moving mean is only
// applicable for data whose values are `>= 0`. Any values `< 0` are
// treated as a missing datapoint, and are ignored. While `DELTA`
// metrics are accepted by this alignment, special care should be taken that
// the values for the metric will always be positive. The output is a
// `GAUGE` metric with `value_type` `DOUBLE`.
ALIGN_PERCENT_CHANGE = 23;
}
// A Reducer operation describes how to aggregate data points from multiple
// time series into a single time series, where the value of each data point
// in the resulting series is a function of all the already aligned values in
// the input time series.
enum Reducer {
// No cross-time series reduction. The output of the `Aligner` is
// returned.
REDUCE_NONE = 0;
// Reduce by computing the mean value across time series for each
// alignment period. This reducer is valid for
// [DELTA][google.api.MetricDescriptor.MetricKind.DELTA] and
// [GAUGE][google.api.MetricDescriptor.MetricKind.GAUGE] metrics with
// numeric or distribution values. The `value_type` of the output is
// [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE].
REDUCE_MEAN = 1;
// Reduce by computing the minimum value across time series for each
// alignment period. This reducer is valid for `DELTA` and `GAUGE` metrics
// with numeric values. The `value_type` of the output is the same as the
// `value_type` of the input.
REDUCE_MIN = 2;
// Reduce by computing the maximum value across time series for each
// alignment period. This reducer is valid for `DELTA` and `GAUGE` metrics
// with numeric values. The `value_type` of the output is the same as the
// `value_type` of the input.
REDUCE_MAX = 3;
// Reduce by computing the sum across time series for each
// alignment period. This reducer is valid for `DELTA` and `GAUGE` metrics
// with numeric and distribution values. The `value_type` of the output is
// the same as the `value_type` of the input.
REDUCE_SUM = 4;
// Reduce by computing the standard deviation across time series
// for each alignment period. This reducer is valid for `DELTA` and
// `GAUGE` metrics with numeric or distribution values. The `value_type`
// of the output is `DOUBLE`.
REDUCE_STDDEV = 5;
// Reduce by computing the number of data points across time series
// for each alignment period. This reducer is valid for `DELTA` and
// `GAUGE` metrics of numeric, Boolean, distribution, and string
// `value_type`. The `value_type` of the output is `INT64`.
REDUCE_COUNT = 6;
// Reduce by computing the number of `True`-valued data points across time
// series for each alignment period. This reducer is valid for `DELTA` and
// `GAUGE` metrics of Boolean `value_type`. The `value_type` of the output
// is `INT64`.
REDUCE_COUNT_TRUE = 7;
// Reduce by computing the number of `False`-valued data points across time
// series for each alignment period. This reducer is valid for `DELTA` and
// `GAUGE` metrics of Boolean `value_type`. The `value_type` of the output
// is `INT64`.
REDUCE_COUNT_FALSE = 15;
// Reduce by computing the ratio of the number of `True`-valued data points
// to the total number of data points for each alignment period. This
// reducer is valid for `DELTA` and `GAUGE` metrics of Boolean `value_type`.
// The output value is in the range [0.0, 1.0] and has `value_type`
// `DOUBLE`.
REDUCE_FRACTION_TRUE = 8;
// Reduce by computing the [99th
// percentile](https://en.wikipedia.org/wiki/Percentile) of data points
// across time series for each alignment period. This reducer is valid for
// `GAUGE` and `DELTA` metrics of numeric and distribution type. The value
// of the output is `DOUBLE`.
REDUCE_PERCENTILE_99 = 9;
// Reduce by computing the [95th
// percentile](https://en.wikipedia.org/wiki/Percentile) of data points
// across time series for each alignment period. This reducer is valid for
// `GAUGE` and `DELTA` metrics of numeric and distribution type. The value
// of the output is `DOUBLE`.
REDUCE_PERCENTILE_95 = 10;
// Reduce by computing the [50th
// percentile](https://en.wikipedia.org/wiki/Percentile) of data points
// across time series for each alignment period. This reducer is valid for
// `GAUGE` and `DELTA` metrics of numeric and distribution type. The value
// of the output is `DOUBLE`.
REDUCE_PERCENTILE_50 = 11;
// Reduce by computing the [5th
// percentile](https://en.wikipedia.org/wiki/Percentile) of data points
// across time series for each alignment period. This reducer is valid for
// `GAUGE` and `DELTA` metrics of numeric and distribution type. The value
// of the output is `DOUBLE`.
REDUCE_PERCENTILE_05 = 12;
}
// The `alignment_period` specifies a time interval, in seconds, that is used
// to divide the data in all the
// [time series][google.monitoring.v3.TimeSeries] into consistent blocks of
// time. This will be done before the per-series aligner can be applied to
// the data.
//
// The value must be at least 60 seconds. If a per-series
// aligner other than `ALIGN_NONE` is specified, this field is required or an
// error is returned. If no per-series aligner is specified, or the aligner
// `ALIGN_NONE` is specified, then this field is ignored.
//
// The maximum value of the `alignment_period` is 104 weeks (2 years) for
// charts, and 90,000 seconds (25 hours) for alerting policies.
google.protobuf.Duration alignment_period = 1;
// An `Aligner` describes how to bring the data points in a single
// time series into temporal alignment. Except for `ALIGN_NONE`, all
// alignments cause all the data points in an `alignment_period` to be
// mathematically grouped together, resulting in a single data point for
// each `alignment_period` with end timestamp at the end of the period.
//
// Not all alignment operations may be applied to all time series. The valid
// choices depend on the `metric_kind` and `value_type` of the original time
// series. Alignment can change the `metric_kind` or the `value_type` of
// the time series.
//
// Time series data must be aligned in order to perform cross-time
// series reduction. If `cross_series_reducer` is specified, then
// `per_series_aligner` must be specified and not equal to `ALIGN_NONE`
// and `alignment_period` must be specified; otherwise, an error is
// returned.
Aligner per_series_aligner = 2;
// The reduction operation to be used to combine time series into a single
// time series, where the value of each data point in the resulting series is
// a function of all the already aligned values in the input time series.
//
// Not all reducer operations can be applied to all time series. The valid
// choices depend on the `metric_kind` and the `value_type` of the original
// time series. Reduction can yield a time series with a different
// `metric_kind` or `value_type` than the input time series.
//
// Time series data must first be aligned (see `per_series_aligner`) in order
// to perform cross-time series reduction. If `cross_series_reducer` is
// specified, then `per_series_aligner` must be specified, and must not be
// `ALIGN_NONE`. An `alignment_period` must also be specified; otherwise, an
// error is returned.
Reducer cross_series_reducer = 4;
// The set of fields to preserve when `cross_series_reducer` is
// specified. The `group_by_fields` determine how the time series are
// partitioned into subsets prior to applying the aggregation
// operation. Each subset contains time series that have the same
// value for each of the grouping fields. Each individual time
// series is a member of exactly one subset. The
// `cross_series_reducer` is applied to each subset of time series.
// It is not possible to reduce across different resource types, so
// this field implicitly contains `resource.type`. Fields not
// specified in `group_by_fields` are aggregated away. If
// `group_by_fields` is not specified and all the time series have
// the same resource type, then the time series are aggregated into
// a single output time series. If `cross_series_reducer` is not
// defined, this field is ignored.
repeated string group_by_fields = 5;
}
// Specifies an ordering relationship on two arguments, called `left` and
// `right`.
enum ComparisonType {
// No ordering relationship is specified.
COMPARISON_UNSPECIFIED = 0;
// True if the left argument is greater than the right argument.
COMPARISON_GT = 1;
// True if the left argument is greater than or equal to the right argument.
COMPARISON_GE = 2;
// True if the left argument is less than the right argument.
COMPARISON_LT = 3;
// True if the left argument is less than or equal to the right argument.
COMPARISON_LE = 4;
// True if the left argument is equal to the right argument.
COMPARISON_EQ = 5;
// True if the left argument is not equal to the right argument.
COMPARISON_NE = 6;
}
// The tier of service for a Metrics Scope. Please see the
// [service tiers
// documentation](https://cloud.google.com/monitoring/workspaces/tiers) for more
// details.
enum ServiceTier {
option deprecated = true;
// An invalid sentinel value, used to indicate that a tier has not
// been provided explicitly.
SERVICE_TIER_UNSPECIFIED = 0;
// The Cloud Monitoring Basic tier, a free tier of service that provides basic
// features, a moderate allotment of logs, and access to built-in metrics.
// A number of features are not available in this tier. For more details,
// see [the service tiers
// documentation](https://cloud.google.com/monitoring/workspaces/tiers).
SERVICE_TIER_BASIC = 1;
// The Cloud Monitoring Premium tier, a higher, more expensive tier of service
// that provides access to all Cloud Monitoring features, lets you use Cloud
// Monitoring with AWS accounts, and has a larger allotments for logs and
// metrics. For more details, see [the service tiers
// documentation](https://cloud.google.com/monitoring/workspaces/tiers).
SERVICE_TIER_PREMIUM = 2;
}

View file

@ -0,0 +1,46 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "DroppedLabelsProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// A set of (label, value) pairs that were removed from a Distribution
// time series during aggregation and then added as an attachment to a
// Distribution.Exemplar.
//
// The full label set for the exemplars is constructed by using the dropped
// pairs in combination with the label values that remain on the aggregated
// Distribution time series. The constructed full label set can be used to
// identify the specific entity, such as the instance or job, which might be
// contributing to a long-tail. However, with dropped labels, the storage
// requirements are reduced because only the aggregated distribution values for
// a large group of time series are stored.
//
// Note that there are no guarantees on ordering of the labels from
// exemplar-to-exemplar and from distribution-to-distribution in the same
// stream, and there may be duplicates. It is up to clients to resolve any
// ambiguities.
message DroppedLabels {
// Map from label to its value, for all labels dropped in any aggregation.
map<string, string> label = 1;
}

View file

@ -0,0 +1,90 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/resource.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "GroupProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The description of a dynamic collection of monitored resources. Each group
// has a filter that is matched against monitored resources and their associated
// metadata. If a group's filter matches an available monitored resource, then
// that resource is a member of that group. Groups can contain any number of
// monitored resources, and each monitored resource can be a member of any
// number of groups.
//
// Groups can be nested in parent-child hierarchies. The `parentName` field
// identifies an optional parent for each group. If a group has a parent, then
// the only monitored resources available to be matched by the group's filter
// are the resources contained in the parent group. In other words, a group
// contains the monitored resources that match its filter and the filters of all
// the group's ancestors. A group without a parent can contain any monitored
// resource.
//
// For example, consider an infrastructure running a set of instances with two
// user-defined tags: `"environment"` and `"role"`. A parent group has a filter,
// `environment="production"`. A child of that parent group has a filter,
// `role="transcoder"`. The parent group contains all instances in the
// production environment, regardless of their roles. The child group contains
// instances that have the transcoder role *and* are in the production
// environment.
//
// The monitored resources contained in a group can change at any moment,
// depending on what resources exist and what filters are associated with the
// group and its ancestors.
message Group {
option (google.api.resource) = {
type: "monitoring.googleapis.com/Group"
pattern: "projects/{project}/groups/{group}"
pattern: "organizations/{organization}/groups/{group}"
pattern: "folders/{folder}/groups/{group}"
pattern: "*"
};
// Output only. The name of this group. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
//
// When creating a group, this field is ignored and a new name is created
// consisting of the project specified in the call to `CreateGroup`
// and a unique `[GROUP_ID]` that is generated automatically.
string name = 1;
// A user-assigned name for this group, used only for display purposes.
string display_name = 2;
// The name of the group's parent, if it has one. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
//
// For groups with no parent, `parent_name` is the empty string, `""`.
string parent_name = 3;
// The filter used to determine which monitored resources belong to this
// group.
string filter = 5;
// If true, the members of this group are considered to be a cluster.
// The system can perform additional analysis on groups that are clusters.
bool is_cluster = 6;
}

View file

@ -0,0 +1,294 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/monitored_resource.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/common.proto";
import "google/monitoring/v3/group.proto";
import "google/protobuf/empty.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "GroupServiceProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The Group API lets you inspect and manage your
// [groups](#google.monitoring.v3.Group).
//
// A group is a named filter that is used to identify
// a collection of monitored resources. Groups are typically used to
// mirror the physical and/or logical topology of the environment.
// Because group membership is computed dynamically, monitored
// resources that are started in the future are automatically placed
// in matching groups. By using a group to name monitored resources in,
// for example, an alert policy, the target of that alert policy is
// updated automatically as monitored resources are added and removed
// from the infrastructure.
service GroupService {
option (google.api.default_host) = "monitoring.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/monitoring,"
"https://www.googleapis.com/auth/monitoring.read";
// Lists the existing groups.
rpc ListGroups(ListGroupsRequest) returns (ListGroupsResponse) {
option (google.api.http) = {
get: "/v3/{name=projects/*}/groups"
};
option (google.api.method_signature) = "name";
}
// Gets a single group.
rpc GetGroup(GetGroupRequest) returns (Group) {
option (google.api.http) = {
get: "/v3/{name=projects/*/groups/*}"
};
option (google.api.method_signature) = "name";
}
// Creates a new group.
rpc CreateGroup(CreateGroupRequest) returns (Group) {
option (google.api.http) = {
post: "/v3/{name=projects/*}/groups"
body: "group"
};
option (google.api.method_signature) = "name,group";
}
// Updates an existing group.
// You can change any group attributes except `name`.
rpc UpdateGroup(UpdateGroupRequest) returns (Group) {
option (google.api.http) = {
put: "/v3/{group.name=projects/*/groups/*}"
body: "group"
};
option (google.api.method_signature) = "group";
}
// Deletes an existing group.
rpc DeleteGroup(DeleteGroupRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v3/{name=projects/*/groups/*}"
};
option (google.api.method_signature) = "name";
}
// Lists the monitored resources that are members of a group.
rpc ListGroupMembers(ListGroupMembersRequest)
returns (ListGroupMembersResponse) {
option (google.api.http) = {
get: "/v3/{name=projects/*/groups/*}/members"
};
option (google.api.method_signature) = "name";
}
}
// The `ListGroup` request.
message ListGroupsRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) whose
// groups are to be listed. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string name = 7 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/Group"
}
];
// An optional filter consisting of a single group name. The filters limit
// the groups returned based on their parent-child relationship with the
// specified group. If no filter is specified, all groups are returned.
oneof filter {
// A group name. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
//
// Returns groups whose `parent_name` field contains the group
// name. If no groups have this parent, the results are empty.
string children_of_group = 2 [(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Group"
}];
// A group name. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
//
// Returns groups that are ancestors of the specified group.
// The groups are returned in order, starting with the immediate parent and
// ending with the most distant ancestor. If the specified group has no
// immediate parent, the results are empty.
string ancestors_of_group = 3 [(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Group"
}];
// A group name. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
//
// Returns the descendants of the specified group. This is a superset of
// the results returned by the `children_of_group` filter, and includes
// children-of-children, and so forth.
string descendants_of_group = 4 [(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Group"
}];
}
// A positive number that is the maximum number of results to return.
int32 page_size = 5;
// If this field is not empty then it must contain the `next_page_token` value
// returned by a previous call to this method. Using this field causes the
// method to return additional results from the previous method call.
string page_token = 6;
}
// The `ListGroups` response.
message ListGroupsResponse {
// The groups that match the specified filters.
repeated Group group = 1;
// If there are more results than have been returned, then this field is set
// to a non-empty value. To see the additional results,
// use that value as `page_token` in the next call to this method.
string next_page_token = 2;
}
// The `GetGroup` request.
message GetGroupRequest {
// Required. The group to retrieve. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Group"
}
];
}
// The `CreateGroup` request.
message CreateGroupRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) in which
// to create the group. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string name = 4 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/Group"
}
];
// Required. A group definition. It is an error to define the `name` field
// because the system assigns the name.
Group group = 2 [(google.api.field_behavior) = REQUIRED];
// If true, validate this request but do not create the group.
bool validate_only = 3;
}
// The `UpdateGroup` request.
message UpdateGroupRequest {
// Required. The new definition of the group. All fields of the existing
// group, excepting `name`, are replaced with the corresponding fields of this
// group.
Group group = 2 [(google.api.field_behavior) = REQUIRED];
// If true, validate this request but do not update the existing group.
bool validate_only = 3;
}
// The `DeleteGroup` request. The default behavior is to be able to delete a
// single group without any descendants.
message DeleteGroupRequest {
// Required. The group to delete. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Group"
}
];
// If this field is true, then the request means to delete a group with all
// its descendants. Otherwise, the request means to delete a group only when
// it has no descendants. The default value is false.
bool recursive = 4;
}
// The `ListGroupMembers` request.
message ListGroupMembersRequest {
// Required. The group whose members are listed. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
string name = 7 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Group"
}
];
// A positive number that is the maximum number of results to return.
int32 page_size = 3;
// If this field is not empty then it must contain the `next_page_token` value
// returned by a previous call to this method. Using this field causes the
// method to return additional results from the previous method call.
string page_token = 4;
// An optional [list
// filter](https://cloud.google.com/monitoring/api/learn_more#filtering)
// describing the members to be returned. The filter may reference the type,
// labels, and metadata of monitored resources that comprise the group. For
// example, to return only resources representing Compute Engine VM instances,
// use this filter:
//
// `resource.type = "gce_instance"`
string filter = 5;
// An optional time interval for which results should be returned. Only
// members that were part of the group during the specified interval are
// included in the response. If no interval is provided then the group
// membership over the last minute is returned.
TimeInterval interval = 6;
}
// The `ListGroupMembers` response.
message ListGroupMembersResponse {
// A set of monitored resources in the group.
repeated google.api.MonitoredResource members = 1;
// If there are more results than have been returned, then this field is
// set to a non-empty value. To see the additional results, use that value as
// `page_token` in the next call to this method.
string next_page_token = 2;
// The total number of elements matching this request.
int32 total_size = 3;
}

View file

@ -0,0 +1,246 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/label.proto";
import "google/api/metric.proto";
import "google/api/monitored_resource.proto";
import "google/monitoring/v3/common.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "MetricProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// A single data point in a time series.
message Point {
// The time interval to which the data point applies. For `GAUGE` metrics,
// the start time is optional, but if it is supplied, it must equal the
// end time. For `DELTA` metrics, the start
// and end time should specify a non-zero interval, with subsequent points
// specifying contiguous and non-overlapping intervals. For `CUMULATIVE`
// metrics, the start and end time should specify a non-zero interval, with
// subsequent points specifying the same start time and increasing end times,
// until an event resets the cumulative value to zero and sets a new start
// time for the following points.
TimeInterval interval = 1;
// The value of the data point.
TypedValue value = 2;
}
// A collection of data points that describes the time-varying values
// of a metric. A time series is identified by a combination of a
// fully-specified monitored resource and a fully-specified metric.
// This type is used for both listing and creating time series.
message TimeSeries {
// The associated metric. A fully-specified metric used to identify the time
// series.
google.api.Metric metric = 1;
// The associated monitored resource. Custom metrics can use only certain
// monitored resource types in their time series data. For more information,
// see [Monitored resources for custom
// metrics](https://cloud.google.com/monitoring/custom-metrics/creating-metrics#custom-metric-resources).
google.api.MonitoredResource resource = 2;
// Output only. The associated monitored resource metadata. When reading a
// time series, this field will include metadata labels that are explicitly
// named in the reduction. When creating a time series, this field is ignored.
google.api.MonitoredResourceMetadata metadata = 7;
// The metric kind of the time series. When listing time series, this metric
// kind might be different from the metric kind of the associated metric if
// this time series is an alignment or reduction of other time series.
//
// When creating a time series, this field is optional. If present, it must be
// the same as the metric kind of the associated metric. If the associated
// metric's descriptor must be auto-created, then this field specifies the
// metric kind of the new descriptor and must be either `GAUGE` (the default)
// or `CUMULATIVE`.
google.api.MetricDescriptor.MetricKind metric_kind = 3;
// The value type of the time series. When listing time series, this value
// type might be different from the value type of the associated metric if
// this time series is an alignment or reduction of other time series.
//
// When creating a time series, this field is optional. If present, it must be
// the same as the type of the data in the `points` field.
google.api.MetricDescriptor.ValueType value_type = 4;
// The data points of this time series. When listing time series, points are
// returned in reverse time order.
//
// When creating a time series, this field must contain exactly one point and
// the point's type must be the same as the value type of the associated
// metric. If the associated metric's descriptor must be auto-created, then
// the value type of the descriptor is determined by the point's type, which
// must be `BOOL`, `INT64`, `DOUBLE`, or `DISTRIBUTION`.
repeated Point points = 5;
// The units in which the metric value is reported. It is only applicable
// if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit`
// defines the representation of the stored metric values. This field can only
// be changed through CreateTimeSeries when it is empty.
string unit = 8;
// Input only. A detailed description of the time series that will be
// associated with the
// [google.api.MetricDescriptor][google.api.MetricDescriptor] for the metric.
// Once set, this field cannot be changed through CreateTimeSeries.
string description = 9;
}
// A descriptor for the labels and points in a time series.
message TimeSeriesDescriptor {
// A descriptor for the value columns in a data point.
message ValueDescriptor {
// The value key.
string key = 1;
// The value type.
google.api.MetricDescriptor.ValueType value_type = 2;
// The value stream kind.
google.api.MetricDescriptor.MetricKind metric_kind = 3;
// The unit in which `time_series` point values are reported. `unit`
// follows the UCUM format for units as seen in
// https://unitsofmeasure.org/ucum.html.
// `unit` is only valid if `value_type` is INTEGER, DOUBLE, DISTRIBUTION.
string unit = 4;
}
// Descriptors for the labels.
repeated google.api.LabelDescriptor label_descriptors = 1;
// Descriptors for the point data value columns.
repeated ValueDescriptor point_descriptors = 5;
}
// Represents the values of a time series associated with a
// TimeSeriesDescriptor.
message TimeSeriesData {
// A point's value columns and time interval. Each point has one or more
// point values corresponding to the entries in `point_descriptors` field in
// the TimeSeriesDescriptor associated with this object.
message PointData {
// The values that make up the point.
repeated TypedValue values = 1;
// The time interval associated with the point.
TimeInterval time_interval = 2;
}
// The values of the labels in the time series identifier, given in the same
// order as the `label_descriptors` field of the TimeSeriesDescriptor
// associated with this object. Each value must have a value of the type
// given in the corresponding entry of `label_descriptors`.
repeated LabelValue label_values = 1;
// The points in the time series.
repeated PointData point_data = 2;
}
// A label value.
message LabelValue {
// The label value can be a bool, int64, or string.
oneof value {
// A bool label value.
bool bool_value = 1;
// An int64 label value.
int64 int64_value = 2;
// A string label value.
string string_value = 3;
}
}
// An error associated with a query in the time series query language format.
message QueryError {
// The location of the time series query language text that this error applies
// to.
TextLocator locator = 1;
// The error message.
string message = 2;
}
// A locator for text. Indicates a particular part of the text of a request or
// of an object referenced in the request.
//
// For example, suppose the request field `text` contains:
//
// text: "The quick brown fox jumps over the lazy dog."
//
// Then the locator:
//
// source: "text"
// start_position {
// line: 1
// column: 17
// }
// end_position {
// line: 1
// column: 19
// }
//
// refers to the part of the text: "fox".
message TextLocator {
// The position of a byte within the text.
message Position {
// The line, starting with 1, where the byte is positioned.
int32 line = 1;
// The column within the line, starting with 1, where the byte is
// positioned. This is a byte index even though the text is UTF-8.
int32 column = 2;
}
// The source of the text. The source may be a field in the request, in which
// case its format is the format of the
// google.rpc.BadRequest.FieldViolation.field field in
// https://cloud.google.com/apis/design/errors#error_details. It may also be
// be a source other than the request field (e.g. a macro definition
// referenced in the text of the query), in which case this is the name of
// the source (e.g. the macro name).
string source = 1;
// The position of the first byte within the text.
Position start_position = 2;
// The position of the last byte within the text.
Position end_position = 3;
// If `source`, `start_position`, and `end_position` describe a call on
// some object (e.g. a macro in the time series query language text) and a
// location is to be designated in that object's text, `nested_locator`
// identifies the location within that object.
TextLocator nested_locator = 4;
// When `nested_locator` is set, this field gives the reason for the nesting.
// Usually, the reason is a macro invocation. In that case, the macro name
// (including the leading '@') signals the location of the macro call
// in the text and a macro argument name (including the leading '$') signals
// the location of the macro argument inside the macro body that got
// substituted away.
string nesting_reason = 5;
}

View file

@ -0,0 +1,551 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/metric.proto";
import "google/api/monitored_resource.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/common.proto";
import "google/monitoring/v3/metric.proto";
import "google/protobuf/empty.proto";
import "google/rpc/status.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "MetricServiceProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
option (google.api.resource_definition) = {
type: "monitoring.googleapis.com/MetricDescriptor"
pattern: "projects/{project}/metricDescriptors/{metric_descriptor=**}"
pattern: "organizations/{organization}/metricDescriptors/{metric_descriptor=**}"
pattern: "folders/{folder}/metricDescriptors/{metric_descriptor=**}"
pattern: "*"
history: ORIGINALLY_SINGLE_PATTERN
};
option (google.api.resource_definition) = {
type: "monitoring.googleapis.com/MonitoredResourceDescriptor"
pattern: "projects/{project}/monitoredResourceDescriptors/{monitored_resource_descriptor}"
pattern: "organizations/{organization}/monitoredResourceDescriptors/{monitored_resource_descriptor}"
pattern: "folders/{folder}/monitoredResourceDescriptors/{monitored_resource_descriptor}"
pattern: "*"
history: ORIGINALLY_SINGLE_PATTERN
};
option (google.api.resource_definition) = {
type: "monitoring.googleapis.com/Workspace"
pattern: "projects/{project}"
pattern: "workspaces/{workspace}"
};
option (google.api.resource_definition) = {
type: "monitoring.googleapis.com/TimeSeries"
pattern: "projects/{project}/timeSeries/{time_series}"
pattern: "organizations/{organization}/timeSeries/{time_series}"
pattern: "folders/{folder}/timeSeries/{time_series}"
};
// Manages metric descriptors, monitored resource descriptors, and
// time series data.
service MetricService {
option (google.api.default_host) = "monitoring.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/monitoring,"
"https://www.googleapis.com/auth/monitoring.read,"
"https://www.googleapis.com/auth/monitoring.write";
// Lists monitored resource descriptors that match a filter.
rpc ListMonitoredResourceDescriptors(ListMonitoredResourceDescriptorsRequest)
returns (ListMonitoredResourceDescriptorsResponse) {
option (google.api.http) = {
get: "/v3/{name=projects/*}/monitoredResourceDescriptors"
};
option (google.api.method_signature) = "name";
}
// Gets a single monitored resource descriptor.
rpc GetMonitoredResourceDescriptor(GetMonitoredResourceDescriptorRequest)
returns (google.api.MonitoredResourceDescriptor) {
option (google.api.http) = {
get: "/v3/{name=projects/*/monitoredResourceDescriptors/**}"
};
option (google.api.method_signature) = "name";
}
// Lists metric descriptors that match a filter.
rpc ListMetricDescriptors(ListMetricDescriptorsRequest)
returns (ListMetricDescriptorsResponse) {
option (google.api.http) = {
get: "/v3/{name=projects/*}/metricDescriptors"
};
option (google.api.method_signature) = "name";
}
// Gets a single metric descriptor.
rpc GetMetricDescriptor(GetMetricDescriptorRequest)
returns (google.api.MetricDescriptor) {
option (google.api.http) = {
get: "/v3/{name=projects/*/metricDescriptors/**}"
};
option (google.api.method_signature) = "name";
}
// Creates a new metric descriptor.
// The creation is executed asynchronously.
// User-created metric descriptors define
// [custom metrics](https://cloud.google.com/monitoring/custom-metrics).
// The metric descriptor is updated if it already exists,
// except that metric labels are never removed.
rpc CreateMetricDescriptor(CreateMetricDescriptorRequest)
returns (google.api.MetricDescriptor) {
option (google.api.http) = {
post: "/v3/{name=projects/*}/metricDescriptors"
body: "metric_descriptor"
};
option (google.api.method_signature) = "name,metric_descriptor";
}
// Deletes a metric descriptor. Only user-created
// [custom metrics](https://cloud.google.com/monitoring/custom-metrics) can be
// deleted.
rpc DeleteMetricDescriptor(DeleteMetricDescriptorRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v3/{name=projects/*/metricDescriptors/**}"
};
option (google.api.method_signature) = "name";
}
// Lists time series that match a filter.
rpc ListTimeSeries(ListTimeSeriesRequest) returns (ListTimeSeriesResponse) {
option (google.api.http) = {
get: "/v3/{name=projects/*}/timeSeries"
additional_bindings { get: "/v3/{name=organizations/*}/timeSeries" }
additional_bindings { get: "/v3/{name=folders/*}/timeSeries" }
};
option (google.api.method_signature) = "name,filter,interval,view";
}
// Creates or adds data to one or more time series.
// The response is empty if all time series in the request were written.
// If any time series could not be written, a corresponding failure message is
// included in the error response.
// This method does not support
// [resource locations constraint of an organization
// policy](https://cloud.google.com/resource-manager/docs/organization-policy/defining-locations#setting_the_organization_policy).
rpc CreateTimeSeries(CreateTimeSeriesRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/v3/{name=projects/*}/timeSeries"
body: "*"
};
option (google.api.method_signature) = "name,time_series";
}
// Creates or adds data to one or more service time series. A service time
// series is a time series for a metric from a Google Cloud service. The
// response is empty if all time series in the request were written. If any
// time series could not be written, a corresponding failure message is
// included in the error response. This endpoint rejects writes to
// user-defined metrics.
// This method is only for use by Google Cloud services. Use
// [projects.timeSeries.create][google.monitoring.v3.MetricService.CreateTimeSeries]
// instead.
rpc CreateServiceTimeSeries(CreateTimeSeriesRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/v3/{name=projects/*}/timeSeries:createService"
body: "*"
};
option (google.api.method_signature) = "name,time_series";
}
}
// The `ListMonitoredResourceDescriptors` request.
message ListMonitoredResourceDescriptorsRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) on which
// to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string name = 5 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/MonitoredResourceDescriptor"
}
];
// An optional [filter](https://cloud.google.com/monitoring/api/v3/filters)
// describing the descriptors to be returned. The filter can reference the
// descriptor's type and labels. For example, the following filter returns
// only Google Compute Engine descriptors that have an `id` label:
//
// resource.type = starts_with("gce_") AND resource.label:id
string filter = 2;
// A positive number that is the maximum number of results to return.
int32 page_size = 3;
// If this field is not empty then it must contain the `nextPageToken` value
// returned by a previous call to this method. Using this field causes the
// method to return additional results from the previous method call.
string page_token = 4;
}
// The `ListMonitoredResourceDescriptors` response.
message ListMonitoredResourceDescriptorsResponse {
// The monitored resource descriptors that are available to this project
// and that match `filter`, if present.
repeated google.api.MonitoredResourceDescriptor resource_descriptors = 1;
// If there are more results than have been returned, then this field is set
// to a non-empty value. To see the additional results,
// use that value as `page_token` in the next call to this method.
string next_page_token = 2;
}
// The `GetMonitoredResourceDescriptor` request.
message GetMonitoredResourceDescriptorRequest {
// Required. The monitored resource descriptor to get. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/monitoredResourceDescriptors/[RESOURCE_TYPE]
//
// The `[RESOURCE_TYPE]` is a predefined type, such as
// `cloudsql_database`.
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/MonitoredResourceDescriptor"
}
];
}
// The `ListMetricDescriptors` request.
message ListMetricDescriptorsRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) on which
// to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string name = 5 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/MetricDescriptor"
}
];
// Optional. If this field is empty, all custom and
// system-defined metric descriptors are returned.
// Otherwise, the [filter](https://cloud.google.com/monitoring/api/v3/filters)
// specifies which metric descriptors are to be
// returned. For example, the following filter matches all
// [custom metrics](https://cloud.google.com/monitoring/custom-metrics):
//
// metric.type = starts_with("custom.googleapis.com/")
string filter = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. A positive number that is the maximum number of results to
// return. The default and maximum value is 10,000. If a page_size <= 0 or >
// 10,000 is submitted, will instead return a maximum of 10,000 results.
int32 page_size = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. If this field is not empty then it must contain the
// `nextPageToken` value returned by a previous call to this method. Using
// this field causes the method to return additional results from the previous
// method call.
string page_token = 4 [(google.api.field_behavior) = OPTIONAL];
}
// The `ListMetricDescriptors` response.
message ListMetricDescriptorsResponse {
// The metric descriptors that are available to the project
// and that match the value of `filter`, if present.
repeated google.api.MetricDescriptor metric_descriptors = 1;
// If there are more results than have been returned, then this field is set
// to a non-empty value. To see the additional results,
// use that value as `page_token` in the next call to this method.
string next_page_token = 2;
}
// The `GetMetricDescriptor` request.
message GetMetricDescriptorRequest {
// Required. The metric descriptor on which to execute the request. The format
// is:
//
// projects/[PROJECT_ID_OR_NUMBER]/metricDescriptors/[METRIC_ID]
//
// An example value of `[METRIC_ID]` is
// `"compute.googleapis.com/instance/disk/read_bytes_count"`.
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/MetricDescriptor"
}
];
}
// The `CreateMetricDescriptor` request.
message CreateMetricDescriptorRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) on which
// to execute the request. The format is:
// 4
// projects/[PROJECT_ID_OR_NUMBER]
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/MetricDescriptor"
}
];
// Required. The new [custom
// metric](https://cloud.google.com/monitoring/custom-metrics) descriptor.
google.api.MetricDescriptor metric_descriptor = 2
[(google.api.field_behavior) = REQUIRED];
}
// The `DeleteMetricDescriptor` request.
message DeleteMetricDescriptorRequest {
// Required. The metric descriptor on which to execute the request. The format
// is:
//
// projects/[PROJECT_ID_OR_NUMBER]/metricDescriptors/[METRIC_ID]
//
// An example of `[METRIC_ID]` is:
// `"custom.googleapis.com/my_test_metric"`.
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/MetricDescriptor"
}
];
}
// The `ListTimeSeries` request.
message ListTimeSeriesRequest {
// Controls which fields are returned by `ListTimeSeries*`.
enum TimeSeriesView {
// Returns the identity of the metric(s), the time series,
// and the time series data.
FULL = 0;
// Returns the identity of the metric and the time series resource,
// but not the time series data.
HEADERS = 1;
}
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name),
// organization or folder on which to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
// organizations/[ORGANIZATION_ID]
// folders/[FOLDER_ID]
string name = 10 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/TimeSeries"
}
];
// Required. A [monitoring
// filter](https://cloud.google.com/monitoring/api/v3/filters) that specifies
// which time series should be returned. The filter must specify a single
// metric type, and can additionally specify metric labels and other
// information. For example:
//
// metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND
// metric.labels.instance_name = "my-instance-name"
string filter = 2 [(google.api.field_behavior) = REQUIRED];
// Required. The time interval for which results should be returned. Only time
// series that contain data points in the specified interval are included in
// the response.
TimeInterval interval = 4 [(google.api.field_behavior) = REQUIRED];
// Specifies the alignment of data points in individual time series as
// well as how to combine the retrieved time series across specified labels.
//
// By default (if no `aggregation` is explicitly specified), the raw time
// series data is returned.
Aggregation aggregation = 5;
// Apply a second aggregation after `aggregation` is applied. May only be
// specified if `aggregation` is specified.
Aggregation secondary_aggregation = 11;
// Unsupported: must be left blank. The points in each time series are
// currently returned in reverse time order (most recent to oldest).
string order_by = 6;
// Required. Specifies which information is returned about the time series.
TimeSeriesView view = 7 [(google.api.field_behavior) = REQUIRED];
// A positive number that is the maximum number of results to return. If
// `page_size` is empty or more than 100,000 results, the effective
// `page_size` is 100,000 results. If `view` is set to `FULL`, this is the
// maximum number of `Points` returned. If `view` is set to `HEADERS`, this is
// the maximum number of `TimeSeries` returned.
int32 page_size = 8;
// If this field is not empty then it must contain the `nextPageToken` value
// returned by a previous call to this method. Using this field causes the
// method to return additional results from the previous method call.
string page_token = 9;
}
// The `ListTimeSeries` response.
message ListTimeSeriesResponse {
// One or more time series that match the filter included in the request.
repeated TimeSeries time_series = 1;
// If there are more results than have been returned, then this field is set
// to a non-empty value. To see the additional results,
// use that value as `page_token` in the next call to this method.
string next_page_token = 2;
// Query execution errors that may have caused the time series data returned
// to be incomplete.
repeated google.rpc.Status execution_errors = 3;
// The unit in which all `time_series` point values are reported. `unit`
// follows the UCUM format for units as seen in
// https://unitsofmeasure.org/ucum.html.
// If different `time_series` have different units (for example, because they
// come from different metric types, or a unit is absent), then `unit` will be
// "{not_a_unit}".
string unit = 5;
}
// The `CreateTimeSeries` request.
message CreateTimeSeriesRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) on which
// to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "cloudresourcemanager.googleapis.com/Project"
}
];
// Required. The new data to be added to a list of time series.
// Adds at most one data point to each of several time series. The new data
// point must be more recent than any other point in its time series. Each
// `TimeSeries` value must fully specify a unique time series by supplying
// all label values for the metric and the monitored resource.
//
// The maximum number of `TimeSeries` objects per `Create` request is 200.
repeated TimeSeries time_series = 2 [(google.api.field_behavior) = REQUIRED];
}
// DEPRECATED. Used to hold per-time-series error status.
message CreateTimeSeriesError {
// DEPRECATED. Time series ID that resulted in the `status` error.
TimeSeries time_series = 1 [deprecated = true];
// DEPRECATED. The status of the requested write operation for `time_series`.
google.rpc.Status status = 2 [deprecated = true];
}
// Summary of the result of a failed request to write data to a time series.
message CreateTimeSeriesSummary {
// Detailed information about an error category.
message Error {
// The status of the requested write operation.
google.rpc.Status status = 1;
// The number of points that couldn't be written because of `status`.
int32 point_count = 2;
}
// The number of points in the request.
int32 total_point_count = 1;
// The number of points that were successfully written.
int32 success_point_count = 2;
// The number of points that failed to be written. Order is not guaranteed.
repeated Error errors = 3;
}
// The `QueryTimeSeries` request. For information about the status of
// Monitoring Query Language (MQL), see the [MQL deprecation
// notice](https://cloud.google.com/stackdriver/docs/deprecations/mql).
message QueryTimeSeriesRequest {
option deprecated = true;
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) on which
// to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string name = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The query in the [Monitoring Query
// Language](https://cloud.google.com/monitoring/mql/reference) format.
// The default time zone is in UTC.
string query = 7 [(google.api.field_behavior) = REQUIRED];
// A positive number that is the maximum number of time_series_data to return.
int32 page_size = 9;
// If this field is not empty then it must contain the `nextPageToken` value
// returned by a previous call to this method. Using this field causes the
// method to return additional results from the previous method call.
string page_token = 10;
}
// The `QueryTimeSeries` response. For information about the status of
// Monitoring Query Language (MQL), see the [MQL deprecation
// notice](https://cloud.google.com/stackdriver/docs/deprecations/mql).
message QueryTimeSeriesResponse {
option deprecated = true;
// The descriptor for the time series data.
TimeSeriesDescriptor time_series_descriptor = 8;
// The time series data.
repeated TimeSeriesData time_series_data = 9;
// If there are more results than have been returned, then this field is set
// to a non-empty value. To see the additional results, use that value as
// `page_token` in the next call to this method.
string next_page_token = 10;
// Query execution errors that may have caused the time series data returned
// to be incomplete. The available data will be available in the
// response.
repeated google.rpc.Status partial_errors = 11;
}
// This is an error detail intended to be used with INVALID_ARGUMENT errors.
message QueryErrorList {
// Errors in parsing the time series query language text. The number of errors
// in the response may be limited.
repeated QueryError errors = 1;
// A summary of all the errors.
string error_summary = 2;
}

View file

@ -0,0 +1,212 @@
type: google.api.Service
config_version: 3
name: monitoring.googleapis.com
title: Cloud Monitoring API
apis:
- name: google.longrunning.Operations
- name: google.monitoring.v3.AlertPolicyService
- name: google.monitoring.v3.GroupService
- name: google.monitoring.v3.MetricService
- name: google.monitoring.v3.NotificationChannelService
- name: google.monitoring.v3.QueryService
- name: google.monitoring.v3.ServiceMonitoringService
- name: google.monitoring.v3.SnoozeService
- name: google.monitoring.v3.UptimeCheckService
types:
- name: google.monitoring.v3.DroppedLabels
- name: google.monitoring.v3.SpanContext
documentation:
summary: Manages your Cloud Monitoring data and configurations.
authentication:
rules:
- selector: google.longrunning.Operations.GetOperation
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: 'google.monitoring.v3.AlertPolicyService.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.AlertPolicyService.GetAlertPolicy
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.AlertPolicyService.ListAlertPolicies
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: 'google.monitoring.v3.GroupService.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.GroupService.CreateGroup
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.GroupService.DeleteGroup
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.GroupService.UpdateGroup
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: 'google.monitoring.v3.MetricService.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read,
https://www.googleapis.com/auth/monitoring.write
- selector: google.monitoring.v3.MetricService.CreateMetricDescriptor
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.write
- selector: google.monitoring.v3.MetricService.CreateServiceTimeSeries
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.write
- selector: google.monitoring.v3.MetricService.CreateTimeSeries
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.write
- selector: google.monitoring.v3.MetricService.DeleteMetricDescriptor
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.MetricService.ListTimeSeries
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: 'google.monitoring.v3.NotificationChannelService.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.NotificationChannelService.GetNotificationChannel
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.NotificationChannelService.GetNotificationChannelDescriptor
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.NotificationChannelService.ListNotificationChannelDescriptors
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.NotificationChannelService.ListNotificationChannels
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.QueryService.QueryTimeSeries
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: 'google.monitoring.v3.ServiceMonitoringService.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.ServiceMonitoringService.GetService
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.ServiceMonitoringService.GetServiceLevelObjective
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.ServiceMonitoringService.ListServiceLevelObjectives
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.ServiceMonitoringService.ListServices
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.SnoozeService.CreateSnooze
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.SnoozeService.GetSnooze
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.SnoozeService.ListSnoozes
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.SnoozeService.UpdateSnooze
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: 'google.monitoring.v3.UptimeCheckService.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring,
https://www.googleapis.com/auth/monitoring.read
- selector: google.monitoring.v3.UptimeCheckService.CreateUptimeCheckConfig
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.UptimeCheckService.DeleteUptimeCheckConfig
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring
- selector: google.monitoring.v3.UptimeCheckService.UpdateUptimeCheckConfig
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/monitoring

View file

@ -0,0 +1,29 @@
type: com.google.api.codegen.ConfigProto
config_schema_version: 2.0.0
# The settings of generated code in a specific language.
language_settings:
java:
package_name: com.google.cloud.monitoring.v3
release_level: GA
python:
package_name: google.cloud.monitoring_v3.gapic
go:
package_name: cloud.google.com/go/monitoring/apiv3
csharp:
package_name: Google.Cloud.Monitoring.V3
release_level: GA
ruby:
package_name: Google::Cloud::Monitoring::V3
release_level: BETA
php:
package_name: Google\Cloud\Monitoring\V3
nodejs:
package_name: monitoring.v3
domain_layer_location: google-cloud
# A list of API interface configurations.
interfaces:
- name: google.monitoring.v3.MetricService
smoke_test:
method: ListMonitoredResourceDescriptors
init_fields:
- name%project=$PROJECT_ID

View file

@ -0,0 +1,360 @@
{
"methodConfig": [
{
"name": [
{
"service": "google.monitoring.v3.AlertPolicyService",
"method": "CreateAlertPolicy"
},
{
"service": "google.monitoring.v3.AlertPolicyService",
"method": "UpdateAlertPolicy"
}
],
"timeout": "30s"
},
{
"name": [
{
"service": "google.monitoring.v3.GroupService",
"method": "ListGroups"
},
{
"service": "google.monitoring.v3.GroupService",
"method": "GetGroup"
},
{
"service": "google.monitoring.v3.GroupService",
"method": "DeleteGroup"
},
{
"service": "google.monitoring.v3.GroupService",
"method": "ListGroupMembers"
}
],
"timeout": "30s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.GroupService",
"method": "UpdateGroup"
}
],
"timeout": "180s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.GroupService",
"method": "CreateGroup"
}
],
"timeout": "30s"
},
{
"name": [
{
"service": "google.monitoring.v3.MetricService",
"method": "CreateMetricDescriptor"
},
{
"service": "google.monitoring.v3.MetricService",
"method": "CreateTimeSeries"
}
],
"timeout": "12s"
},
{
"name": [
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "ListNotificationChannelDescriptors"
},
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "GetNotificationChannelDescriptor"
},
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "ListNotificationChannels"
},
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "GetNotificationChannel"
},
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "DeleteNotificationChannel"
},
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "GetNotificationChannelVerificationCode"
},
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "VerifyNotificationChannel"
}
],
"timeout": "30s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "CreateService"
},
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "UpdateService"
},
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "CreateServiceLevelObjective"
},
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "UpdateServiceLevelObjective"
}
],
"timeout": "30s"
},
{
"name": [
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "GetService"
},
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "ListServices"
},
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "DeleteService"
},
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "GetServiceLevelObjective"
},
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "ListServiceLevelObjectives"
},
{
"service": "google.monitoring.v3.ServiceMonitoringService",
"method": "DeleteServiceLevelObjective"
}
],
"timeout": "30s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.UptimeCheckService",
"method": "ListUptimeCheckConfigs"
},
{
"service": "google.monitoring.v3.UptimeCheckService",
"method": "GetUptimeCheckConfig"
},
{
"service": "google.monitoring.v3.UptimeCheckService",
"method": "DeleteUptimeCheckConfig"
},
{
"service": "google.monitoring.v3.UptimeCheckService",
"method": "ListUptimeCheckIps"
}
],
"timeout": "30s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.AlertPolicyService",
"method": "ListAlertPolicies"
},
{
"service": "google.monitoring.v3.AlertPolicyService",
"method": "GetAlertPolicy"
},
{
"service": "google.monitoring.v3.AlertPolicyService",
"method": "DeleteAlertPolicy"
}
],
"timeout": "30s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.MetricService",
"method": "ListMonitoredResourceDescriptors"
},
{
"service": "google.monitoring.v3.MetricService",
"method": "GetMonitoredResourceDescriptor"
},
{
"service": "google.monitoring.v3.MetricService",
"method": "ListMetricDescriptors"
},
{
"service": "google.monitoring.v3.MetricService",
"method": "GetMetricDescriptor"
},
{
"service": "google.monitoring.v3.MetricService",
"method": "DeleteMetricDescriptor"
}
],
"timeout": "30s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.MetricService",
"method": "ListTimeSeries"
}
],
"timeout": "90s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "CreateNotificationChannel"
},
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "UpdateNotificationChannel"
},
{
"service": "google.monitoring.v3.NotificationChannelService",
"method": "SendNotificationChannelVerificationCode"
}
],
"timeout": "30s"
},
{
"name": [
{
"service": "google.monitoring.v3.UptimeCheckService",
"method": "CreateUptimeCheckConfig"
},
{
"service": "google.monitoring.v3.UptimeCheckService",
"method": "UpdateUptimeCheckConfig"
}
],
"timeout": "30s"
},
{
"name": [
{
"service": "google.monitoring.v3.SnoozeService",
"method": "GetSnooze"
},
{
"service": "google.monitoring.v3.SnoozeService",
"method": "ListSnoozes"
}
],
"timeout": "30s",
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.100s",
"maxBackoff": "30s",
"backoffMultiplier": 1.3,
"retryableStatusCodes": [
"UNAVAILABLE"
]
}
},
{
"name": [
{
"service": "google.monitoring.v3.SnoozeService",
"method": "CreateSnooze"
},
{
"service": "google.monitoring.v3.SnoozeService",
"method": "UpdateSnooze"
}
], "timeout": "30s"
}
]
}

View file

@ -0,0 +1,36 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/protobuf/timestamp.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "MutationRecordProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// Describes a change made to a configuration.
message MutationRecord {
// When the change occurred.
google.protobuf.Timestamp mutate_time = 1;
// The email address of the user making the change.
string mutated_by = 2;
}

View file

@ -0,0 +1,196 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/field_behavior.proto";
import "google/api/label.proto";
import "google/api/launch_stage.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/common.proto";
import "google/monitoring/v3/mutation_record.proto";
import "google/protobuf/wrappers.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "NotificationProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// A description of a notification channel. The descriptor includes
// the properties of the channel and the set of labels or fields that
// must be specified to configure channels of a given type.
message NotificationChannelDescriptor {
option (google.api.resource) = {
type: "monitoring.googleapis.com/NotificationChannelDescriptor"
pattern: "projects/{project}/notificationChannelDescriptors/{channel_descriptor}"
pattern: "organizations/{organization}/notificationChannelDescriptors/{channel_descriptor}"
pattern: "folders/{folder}/notificationChannelDescriptors/{channel_descriptor}"
pattern: "*"
};
// The full REST resource name for this descriptor. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/notificationChannelDescriptors/[TYPE]
//
// In the above, `[TYPE]` is the value of the `type` field.
string name = 6;
// The type of notification channel, such as "email" and "sms". To view the
// full list of channels, see
// [Channel
// descriptors](https://cloud.google.com/monitoring/alerts/using-channels-api#ncd).
// Notification channel types are globally unique.
string type = 1;
// A human-readable name for the notification channel type. This
// form of the name is suitable for a user interface.
string display_name = 2;
// A human-readable description of the notification channel
// type. The description may include a description of the properties
// of the channel and pointers to external documentation.
string description = 3;
// The set of labels that must be defined to identify a particular
// channel of the corresponding type. Each label includes a
// description for how that field should be populated.
repeated google.api.LabelDescriptor labels = 4;
// The tiers that support this notification channel; the project service tier
// must be one of the supported_tiers.
repeated ServiceTier supported_tiers = 5 [deprecated = true];
// The product launch stage for channels of this type.
google.api.LaunchStage launch_stage = 7;
}
// A `NotificationChannel` is a medium through which an alert is
// delivered when a policy violation is detected. Examples of channels
// include email, SMS, and third-party messaging applications. Fields
// containing sensitive information like authentication tokens or
// contact info are only partially populated on retrieval.
message NotificationChannel {
option (google.api.resource) = {
type: "monitoring.googleapis.com/NotificationChannel"
pattern: "projects/{project}/notificationChannels/{notification_channel}"
pattern: "organizations/{organization}/notificationChannels/{notification_channel}"
pattern: "folders/{folder}/notificationChannels/{notification_channel}"
pattern: "*"
};
// Indicates whether the channel has been verified or not. It is illegal
// to specify this field in a
// [`CreateNotificationChannel`][google.monitoring.v3.NotificationChannelService.CreateNotificationChannel]
// or an
// [`UpdateNotificationChannel`][google.monitoring.v3.NotificationChannelService.UpdateNotificationChannel]
// operation.
enum VerificationStatus {
// Sentinel value used to indicate that the state is unknown, omitted, or
// is not applicable (as in the case of channels that neither support
// nor require verification in order to function).
VERIFICATION_STATUS_UNSPECIFIED = 0;
// The channel has yet to be verified and requires verification to function.
// Note that this state also applies to the case where the verification
// process has been initiated by sending a verification code but where
// the verification code has not been submitted to complete the process.
UNVERIFIED = 1;
// It has been proven that notifications can be received on this
// notification channel and that someone on the project has access
// to messages that are delivered to that channel.
VERIFIED = 2;
}
// The type of the notification channel. This field matches the
// value of the
// [NotificationChannelDescriptor.type][google.monitoring.v3.NotificationChannelDescriptor.type]
// field.
string type = 1;
// Identifier. The full REST resource name for this channel. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]
//
// The `[CHANNEL_ID]` is automatically assigned by the server on creation.
string name = 6 [(google.api.field_behavior) = IDENTIFIER];
// An optional human-readable name for this notification channel. It is
// recommended that you specify a non-empty and unique name in order to
// make it easier to identify the channels in your project, though this is
// not enforced. The display name is limited to 512 Unicode characters.
string display_name = 3;
// An optional human-readable description of this notification channel. This
// description may provide additional details, beyond the display
// name, for the channel. This may not exceed 1024 Unicode characters.
string description = 4;
// Configuration fields that define the channel and its behavior. The
// permissible and required labels are specified in the
// [NotificationChannelDescriptor.labels][google.monitoring.v3.NotificationChannelDescriptor.labels]
// of the `NotificationChannelDescriptor` corresponding to the `type` field.
map<string, string> labels = 5;
// User-supplied key/value data that does not need to conform to
// the corresponding `NotificationChannelDescriptor`'s schema, unlike
// the `labels` field. This field is intended to be used for organizing
// and identifying the `NotificationChannel` 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.
map<string, string> user_labels = 8;
// Indicates whether this channel has been verified or not. On a
// [`ListNotificationChannels`][google.monitoring.v3.NotificationChannelService.ListNotificationChannels]
// or
// [`GetNotificationChannel`][google.monitoring.v3.NotificationChannelService.GetNotificationChannel]
// operation, this field is expected to be populated.
//
// If the value is `UNVERIFIED`, then it indicates that the channel is
// non-functioning (it both requires verification and lacks verification);
// otherwise, it is assumed that the channel works.
//
// If the channel is neither `VERIFIED` nor `UNVERIFIED`, it implies that
// the channel is of a type that does not require verification or that
// this specific channel has been exempted from verification because it was
// created prior to verification being required for channels of this type.
//
// This field cannot be modified using a standard
// [`UpdateNotificationChannel`][google.monitoring.v3.NotificationChannelService.UpdateNotificationChannel]
// operation. To change the value of this field, you must call
// [`VerifyNotificationChannel`][google.monitoring.v3.NotificationChannelService.VerifyNotificationChannel].
VerificationStatus verification_status = 9;
// Whether notifications are forwarded to the described channel. This makes
// it possible to disable delivery of notifications to a particular channel
// without removing the channel from all alerting policies that reference
// the channel. This is a more convenient approach when the change is
// temporary and you want to receive notifications from the same set
// of alerting policies on the channel at some point in the future.
google.protobuf.BoolValue enabled = 11;
// Record of the creation of this channel.
MutationRecord creation_record = 12;
// Records of the modification of this channel.
repeated MutationRecord mutation_records = 13;
}

View file

@ -0,0 +1,449 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/notification.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "NotificationServiceProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The Notification Channel API provides access to configuration that
// controls how messages related to incidents are sent.
service NotificationChannelService {
option (google.api.default_host) = "monitoring.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/monitoring,"
"https://www.googleapis.com/auth/monitoring.read";
// Lists the descriptors for supported channel types. The use of descriptors
// makes it possible for new channel types to be dynamically added.
rpc ListNotificationChannelDescriptors(
ListNotificationChannelDescriptorsRequest)
returns (ListNotificationChannelDescriptorsResponse) {
option (google.api.http) = {
get: "/v3/{name=projects/*}/notificationChannelDescriptors"
};
option (google.api.method_signature) = "name";
}
// Gets a single channel descriptor. The descriptor indicates which fields
// are expected / permitted for a notification channel of the given type.
rpc GetNotificationChannelDescriptor(GetNotificationChannelDescriptorRequest)
returns (NotificationChannelDescriptor) {
option (google.api.http) = {
get: "/v3/{name=projects/*/notificationChannelDescriptors/*}"
};
option (google.api.method_signature) = "name";
}
// Lists the notification channels that have been created for the project.
// To list the types of notification channels that are supported, use
// the `ListNotificationChannelDescriptors` method.
rpc ListNotificationChannels(ListNotificationChannelsRequest)
returns (ListNotificationChannelsResponse) {
option (google.api.http) = {
get: "/v3/{name=projects/*}/notificationChannels"
};
option (google.api.method_signature) = "name";
}
// Gets a single notification channel. The channel includes the relevant
// configuration details with which the channel was created. However, the
// response may truncate or omit passwords, API keys, or other private key
// matter and thus the response may not be 100% identical to the information
// that was supplied in the call to the create method.
rpc GetNotificationChannel(GetNotificationChannelRequest)
returns (NotificationChannel) {
option (google.api.http) = {
get: "/v3/{name=projects/*/notificationChannels/*}"
};
option (google.api.method_signature) = "name";
}
// Creates a new notification channel, representing a single notification
// endpoint such as an email address, SMS number, or PagerDuty service.
//
// Design your application to single-thread API calls that modify the state of
// notification channels in a single project. This includes calls to
// CreateNotificationChannel, DeleteNotificationChannel and
// UpdateNotificationChannel.
rpc CreateNotificationChannel(CreateNotificationChannelRequest)
returns (NotificationChannel) {
option (google.api.http) = {
post: "/v3/{name=projects/*}/notificationChannels"
body: "notification_channel"
};
option (google.api.method_signature) = "name,notification_channel";
}
// Updates a notification channel. Fields not specified in the field mask
// remain unchanged.
//
// Design your application to single-thread API calls that modify the state of
// notification channels in a single project. This includes calls to
// CreateNotificationChannel, DeleteNotificationChannel and
// UpdateNotificationChannel.
rpc UpdateNotificationChannel(UpdateNotificationChannelRequest)
returns (NotificationChannel) {
option (google.api.http) = {
patch: "/v3/{notification_channel.name=projects/*/notificationChannels/*}"
body: "notification_channel"
};
option (google.api.method_signature) = "update_mask,notification_channel";
}
// Deletes a notification channel.
//
// Design your application to single-thread API calls that modify the state of
// notification channels in a single project. This includes calls to
// CreateNotificationChannel, DeleteNotificationChannel and
// UpdateNotificationChannel.
rpc DeleteNotificationChannel(DeleteNotificationChannelRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v3/{name=projects/*/notificationChannels/*}"
};
option (google.api.method_signature) = "name,force";
}
// Causes a verification code to be delivered to the channel. The code
// can then be supplied in `VerifyNotificationChannel` to verify the channel.
rpc SendNotificationChannelVerificationCode(
SendNotificationChannelVerificationCodeRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/v3/{name=projects/*/notificationChannels/*}:sendVerificationCode"
body: "*"
};
option (google.api.method_signature) = "name";
}
// Requests a verification code for an already verified channel that can then
// be used in a call to VerifyNotificationChannel() on a different channel
// with an equivalent identity in the same or in a different project. This
// makes it possible to copy a channel between projects without requiring
// manual reverification of the channel. If the channel is not in the
// verified state, this method will fail (in other words, this may only be
// used if the SendNotificationChannelVerificationCode and
// VerifyNotificationChannel paths have already been used to put the given
// channel into the verified state).
//
// There is no guarantee that the verification codes returned by this method
// will be of a similar structure or form as the ones that are delivered
// to the channel via SendNotificationChannelVerificationCode; while
// VerifyNotificationChannel() will recognize both the codes delivered via
// SendNotificationChannelVerificationCode() and returned from
// GetNotificationChannelVerificationCode(), it is typically the case that
// the verification codes delivered via
// SendNotificationChannelVerificationCode() will be shorter and also
// have a shorter expiration (e.g. codes such as "G-123456") whereas
// GetVerificationCode() will typically return a much longer, websafe base
// 64 encoded string that has a longer expiration time.
rpc GetNotificationChannelVerificationCode(
GetNotificationChannelVerificationCodeRequest)
returns (GetNotificationChannelVerificationCodeResponse) {
option (google.api.http) = {
post: "/v3/{name=projects/*/notificationChannels/*}:getVerificationCode"
body: "*"
};
option (google.api.method_signature) = "name";
}
// Verifies a `NotificationChannel` by proving receipt of the code
// delivered to the channel as a result of calling
// `SendNotificationChannelVerificationCode`.
rpc VerifyNotificationChannel(VerifyNotificationChannelRequest)
returns (NotificationChannel) {
option (google.api.http) = {
post: "/v3/{name=projects/*/notificationChannels/*}:verify"
body: "*"
};
option (google.api.method_signature) = "name,code";
}
}
// The `ListNotificationChannelDescriptors` request.
message ListNotificationChannelDescriptorsRequest {
// Required. The REST resource name of the parent from which to retrieve
// the notification channel descriptors. The expected syntax is:
//
// projects/[PROJECT_ID_OR_NUMBER]
//
// Note that this
// [names](https://cloud.google.com/monitoring/api/v3#project_name) the parent
// container in which to look for the descriptors; to retrieve a single
// descriptor by name, use the
// [GetNotificationChannelDescriptor][google.monitoring.v3.NotificationChannelService.GetNotificationChannelDescriptor]
// operation, instead.
string name = 4 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/NotificationChannelDescriptor"
}
];
// The maximum number of results to return in a single response. If
// not set to a positive number, a reasonable value will be chosen by the
// service.
int32 page_size = 2;
// If non-empty, `page_token` must contain a value returned as the
// `next_page_token` in a previous response to request the next set
// of results.
string page_token = 3;
}
// The `ListNotificationChannelDescriptors` response.
message ListNotificationChannelDescriptorsResponse {
// The monitored resource descriptors supported for the specified
// project, optionally filtered.
repeated NotificationChannelDescriptor channel_descriptors = 1;
// If not empty, indicates that there may be more results that match
// the request. Use the value in the `page_token` field in a
// subsequent request to fetch the next set of results. If empty,
// all results have been returned.
string next_page_token = 2;
}
// The `GetNotificationChannelDescriptor` response.
message GetNotificationChannelDescriptorRequest {
// Required. The channel type for which to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/notificationChannelDescriptors/[CHANNEL_TYPE]
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/NotificationChannelDescriptor"
}
];
}
// The `CreateNotificationChannel` request.
message CreateNotificationChannelRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) on which
// to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
//
// This names the container into which the channel will be
// written, this does not name the newly created channel. The resulting
// channel's name will have a normalized version of this field as a prefix,
// but will add `/notificationChannels/[CHANNEL_ID]` to identify the channel.
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/NotificationChannel"
}
];
// Required. The definition of the `NotificationChannel` to create.
NotificationChannel notification_channel = 2
[(google.api.field_behavior) = REQUIRED];
}
// The `ListNotificationChannels` request.
message ListNotificationChannelsRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) on which
// to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
//
// This names the container
// in which to look for the notification channels; it does not name a
// specific channel. To query a specific channel by REST resource name, use
// the
// [`GetNotificationChannel`][google.monitoring.v3.NotificationChannelService.GetNotificationChannel]
// operation.
string name = 5 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/NotificationChannel"
}
];
// Optional. If provided, this field specifies the criteria that must be met
// by notification channels to be included in the response.
//
// For more details, see [sorting and
// filtering](https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
string filter = 6 [(google.api.field_behavior) = OPTIONAL];
// Optional. A comma-separated list of fields by which to sort the result.
// Supports the same set of fields as in `filter`. Entries can be prefixed
// with a minus sign to sort in descending rather than ascending order.
//
// For more details, see [sorting and
// filtering](https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
string order_by = 7 [(google.api.field_behavior) = OPTIONAL];
// Optional. The maximum number of results to return in a single response. If
// not set to a positive number, a reasonable value will be chosen by the
// service.
int32 page_size = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. If non-empty, `page_token` must contain a value returned as the
// `next_page_token` in a previous response to request the next set
// of results.
string page_token = 4 [(google.api.field_behavior) = OPTIONAL];
}
// The `ListNotificationChannels` response.
message ListNotificationChannelsResponse {
// The notification channels defined for the specified project.
repeated NotificationChannel notification_channels = 3;
// If not empty, indicates that there may be more results that match
// the request. Use the value in the `page_token` field in a
// subsequent request to fetch the next set of results. If empty,
// all results have been returned.
string next_page_token = 2;
// The total number of notification channels in all pages. This number is only
// an estimate, and may change in subsequent pages. https://aip.dev/158
int32 total_size = 4;
}
// The `GetNotificationChannel` request.
message GetNotificationChannelRequest {
// Required. The channel for which to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/NotificationChannel"
}
];
}
// The `UpdateNotificationChannel` request.
message UpdateNotificationChannelRequest {
// Optional. The fields to update.
google.protobuf.FieldMask update_mask = 2
[(google.api.field_behavior) = OPTIONAL];
// Required. A description of the changes to be applied to the specified
// notification channel. The description must provide a definition for
// fields to be updated; the names of these fields should also be
// included in the `update_mask`.
NotificationChannel notification_channel = 3
[(google.api.field_behavior) = REQUIRED];
}
// The `DeleteNotificationChannel` request.
message DeleteNotificationChannelRequest {
// Required. The channel for which to execute the request. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]
string name = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/NotificationChannel"
}
];
// If true, the notification channel will be deleted regardless of its
// use in alert policies (the policies will be updated to remove the
// channel). If false, this operation will fail if the notification channel
// is referenced by existing alerting policies.
bool force = 5;
}
// The `SendNotificationChannelVerificationCode` request.
message SendNotificationChannelVerificationCodeRequest {
// Required. The notification channel to which to send a verification code.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/NotificationChannel"
}
];
}
// The `GetNotificationChannelVerificationCode` request.
message GetNotificationChannelVerificationCodeRequest {
// Required. The notification channel for which a verification code is to be
// generated and retrieved. This must name a channel that is already verified;
// if the specified channel is not verified, the request will fail.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/NotificationChannel"
}
];
// The desired expiration time. If specified, the API will guarantee that
// the returned code will not be valid after the specified timestamp;
// however, the API cannot guarantee that the returned code will be
// valid for at least as long as the requested time (the API puts an upper
// bound on the amount of time for which a code may be valid). If omitted,
// a default expiration will be used, which may be less than the max
// permissible expiration (so specifying an expiration may extend the
// code's lifetime over omitting an expiration, even though the API does
// impose an upper limit on the maximum expiration that is permitted).
google.protobuf.Timestamp expire_time = 2;
}
// The `GetNotificationChannelVerificationCode` request.
message GetNotificationChannelVerificationCodeResponse {
// The verification code, which may be used to verify other channels
// that have an equivalent identity (i.e. other channels of the same
// type with the same fingerprint such as other email channels with
// the same email address or other sms channels with the same number).
string code = 1;
// The expiration time associated with the code that was returned. If
// an expiration was provided in the request, this is the minimum of the
// requested expiration in the request and the max permitted expiration.
google.protobuf.Timestamp expire_time = 2;
}
// The `VerifyNotificationChannel` request.
message VerifyNotificationChannelRequest {
// Required. The notification channel to verify.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/NotificationChannel"
}
];
// Required. The verification code that was delivered to the channel as
// a result of invoking the `SendNotificationChannelVerificationCode` API
// method or that was retrieved from a verified channel via
// `GetNotificationChannelVerificationCode`. For example, one might have
// "G-123456" or "TKNZGhhd2EyN3I1MnRnMjRv" (in general, one is only
// guaranteed that the code is valid UTF-8; one should not
// make any assumptions regarding the structure or format of the code).
string code = 2 [(google.api.field_behavior) = REQUIRED];
}

View file

@ -0,0 +1,53 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/monitoring/v3/metric_service.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "QueryServiceProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The QueryService API is used to manage time series data in Cloud
// Monitoring. Time series data is a collection of data points that describes
// the time-varying values of a metric.
service QueryService {
option (google.api.default_host) = "monitoring.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/monitoring,"
"https://www.googleapis.com/auth/monitoring.read";
// Queries time series by using Monitoring Query Language (MQL). We recommend
// using PromQL instead of MQL. For more information about the status of MQL,
// see the [MQL deprecation
// notice](https://cloud.google.com/stackdriver/docs/deprecations/mql).
rpc QueryTimeSeries(QueryTimeSeriesRequest)
returns (QueryTimeSeriesResponse) {
option deprecated = true;
option (google.api.http) = {
post: "/v3/{name=projects/*}/timeSeries:query"
body: "*"
};
}
}

View file

@ -0,0 +1,572 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/duration.proto";
import "google/type/calendar_period.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "ServiceMonitoringProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// A `Service` is a discrete, autonomous, and network-accessible unit, designed
// to solve an individual concern
// ([Wikipedia](https://en.wikipedia.org/wiki/Service-orientation)). In
// Cloud Monitoring, a `Service` acts as the root resource under which
// operational aspects of the service are accessible.
message Service {
option (google.api.resource) = {
type: "monitoring.googleapis.com/Service"
pattern: "projects/{project}/services/{service}"
pattern: "organizations/{organization}/services/{service}"
pattern: "folders/{folder}/services/{service}"
pattern: "*"
};
// Use a custom service to designate a service that you want to monitor
// when none of the other service types (like App Engine, Cloud Run, or
// a GKE type) matches your intended service.
message Custom {}
// App Engine service. Learn more at https://cloud.google.com/appengine.
message AppEngine {
// The ID of the App Engine module underlying this service. Corresponds to
// the `module_id` resource label in the [`gae_app` monitored
// resource](https://cloud.google.com/monitoring/api/resources#tag_gae_app).
string module_id = 1;
}
// Cloud Endpoints service. Learn more at https://cloud.google.com/endpoints.
message CloudEndpoints {
// The name of the Cloud Endpoints service underlying this service.
// Corresponds to the `service` resource label in the [`api` monitored
// resource](https://cloud.google.com/monitoring/api/resources#tag_api).
string service = 1;
}
// Istio service scoped to a single Kubernetes cluster. Learn more at
// https://istio.io. Clusters running OSS Istio will have their services
// ingested as this type.
message ClusterIstio {
// The location of the Kubernetes cluster in which this Istio service is
// defined. Corresponds to the `location` resource label in `k8s_cluster`
// resources.
string location = 1;
// The name of the Kubernetes cluster in which this Istio service is
// defined. Corresponds to the `cluster_name` resource label in
// `k8s_cluster` resources.
string cluster_name = 2;
// The namespace of the Istio service underlying this service. Corresponds
// to the `destination_service_namespace` metric label in Istio metrics.
string service_namespace = 3;
// The name of the Istio service underlying this service. Corresponds to the
// `destination_service_name` metric label in Istio metrics.
string service_name = 4;
}
// Istio service scoped to an Istio mesh. Anthos clusters running ASM < 1.6.8
// will have their services ingested as this type.
message MeshIstio {
// Identifier for the mesh in which this Istio service is defined.
// Corresponds to the `mesh_uid` metric label in Istio metrics.
string mesh_uid = 1;
// The namespace of the Istio service underlying this service. Corresponds
// to the `destination_service_namespace` metric label in Istio metrics.
string service_namespace = 3;
// The name of the Istio service underlying this service. Corresponds to the
// `destination_service_name` metric label in Istio metrics.
string service_name = 4;
}
// Canonical service scoped to an Istio mesh. Anthos clusters running ASM >=
// 1.6.8 will have their services ingested as this type.
message IstioCanonicalService {
// Identifier for the Istio mesh in which this canonical service is defined.
// Corresponds to the `mesh_uid` metric label in
// [Istio metrics](https://cloud.google.com/monitoring/api/metrics_istio).
string mesh_uid = 1;
// The namespace of the canonical service underlying this service.
// Corresponds to the `destination_canonical_service_namespace` metric
// label in [Istio
// metrics](https://cloud.google.com/monitoring/api/metrics_istio).
string canonical_service_namespace = 3;
// The name of the canonical service underlying this service.
// Corresponds to the `destination_canonical_service_name` metric label in
// label in [Istio
// metrics](https://cloud.google.com/monitoring/api/metrics_istio).
string canonical_service = 4;
}
// Cloud Run service. Learn more at https://cloud.google.com/run.
message CloudRun {
// The name of the Cloud Run service. Corresponds to the `service_name`
// resource label in the [`cloud_run_revision` monitored
// resource](https://cloud.google.com/monitoring/api/resources#tag_cloud_run_revision).
string service_name = 1;
// The location the service is run. Corresponds to the `location`
// resource label in the [`cloud_run_revision` monitored
// resource](https://cloud.google.com/monitoring/api/resources#tag_cloud_run_revision).
string location = 2;
}
// GKE Namespace. The field names correspond to the resource metadata labels
// on monitored resources that fall under a namespace (for example,
// `k8s_container` or `k8s_pod`).
message GkeNamespace {
// Output only. The project this resource lives in. For legacy services
// migrated from the `Custom` type, this may be a distinct project from the
// one parenting the service itself.
string project_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// The location of the parent cluster. This may be a zone or region.
string location = 2;
// The name of the parent cluster.
string cluster_name = 3;
// The name of this namespace.
string namespace_name = 4;
}
// A GKE Workload (Deployment, StatefulSet, etc). The field names correspond
// to the metadata labels on monitored resources that fall under a workload
// (for example, `k8s_container` or `k8s_pod`).
message GkeWorkload {
// Output only. The project this resource lives in. For legacy services
// migrated from the `Custom` type, this may be a distinct project from the
// one parenting the service itself.
string project_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// The location of the parent cluster. This may be a zone or region.
string location = 2;
// The name of the parent cluster.
string cluster_name = 3;
// The name of the parent namespace.
string namespace_name = 4;
// The type of this workload (for example, "Deployment" or "DaemonSet")
string top_level_controller_type = 5;
// The name of this workload.
string top_level_controller_name = 6;
}
// GKE Service. The "service" here represents a
// [Kubernetes service
// object](https://kubernetes.io/docs/concepts/services-networking/service).
// The field names correspond to the resource labels on [`k8s_service`
// monitored
// resources](https://cloud.google.com/monitoring/api/resources#tag_k8s_service).
message GkeService {
// Output only. The project this resource lives in. For legacy services
// migrated from the `Custom` type, this may be a distinct project from the
// one parenting the service itself.
string project_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// The location of the parent cluster. This may be a zone or region.
string location = 2;
// The name of the parent cluster.
string cluster_name = 3;
// The name of the parent namespace.
string namespace_name = 4;
// The name of this service.
string service_name = 5;
}
// A well-known service type, defined by its service type and service labels.
// Documentation and examples
// [here](https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/api-structures#basic-svc-w-basic-sli).
message BasicService {
// The type of service that this basic service defines, e.g.
// APP_ENGINE service type.
// Documentation and valid values
// [here](https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/api-structures#basic-svc-w-basic-sli).
string service_type = 1;
// Labels that specify the resource that emits the monitoring data which
// is used for SLO reporting of this `Service`.
// Documentation and valid values for given service types
// [here](https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/api-structures#basic-svc-w-basic-sli).
map<string, string> service_labels = 2;
}
// Configuration for how to query telemetry on a Service.
message Telemetry {
// The full name of the resource that defines this service. Formatted as
// described in https://cloud.google.com/apis/design/resource_names.
string resource_name = 1;
}
// Identifier. Resource name for this Service. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]
string name = 1 [(google.api.field_behavior) = IDENTIFIER];
// Name used for UI elements listing this Service.
string display_name = 2;
// REQUIRED. Service-identifying atoms specifying the underlying service.
oneof identifier {
// Custom service type.
Custom custom = 6;
// Type used for App Engine services.
AppEngine app_engine = 7;
// Type used for Cloud Endpoints services.
CloudEndpoints cloud_endpoints = 8;
// Type used for Istio services that live in a Kubernetes cluster.
ClusterIstio cluster_istio = 9;
// Type used for Istio services scoped to an Istio mesh.
MeshIstio mesh_istio = 10;
// Type used for canonical services scoped to an Istio mesh.
// Metrics for Istio are
// [documented here](https://istio.io/latest/docs/reference/config/metrics/)
IstioCanonicalService istio_canonical_service = 11;
// Type used for Cloud Run services.
CloudRun cloud_run = 12;
// Type used for GKE Namespaces.
GkeNamespace gke_namespace = 15;
// Type used for GKE Workloads.
GkeWorkload gke_workload = 16;
// Type used for GKE Services (the Kubernetes concept of a service).
GkeService gke_service = 17;
}
// Message that contains the service type and service labels of this service
// if it is a basic service.
// Documentation and examples
// [here](https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/api-structures#basic-svc-w-basic-sli).
BasicService basic_service = 19;
// Configuration for how to query telemetry on a Service.
Telemetry telemetry = 13;
// Labels which have been used to annotate the service. Label keys must start
// with a letter. Label keys and values may contain lowercase letters,
// numbers, underscores, and dashes. Label keys and values have a maximum
// length of 63 characters, and must be less than 128 bytes in size. Up to 64
// label entries may be stored. For labels which do not have a semantic value,
// the empty string may be supplied for the label value.
map<string, string> user_labels = 14;
}
// A Service-Level Objective (SLO) describes a 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."
message ServiceLevelObjective {
option (google.api.resource) = {
type: "monitoring.googleapis.com/ServiceLevelObjective"
pattern: "projects/{project}/services/{service}/serviceLevelObjectives/{service_level_objective}"
pattern: "organizations/{organization}/services/{service}/serviceLevelObjectives/{service_level_objective}"
pattern: "folders/{folder}/services/{service}/serviceLevelObjectives/{service_level_objective}"
pattern: "*"
history: ORIGINALLY_SINGLE_PATTERN
};
// `ServiceLevelObjective.View` determines what form of
// `ServiceLevelObjective` is returned from `GetServiceLevelObjective`,
// `ListServiceLevelObjectives`, and `ListServiceLevelObjectiveVersions` RPCs.
enum View {
// Same as FULL.
VIEW_UNSPECIFIED = 0;
// Return the embedded `ServiceLevelIndicator` in the form in which it was
// defined. If it was defined using a `BasicSli`, return that `BasicSli`.
FULL = 2;
// For `ServiceLevelIndicator`s using `BasicSli` articulation, instead
// return the `ServiceLevelIndicator` with its mode of computation fully
// spelled out as a `RequestBasedSli`. For `ServiceLevelIndicator`s using
// `RequestBasedSli` or `WindowsBasedSli`, return the
// `ServiceLevelIndicator` as it was provided.
EXPLICIT = 1;
}
// Identifier. Resource name for this `ServiceLevelObjective`. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]/serviceLevelObjectives/[SLO_NAME]
string name = 1 [(google.api.field_behavior) = IDENTIFIER];
// Name used for UI elements listing this SLO.
string display_name = 11;
// The definition of good service, used to measure and calculate the quality
// of the `Service`'s performance with respect to a single aspect of service
// quality.
ServiceLevelIndicator service_level_indicator = 3;
// The fraction of service that must be good in order for this objective to be
// met. `0 < goal <= 0.9999`.
double goal = 4;
// The time period over which the objective will be evaluated.
oneof period {
// A rolling time period, semantically "in the past `<rolling_period>`".
// Must be an integer multiple of 1 day no larger than 30 days.
google.protobuf.Duration rolling_period = 5;
// A calendar period, semantically "since the start of the current
// `<calendar_period>`". At this time, only `DAY`, `WEEK`, `FORTNIGHT`, and
// `MONTH` are supported.
google.type.CalendarPeriod calendar_period = 6;
}
// Labels which have been used to annotate the service-level objective. Label
// keys must start with a letter. Label keys and values may contain lowercase
// letters, numbers, underscores, and dashes. Label keys and values have a
// maximum length of 63 characters, and must be less than 128 bytes in size.
// Up to 64 label entries may be stored. For labels which do not have a
// semantic value, the empty string may be supplied for the label value.
map<string, string> user_labels = 12;
}
// A Service-Level Indicator (SLI) describes the "performance" of a service. For
// some services, the SLI is well-defined. In such cases, the SLI can be
// described easily by referencing the well-known SLI and providing the needed
// parameters. Alternatively, a "custom" SLI can be defined with a query to the
// underlying metric store. An SLI is defined to be `good_service /
// total_service` over any queried time interval. The value of performance
// always falls into the range `0 <= performance <= 1`. A custom SLI describes
// how to compute this ratio, whether this is by dividing values from a pair of
// time series, cutting a `Distribution` into good and bad counts, or counting
// time windows in which the service complies with a criterion. For separation
// of concerns, a single Service-Level Indicator measures performance for only
// one aspect of service quality, such as fraction of successful queries or
// fast-enough queries.
message ServiceLevelIndicator {
// Service level indicators can be grouped by whether the "unit" of service
// being measured is based on counts of good requests or on counts of good
// time windows
oneof type {
// Basic SLI on a well-known service type.
BasicSli basic_sli = 4;
// Request-based SLIs
RequestBasedSli request_based = 1;
// Windows-based SLIs
WindowsBasedSli windows_based = 2;
}
}
// An SLI measuring performance on a well-known service type. Performance will
// be computed on the basis of pre-defined metrics. The type of the
// `service_resource` determines the metrics to use and the
// `service_resource.labels` and `metric_labels` are used to construct a
// monitoring filter to filter that metric down to just the data relevant to
// this service.
message BasicSli {
// Future parameters for the availability SLI.
message AvailabilityCriteria {}
// Parameters for a latency threshold SLI.
message LatencyCriteria {
// Good service is defined to be the count of requests made to this service
// that return in no more than `threshold`.
google.protobuf.Duration threshold = 3;
}
// OPTIONAL: The set of RPCs to which this SLI is relevant. Telemetry from
// other methods will not be used to calculate performance for this SLI. If
// omitted, this SLI applies to all the Service's methods. For service types
// that don't support breaking down by method, setting this field will result
// in an error.
repeated string method = 7;
// OPTIONAL: The set of locations to which this SLI is relevant. Telemetry
// from other locations will not be used to calculate performance for this
// SLI. If omitted, this SLI applies to all locations in which the Service has
// activity. For service types that don't support breaking down by location,
// setting this field will result in an error.
repeated string location = 8;
// OPTIONAL: The set of API versions to which this SLI is relevant. Telemetry
// from other API versions will not be used to calculate performance for this
// SLI. If omitted, this SLI applies to all API versions. For service types
// that don't support breaking down by version, setting this field will result
// in an error.
repeated string version = 9;
// This SLI can be evaluated on the basis of availability or latency.
oneof sli_criteria {
// Good service is defined to be the count of requests made to this service
// that return successfully.
AvailabilityCriteria availability = 2;
// Good service is defined to be the count of requests made to this service
// that are fast enough with respect to `latency.threshold`.
LatencyCriteria latency = 3;
}
}
// Range of numerical values within `min` and `max`.
message Range {
// Range minimum.
double min = 1;
// Range maximum.
double max = 2;
}
// Service Level Indicators for which atomic units of service are counted
// directly.
message RequestBasedSli {
// The means to compute a ratio of `good_service` to `total_service`.
oneof method {
// `good_total_ratio` is used when the ratio of `good_service` to
// `total_service` is computed from two `TimeSeries`.
TimeSeriesRatio good_total_ratio = 1;
// `distribution_cut` is used when `good_service` is a count of values
// aggregated in a `Distribution` that fall into a good range. The
// `total_service` is the total count of all values aggregated in the
// `Distribution`.
DistributionCut distribution_cut = 3;
}
}
// A `TimeSeriesRatio` specifies two `TimeSeries` to use for computing the
// `good_service / total_service` ratio. The specified `TimeSeries` must have
// `ValueType = DOUBLE` or `ValueType = INT64` and must have `MetricKind =
// DELTA` or `MetricKind = CUMULATIVE`. The `TimeSeriesRatio` must specify
// exactly two of good, bad, and total, and the relationship `good_service +
// bad_service = total_service` will be assumed.
message TimeSeriesRatio {
// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
// specifying a `TimeSeries` quantifying good service provided. Must have
// `ValueType = DOUBLE` or `ValueType = INT64` and must have `MetricKind =
// DELTA` or `MetricKind = CUMULATIVE`.
string good_service_filter = 4;
// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
// specifying a `TimeSeries` quantifying bad service, either demanded service
// that was not provided or demanded service that was of inadequate quality.
// Must have `ValueType = DOUBLE` or `ValueType = INT64` and must have
// `MetricKind = DELTA` or `MetricKind = CUMULATIVE`.
string bad_service_filter = 5;
// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
// specifying a `TimeSeries` quantifying total demanded service. Must have
// `ValueType = DOUBLE` or `ValueType = INT64` and must have `MetricKind =
// DELTA` or `MetricKind = CUMULATIVE`.
string total_service_filter = 6;
}
// A `DistributionCut` defines a `TimeSeries` and thresholds used for measuring
// good service and total service. The `TimeSeries` must have `ValueType =
// DISTRIBUTION` and `MetricKind = DELTA` or `MetricKind = CUMULATIVE`. The
// computed `good_service` will be the estimated count of values in the
// `Distribution` that fall within the specified `min` and `max`.
message DistributionCut {
// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
// specifying a `TimeSeries` aggregating values. Must have `ValueType =
// DISTRIBUTION` and `MetricKind = DELTA` or `MetricKind = CUMULATIVE`.
string distribution_filter = 4;
// Range of values considered "good." For a one-sided range, set one bound to
// an infinite value.
Range range = 5;
}
// A `WindowsBasedSli` defines `good_service` as the count of time windows for
// which the provided service was of good quality. Criteria for determining
// if service was good are embedded in the `window_criterion`.
message WindowsBasedSli {
// A `PerformanceThreshold` is used when each window is good when that window
// has a sufficiently high `performance`.
message PerformanceThreshold {
// The means, either a request-based SLI or a basic SLI, by which to compute
// performance over a window.
oneof type {
// `RequestBasedSli` to evaluate to judge window quality.
RequestBasedSli performance = 1;
// `BasicSli` to evaluate to judge window quality.
BasicSli basic_sli_performance = 3;
}
// If window `performance >= threshold`, the window is counted as good.
double threshold = 2;
}
// A `MetricRange` is used when each window is good when the value x of a
// single `TimeSeries` satisfies `range.min <= x <= range.max`. The provided
// `TimeSeries` must have `ValueType = INT64` or `ValueType = DOUBLE` and
// `MetricKind = GAUGE`.
message MetricRange {
// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
// specifying the `TimeSeries` to use for evaluating window quality.
string time_series = 1;
// Range of values considered "good." For a one-sided range, set one bound
// to an infinite value.
Range range = 4;
}
// The criterion to use for evaluating window goodness.
oneof window_criterion {
// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
// specifying a `TimeSeries` with `ValueType = BOOL`. The window is good if
// any `true` values appear in the window.
string good_bad_metric_filter = 5;
// A window is good if its `performance` is high enough.
PerformanceThreshold good_total_ratio_threshold = 2;
// A window is good if the metric's value is in a good range, averaged
// across returned streams.
MetricRange metric_mean_in_range = 6;
// A window is good if the metric's value is in a good range, summed across
// returned streams.
MetricRange metric_sum_in_range = 7;
}
// Duration over which window quality is evaluated. Must be an integer
// fraction of a day and at least `60s`.
google.protobuf.Duration window_period = 4;
}

View file

@ -0,0 +1,361 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/service.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "ServiceMonitoringServiceProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The Cloud Monitoring Service-Oriented Monitoring API has endpoints for
// managing and querying aspects of a Metrics Scope's services. These include
// the `Service`'s monitored resources, its Service-Level Objectives, and a
// taxonomy of categorized Health Metrics.
service ServiceMonitoringService {
option (google.api.default_host) = "monitoring.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/monitoring,"
"https://www.googleapis.com/auth/monitoring.read";
// Create a `Service`.
rpc CreateService(CreateServiceRequest) returns (Service) {
option (google.api.http) = {
post: "/v3/{parent=*/*}/services"
body: "service"
};
option (google.api.method_signature) = "parent,service";
}
// Get the named `Service`.
rpc GetService(GetServiceRequest) returns (Service) {
option (google.api.http) = {
get: "/v3/{name=*/*/services/*}"
};
option (google.api.method_signature) = "name";
}
// List `Service`s for this Metrics Scope.
rpc ListServices(ListServicesRequest) returns (ListServicesResponse) {
option (google.api.http) = {
get: "/v3/{parent=*/*}/services"
};
option (google.api.method_signature) = "parent";
}
// Update this `Service`.
rpc UpdateService(UpdateServiceRequest) returns (Service) {
option (google.api.http) = {
patch: "/v3/{service.name=*/*/services/*}"
body: "service"
};
option (google.api.method_signature) = "service";
}
// Soft delete this `Service`.
rpc DeleteService(DeleteServiceRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v3/{name=*/*/services/*}"
};
option (google.api.method_signature) = "name";
}
// Create a `ServiceLevelObjective` for the given `Service`.
rpc CreateServiceLevelObjective(CreateServiceLevelObjectiveRequest)
returns (ServiceLevelObjective) {
option (google.api.http) = {
post: "/v3/{parent=*/*/services/*}/serviceLevelObjectives"
body: "service_level_objective"
};
option (google.api.method_signature) = "parent,service_level_objective";
}
// Get a `ServiceLevelObjective` by name.
rpc GetServiceLevelObjective(GetServiceLevelObjectiveRequest)
returns (ServiceLevelObjective) {
option (google.api.http) = {
get: "/v3/{name=*/*/services/*/serviceLevelObjectives/*}"
};
option (google.api.method_signature) = "name";
}
// List the `ServiceLevelObjective`s for the given `Service`.
rpc ListServiceLevelObjectives(ListServiceLevelObjectivesRequest)
returns (ListServiceLevelObjectivesResponse) {
option (google.api.http) = {
get: "/v3/{parent=*/*/services/*}/serviceLevelObjectives"
};
option (google.api.method_signature) = "parent";
}
// Update the given `ServiceLevelObjective`.
rpc UpdateServiceLevelObjective(UpdateServiceLevelObjectiveRequest)
returns (ServiceLevelObjective) {
option (google.api.http) = {
patch: "/v3/{service_level_objective.name=*/*/services/*/serviceLevelObjectives/*}"
body: "service_level_objective"
};
option (google.api.method_signature) = "service_level_objective";
}
// Delete the given `ServiceLevelObjective`.
rpc DeleteServiceLevelObjective(DeleteServiceLevelObjectiveRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v3/{name=*/*/services/*/serviceLevelObjectives/*}"
};
option (google.api.method_signature) = "name";
}
}
// The `CreateService` request.
message CreateServiceRequest {
// Required. Resource
// [name](https://cloud.google.com/monitoring/api/v3#project_name) of the
// parent Metrics Scope. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/Service"
}
];
// Optional. The Service id to use for this Service. If omitted, an id will be
// generated instead. Must match the pattern `[a-z0-9\-]+`
string service_id = 3;
// Required. The `Service` to create.
Service service = 2 [(google.api.field_behavior) = REQUIRED];
}
// The `GetService` request.
message GetServiceRequest {
// Required. Resource name of the `Service`. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Service"
}
];
}
// The `ListServices` request.
message ListServicesRequest {
// Required. Resource name of the parent containing the listed services,
// either a [project](https://cloud.google.com/monitoring/api/v3#project_name)
// or a Monitoring Metrics Scope. The formats are:
//
// projects/[PROJECT_ID_OR_NUMBER]
// workspaces/[HOST_PROJECT_ID_OR_NUMBER]
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/Service"
}
];
// A filter specifying what `Service`s to return. The filter supports
// filtering on a particular service-identifier type or one of its attributes.
//
// To filter on a particular service-identifier type, the `identifier_case`
// refers to which option in the `identifier` field is populated. For example,
// the filter `identifier_case = "CUSTOM"` would match all services with a
// value for the `custom` field. Valid options include "CUSTOM", "APP_ENGINE",
// "MESH_ISTIO", and the other options listed at
// https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services#Service
//
// To filter on an attribute of a service-identifier type, apply the filter
// name by using the snake case of the service-identifier type and the
// attribute of that service-identifier type, and join the two with a period.
// For example, to filter by the `meshUid` field of the `MeshIstio`
// service-identifier type, you must filter on `mesh_istio.mesh_uid =
// "123"` to match all services with mesh UID "123". Service-identifier types
// and their attributes are described at
// https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services#Service
string filter = 2;
// A non-negative number that is the maximum number of results to return.
// When 0, use default page size.
int32 page_size = 3;
// If this field is not empty then it must contain the `nextPageToken` value
// returned by a previous call to this method. Using this field causes the
// method to return additional results from the previous method call.
string page_token = 4;
}
// The `ListServices` response.
message ListServicesResponse {
// The `Service`s matching the specified filter.
repeated Service services = 1;
// If there are more results than have been returned, then this field is set
// to a non-empty value. To see the additional results,
// use that value as `page_token` in the next call to this method.
string next_page_token = 2;
}
// The `UpdateService` request.
message UpdateServiceRequest {
// Required. The `Service` to draw updates from.
// The given `name` specifies the resource to update.
Service service = 1 [(google.api.field_behavior) = REQUIRED];
// A set of field paths defining which fields to use for the update.
google.protobuf.FieldMask update_mask = 2;
}
// The `DeleteService` request.
message DeleteServiceRequest {
// Required. Resource name of the `Service` to delete. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Service"
}
];
}
// The `CreateServiceLevelObjective` request.
message CreateServiceLevelObjectiveRequest {
// Required. Resource name of the parent `Service`. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Service"
}
];
// Optional. The ServiceLevelObjective id to use for this
// ServiceLevelObjective. If omitted, an id will be generated instead. Must
// match the pattern `^[a-zA-Z0-9-_:.]+$`
string service_level_objective_id = 3;
// Required. The `ServiceLevelObjective` to create.
// The provided `name` will be respected if no `ServiceLevelObjective` exists
// with this name.
ServiceLevelObjective service_level_objective = 2
[(google.api.field_behavior) = REQUIRED];
}
// The `GetServiceLevelObjective` request.
message GetServiceLevelObjectiveRequest {
// Required. Resource name of the `ServiceLevelObjective` to get. The format
// is:
//
// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]/serviceLevelObjectives/[SLO_NAME]
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/ServiceLevelObjective"
}
];
// View of the `ServiceLevelObjective` to return. If `DEFAULT`, return the
// `ServiceLevelObjective` as originally defined. If `EXPLICIT` and the
// `ServiceLevelObjective` is defined in terms of a `BasicSli`, replace the
// `BasicSli` with a `RequestBasedSli` spelling out how the SLI is computed.
ServiceLevelObjective.View view = 2;
}
// The `ListServiceLevelObjectives` request.
message ListServiceLevelObjectivesRequest {
// Required. Resource name of the parent containing the listed SLOs, either a
// project or a Monitoring Metrics Scope. The formats are:
//
// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]
// workspaces/[HOST_PROJECT_ID_OR_NUMBER]/services/-
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Service"
}
];
// A filter specifying what `ServiceLevelObjective`s to return.
string filter = 2;
// A non-negative number that is the maximum number of results to return.
// When 0, use default page size.
int32 page_size = 3;
// If this field is not empty then it must contain the `nextPageToken` value
// returned by a previous call to this method. Using this field causes the
// method to return additional results from the previous method call.
string page_token = 4;
// View of the `ServiceLevelObjective`s to return. If `DEFAULT`, return each
// `ServiceLevelObjective` as originally defined. If `EXPLICIT` and the
// `ServiceLevelObjective` is defined in terms of a `BasicSli`, replace the
// `BasicSli` with a `RequestBasedSli` spelling out how the SLI is computed.
ServiceLevelObjective.View view = 5;
}
// The `ListServiceLevelObjectives` response.
message ListServiceLevelObjectivesResponse {
// The `ServiceLevelObjective`s matching the specified filter.
repeated ServiceLevelObjective service_level_objectives = 1;
// If there are more results than have been returned, then this field is set
// to a non-empty value. To see the additional results,
// use that value as `page_token` in the next call to this method.
string next_page_token = 2;
}
// The `UpdateServiceLevelObjective` request.
message UpdateServiceLevelObjectiveRequest {
// Required. The `ServiceLevelObjective` to draw updates from.
// The given `name` specifies the resource to update.
ServiceLevelObjective service_level_objective = 1
[(google.api.field_behavior) = REQUIRED];
// A set of field paths defining which fields to use for the update.
google.protobuf.FieldMask update_mask = 2;
}
// The `DeleteServiceLevelObjective` request.
message DeleteServiceLevelObjectiveRequest {
// Required. Resource name of the `ServiceLevelObjective` to delete. The
// format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]/serviceLevelObjectives/[SLO_NAME]
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/ServiceLevelObjective"
}
];
}

View file

@ -0,0 +1,78 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/common.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "SnoozeProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// A `Snooze` will prevent any alerts from being opened, and close any that
// are already open. The `Snooze` will work on alerts that match the
// criteria defined in the `Snooze`. The `Snooze` will be active from
// `interval.start_time` through `interval.end_time`.
message Snooze {
option (google.api.resource) = {
type: "monitoring.googleapis.com/Snooze"
pattern: "projects/{project}/snoozes/{snooze}"
};
// Criteria specific to the `AlertPolicy`s that this `Snooze` applies to. The
// `Snooze` will suppress alerts that come from one of the `AlertPolicy`s
// whose names are supplied.
message Criteria {
// The specific `AlertPolicy` names for the alert that should be snoozed.
// The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[POLICY_ID]
//
// There is a limit of 16 policies per snooze. This limit is checked during
// snooze creation.
repeated string policies = 1 [(google.api.resource_reference) = {
type: "monitoring.googleapis.com/AlertPolicy"
}];
}
// Required. Identifier. The name of the `Snooze`. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/snoozes/[SNOOZE_ID]
//
// The ID of the `Snooze` will be generated by the system.
string name = 1 [(google.api.field_behavior) = IDENTIFIER];
// Required. This defines the criteria for applying the `Snooze`. See
// `Criteria` for more information.
Criteria criteria = 3 [(google.api.field_behavior) = REQUIRED];
// Required. The `Snooze` will be active from `interval.start_time` through
// `interval.end_time`.
// `interval.start_time` cannot be in the past. There is a 15 second clock
// skew to account for the time it takes for a request to reach the API from
// the UI.
TimeInterval interval = 4 [(google.api.field_behavior) = REQUIRED];
// Required. A display name for the `Snooze`. This can be, at most, 512
// unicode characters.
string display_name = 5 [(google.api.field_behavior) = REQUIRED];
}

View file

@ -0,0 +1,210 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/snooze.proto";
import "google/protobuf/field_mask.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "SnoozeServiceProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The SnoozeService API is used to temporarily prevent an alert policy from
// generating alerts. A Snooze is a description of the criteria under which one
// or more alert policies should not fire alerts for the specified duration.
service SnoozeService {
option (google.api.default_host) = "monitoring.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/monitoring,"
"https://www.googleapis.com/auth/monitoring.read";
// Creates a `Snooze` that will prevent alerts, which match the provided
// criteria, from being opened. The `Snooze` applies for a specific time
// interval.
rpc CreateSnooze(CreateSnoozeRequest) returns (Snooze) {
option (google.api.http) = {
post: "/v3/{parent=projects/*}/snoozes"
body: "snooze"
};
option (google.api.method_signature) = "parent,snooze";
}
// Lists the `Snooze`s associated with a project. Can optionally pass in
// `filter`, which specifies predicates to match `Snooze`s.
rpc ListSnoozes(ListSnoozesRequest) returns (ListSnoozesResponse) {
option (google.api.http) = {
get: "/v3/{parent=projects/*}/snoozes"
};
option (google.api.method_signature) = "parent";
}
// Retrieves a `Snooze` by `name`.
rpc GetSnooze(GetSnoozeRequest) returns (Snooze) {
option (google.api.http) = {
get: "/v3/{name=projects/*/snoozes/*}"
};
option (google.api.method_signature) = "name";
}
// Updates a `Snooze`, identified by its `name`, with the parameters in the
// given `Snooze` object.
rpc UpdateSnooze(UpdateSnoozeRequest) returns (Snooze) {
option (google.api.http) = {
patch: "/v3/{snooze.name=projects/*/snoozes/*}"
body: "snooze"
};
option (google.api.method_signature) = "snooze,update_mask";
}
}
// The message definition for creating a `Snooze`. Users must provide the body
// of the `Snooze` to be created but must omit the `Snooze` field, `name`.
message CreateSnoozeRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) in which
// a `Snooze` should be created. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/Snooze"
}
];
// Required. The `Snooze` to create. Omit the `name` field, as it will be
// filled in by the API.
Snooze snooze = 2 [(google.api.field_behavior) = REQUIRED];
}
// The message definition for listing `Snooze`s associated with the given
// `parent`, satisfying the optional `filter`.
message ListSnoozesRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) whose
// `Snooze`s should be listed. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/Snooze"
}
];
// Optional. Optional filter to restrict results to the given criteria. The
// following fields are supported.
//
// * `interval.start_time`
// * `interval.end_time`
//
// For example:
//
// ```
// interval.start_time > "2022-03-11T00:00:00-08:00" AND
// interval.end_time < "2022-03-12T00:00:00-08:00"
// ```
string filter = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. The maximum number of results to return for a single query. The
// server may further constrain the maximum number of results returned in a
// single page. The value should be in the range [1, 1000]. If the value given
// is outside this range, the server will decide the number of results to be
// returned.
int32 page_size = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. The `next_page_token` from a previous call to
// `ListSnoozesRequest` to get the next page of results.
string page_token = 5 [(google.api.field_behavior) = OPTIONAL];
}
// The results of a successful `ListSnoozes` call, containing the matching
// `Snooze`s.
message ListSnoozesResponse {
// `Snooze`s matching this list call.
repeated Snooze snoozes = 1;
// Page token for repeated calls to `ListSnoozes`, to fetch additional pages
// of results. If this is empty or missing, there are no more pages.
string next_page_token = 2;
}
// The message definition for retrieving a `Snooze`. Users must specify the
// field, `name`, which identifies the `Snooze`.
message GetSnoozeRequest {
// Required. The ID of the `Snooze` to retrieve. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/snoozes/[SNOOZE_ID]
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/Snooze"
}
];
}
// The message definition for updating a `Snooze`. The field, `snooze.name`
// identifies the `Snooze` to be updated. The remainder of `snooze` gives the
// content the `Snooze` in question will be assigned.
//
// What fields can be updated depends on the start time and end time of the
// `Snooze`.
//
// * end time is in the past: These `Snooze`s are considered
// read-only and cannot be updated.
// * start time is in the past and end time is in the future: `display_name`
// and `interval.end_time` can be updated.
// * start time is in the future: `display_name`, `interval.start_time` and
// `interval.end_time` can be updated.
message UpdateSnoozeRequest {
// Required. The `Snooze` to update. Must have the name field present.
Snooze snooze = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The fields to update.
//
// For each field listed in `update_mask`:
//
// * If the `Snooze` object supplied in the `UpdateSnoozeRequest` has a
// value for that field, the value of the field in the existing `Snooze`
// will be set to the value of the field in the supplied `Snooze`.
// * If the field does not have a value in the supplied `Snooze`, the field
// in the existing `Snooze` is set to its default value.
//
// Fields not listed retain their existing value.
//
// The following are the field names that are accepted in `update_mask`:
//
// * `display_name`
// * `interval.start_time`
// * `interval.end_time`
//
// That said, the start time and end time of the `Snooze` determines which
// fields can legally be updated. Before attempting an update, users should
// consult the documentation for `UpdateSnoozeRequest`, which talks about
// which fields can be updated.
google.protobuf.FieldMask update_mask = 2
[(google.api.field_behavior) = REQUIRED];
}

View file

@ -0,0 +1,45 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "SpanContextProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The context of a span. This is attached to an
// [Exemplar][google.api.Distribution.Exemplar]
// in [Distribution][google.api.Distribution] values during aggregation.
//
// It contains the name of a span with format:
//
// projects/[PROJECT_ID_OR_NUMBER]/traces/[TRACE_ID]/spans/[SPAN_ID]
message SpanContext {
// The resource name of the span. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/traces/[TRACE_ID]/spans/[SPAN_ID]
//
// `[TRACE_ID]` is a unique identifier for a trace within a project;
// it is a 32-character hexadecimal encoding of a 16-byte array.
//
// `[SPAN_ID]` is a unique identifier for a span within a trace; it
// is a 16-character hexadecimal encoding of an 8-byte array.
string span_name = 1;
}

View file

@ -0,0 +1,633 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/field_behavior.proto";
import "google/api/field_info.proto";
import "google/api/monitored_resource.proto";
import "google/api/resource.proto";
import "google/protobuf/duration.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "UptimeProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
option (google.api.resource_definition) = {
type: "cloudfunctions.googleapis.com/Function"
pattern: "projects/{project}/locations/{location}/functions/{function}"
};
// An internal checker allows Uptime checks to run on private/internal GCP
// resources.
message InternalChecker {
option deprecated = true;
// Operational states for an internal checker.
enum State {
// An internal checker should never be in the unspecified state.
UNSPECIFIED = 0;
// The checker is being created, provisioned, and configured. A checker in
// this state can be returned by `ListInternalCheckers` or
// `GetInternalChecker`, as well as by examining the [long running
// Operation](https://cloud.google.com/apis/design/design_patterns#long_running_operations)
// that created it.
CREATING = 1;
// The checker is running and available for use. A checker in this state
// can be returned by `ListInternalCheckers` or `GetInternalChecker` as
// well as by examining the [long running
// Operation](https://cloud.google.com/apis/design/design_patterns#long_running_operations)
// that created it.
// If a checker is being torn down, it is neither visible nor usable, so
// there is no "deleting" or "down" state.
RUNNING = 2;
}
// A unique resource name for this InternalChecker. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/internalCheckers/[INTERNAL_CHECKER_ID]
//
// `[PROJECT_ID_OR_NUMBER]` is the Cloud Monitoring Metrics Scope project for
// the Uptime check config associated with the internal checker.
string name = 1;
// The checker's human-readable name. The display name
// should be unique within a Cloud Monitoring Metrics Scope in order to make
// it easier to identify; however, uniqueness is not enforced.
string display_name = 2;
// The [GCP VPC network](https://cloud.google.com/vpc/docs/vpc) where the
// internal resource lives (ex: "default").
string network = 3;
// The GCP zone the Uptime check should egress from. Only respected for
// internal Uptime checks, where internal_network is specified.
string gcp_zone = 4;
// The GCP project ID where the internal checker lives. Not necessary
// the same as the Metrics Scope project.
string peer_project_id = 6;
// The current operational state of the internal checker.
State state = 7;
}
// Describes a Synthetic Monitor to be invoked by Uptime.
message SyntheticMonitorTarget {
// A Synthetic Monitor deployed to a Cloud Functions V2 instance.
message CloudFunctionV2Target {
// Required. Fully qualified GCFv2 resource name
// i.e. `projects/{project}/locations/{location}/functions/{function}`
// Required.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "cloudfunctions.googleapis.com/Function"
}
];
// Output only. The `cloud_run_revision` Monitored Resource associated with
// the GCFv2. The Synthetic Monitor execution results (metrics, logs, and
// spans) are reported against this Monitored Resource. This field is output
// only.
google.api.MonitoredResource cloud_run_revision = 2
[(google.api.field_behavior) = OUTPUT_ONLY];
}
// Specifies a Synthetic Monitor's execution stack.
oneof target {
// Target a Synthetic Monitor GCFv2 instance.
CloudFunctionV2Target cloud_function_v2 = 1;
}
}
// This message configures which resources and services to monitor for
// availability.
message UptimeCheckConfig {
option (google.api.resource) = {
type: "monitoring.googleapis.com/UptimeCheckConfig"
pattern: "projects/{project}/uptimeCheckConfigs/{uptime_check_config}"
pattern: "organizations/{organization}/uptimeCheckConfigs/{uptime_check_config}"
pattern: "folders/{folder}/uptimeCheckConfigs/{uptime_check_config}"
pattern: "*"
};
// The resource submessage for group checks. It can be used instead of a
// monitored resource, when multiple resources are being monitored.
message ResourceGroup {
// The group of resources being monitored. Should be only the `[GROUP_ID]`,
// and not the full-path
// `projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]`.
string group_id = 1;
// The resource type of the group members.
GroupResourceType resource_type = 2;
}
// Information involved in sending ICMP pings alongside public HTTP/TCP
// checks. For HTTP, the pings are performed for each part of the redirect
// chain.
message PingConfig {
// Number of ICMP pings. A maximum of 3 ICMP pings is currently supported.
int32 pings_count = 1;
}
// Information involved in an HTTP/HTTPS Uptime check request.
message HttpCheck {
// The HTTP request method options.
enum RequestMethod {
// No request method specified.
METHOD_UNSPECIFIED = 0;
// GET request.
GET = 1;
// POST request.
POST = 2;
}
// The authentication parameters to provide to the specified resource or
// URL that requires a username and password. Currently, only
// [Basic HTTP authentication](https://tools.ietf.org/html/rfc7617) is
// supported in Uptime checks.
message BasicAuthentication {
// The username to use when authenticating with the HTTP server.
string username = 1;
// The password to use when authenticating with the HTTP server.
string password = 2;
}
// Header options corresponding to the content type of a HTTP request body.
enum ContentType {
// No content type specified.
TYPE_UNSPECIFIED = 0;
// `body` is in URL-encoded form. Equivalent to setting the `Content-Type`
// to `application/x-www-form-urlencoded` in the HTTP request.
URL_ENCODED = 1;
// `body` is in `custom_content_type` form. Equivalent to setting the
// `Content-Type` to the contents of `custom_content_type` in the HTTP
// request.
USER_PROVIDED = 2;
}
// A status to accept. Either a status code class like "2xx", or an integer
// status code like "200".
message ResponseStatusCode {
// An HTTP status code class.
enum StatusClass {
// Default value that matches no status codes.
STATUS_CLASS_UNSPECIFIED = 0;
// The class of status codes between 100 and 199.
STATUS_CLASS_1XX = 100;
// The class of status codes between 200 and 299.
STATUS_CLASS_2XX = 200;
// The class of status codes between 300 and 399.
STATUS_CLASS_3XX = 300;
// The class of status codes between 400 and 499.
STATUS_CLASS_4XX = 400;
// The class of status codes between 500 and 599.
STATUS_CLASS_5XX = 500;
// The class of all status codes.
STATUS_CLASS_ANY = 1000;
}
// Either a specific value or a class of status codes.
oneof status_code {
// A status code to accept.
int32 status_value = 1;
// A class of status codes to accept.
StatusClass status_class = 2;
}
}
// Contains information needed for generating either an
// [OpenID Connect
// token](https://developers.google.com/identity/protocols/OpenIDConnect) or
// [OAuth token](https://developers.google.com/identity/protocols/oauth2).
// The token will be generated for the Monitoring service agent service
// account.
message ServiceAgentAuthentication {
// Type of authentication.
enum ServiceAgentAuthenticationType {
// Default value, will result in OIDC Authentication.
SERVICE_AGENT_AUTHENTICATION_TYPE_UNSPECIFIED = 0;
// OIDC Authentication
OIDC_TOKEN = 1;
}
// Type of authentication.
ServiceAgentAuthenticationType type = 1;
}
// The HTTP request method to use for the check. If set to
// `METHOD_UNSPECIFIED` then `request_method` defaults to `GET`.
RequestMethod request_method = 8;
// If `true`, use HTTPS instead of HTTP to run the check.
bool use_ssl = 1;
// Optional (defaults to "/"). The path to the page against which to run
// the check. Will be combined with the `host` (specified within the
// `monitored_resource`) and `port` to construct the full URL. If the
// provided path does not begin with "/", a "/" will be prepended
// automatically.
string path = 2;
// Optional (defaults to 80 when `use_ssl` is `false`, and 443 when
// `use_ssl` is `true`). The TCP port on the HTTP server against which to
// run the check. Will be combined with host (specified within the
// `monitored_resource`) and `path` to construct the full URL.
int32 port = 3;
// The authentication information. Optional when creating an HTTP check;
// defaults to empty.
// Do not set both `auth_method` and `auth_info`.
BasicAuthentication auth_info = 4;
// Boolean specifying whether to encrypt the header information.
// Encryption should be specified for any headers related to authentication
// that you do not wish to be seen when retrieving the configuration. The
// server will be responsible for encrypting the headers.
// On Get/List calls, if `mask_headers` is set to `true` then the headers
// will be obscured with `******.`
bool mask_headers = 5;
// The list of headers to send as part of the Uptime check request.
// If two headers have the same key and different values, they should
// be entered as a single header, with the value being a comma-separated
// list of all the desired values as described at
// https://www.w3.org/Protocols/rfc2616/rfc2616.txt (page 31).
// Entering two separate headers with the same key in a Create call will
// cause the first to be overwritten by the second.
// The maximum number of headers allowed is 100.
map<string, string> headers = 6;
// The content type header to use for the check. The following
// configurations result in errors:
// 1. Content type is specified in both the `headers` field and the
// `content_type` field.
// 2. Request method is `GET` and `content_type` is not `TYPE_UNSPECIFIED`
// 3. Request method is `POST` and `content_type` is `TYPE_UNSPECIFIED`.
// 4. Request method is `POST` and a "Content-Type" header is provided via
// `headers` field. The `content_type` field should be used instead.
ContentType content_type = 9;
// A user provided content type header to use for the check. The invalid
// configurations outlined in the `content_type` field apply to
// `custom_content_type`, as well as the following:
// 1. `content_type` is `URL_ENCODED` and `custom_content_type` is set.
// 2. `content_type` is `USER_PROVIDED` and `custom_content_type` is not
// set.
string custom_content_type = 13;
// Boolean specifying whether to include SSL certificate validation as a
// part of the Uptime check. Only applies to checks where
// `monitored_resource` is set to `uptime_url`. If `use_ssl` is `false`,
// setting `validate_ssl` to `true` has no effect.
bool validate_ssl = 7;
// The request body associated with the HTTP POST request. If `content_type`
// is `URL_ENCODED`, the body passed in must be URL-encoded. Users can
// provide a `Content-Length` header via the `headers` field or the API will
// do so. If the `request_method` is `GET` and `body` is not empty, the API
// will return an error. The maximum byte size is 1 megabyte.
//
// Note: If client libraries aren't used (which performs the conversion
// automatically) base64 encode your `body` data since the field is of
// `bytes` type.
bytes body = 10;
// If present, the check will only pass if the HTTP response status code is
// in this set of status codes. If empty, the HTTP status code will only
// pass if the HTTP status code is 200-299.
repeated ResponseStatusCode accepted_response_status_codes = 11;
// Contains information needed to add pings to an HTTP check.
PingConfig ping_config = 12;
// This field is optional and should be set only by users interested in
// an authenticated uptime check.
// Do not set both `auth_method` and `auth_info`.
oneof auth_method {
// If specified, Uptime will generate and attach an OIDC JWT token for the
// Monitoring service agent service account as an `Authorization` header
// in the HTTP request when probing.
ServiceAgentAuthentication service_agent_authentication = 14;
}
}
// Information required for a TCP Uptime check request.
message TcpCheck {
// The TCP port on the server against which to run the check. Will be
// combined with host (specified within the `monitored_resource`) to
// construct the full URL. Required.
int32 port = 1;
// Contains information needed to add pings to a TCP check.
PingConfig ping_config = 2;
}
// Optional. Used to perform content matching. This allows matching based on
// substrings and regular expressions, together with their negations. Only the
// first 4&nbsp;MB of an HTTP or HTTPS check's response (and the first
// 1&nbsp;MB of a TCP check's response) are examined for purposes of content
// matching.
message ContentMatcher {
// Options to perform content matching.
enum ContentMatcherOption {
// No content matcher type specified (maintained for backward
// compatibility, but deprecated for future use).
// Treated as `CONTAINS_STRING`.
CONTENT_MATCHER_OPTION_UNSPECIFIED = 0;
// Selects substring matching. The match succeeds if the output contains
// the `content` string. This is the default value for checks without
// a `matcher` option, or where the value of `matcher` is
// `CONTENT_MATCHER_OPTION_UNSPECIFIED`.
CONTAINS_STRING = 1;
// Selects negation of substring matching. The match succeeds if the
// output does _NOT_ contain the `content` string.
NOT_CONTAINS_STRING = 2;
// Selects regular-expression matching. The match succeeds if the output
// matches the regular expression specified in the `content` string.
// Regex matching is only supported for HTTP/HTTPS checks.
MATCHES_REGEX = 3;
// Selects negation of regular-expression matching. The match succeeds if
// the output does _NOT_ match the regular expression specified in the
// `content` string. Regex matching is only supported for HTTP/HTTPS
// checks.
NOT_MATCHES_REGEX = 4;
// Selects JSONPath matching. See `JsonPathMatcher` for details on when
// the match succeeds. JSONPath matching is only supported for HTTP/HTTPS
// checks.
MATCHES_JSON_PATH = 5;
// Selects JSONPath matching. See `JsonPathMatcher` for details on when
// the match succeeds. Succeeds when output does _NOT_ match as specified.
// JSONPath is only supported for HTTP/HTTPS checks.
NOT_MATCHES_JSON_PATH = 6;
}
// Information needed to perform a JSONPath content match.
// Used for `ContentMatcherOption::MATCHES_JSON_PATH` and
// `ContentMatcherOption::NOT_MATCHES_JSON_PATH`.
message JsonPathMatcher {
// Options to perform JSONPath content matching.
enum JsonPathMatcherOption {
// No JSONPath matcher type specified (not valid).
JSON_PATH_MATCHER_OPTION_UNSPECIFIED = 0;
// Selects 'exact string' matching. The match succeeds if the content at
// the `json_path` within the output is exactly the same as the
// `content` string.
EXACT_MATCH = 1;
// Selects regular-expression matching. The match succeeds if the
// content at the `json_path` within the output matches the regular
// expression specified in the `content` string.
REGEX_MATCH = 2;
}
// JSONPath within the response output pointing to the expected
// `ContentMatcher::content` to match against.
string json_path = 1;
// The type of JSONPath match that will be applied to the JSON output
// (`ContentMatcher.content`)
JsonPathMatcherOption json_matcher = 2;
}
// String, regex or JSON content to match. Maximum 1024 bytes. An empty
// `content` string indicates no content matching is to be performed.
string content = 1;
// The type of content matcher that will be applied to the server output,
// compared to the `content` string when the check is run.
ContentMatcherOption matcher = 2;
// Certain `ContentMatcherOption` types require additional information.
// `MATCHES_JSON_PATH` or `NOT_MATCHES_JSON_PATH` require a
// `JsonPathMatcher`; not used for other options.
oneof additional_matcher_info {
// Matcher information for `MATCHES_JSON_PATH` and `NOT_MATCHES_JSON_PATH`
JsonPathMatcher json_path_matcher = 3;
}
}
// What kind of checkers are available to be used by the check.
enum CheckerType {
// The default checker type. Currently converted to `STATIC_IP_CHECKERS`
// on creation, the default conversion behavior may change in the future.
CHECKER_TYPE_UNSPECIFIED = 0;
// `STATIC_IP_CHECKERS` are used for uptime checks that perform egress
// across the public internet. `STATIC_IP_CHECKERS` use the static IP
// addresses returned by `ListUptimeCheckIps`.
STATIC_IP_CHECKERS = 1;
// `VPC_CHECKERS` are used for uptime checks that perform egress using
// Service Directory and private network access. When using `VPC_CHECKERS`,
// the monitored resource type must be `servicedirectory_service`.
VPC_CHECKERS = 3;
}
// Identifier. A unique resource name for this Uptime check configuration. The
// format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
//
// `[PROJECT_ID_OR_NUMBER]` is the Workspace host project associated with the
// Uptime check.
//
// This field should be omitted when creating the Uptime check configuration;
// on create, the resource name is assigned by the server and included in the
// response.
string name = 1 [(google.api.field_behavior) = IDENTIFIER];
// A human-friendly name for the Uptime check configuration. The display name
// should be unique within a Cloud Monitoring Workspace in order to make it
// easier to identify; however, uniqueness is not enforced. Required.
string display_name = 2;
// The resource the check is checking. Required.
oneof resource {
// The [monitored
// resource](https://cloud.google.com/monitoring/api/resources) associated
// with the configuration.
// The following monitored resource types are valid for this field:
// `uptime_url`,
// `gce_instance`,
// `gae_app`,
// `aws_ec2_instance`,
// `aws_elb_load_balancer`
// `k8s_service`
// `servicedirectory_service`
// `cloud_run_revision`
google.api.MonitoredResource monitored_resource = 3;
// The group resource associated with the configuration.
ResourceGroup resource_group = 4;
// Specifies a Synthetic Monitor to invoke.
SyntheticMonitorTarget synthetic_monitor = 21;
}
// The type of Uptime check request.
oneof check_request_type {
// Contains information needed to make an HTTP or HTTPS check.
HttpCheck http_check = 5;
// Contains information needed to make a TCP check.
TcpCheck tcp_check = 6;
}
// How often, in seconds, the Uptime check is performed.
// Currently, the only supported values are `60s` (1 minute), `300s`
// (5 minutes), `600s` (10 minutes), and `900s` (15 minutes). Optional,
// defaults to `60s`.
google.protobuf.Duration period = 7;
// The maximum amount of time to wait for the request to complete (must be
// between 1 and 60 seconds). Required.
google.protobuf.Duration timeout = 8;
// The content that is expected to appear in the data returned by the target
// server against which the check is run. Currently, only the first entry
// in the `content_matchers` list is supported, and additional entries will
// be ignored. This field is optional and should only be specified if a
// content match is required as part of the/ Uptime check.
repeated ContentMatcher content_matchers = 9;
// The type of checkers to use to execute the Uptime check.
CheckerType checker_type = 17;
// The list of regions from which the check will be run.
// Some regions contain one location, and others contain more than one.
// If this field is specified, enough regions must be provided to include a
// minimum of 3 locations. Not specifying this field will result in Uptime
// checks running from all available regions.
repeated UptimeCheckRegion selected_regions = 10;
// If this is `true`, then checks are made only from the 'internal_checkers'.
// If it is `false`, then checks are made only from the 'selected_regions'.
// It is an error to provide 'selected_regions' when is_internal is `true`,
// or to provide 'internal_checkers' when is_internal is `false`.
bool is_internal = 15 [deprecated = true];
// The internal checkers that this check will egress from. If `is_internal` is
// `true` and this list is empty, the check will egress from all the
// InternalCheckers configured for the project that owns this
// `UptimeCheckConfig`.
repeated InternalChecker internal_checkers = 14 [deprecated = true];
// User-supplied key/value data to be used for organizing and
// identifying the `UptimeCheckConfig` 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.
map<string, string> user_labels = 20;
}
// Contains the region, location, and list of IP
// addresses where checkers in the location run from.
message UptimeCheckIp {
// A broad region category in which the IP address is located.
UptimeCheckRegion region = 1;
// A more specific location within the region that typically encodes
// a particular city/town/metro (and its containing state/province or country)
// within the broader umbrella region category.
string location = 2;
// The IP address from which the Uptime check originates. This is a fully
// specified IP address (not an IP address range). Most IP addresses, as of
// this publication, are in IPv4 format; however, one should not rely on the
// IP addresses being in IPv4 format indefinitely, and should support
// interpreting this field in either IPv4 or IPv6 format.
string ip_address = 3;
}
// The regions from which an Uptime check can be run.
enum UptimeCheckRegion {
// Default value if no region is specified. Will result in Uptime checks
// running from all regions.
REGION_UNSPECIFIED = 0;
// Allows checks to run from locations within the United States of America.
USA = 1;
// Allows checks to run from locations within the continent of Europe.
EUROPE = 2;
// Allows checks to run from locations within the continent of South
// America.
SOUTH_AMERICA = 3;
// Allows checks to run from locations within the Asia Pacific area (ex:
// Singapore).
ASIA_PACIFIC = 4;
// Allows checks to run from locations within the western United States of
// America
USA_OREGON = 5;
// Allows checks to run from locations within the central United States of
// America
USA_IOWA = 6;
// Allows checks to run from locations within the eastern United States of
// America
USA_VIRGINIA = 7;
}
// The supported resource types that can be used as values of
// `group_resource.resource_type`.
// `INSTANCE` includes `gce_instance` and `aws_ec2_instance` resource types.
// The resource types `gae_app` and `uptime_url` are not valid here because
// group checks on App Engine modules and URLs are not allowed.
enum GroupResourceType {
// Default value (not valid).
RESOURCE_TYPE_UNSPECIFIED = 0;
// A group of instances from Google Cloud Platform (GCP) or
// Amazon Web Services (AWS).
INSTANCE = 1;
// A group of Amazon ELB load balancers.
AWS_ELB_LOAD_BALANCER = 2;
}

View file

@ -0,0 +1,259 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.monitoring.v3;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/monitoring/v3/uptime.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
option csharp_namespace = "Google.Cloud.Monitoring.V3";
option go_package = "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb;monitoringpb";
option java_multiple_files = true;
option java_outer_classname = "UptimeServiceProto";
option java_package = "com.google.monitoring.v3";
option php_namespace = "Google\\Cloud\\Monitoring\\V3";
option ruby_package = "Google::Cloud::Monitoring::V3";
// The UptimeCheckService API is used to manage (list, create, delete, edit)
// Uptime check configurations in the Cloud Monitoring product. An Uptime
// check is a piece of configuration that determines which resources and
// services to monitor for availability. These configurations can also be
// configured interactively by navigating to the [Cloud console]
// (https://console.cloud.google.com), selecting the appropriate project,
// clicking on "Monitoring" on the left-hand side to navigate to Cloud
// Monitoring, and then clicking on "Uptime".
service UptimeCheckService {
option (google.api.default_host) = "monitoring.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/monitoring,"
"https://www.googleapis.com/auth/monitoring.read";
// Lists the existing valid Uptime check configurations for the project
// (leaving out any invalid configurations).
rpc ListUptimeCheckConfigs(ListUptimeCheckConfigsRequest)
returns (ListUptimeCheckConfigsResponse) {
option (google.api.http) = {
get: "/v3/{parent=projects/*}/uptimeCheckConfigs"
};
option (google.api.method_signature) = "parent";
}
// Gets a single Uptime check configuration.
rpc GetUptimeCheckConfig(GetUptimeCheckConfigRequest)
returns (UptimeCheckConfig) {
option (google.api.http) = {
get: "/v3/{name=projects/*/uptimeCheckConfigs/*}"
};
option (google.api.method_signature) = "name";
}
// Creates a new Uptime check configuration.
rpc CreateUptimeCheckConfig(CreateUptimeCheckConfigRequest)
returns (UptimeCheckConfig) {
option (google.api.http) = {
post: "/v3/{parent=projects/*}/uptimeCheckConfigs"
body: "uptime_check_config"
};
option (google.api.method_signature) = "parent,uptime_check_config";
}
// Updates an Uptime check configuration. You can either replace the entire
// configuration with a new one or replace only certain fields in the current
// configuration by specifying the fields to be updated via `updateMask`.
// Returns the updated configuration.
rpc UpdateUptimeCheckConfig(UpdateUptimeCheckConfigRequest)
returns (UptimeCheckConfig) {
option (google.api.http) = {
patch: "/v3/{uptime_check_config.name=projects/*/uptimeCheckConfigs/*}"
body: "uptime_check_config"
};
option (google.api.method_signature) = "uptime_check_config";
}
// Deletes an Uptime check configuration. Note that this method will fail
// if the Uptime check configuration is referenced by an alert policy or
// other dependent configs that would be rendered invalid by the deletion.
rpc DeleteUptimeCheckConfig(DeleteUptimeCheckConfigRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v3/{name=projects/*/uptimeCheckConfigs/*}"
};
option (google.api.method_signature) = "name";
}
// Returns the list of IP addresses that checkers run from.
rpc ListUptimeCheckIps(ListUptimeCheckIpsRequest)
returns (ListUptimeCheckIpsResponse) {
option (google.api.http) = {
get: "/v3/uptimeCheckIps"
};
}
}
// The protocol for the `ListUptimeCheckConfigs` request.
message ListUptimeCheckConfigsRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) whose
// Uptime check configurations are listed. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/UptimeCheckConfig"
}
];
// If provided, this field specifies the criteria that must be met by
// uptime checks to be included in the response.
//
// For more details, see [Filtering
// syntax](https://cloud.google.com/monitoring/api/v3/sorting-and-filtering#filter_syntax).
string filter = 2;
// The maximum number of results to return in a single response. The server
// may further constrain the maximum number of results returned in a single
// page. If the page_size is <=0, the server will decide the number of results
// to be returned.
int32 page_size = 3;
// If this field is not empty then it must contain the `nextPageToken` value
// returned by a previous call to this method. Using this field causes the
// method to return more results from the previous method call.
string page_token = 4;
}
// The protocol for the `ListUptimeCheckConfigs` response.
message ListUptimeCheckConfigsResponse {
// The returned Uptime check configurations.
repeated UptimeCheckConfig uptime_check_configs = 1;
// This field represents the pagination token to retrieve the next page of
// results. If the value is empty, it means no further results for the
// request. To retrieve the next page of results, the value of the
// next_page_token is passed to the subsequent List method call (in the
// request message's page_token field).
string next_page_token = 2;
// The total number of Uptime check configurations for the project,
// irrespective of any pagination.
int32 total_size = 3;
}
// The protocol for the `GetUptimeCheckConfig` request.
message GetUptimeCheckConfigRequest {
// Required. The Uptime check configuration to retrieve. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/UptimeCheckConfig"
}
];
}
// The protocol for the `CreateUptimeCheckConfig` request.
message CreateUptimeCheckConfigRequest {
// Required. The
// [project](https://cloud.google.com/monitoring/api/v3#project_name) in which
// to create the Uptime check. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "monitoring.googleapis.com/UptimeCheckConfig"
}
];
// Required. The new Uptime check configuration.
UptimeCheckConfig uptime_check_config = 2
[(google.api.field_behavior) = REQUIRED];
}
// The protocol for the `UpdateUptimeCheckConfig` request.
message UpdateUptimeCheckConfigRequest {
// Optional. If present, only the listed fields in the current Uptime check
// configuration are updated with values from the new configuration. If this
// field is empty, then the current configuration is completely replaced with
// the new configuration.
google.protobuf.FieldMask update_mask = 2;
// Required. If an `updateMask` has been specified, this field gives
// the values for the set of fields mentioned in the `updateMask`. If an
// `updateMask` has not been given, this Uptime check configuration replaces
// the current configuration. If a field is mentioned in `updateMask` but
// the corresponding field is omitted in this partial Uptime check
// configuration, it has the effect of deleting/clearing the field from the
// configuration on the server.
//
// The following fields can be updated: `display_name`,
// `http_check`, `tcp_check`, `timeout`, `content_matchers`, and
// `selected_regions`.
UptimeCheckConfig uptime_check_config = 3
[(google.api.field_behavior) = REQUIRED];
}
// The protocol for the `DeleteUptimeCheckConfig` request.
message DeleteUptimeCheckConfigRequest {
// Required. The Uptime check configuration to delete. The format is:
//
// projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "monitoring.googleapis.com/UptimeCheckConfig"
}
];
}
// The protocol for the `ListUptimeCheckIps` request.
message ListUptimeCheckIpsRequest {
// The maximum number of results to return in a single response. The server
// may further constrain the maximum number of results returned in a single
// page. If the page_size is <=0, the server will decide the number of results
// to be returned.
// NOTE: this field is not yet implemented
int32 page_size = 2;
// If this field is not empty then it must contain the `nextPageToken` value
// returned by a previous call to this method. Using this field causes the
// method to return more results from the previous method call.
// NOTE: this field is not yet implemented
string page_token = 3;
}
// The protocol for the `ListUptimeCheckIps` response.
message ListUptimeCheckIpsResponse {
// The returned list of IP addresses (including region and location) that the
// checkers run from.
repeated UptimeCheckIp uptime_check_ips = 1;
// This field represents the pagination token to retrieve the next page of
// results. If the value is empty, it means no further results for the
// request. To retrieve the next page of results, the value of the
// next_page_token is passed to the subsequent List method call (in the
// request message's page_token field).
// NOTE: this field is not yet implemented
string next_page_token = 2;
}