時系列データを取得する

このドキュメントでは、Monitoring API の timeSeries.list メソッドを使用して指標データ(時系列データ)を読み取る方法について説明します。 timeSeries.list メソッドを呼び出す方法はいくつかあります。

  • このページの [プロトコル] タブで、フォームベースの APIs Explorer を使用できます。
  • 言語固有のクライアント ライブラリを使用できます。
  • Metrics Explorer を使用できます。

指標データを読み取るもう一つの方法は、timeSeries.query メソッドにコマンドを送信することです。これには Monitoring Query Language(MQL)が必要です。このドキュメントでは、MQL または timeSeries.query メソッドについては説明しません。これらのトピックについては、timeSeries.query を使用してデータを取得するをご覧ください。

概要

timeSeries.list メソッドを呼び出すたびに、単一の指標タイプから任意の数の時系列を取得できます。たとえば、Compute Engine を使用している場合、compute.googleapis.com/instance/cpu/usage_time の指標タイプには VM インスタンスのそれぞれに個別の時系列があります。指標と時系列の概要については、指標、時系列、リソースをご覧ください。

timeSeries.list メソッドに次の情報を指定して、必要な時系列データを指定します。

  • 指標タイプを指定するフィルタ式。必要に応じて、時系列データの生成元のリソースを指定するか、時系列内の特定のラベルの値を指定することで、指標の時系列のサブセットを選択できます。
  • 返されるデータの量を制限する時間間隔。
  • (省略可)複数の時系列を組み合わせてデータの集計サマリーを生成する方法の指定。詳細と例については、データの集計をご覧ください。

時系列フィルタ

取得する時系列を指定するには、時系列フィルタtimeSeries.list メソッドに渡します。一般的なフィルタ コンポーネントは次のとおりです。

  • フィルタには、単一の指標タイプを指定する必要があります。例:

    metric.type = "compute.googleapis.com/instance/cpu/usage_time" 

    ユーザー定義指標を取得するには、フィルタに指定する metric.type の接頭辞を custom.googleapis.com に変更するか、その他の実際に使用されている接頭辞がある場合は(external.googleapis.com がよく使われています)それに変更します。

  • フィルタには指標のディメンション ラベルの値を指定できます。どのようなラベルが存在するかは指標タイプによって決まります。例:

    (metric.label.instance_name = "your-instance-id" OR metric.label.instance_name = "your-other-instance-id") 

    実際の指標オブジェクトではキーとして labels が使用される場合でも、前の式では label は正しい設定です。

  • フィルタで、特定のモニタリング対象リソースタイプを含む時系列のみを選択できます。

    resource.type = "gce_instance" 

フィルタ コンポーネントを次のように結合して単一の時系列フィルタを作成できます。

metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND (metric.label.instance_name = "your-instance-id" OR metric.label.instance_name = "your-other-instance-id") 

すべての指標ラベルに値を指定しない場合、list メソッドは、指定されていないラベルの値の組み合わせごとに 1 つの時系列を返します。このメソッドは、データが存在する時系列のみを返します。

時間間隔

API を使用してデータを読み取る際、開始時刻と終了時刻を設定して、データを取得する間隔を指定します。API は、間隔 (start, end](開始時刻から終了時刻まで)の間、データを取得します。

開始時間は終了時間より前にする必要があります。開始時間が終了時間より後の場合、API はエラーを返します。

特定のタイムスタンプを持つデータのみを取得する場合は、開始時刻を終了時間と同じに設定するか、開始時間を設定しないでください。

時刻の表示形式

開始時刻と終了時刻は、RFC 3339 形式の文字列として指定する必要があります。例:

 2024-03-01T12:34:56+04:00 2024-03-01T12:34:56.992Z 

Linux の date -Iseconds コマンドは、タイムスタンプを生成するのに便利です。

基本的なリスト取得操作

timeSeries.list メソッドでは、シンプルな生データだけでなく、高度に処理されたデータも取得できます。このセクションでは、使用可能な時系列のリストを取得する方法と、特定の時系列の値を取得する方法について説明します。

例: 使用可能な時系列のリストを取得する

次の例は、使用可能なすべてのデータを返すのではなく、フィルタに一致する時系列の名前と説明のみを含むリストを返す方法を示します。

プロトコル

  1. timeSeries.list リファレンス ページを開きます。

  2. [Try this method] というラベルが付いたペインに、次のコードを入力します。

    • name: プロジェクトのパスを入力します。

      projects/PROJECT_ID 
    • filter: 指標タイプを指定します。

      metric.type = "compute.googleapis.com/instance/cpu/utilization" 
    • interval.endTime: 終了時間を入力します。
    • interval.startTime: 開始時間を入力します。終了時間の 20 分前にします。
    • [Show standard parameters] をクリックし、[fields] に次のように入力します。

      timeSeries.metric 
  3. [Execute] をクリックします。

次のサンプル出力は、2 つの異なる VM インスタンスの時系列を示します。

{   "timeSeries": [     {       "metric": {         "labels": {           "instance_name": "your-first-instance"         },         "type": "compute.googleapis.com/instance/cpu/utilization"       },     },     {       "metric": {         "labels": {           "instance_name": "your-second-instance"         },         "type": "compute.googleapis.com/instance/cpu/utilization"       },     }   ] } 

リクエストを curl コマンド、HTTP リクエスト、または JavaScript として表示するには、API Explorer で 全画面表示)をクリックします。

C#

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

public static object ReadTimeSeriesFields(string projectId,     string metricType = "compute.googleapis.com/instance/cpu/utilization") {     Console.WriteLine($"metricType{ metricType}");     // Create client.     MetricServiceClient metricServiceClient = MetricServiceClient.Create();     // Initialize request argument(s).     string filter = $"metric.type=\"{metricType}\"";     ListTimeSeriesRequest request = new ListTimeSeriesRequest     {         ProjectName = new ProjectName(projectId),         Filter = filter,         Interval = new TimeInterval(),         View = ListTimeSeriesRequest.Types.TimeSeriesView.Headers,     };     // Create timestamp for current time formatted in seconds.     long timeStamp = (long)(DateTime.UtcNow - s_unixEpoch).TotalSeconds;     Timestamp startTimeStamp = new Timestamp();     // Set startTime to limit results to the last 20 minutes.     startTimeStamp.Seconds = timeStamp - (60 * 20);     Timestamp endTimeStamp = new Timestamp();     // Set endTime to current time.     endTimeStamp.Seconds = timeStamp;     TimeInterval interval = new TimeInterval();     interval.StartTime = startTimeStamp;     interval.EndTime = endTimeStamp;     request.Interval = interval;     // Make the request.     PagedEnumerable<ListTimeSeriesResponse, TimeSeries> response =         metricServiceClient.ListTimeSeries(request);     // Iterate over all response items, lazily performing RPCs as required.     Console.Write("Found data points for the following instances:");     foreach (var item in response)     {         Console.WriteLine(JObject.Parse($"{item}").ToString());     }     return 0; } 

Go

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import ( 	"context" 	"fmt" 	"io" 	"time"  	monitoring "cloud.google.com/go/monitoring/apiv3" 	"cloud.google.com/go/monitoring/apiv3/v2/monitoringpb" 	"github.com/golang/protobuf/ptypes/timestamp" 	"google.golang.org/api/iterator" )  // readTimeSeriesFields reads the last 20 minutes of the given metric, aligns // everything on 10 minute intervals, and combines values from different // instances. func readTimeSeriesFields(w io.Writer, projectID string) error { 	ctx := context.Background() 	client, err := monitoring.NewMetricClient(ctx) 	if err != nil { 		return fmt.Errorf("NewMetricClient: %w", err) 	} 	defer client.Close() 	startTime := time.Now().UTC().Add(time.Minute * -20) 	endTime := time.Now().UTC() 	req := &monitoringpb.ListTimeSeriesRequest{ 		Name:   "projects/" + projectID, 		Filter: `metric.type="compute.googleapis.com/instance/cpu/utilization"`, 		Interval: &monitoringpb.TimeInterval{ 			StartTime: &timestamp.Timestamp{ 				Seconds: startTime.Unix(), 			}, 			EndTime: &timestamp.Timestamp{ 				Seconds: endTime.Unix(), 			}, 		}, 		View: monitoringpb.ListTimeSeriesRequest_HEADERS, 	} 	fmt.Fprintln(w, "Found data points for the following instances:") 	it := client.ListTimeSeries(ctx, req) 	for { 		resp, err := it.Next() 		if err == iterator.Done { 			break 		} 		if err != nil { 			return fmt.Errorf("could not read time series value: %w", err) 		} 		fmt.Fprintf(w, "\t%v\n", resp.GetMetric().GetLabels()["instance_name"]) 	} 	fmt.Fprintln(w, "Done") 	return nil } 

Java

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

String projectId = System.getProperty("projectId"); ProjectName name = ProjectName.of(projectId);  // Restrict time to last 20 minutes long startMillis = System.currentTimeMillis() - ((60 * 20) * 1000); TimeInterval interval =     TimeInterval.newBuilder()         .setStartTime(Timestamps.fromMillis(startMillis))         .setEndTime(Timestamps.fromMillis(System.currentTimeMillis()))         .build();  ListTimeSeriesRequest.Builder requestBuilder =     ListTimeSeriesRequest.newBuilder()         .setName(name.toString())         .setFilter("metric.type=\"compute.googleapis.com/instance/cpu/utilization\"")         .setInterval(interval)         .setView(ListTimeSeriesRequest.TimeSeriesView.HEADERS);  ListTimeSeriesRequest request = requestBuilder.build();  try (final MetricServiceClient client = MetricServiceClient.create();) {   ListTimeSeriesPagedResponse response = client.listTimeSeries(request);   System.out.println("Got timeseries headers: ");   for (TimeSeries ts : response.iterateAll()) {     System.out.println(ts);   } }

Node.js

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

// Imports the Google Cloud client library const monitoring = require('@google-cloud/monitoring');  // Creates a client const client = new monitoring.MetricServiceClient();  async function readTimeSeriesFields() {   /**    * TODO(developer): Uncomment and edit the following lines of code.    */   // const projectId = 'YOUR_PROJECT_ID';    const request = {     name: client.projectPath(projectId),     filter: 'metric.type="compute.googleapis.com/instance/cpu/utilization"',     interval: {       startTime: {         // Limit results to the last 20 minutes         seconds: Date.now() / 1000 - 60 * 20,       },       endTime: {         seconds: Date.now() / 1000,       },     },     // Don't return time series data, instead just return information about     // the metrics that match the filter     view: 'HEADERS',   };    // Writes time series data   const [timeSeries] = await client.listTimeSeries(request);   console.log('Found data points for the following instances:');   timeSeries.forEach(data => {     console.log(data.metric.labels.instance_name);   }); } readTimeSeriesFields();

PHP

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

use Google\Cloud\Monitoring\V3\Client\MetricServiceClient; use Google\Cloud\Monitoring\V3\ListTimeSeriesRequest; use Google\Cloud\Monitoring\V3\ListTimeSeriesRequest\TimeSeriesView; use Google\Cloud\Monitoring\V3\TimeInterval; use Google\Protobuf\Timestamp;  /**  * Example:  * ```  * read_timeseries_fields($projectId);  * ```  *  * @param string $projectId Your project ID  */ function read_timeseries_fields(string $projectId, int $minutesAgo = 20): void {     $metrics = new MetricServiceClient([         'projectId' => $projectId,     ]);      $projectName = 'projects/' . $projectId;     $filter = 'metric.type="compute.googleapis.com/instance/cpu/utilization"';      $startTime = new Timestamp();     $startTime->setSeconds(time() - (60 * $minutesAgo));     $endTime = new Timestamp();     $endTime->setSeconds(time());      $interval = new TimeInterval();     $interval->setStartTime($startTime);     $interval->setEndTime($endTime);      $view = TimeSeriesView::HEADERS;     $listTimeSeriesRequest = (new ListTimeSeriesRequest())         ->setName($projectName)         ->setFilter($filter)         ->setInterval($interval)         ->setView($view);      $result = $metrics->listTimeSeries($listTimeSeriesRequest);      printf('Found data points for the following instances:' . PHP_EOL);     foreach ($result->iterateAllElements() as $timeSeries) {         printf($timeSeries->getMetric()->getLabels()['instance_name'] . PHP_EOL);     } }

Python

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

from google.cloud import monitoring_v3  client = monitoring_v3.MetricServiceClient() project_name = f"projects/{project_id}" now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) interval = monitoring_v3.TimeInterval(     {         "end_time": {"seconds": seconds, "nanos": nanos},         "start_time": {"seconds": (seconds - 1200), "nanos": nanos},     } ) results = client.list_time_series(     request={         "name": project_name,         "filter": 'metric.type = "compute.googleapis.com/instance/cpu/utilization"',         "interval": interval,         "view": monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.HEADERS,     } ) for result in results:     print(result)

Ruby

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

gem "google-cloud-monitoring" require "google/cloud/monitoring"  # Your Google Cloud Platform project ID # project_id = "YOUR_PROJECT_ID"  client = Google::Cloud::Monitoring.metric_service project_name = client.project_path project: project_id  interval = Google::Cloud::Monitoring::V3::TimeInterval.new now = Time.now interval.end_time = Google::Protobuf::Timestamp.new seconds: now.to_i,                                                     nanos:   now.nsec interval.start_time = Google::Protobuf::Timestamp.new seconds: now.to_i - 1200,                                                       nanos:   now.nsec filter = 'metric.type = "compute.googleapis.com/instance/cpu/utilization"' view = Google::Cloud::Monitoring::V3::ListTimeSeriesRequest::TimeSeriesView::HEADERS  results = client.list_time_series name:     project_name,                                   filter:   filter,                                   interval: interval,                                   view:     view results.each do |result|   p result end

問題がある場合は、Monitoring API のトラブルシューティングをご覧ください。

例: 時系列データを取得する

この例では、特定の Compute Engine インスタンスの 20 分間の CPU 使用率の測定値を返します。返されるデータ量は、指標のサンプリング レートによって異なります。CPU 使用率は 1 分ごとにサンプリングされるため、このクエリの結果は約 20 個のデータポイントになります。時系列に対して複数のデータポイントが返される場合、API は各時系列のデータポイントを逆順で返します。この順序は変更できません。

プロトコル

このプロトコルの例では、返されたデータをレスポンス ボックスで扱いやすくするため、出力をさらに制限しています。

  • filter 値で、時系列を単一の VM インスタンスに制限します。
  • fields 値で、時刻と測定値のみを指定します。

これらの設定により、結果として返される時系列データの量が制限されます。

  1. timeSeries.list リファレンス ページを開きます。

  2. [Try this method] というラベルが付いたペインに、次のコードを入力します。

    • name: プロジェクトのパスを入力します。

      projects/PROJECT_ID 
    • filter: 指標タイプを指定します。

      metric.type = "compute.googleapis.com/instance/cpu/utilization" AND metric.label.instance_name = "INSTANCE_NAME" 
    • interval.endTime: 終了時間を入力します。

    • interval.startTime: 開始時間を入力します。終了時間の 20 分前にします。

    • [Show standard parameters] をクリックし、[fields] に次のように入力します。

      timeSeries.points.interval.endTime,timeSeries.points.value 
  3. [Execute] をクリックします。

このリクエストは次のような結果を返します。

{  "timeSeries": [   {    "points": [     {      "interval": {       "endTime": "2024-03-01T00:19:01Z"      },      "value": {       "doubleValue": 0.06763074536575005      }     },     {      "interval": {       "endTime": "2024-03-01T00:18:01Z"      },      "value": {       "doubleValue": 0.06886174467702706      }     },     ...     {      "interval": {       "endTime": "2024-03-01T00:17:01Z"      },      "value": {       "doubleValue": 0.06929610064253211      }     }    ]   }  ] } 

リクエストを curl コマンド、HTTP リクエスト、または JavaScript として表示するには、API Explorer で 全画面表示)をクリックします。

C#

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

public static object ReadTimeSeriesData(string projectId,     string metricType = "compute.googleapis.com/instance/cpu/utilization") {     // Create client.     MetricServiceClient metricServiceClient = MetricServiceClient.Create();     // Initialize request argument(s).     string filter = $"metric.type=\"{metricType}\"";     ListTimeSeriesRequest request = new ListTimeSeriesRequest     {         ProjectName = new ProjectName(projectId),         Filter = filter,         Interval = new TimeInterval(),         View = ListTimeSeriesRequest.Types.TimeSeriesView.Full,     };     // Create timestamp for current time formatted in seconds.     long timeStamp = (long)(DateTime.UtcNow - s_unixEpoch).TotalSeconds;     Timestamp startTimeStamp = new Timestamp();     // Set startTime to limit results to the last 20 minutes.     startTimeStamp.Seconds = timeStamp - (60 * 20);     Timestamp endTimeStamp = new Timestamp();     // Set endTime to current time.     endTimeStamp.Seconds = timeStamp;     TimeInterval interval = new TimeInterval();     interval.StartTime = startTimeStamp;     interval.EndTime = endTimeStamp;     request.Interval = interval;     // Make the request.     PagedEnumerable<ListTimeSeriesResponse, TimeSeries> response =         metricServiceClient.ListTimeSeries(request);     // Iterate over all response items, lazily performing RPCs as required.     foreach (TimeSeries item in response)     {         Console.WriteLine(JObject.Parse($"{item}").ToString());     }     return 0; } 

Go

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

 // readTimeSeriesValue reads the TimeSeries for the value specified by metric type in a time window from the last 20 minutes. func readTimeSeriesValue(projectID, metricType string) error { 	ctx := context.Background() 	c, err := monitoring.NewMetricClient(ctx) 	if err != nil { 		return err 	} 	defer c.Close() 	startTime := time.Now().UTC().Add(time.Minute * -20).Unix() 	endTime := time.Now().UTC().Unix()  	req := &monitoringpb.ListTimeSeriesRequest{ 		Name:   "projects/" + projectID, 		Filter: fmt.Sprintf("metric.type=\"%s\"", metricType), 		Interval: &monitoringpb.TimeInterval{ 			StartTime: &timestamp.Timestamp{Seconds: startTime}, 			EndTime:   &timestamp.Timestamp{Seconds: endTime}, 		}, 	} 	iter := c.ListTimeSeries(ctx, req)  	for { 		resp, err := iter.Next() 		if err == iterator.Done { 			break 		} 		if err != nil { 			return fmt.Errorf("could not read time series value, %w ", err) 		} 		log.Printf("%+v\n", resp) 	}  	return nil } 

Java

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

String projectId = System.getProperty("projectId"); ProjectName name = ProjectName.of(projectId);  // Restrict time to last 20 minutes long startMillis = System.currentTimeMillis() - ((60 * 20) * 1000); TimeInterval interval =     TimeInterval.newBuilder()         .setStartTime(Timestamps.fromMillis(startMillis))         .setEndTime(Timestamps.fromMillis(System.currentTimeMillis()))         .build();  ListTimeSeriesRequest.Builder requestBuilder =     ListTimeSeriesRequest.newBuilder()         .setName(name.toString())         .setFilter(filter)         .setInterval(interval);  ListTimeSeriesRequest request = requestBuilder.build();  try (final MetricServiceClient client = MetricServiceClient.create();) {   ListTimeSeriesPagedResponse response = client.listTimeSeries(request);    System.out.println("Got timeseries: ");   for (TimeSeries ts : response.iterateAll()) {     System.out.println(ts);   } }

Node.js

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

// Imports the Google Cloud client library const monitoring = require('@google-cloud/monitoring');  // Creates a client const client = new monitoring.MetricServiceClient();  async function readTimeSeriesData() {   /**    * TODO(developer): Uncomment and edit the following lines of code.    */   // const projectId = 'YOUR_PROJECT_ID';   // const filter = 'metric.type="compute.googleapis.com/instance/cpu/utilization"';    const request = {     name: client.projectPath(projectId),     filter: filter,     interval: {       startTime: {         // Limit results to the last 20 minutes         seconds: Date.now() / 1000 - 60 * 20,       },       endTime: {         seconds: Date.now() / 1000,       },     },   };    // Writes time series data   const [timeSeries] = await client.listTimeSeries(request);   timeSeries.forEach(data => {     console.log(`${data.metric.labels.instance_name}:`);     data.points.forEach(point => {       console.log(JSON.stringify(point.value));     });   }); } readTimeSeriesData();

PHP

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

use Google\Cloud\Monitoring\V3\Client\MetricServiceClient; use Google\Cloud\Monitoring\V3\ListTimeSeriesRequest; use Google\Cloud\Monitoring\V3\ListTimeSeriesRequest\TimeSeriesView; use Google\Cloud\Monitoring\V3\TimeInterval; use Google\Protobuf\Timestamp;  /**  * Example:  * ```  * read_timeseries_simple($projectId);  * ```  *  * @param string $projectId Your project ID  */ function read_timeseries_simple(string $projectId, int $minutesAgo = 20): void {     $metrics = new MetricServiceClient([         'projectId' => $projectId,     ]);      $projectName = 'projects/' . $projectId;     $filter = 'metric.type="compute.googleapis.com/instance/cpu/utilization"';      // Limit results to the last 20 minutes     $startTime = new Timestamp();     $startTime->setSeconds(time() - (60 * $minutesAgo));     $endTime = new Timestamp();     $endTime->setSeconds(time());      $interval = new TimeInterval();     $interval->setStartTime($startTime);     $interval->setEndTime($endTime);      $view = TimeSeriesView::FULL;     $listTimeSeriesRequest = (new ListTimeSeriesRequest())         ->setName($projectName)         ->setFilter($filter)         ->setInterval($interval)         ->setView($view);      $result = $metrics->listTimeSeries($listTimeSeriesRequest);      printf('CPU utilization:' . PHP_EOL);     foreach ($result->iterateAllElements() as $timeSeries) {         $instanceName = $timeSeries->getMetric()->getLabels()['instance_name'];         printf($instanceName . ':' . PHP_EOL);         foreach ($timeSeries->getPoints() as $point) {             printf('  ' . $point->getValue()->getDoubleValue() . PHP_EOL);         }     } }

Python

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

from google.cloud import monitoring_v3  client = monitoring_v3.MetricServiceClient() project_name = f"projects/{project_id}"  now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) interval = monitoring_v3.TimeInterval(     {         "end_time": {"seconds": seconds, "nanos": nanos},         "start_time": {"seconds": (seconds - 1200), "nanos": nanos},     } )  results = client.list_time_series(     request={         "name": project_name,         "filter": 'metric.type = "compute.googleapis.com/instance/cpu/utilization"',         "interval": interval,         "view": monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,     } ) for result in results:     print(result)

Ruby

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

gem "google-cloud-monitoring" require "google/cloud/monitoring"  # Your Google Cloud Platform project ID # project_id = "YOUR_PROJECT_ID"  client = Google::Cloud::Monitoring.metric_service project_name = client.project_path project: project_id  interval = Google::Cloud::Monitoring::V3::TimeInterval.new now = Time.now interval.end_time = Google::Protobuf::Timestamp.new seconds: now.to_i,                                                     nanos:   now.nsec interval.start_time = Google::Protobuf::Timestamp.new seconds: now.to_i - 1200,                                                       nanos:   now.nsec filter = 'metric.type = "compute.googleapis.com/instance/cpu/utilization"' view = Google::Cloud::Monitoring::V3::ListTimeSeriesRequest::TimeSeriesView::FULL  results = client.list_time_series name:     project_name,                                   filter:   filter,                                   interval: interval,                                   view:     view results.each do |result|   p result end

問題がある場合は、Monitoring API のトラブルシューティングをご覧ください。

データの集計

timeSeries.list メソッドでは、返された時系列データに対して統計的な集計や縮減を行うことができます。次のセクションでは、2 つの例を示します。詳細については、フィルタリングと集計: 時系列の操作をご覧ください。

例: 時系列のアライメントを行う

この例では、各時系列に含まれる 20 個の使用率測定値を 2 個の測定値に縮減します。つまり、20 分の時間間隔を 2 つの 10 分間に分け、それぞれの期間の平均使用率を算出します。まず各時系列のデータを 10 分間にアライメントしてから、各 10 分間の値の平均をとります。

このアライメント オペレーションには 2 つの利点があります。1 つはデータを平滑化すること、もう 1 つはすべての時系列データのデータを正確な 10 分の境界に合わせる(アライメントする)ことです。その後、データをさらに処理できます。

プロトコル

  1. timeSeries.list リファレンス ページを開きます。

  2. [Try this method] というラベルが付いたペインに、次のコードを入力します。

    • name: プロジェクトのパスを入力します。

      projects/PROJECT_ID 
    • aggregation.alignmentPeriod: 「600s」と入力します。
    • aggregation.perSeriesAligner: ALIGN_MEAN を選択します。
    • filter: 指標タイプを指定します。

      metric.type = "compute.googleapis.com/instance/cpu/utilization" 
    • interval.endTime: 終了時間を入力します。
    • interval.startTime: 開始時間を入力します。終了時間の 20 分前にします。
    • [Show standard parameters] をクリックし、[fields] に次のように入力します。

      timeSeries.metric,timeSeries.points 
  3. [Execute] をクリックします。

前の例で示した単一インスタンスのフィルタは削除されています。このクエリによって返されるデータ量は少ないため、1 つの VM インスタンスに制限する必要はありません。

次のサンプル結果には、3 つの VM インスタンスのそれぞれに対して 1 つの時系列が含まれます。各時系列には 2 つのデータポイント(10 分のアライメント期間の平均使用率)があります。

{  "timeSeries": [   {    "metric": {     "labels": {"instance_name": "your-first-instance"},     "type": "compute.googleapis.com/instance/cpu/utilization"    },    "points": [     {      "interval": {       "startTime": "2024-03-01T00:20:00.000Z",       "endTime": "2024-03-01T00:20:00.000Z"      },      "value": { "doubleValue": 0.06688481346044381 }     },     {      "interval": {       "startTime": "2024-03-01T00:10:00.000Z",       "endTime": "2024-03-01T00:10:00.000Z"      },      "value": {"doubleValue": 0.06786652821310177 }     }    ]   },   {    "metric": {     "labels": { "instance_name": "your-second-instance" },     "type": "compute.googleapis.com/instance/cpu/utilization"    },    "points": [     {      "interval": {       "startTime": "2024-03-01T00:20:00.000Z",       "endTime": "2024-03-01T00:20:00.000Z"      },      "value": { "doubleValue": 0.04144239874207415 }     },     {      "interval": {       "startTime": "2024-03-01T00:10:00.000Z",       "endTime": "2024-03-01T00:10:00.000Z"      },      "value": { "doubleValue": 0.04045793689050091 }     }    ]   },   {    "metric": {     "labels": { "instance_name": "your-third-instance" },     "type": "compute.googleapis.com/instance/cpu/utilization"    },    "points": [     {      "interval": {       "startTime": "2024-03-01T00:20:00.000Z",       "endTime": "2024-03-01T00:20:00.000Z"      },      "value": { "doubleValue": 0.029650046587339607 }     },     {      "interval": {       "startTime": "2024-03-01T00:10:00.000Z",       "endTime": "2024-03-01T00:10:00.000Z"      },      "value": { "doubleValue": 0.03053874224715402 }     }    ]   }  ] } 

リクエストを curl コマンド、HTTP リクエスト、または JavaScript として表示するには、API Explorer で 全画面表示)をクリックします。

C#

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

public static object ReadTimeSeriesAggregate(string projectId,     string metricType = "compute.googleapis.com/instance/cpu/utilization") {     // Create client.     MetricServiceClient metricServiceClient = MetricServiceClient.Create();     // Initialize request argument(s).     string filter = $"metric.type=\"{metricType}\"";     ListTimeSeriesRequest request = new ListTimeSeriesRequest     {         ProjectName = new ProjectName(projectId),         Filter = filter,         Interval = new TimeInterval(),     };     // Create timestamp for current time formatted in seconds.     long timeStamp = (long)(DateTime.UtcNow - s_unixEpoch).TotalSeconds;     Timestamp startTimeStamp = new Timestamp();     // Set startTime to limit results to the last 20 minutes.     startTimeStamp.Seconds = timeStamp - (60 * 20);     Timestamp endTimeStamp = new Timestamp();     // Set endTime to current time.     endTimeStamp.Seconds = timeStamp;     TimeInterval interval = new TimeInterval();     interval.StartTime = startTimeStamp;     interval.EndTime = endTimeStamp;     request.Interval = interval;     // Aggregate results per matching instance     Aggregation aggregation = new Aggregation();     Duration alignmentPeriod = new Duration();     alignmentPeriod.Seconds = 600;     aggregation.AlignmentPeriod = alignmentPeriod;     aggregation.PerSeriesAligner = Aggregation.Types.Aligner.AlignMean;     // Add the aggregation to the request.     request.Aggregation = aggregation;     // Make the request.     PagedEnumerable<ListTimeSeriesResponse, TimeSeries> response =         metricServiceClient.ListTimeSeries(request);     // Iterate over all response items, lazily performing RPCs as required.     Console.WriteLine($"{projectId} CPU utilization:");     foreach (var item in response)     {         var points = item.Points;         var labels = item.Metric.Labels;         Console.WriteLine($"{labels.Values.FirstOrDefault()}");         if (points.Count > 0)         {             Console.WriteLine($"  Now: {points[0].Value.DoubleValue}");         }         if (points.Count > 1)         {             Console.WriteLine($"  10 min ago: {points[1].Value.DoubleValue}");         }     }     return 0; } 

Go

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import ( 	"context" 	"fmt" 	"io" 	"time"  	monitoring "cloud.google.com/go/monitoring/apiv3" 	"cloud.google.com/go/monitoring/apiv3/v2/monitoringpb" 	"github.com/golang/protobuf/ptypes/duration" 	"github.com/golang/protobuf/ptypes/timestamp" 	"google.golang.org/api/iterator" )  // readTimeSeriesAlign reads the last 20 minutes of the given metric and aligns // everything on 10 minute intervals. func readTimeSeriesAlign(w io.Writer, projectID string) error { 	ctx := context.Background() 	client, err := monitoring.NewMetricClient(ctx) 	if err != nil { 		return fmt.Errorf("NewMetricClient: %w", err) 	} 	defer client.Close() 	startTime := time.Now().UTC().Add(time.Minute * -20) 	endTime := time.Now().UTC() 	req := &monitoringpb.ListTimeSeriesRequest{ 		Name:   "projects/" + projectID, 		Filter: `metric.type="compute.googleapis.com/instance/cpu/utilization"`, 		Interval: &monitoringpb.TimeInterval{ 			StartTime: &timestamp.Timestamp{ 				Seconds: startTime.Unix(), 			}, 			EndTime: &timestamp.Timestamp{ 				Seconds: endTime.Unix(), 			}, 		}, 		Aggregation: &monitoringpb.Aggregation{ 			PerSeriesAligner: monitoringpb.Aggregation_ALIGN_MEAN, 			AlignmentPeriod: &duration.Duration{ 				Seconds: 600, 			}, 		}, 	} 	it := client.ListTimeSeries(ctx, req) 	for { 		resp, err := it.Next() 		if err == iterator.Done { 			break 		} 		if err != nil { 			return fmt.Errorf("could not read time series value: %w", err) 		} 		fmt.Fprintln(w, resp.GetMetric().GetLabels()["instance_name"]) 		fmt.Fprintf(w, "\tNow: %.4f\n", resp.GetPoints()[0].GetValue().GetDoubleValue()) 		if len(resp.GetPoints()) > 1 { 			fmt.Fprintf(w, "\t10 minutes ago: %.4f\n", resp.GetPoints()[1].GetValue().GetDoubleValue()) 		} 	} 	fmt.Fprintln(w, "Done") 	return nil } 

Java

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

String projectId = System.getProperty("projectId"); ProjectName name = ProjectName.of(projectId);  // Restrict time to last 20 minutes long startMillis = System.currentTimeMillis() - ((60 * 20) * 1000); TimeInterval interval =     TimeInterval.newBuilder()         .setStartTime(Timestamps.fromMillis(startMillis))         .setEndTime(Timestamps.fromMillis(System.currentTimeMillis()))         .build();  Aggregation aggregation =     Aggregation.newBuilder()         .setAlignmentPeriod(Duration.newBuilder().setSeconds(600).build())         .setPerSeriesAligner(Aggregation.Aligner.ALIGN_MEAN)         .build();  ListTimeSeriesRequest.Builder requestBuilder =     ListTimeSeriesRequest.newBuilder()         .setName(name.toString())         .setFilter("metric.type=\"compute.googleapis.com/instance/cpu/utilization\"")         .setInterval(interval)         .setAggregation(aggregation);  ListTimeSeriesRequest request = requestBuilder.build();  try (final MetricServiceClient client = MetricServiceClient.create();) {   ListTimeSeriesPagedResponse response = client.listTimeSeries(request);    System.out.println("Got timeseries: ");   for (TimeSeries ts : response.iterateAll()) {     System.out.println(ts);   } }

Node.js

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

// Imports the Google Cloud client library const monitoring = require('@google-cloud/monitoring');  // Creates a client const client = new monitoring.MetricServiceClient();  async function readTimeSeriesAggregate() {   /**    * TODO(developer): Uncomment and edit the following lines of code.    */   // const projectId = 'YOUR_PROJECT_ID';    const request = {     name: client.projectPath(projectId),     filter: 'metric.type="compute.googleapis.com/instance/cpu/utilization"',     interval: {       startTime: {         // Limit results to the last 20 minutes         seconds: Date.now() / 1000 - 60 * 20,       },       endTime: {         seconds: Date.now() / 1000,       },     },     // Aggregate results per matching instance     aggregation: {       alignmentPeriod: {         seconds: 600,       },       perSeriesAligner: 'ALIGN_MEAN',     },   };    // Writes time series data   const [timeSeries] = await client.listTimeSeries(request);   console.log('CPU utilization:');   timeSeries.forEach(data => {     console.log(data.metric.labels.instance_name);     console.log(`  Now: ${data.points[0].value.doubleValue}`);     if (data.points.length > 1) {       console.log(`  10 min ago: ${data.points[1].value.doubleValue}`);     }     console.log('=====');   }); } readTimeSeriesAggregate();

PHP

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

use Google\Cloud\Monitoring\V3\Aggregation; use Google\Cloud\Monitoring\V3\Aggregation\Aligner; use Google\Cloud\Monitoring\V3\Client\MetricServiceClient; use Google\Cloud\Monitoring\V3\ListTimeSeriesRequest; use Google\Cloud\Monitoring\V3\ListTimeSeriesRequest\TimeSeriesView; use Google\Cloud\Monitoring\V3\TimeInterval; use Google\Protobuf\Duration; use Google\Protobuf\Timestamp;  /**  * Example:  * ```  * read_timeseries_align($projectId);  * ```  *  * @param string $projectId Your project ID  */ function read_timeseries_align(string $projectId, int $minutesAgo = 20): void {     $metrics = new MetricServiceClient([         'projectId' => $projectId,     ]);      $projectName = 'projects/' . $projectId;     $filter = 'metric.type="compute.googleapis.com/instance/cpu/utilization"';      $startTime = new Timestamp();     $startTime->setSeconds(time() - (60 * $minutesAgo));     $endTime = new Timestamp();     $endTime->setSeconds(time());      $interval = new TimeInterval();     $interval->setStartTime($startTime);     $interval->setEndTime($endTime);      $alignmentPeriod = new Duration();     $alignmentPeriod->setSeconds(600);     $aggregation = new Aggregation();     $aggregation->setAlignmentPeriod($alignmentPeriod);     $aggregation->setPerSeriesAligner(Aligner::ALIGN_MEAN);      $view = TimeSeriesView::FULL;     $listTimeSeriesRequest = (new ListTimeSeriesRequest())         ->setName($projectName)         ->setFilter($filter)         ->setInterval($interval)         ->setView($view)         ->setAggregation($aggregation);      $result = $metrics->listTimeSeries($listTimeSeriesRequest);      printf('CPU utilization:' . PHP_EOL);     foreach ($result->iterateAllElements() as $timeSeries) {         printf($timeSeries->getMetric()->getLabels()['instance_name'] . PHP_EOL);         printf('  Now: ');         printf($timeSeries->getPoints()[0]->getValue()->getDoubleValue() . PHP_EOL);         if (count($timeSeries->getPoints()) > 1) {             printf('  10 minutes ago: ');             printf($timeSeries->getPoints()[1]->getValue()->getDoubleValue() . PHP_EOL);         }     } }

Python

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

from google.cloud import monitoring_v3  client = monitoring_v3.MetricServiceClient() project_name = f"projects/{project_id}"  now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) interval = monitoring_v3.TimeInterval(     {         "end_time": {"seconds": seconds, "nanos": nanos},         "start_time": {"seconds": (seconds - 3600), "nanos": nanos},     } ) aggregation = monitoring_v3.Aggregation(     {         "alignment_period": {"seconds": 1200},  # 20 minutes         "per_series_aligner": monitoring_v3.Aggregation.Aligner.ALIGN_MEAN,     } )  results = client.list_time_series(     request={         "name": project_name,         "filter": 'metric.type = "compute.googleapis.com/instance/cpu/utilization"',         "interval": interval,         "view": monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,         "aggregation": aggregation,     } ) for result in results:     print(result)

Ruby

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

gem "google-cloud-monitoring" require "google/cloud/monitoring"  # Your Google Cloud Platform project ID # project_id = "YOUR_PROJECT_ID"  client = Google::Cloud::Monitoring.metric_service project_name = client.project_path project: project_id  interval = Google::Cloud::Monitoring::V3::TimeInterval.new now = Time.now interval.end_time = Google::Protobuf::Timestamp.new seconds: now.to_i,                                                     nanos:   now.nsec interval.start_time = Google::Protobuf::Timestamp.new seconds: now.to_i - 1200,                                                       nanos:   now.nsec filter = 'metric.type = "compute.googleapis.com/instance/cpu/utilization"' view = Google::Cloud::Monitoring::V3::ListTimeSeriesRequest::TimeSeriesView::FULL aggregation = Google::Cloud::Monitoring::V3::Aggregation.new(   alignment_period:   { seconds: 1200 },   per_series_aligner: Google::Cloud::Monitoring::V3::Aggregation::Aligner::ALIGN_MEAN )  results = client.list_time_series name:        project_name,                                   filter:      filter,                                   interval:    interval,                                   view:        view,                                   aggregation: aggregation results.each do |result|   p result end 

問題がある場合は、Monitoring API のトラブルシューティングをご覧ください。

例: 時系列を横断的に縮減する

この例では前の例を拡張し、3 つの VM インスタンスのアライメントされた時系列を統合して、すべてのインスタンスの平均 CPU 使用率を含む単一の時系列を作成します。

プロトコル

  1. timeSeries.list リファレンス ページを開きます。

  2. [Try this method] というラベルが付いたペインに、次のコードを入力します。

    • name: プロジェクトのパスを入力します。

      projects/PROJECT_ID 
    • aggregation.alignmentPeriod: 「600s」と入力します。
    • aggregation.perSeriesAligner: ALIGN_MEAN を選択します。
    • aggregation.crossSeriesReducer: REDUCE_MEAN を選択します。
    • filter: 指標タイプを指定します。

      metric.type = "compute.googleapis.com/instance/cpu/utilization" 
    • interval.endTime: 終了時間を入力します。
    • interval.startTime: 開始時間を入力します。終了時間の 20 分前にします。
    • [Show standard parameters] をクリックし、[fields] に次のように入力します。

      timeSeries.metric,timeSeries.points 
  3. [Execute] をクリックします。

次のサンプル結果には、単一の時系列と 2 つのデータポイントが含まれます。各ポイントは、対象期間中の 3 つの VM インスタンスの使用率の平均値です。

{  "timeSeries": [   {    "metric": {     "type": "compute.googleapis.com/instance/cpu/utilization"    },    "points": [     {      "interval": {       "startTime": "2024-03-01T00:20:00.000Z",       "endTime": "2024-03-01T00:20:00.000Z"      },      "value": {       "doubleValue": 0.045992419596619184      }     },     {      "interval": {       "startTime": "2024-03-01T00:10:00.000Z",       "endTime": "2024-03-01T00:10:00.000Z"      },      "value": {       "doubleValue": 0.04628773578358556      }     }    ]   }  ] } 

リクエストを curl コマンド、HTTP リクエスト、または JavaScript として表示するには、API Explorer で 全画面表示)をクリックします。

C#

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

public static object ReadTimeSeriesReduce(string projectId,     string metricType = "compute.googleapis.com/instance/cpu/utilization") {     // Create client.     MetricServiceClient metricServiceClient = MetricServiceClient.Create();     // Initialize request argument(s).     string filter = $"metric.type=\"{metricType}\"";     ListTimeSeriesRequest request = new ListTimeSeriesRequest     {         ProjectName = new ProjectName(projectId),         Filter = filter,         Interval = new TimeInterval(),     };     // Create timestamp for current time formatted in seconds.     long timeStamp = (long)(DateTime.UtcNow - s_unixEpoch).TotalSeconds;     Timestamp startTimeStamp = new Timestamp();     // Set startTime to limit results to the last 20 minutes.     startTimeStamp.Seconds = timeStamp - (60 * 20);     Timestamp endTimeStamp = new Timestamp();     // Set endTime to current time.     endTimeStamp.Seconds = timeStamp;     TimeInterval interval = new TimeInterval();     interval.StartTime = startTimeStamp;     interval.EndTime = endTimeStamp;     request.Interval = interval;     // Aggregate results per matching instance.     Aggregation aggregation = new Aggregation();     Duration alignmentPeriod = new Duration();     alignmentPeriod.Seconds = 600;     aggregation.AlignmentPeriod = alignmentPeriod;     aggregation.CrossSeriesReducer = Aggregation.Types.Reducer.ReduceMean;     aggregation.PerSeriesAligner = Aggregation.Types.Aligner.AlignMean;     // Add the aggregation to the request.     request.Aggregation = aggregation;     // Make the request.     PagedEnumerable<ListTimeSeriesResponse, TimeSeries> response =         metricServiceClient.ListTimeSeries(request);     // Iterate over all response items, lazily performing RPCs as required.     Console.WriteLine("CPU utilization:");     foreach (var item in response)     {         var points = item.Points;         Console.WriteLine("Average CPU utilization across all GCE instances:");         Console.WriteLine($"  Last 10 min: {points[0].Value.DoubleValue}");         Console.WriteLine($"  Last 10-20 min ago: {points[1].Value.DoubleValue}");     }     return 0; } 

Go

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import ( 	"context" 	"fmt" 	"io" 	"time"  	monitoring "cloud.google.com/go/monitoring/apiv3" 	"cloud.google.com/go/monitoring/apiv3/v2/monitoringpb" 	"github.com/golang/protobuf/ptypes/duration" 	"github.com/golang/protobuf/ptypes/timestamp" 	"google.golang.org/api/iterator" )  // readTimeSeriesReduce reads the last 20 minutes of the given metric, aligns // everything on 10 minute intervals, and combines values from different // instances. func readTimeSeriesReduce(w io.Writer, projectID string) error { 	ctx := context.Background() 	client, err := monitoring.NewMetricClient(ctx) 	if err != nil { 		return fmt.Errorf("NewMetricClient: %w", err) 	} 	defer client.Close() 	startTime := time.Now().UTC().Add(time.Minute * -20) 	endTime := time.Now().UTC() 	req := &monitoringpb.ListTimeSeriesRequest{ 		Name:   "projects/" + projectID, 		Filter: `metric.type="compute.googleapis.com/instance/cpu/utilization"`, 		Interval: &monitoringpb.TimeInterval{ 			StartTime: &timestamp.Timestamp{ 				Seconds: startTime.Unix(), 			}, 			EndTime: &timestamp.Timestamp{ 				Seconds: endTime.Unix(), 			}, 		}, 		Aggregation: &monitoringpb.Aggregation{ 			CrossSeriesReducer: monitoringpb.Aggregation_REDUCE_MEAN, 			PerSeriesAligner:   monitoringpb.Aggregation_ALIGN_MEAN, 			AlignmentPeriod: &duration.Duration{ 				Seconds: 600, 			}, 		}, 	} 	it := client.ListTimeSeries(ctx, req) 	for { 		resp, err := it.Next() 		if err == iterator.Done { 			break 		} 		if err != nil { 			return fmt.Errorf("could not read time series value: %w", err) 		} 		fmt.Fprintln(w, "Average CPU utilization across all GCE instances:") 		fmt.Fprintf(w, "\tNow: %.4f\n", resp.GetPoints()[0].GetValue().GetDoubleValue()) 		if len(resp.GetPoints()) > 1 { 			fmt.Fprintf(w, "\t10 minutes ago: %.4f\n", resp.GetPoints()[1].GetValue().GetDoubleValue()) 		} 	} 	fmt.Fprintln(w, "Done") 	return nil } 

Java

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

String projectId = System.getProperty("projectId"); ProjectName name = ProjectName.of(projectId);  // Restrict time to last 20 minutes long startMillis = System.currentTimeMillis() - ((60 * 20) * 1000); TimeInterval interval =     TimeInterval.newBuilder()         .setStartTime(Timestamps.fromMillis(startMillis))         .setEndTime(Timestamps.fromMillis(System.currentTimeMillis()))         .build();  Aggregation aggregation =     Aggregation.newBuilder()         .setAlignmentPeriod(Duration.newBuilder().setSeconds(600).build())         .setPerSeriesAligner(Aggregation.Aligner.ALIGN_MEAN)         .setCrossSeriesReducer(Aggregation.Reducer.REDUCE_MEAN)         .build();  ListTimeSeriesRequest.Builder requestBuilder =     ListTimeSeriesRequest.newBuilder()         .setName(name.toString())         .setFilter("metric.type=\"compute.googleapis.com/instance/cpu/utilization\"")         .setInterval(interval)         .setAggregation(aggregation);  ListTimeSeriesRequest request = requestBuilder.build();  try (final MetricServiceClient client = MetricServiceClient.create();) {   ListTimeSeriesPagedResponse response = client.listTimeSeries(request);    System.out.println("Got timeseries: ");   for (TimeSeries ts : response.iterateAll()) {     System.out.println(ts);   } }

Node.js

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

// Imports the Google Cloud client library const monitoring = require('@google-cloud/monitoring');  // Creates a client const client = new monitoring.MetricServiceClient();  async function readTimeSeriesReduce() {   /**    * TODO(developer): Uncomment and edit the following lines of code.    */   // const projectId = 'YOUR_PROJECT_ID';    const request = {     name: client.projectPath(projectId),     filter: 'metric.type="compute.googleapis.com/instance/cpu/utilization"',     interval: {       startTime: {         // Limit results to the last 20 minutes         seconds: Date.now() / 1000 - 60 * 20,       },       endTime: {         seconds: Date.now() / 1000,       },     },     // Aggregate results per matching instance     aggregation: {       alignmentPeriod: {         seconds: 600,       },       crossSeriesReducer: 'REDUCE_MEAN',       perSeriesAligner: 'ALIGN_MEAN',     },   };    // Writes time series data   const [result] = await client.listTimeSeries(request);   if (result.length === 0) {     console.log('No data');     return;   }   const reductions = result[0].points;    console.log('Average CPU utilization across all GCE instances:');   console.log(`  Last 10 min: ${reductions[0].value.doubleValue}`);   console.log(`  10-20 min ago: ${reductions[0].value.doubleValue}`); } readTimeSeriesReduce();

PHP

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

use Google\Cloud\Monitoring\V3\Aggregation; use Google\Cloud\Monitoring\V3\Client\MetricServiceClient; use Google\Cloud\Monitoring\V3\ListTimeSeriesRequest; use Google\Cloud\Monitoring\V3\ListTimeSeriesRequest\TimeSeriesView; use Google\Cloud\Monitoring\V3\TimeInterval; use Google\Protobuf\Duration; use Google\Protobuf\Timestamp;  /**  * Example:  * ```  * read_timeseries_reduce($projectId);  * ```  *  * @param string $projectId Your project ID  */ function read_timeseries_reduce(string $projectId, int $minutesAgo = 20): void {     $metrics = new MetricServiceClient([         'projectId' => $projectId,     ]);      $projectName = 'projects/' . $projectId;     $filter = 'metric.type="compute.googleapis.com/instance/cpu/utilization"';      $startTime = new Timestamp();     $startTime->setSeconds(time() - (60 * $minutesAgo));     $endTime = new Timestamp();     $endTime->setSeconds(time());      $interval = new TimeInterval();     $interval->setStartTime($startTime);     $interval->setEndTime($endTime);      $alignmentPeriod = new Duration();     $alignmentPeriod->setSeconds(600);     $aggregation = new Aggregation();     $aggregation->setAlignmentPeriod($alignmentPeriod);     $aggregation->setCrossSeriesReducer(Aggregation\Reducer::REDUCE_MEAN);     $aggregation->setPerSeriesAligner(Aggregation\Aligner::ALIGN_MEAN);      $view = TimeSeriesView::FULL;     $listTimeSeriesRequest = (new ListTimeSeriesRequest())         ->setName($projectName)         ->setFilter($filter)         ->setInterval($interval)         ->setView($view)         ->setAggregation($aggregation);      $result = $metrics->listTimeSeries($listTimeSeriesRequest);      printf('Average CPU utilization across all GCE instances:' . PHP_EOL);     if ($timeSeries = $result->iterateAllElements()->current()) {         $reductions = $timeSeries->getPoints();         printf('  Last 10 minutes: ');         printf($reductions[0]->getValue()->getDoubleValue() . PHP_EOL);         if (count($reductions) > 1) {             printf('  10-20 minutes ago: ');             printf($reductions[1]->getValue()->getDoubleValue() . PHP_EOL);         }     } }

Python

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

from google.cloud import monitoring_v3  client = monitoring_v3.MetricServiceClient() project_name = f"projects/{project_id}"  now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) interval = monitoring_v3.TimeInterval(     {         "end_time": {"seconds": seconds, "nanos": nanos},         "start_time": {"seconds": (seconds - 3600), "nanos": nanos},     } ) aggregation = monitoring_v3.Aggregation(     {         "alignment_period": {"seconds": 1200},  # 20 minutes         "per_series_aligner": monitoring_v3.Aggregation.Aligner.ALIGN_MEAN,         "cross_series_reducer": monitoring_v3.Aggregation.Reducer.REDUCE_MEAN,         "group_by_fields": ["resource.zone"],     } )  results = client.list_time_series(     request={         "name": project_name,         "filter": 'metric.type = "compute.googleapis.com/instance/cpu/utilization"',         "interval": interval,         "view": monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,         "aggregation": aggregation,     } ) for result in results:     print(result)

Ruby

Monitoring で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

gem "google-cloud-monitoring" require "google/cloud/monitoring"  # Your Google Cloud Platform project ID # project_id = "YOUR_PROJECT_ID"  client = Google::Cloud::Monitoring.metric_service project_name = client.project_path project: project_id  interval = Google::Cloud::Monitoring::V3::TimeInterval.new now = Time.now interval.end_time = Google::Protobuf::Timestamp.new seconds: now.to_i,                                                     nanos:   now.nsec interval.start_time = Google::Protobuf::Timestamp.new seconds: now.to_i - 1200,                                                       nanos:   now.nsec filter = 'metric.type = "compute.googleapis.com/instance/cpu/utilization"' view = Google::Cloud::Monitoring::V3::ListTimeSeriesRequest::TimeSeriesView::FULL aggregation = Google::Cloud::Monitoring::V3::Aggregation.new(   alignment_period:     { seconds: 1200 },   per_series_aligner:   Google::Cloud::Monitoring::V3::Aggregation::Aligner::ALIGN_MEAN,   cross_series_reducer: Google::Cloud::Monitoring::V3::Aggregation::Reducer::REDUCE_MEAN,   group_by_fields:      ["resource.zone"] )  results = client.list_time_series name:        project_name,                                   filter:      filter,                                   interval:    interval,                                   view:        view,                                   aggregation: aggregation results.each do |result|   p result end 

問題がある場合は、Monitoring API のトラブルシューティングをご覧ください。

次のステップ