Telemetry Reporting

Introduction

This page describes how to use the Service Control API v2 for telemetry reporting for managed services that are integrated with Service Infrastructure. It is intended for service producers who want to deeply integrate their services with Google Cloud.

Service Infrastructure is a foundational platform for developers to produce, manage, secure and consume APIs and services. It uses a simple, generic service usage model: a consumer consumes a service managed by a producer. All Google APIs and Google Cloud APIs use this model, since they are also built on top of Service Infrastructure.

When a consumer accesses a service, the service reports relevant telemetry data to the platform, so both the consumer and the producer can observe the access. With Service Infrastructure, this process is called telemetry reporting, which includes analytics, auditing, billing, logging, and monitoring.

Service Control API v2

The Service Control API v2 provides a simple services.report method that provides telemetry reporting to all services integrated with Service Infrastructure. This method lets you do the following in a single method call:

  • Analytics
  • Auditing
  • Billing
  • Logging
  • Monitoring

When a service reports telemetry data to the Service Control API, the data is distributed to the consumer, or the producer, or both, depending on the service configuration. For more information about configuring telemetry, see the logging and monitoring sections of google.api.Service.

In order for a service to call the Service Control API, the producer must enable the Service Control API on the producer project, and the caller must have proper permissions on the service. For more information, see Cloud APIs Getting Started and Service Control API Access Control.

Request attributes

When a client accesses a service, the service needs to model the access in terms of a set of API requests, and describe each request using an AttributeContext.

To report API metrics using the Service Control API, the service needs to call the services.report method for each request with the following attributes. The Service Control API will generate the API metrics and send them to Cloud Monitoring.

Attibute Description Example
origin.ip The IP address of the caller. "1.2.3.4"
api.service The API service name. "endpointsapis.appspot.com"
api.operation The API method name. "google.example.hello.v1.HelloService.GetHello"
api.version The API version string. "v1"
api.protocol The API protocol name. "https"
request.id A unique request id. "123e4567-e89b-12d3-a456-426655440000"
request.time The request timestamp. "2019-07-31T05:20:00Z"
request.method The HTTP method name. "POST"
request.scheme The URL scheme. "https"
request.host The HTTP host header. "endpointsapis.appspot.com"
request.path The URL path. "/v1/hello"
response.code The response status code. 200
response.size The response size in bytes. 100
response.time The response timestamp. "2019-07-31T05:20:02Z"
response.headers["x-backend-latency"] The backend latency in seconds. "0.007"

Performing telemetry reporting

Once you have deployed your service configuration to the Service Management API and your service is ready to serve requests from clients, you can begin calling services.report for your deployed service. You should call services.report to perform telemetry reporting after your service receives a request.

To quickly experiment with the telemetry reporting, you can use the gcurl command to call the services.report method. See Getting Started with the Service Control API for the initial setup steps.

The following example shows you how to use gcurl command to call services.report over HTTP.

gcurl -d '{
  "service_config_id": "latest",
  "operations": [{
    "origin": {
      "ip": "1.2.3.4"
    },
    "api": {
      "service": "endpointsapis.appspot.com",
      "operation", "google.example.endpointsapis.v1.Workspaces.GetWorkspace",
      "version": "v1",
      "protocol": "https"
    },
    "request": {
      "id": "123e4567-e89b-12d3-a456-426655440000",
      "size": 50,
      "time": "2019-07-31T05:20:00Z",
    },
    "response": {
      "size": 100,
      "code": 200,
      "time": "2019-07-31T05:20:02Z",
      "headers": {
        "x-backend-latency": "0.007"
      }
    },
    "destination": {
      "region_code": "us-central1"
    }
    "resource": {
      "name": "projects/123/locations/us-central1/workspaces/default"
    }
  }]
}' https://servicecontrol.googleapis.com/v2/services/endpointsapis.appspot.com:report

If successful, the response from the services.report method should be empty. If failed, the API error should contain detailed error information. For more information about error handling, see API Design Guide > Errors.

For production services, you should use one of Google-provided client libraries to call the Service Control API. Such libraries provide great usability and handle common functionality automatically, such as authentication. For more information, see Client Libraries Explained.