Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
265 lines (234 sloc) 9.9 KB
// Copyright 2018 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
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.logging.v2;
import "google/api/annotations.proto";
import "google/api/distribution.proto";
import "google/api/metric.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Logging.V2";
option go_package = ";logging";
option java_multiple_files = true;
option java_outer_classname = "LoggingMetricsProto";
option java_package = "";
option php_namespace = "Google\\Cloud\\Logging\\V2";
// Service for configuring logs-based metrics.
service MetricsServiceV2 {
// Lists logs-based metrics.
rpc ListLogMetrics(ListLogMetricsRequest) returns (ListLogMetricsResponse) {
option (google.api.http) = {
get: "/v2/{parent=projects/*}/metrics"
// Gets a logs-based metric.
rpc GetLogMetric(GetLogMetricRequest) returns (LogMetric) {
option (google.api.http) = {
get: "/v2/{metric_name=projects/*/metrics/*}"
// Creates a logs-based metric.
rpc CreateLogMetric(CreateLogMetricRequest) returns (LogMetric) {
option (google.api.http) = {
post: "/v2/{parent=projects/*}/metrics"
body: "metric"
// Creates or updates a logs-based metric.
rpc UpdateLogMetric(UpdateLogMetricRequest) returns (LogMetric) {
option (google.api.http) = {
put: "/v2/{metric_name=projects/*/metrics/*}"
body: "metric"
// Deletes a logs-based metric.
rpc DeleteLogMetric(DeleteLogMetricRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v2/{metric_name=projects/*/metrics/*}"
// Describes a logs-based metric. The value of the metric is the
// number of log entries that match a logs filter in a given time interval.
// Logs-based metric can also be used to extract values from logs and create a
// a distribution of the values. The distribution records the statistics of the
// extracted values along with an optional histogram of the values as specified
// by the bucket options.
message LogMetric {
// Logging API version.
enum ApiVersion {
// Logging API v2.
V2 = 0;
// Logging API v1.
V1 = 1;
// Required. The client-assigned metric identifier.
// Examples: `"error_count"`, `"nginx/requests"`.
// Metric identifiers are limited to 100 characters and can include
// only the following characters: `A-Z`, `a-z`, `0-9`, and the
// special characters `_-.,+!*',()%/`. The forward-slash character
// (`/`) denotes a hierarchy of name pieces, and it cannot be the
// first character of the name.
// The metric identifier in this field must not be
// [URL-encoded](
// However, when the metric identifier appears as the `[METRIC_ID]`
// part of a `metric_name` API parameter, then the metric identifier
// must be URL-encoded. Example:
// `"projects/my-project/metrics/nginx%2Frequests"`.
string name = 1;
// Optional. A description of this metric, which is used in documentation.
string description = 2;
// Required. An [advanced logs filter](/logging/docs/view/advanced_filters)
// which is used to match log entries.
// Example:
// "resource.type=gae_app AND severity>=ERROR"
// The maximum length of the filter is 20000 characters.
string filter = 3;
// Optional. The metric descriptor associated with the logs-based metric.
// If unspecified, it uses a default metric descriptor with a DELTA metric
// kind, INT64 value type, with no labels and a unit of "1". Such a metric
// counts the number of log entries matching the `filter` expression.
// The `name`, `type`, and `description` fields in the `metric_descriptor`
// are output only, and is constructed using the `name` and `description`
// field in the LogMetric.
// To create a logs-based metric that records a distribution of log values, a
// DELTA metric kind with a DISTRIBUTION value type must be used along with
// a `value_extractor` expression in the LogMetric.
// Each label in the metric descriptor must have a matching label
// name as the key and an extractor expression as the value in the
// `label_extractors` map.
// The `metric_kind` and `value_type` fields in the `metric_descriptor` cannot
// be updated once initially configured. New labels can be added in the
// `metric_descriptor`, but existing labels cannot be modified except for
// their description.
google.api.MetricDescriptor metric_descriptor = 5;
// Optional. A `value_extractor` is required when using a distribution
// logs-based metric to extract the values to record from a log entry.
// Two functions are supported for value extraction: `EXTRACT(field)` or
// `REGEXP_EXTRACT(field, regex)`. The argument are:
// 1. field: The name of the log entry field from which the value is to be
// extracted.
// 2. regex: A regular expression using the Google RE2 syntax
// ( with a single capture
// group to extract data from the specified log entry field. The value
// of the field is converted to a string before applying the regex.
// It is an error to specify a regex that does not include exactly one
// capture group.
// The result of the extraction must be convertible to a double type, as the
// distribution always records double values. If either the extraction or
// the conversion to double fails, then those values are not recorded in the
// distribution.
// Example: `REGEXP_EXTRACT(jsonPayload.request, ".*quantity=(\d+).*")`
string value_extractor = 6;
// Optional. A map from a label key string to an extractor expression which is
// used to extract data from a log entry field and assign as the label value.
// Each label key specified in the LabelDescriptor must have an associated
// extractor expression in this map. The syntax of the extractor expression
// is the same as for the `value_extractor` field.
// The extracted value is converted to the type defined in the label
// descriptor. If the either the extraction or the type conversion fails,
// the label will have a default value. The default value for a string
// label is an empty string, for an integer label its 0, and for a boolean
// label its `false`.
// Note that there are upper bounds on the maximum number of labels and the
// number of active time series that are allowed in a project.
map<string, string> label_extractors = 7;
// Optional. The `bucket_options` are required when the logs-based metric is
// using a DISTRIBUTION value type and it describes the bucket boundaries
// used to create a histogram of the extracted values.
google.api.Distribution.BucketOptions bucket_options = 8;
// Deprecated. The API version that created or updated this metric.
// The v2 format is used by default and cannot be changed.
ApiVersion version = 4 [deprecated = true];
// The parameters to ListLogMetrics.
message ListLogMetricsRequest {
// Required. The name of the project containing the metrics:
// "projects/[PROJECT_ID]"
string parent = 1;
// Optional. If present, then retrieve the next batch of results from the
// preceding call to this method. `pageToken` must be the value of
// `nextPageToken` from the previous response. The values of other method
// parameters should be identical to those in the previous call.
string page_token = 2;
// Optional. The maximum number of results to return from this request.
// Non-positive values are ignored. The presence of `nextPageToken` in the
// response indicates that more results might be available.
int32 page_size = 3;
// Result returned from ListLogMetrics.
message ListLogMetricsResponse {
// A list of logs-based metrics.
repeated LogMetric metrics = 1;
// If there might be more results than appear in this response, then
// `nextPageToken` is included. To get the next set of results, call this
// method again using the value of `nextPageToken` as `pageToken`.
string next_page_token = 2;
// The parameters to GetLogMetric.
message GetLogMetricRequest {
// The resource name of the desired metric:
// "projects/[PROJECT_ID]/metrics/[METRIC_ID]"
string metric_name = 1;
// The parameters to CreateLogMetric.
message CreateLogMetricRequest {
// The resource name of the project in which to create the metric:
// "projects/[PROJECT_ID]"
// The new metric must be provided in the request.
string parent = 1;
// The new logs-based metric, which must not have an identifier that
// already exists.
LogMetric metric = 2;
// The parameters to UpdateLogMetric.
message UpdateLogMetricRequest {
// The resource name of the metric to update:
// "projects/[PROJECT_ID]/metrics/[METRIC_ID]"
// The updated metric must be provided in the request and it's
// `name` field must be the same as `[METRIC_ID]` If the metric
// does not exist in `[PROJECT_ID]`, then a new metric is created.
string metric_name = 1;
// The updated metric.
LogMetric metric = 2;
// The parameters to DeleteLogMetric.
message DeleteLogMetricRequest {
// The resource name of the metric to delete:
// "projects/[PROJECT_ID]/metrics/[METRIC_ID]"
string metric_name = 1;
You can’t perform that action at this time.