指標、時系列、リソース

このガイドでは、指標、時系列、監視対象リソースのほか、それらを表すMonitoring API のデータ型について紹介します。Monitoring API を使用して指標の閲覧、読み込み、書き出しを行うには、カスタム指標の使用をご覧ください。指標のリストについては、指標の一覧をご覧ください。指標を使用したサンプルコードを参照するには、カスタム指標のサンプルをご覧ください。

概念

指標、記述子、ラベル

指標タイプ(単に指標ともいいます)は、システムを評価するために使用する一連の測定値です。指標タイプの日常的な例としては、CPU 使用率、ロードバランサによって処理されたリクエスト数、小売店の日別売上高などが挙げられます。Stackdriver Monitoring では、指標は、指標タイプ名によって識別し、そのスキーマは、指標記述子オブジェクトによって記述します。たとえば、Monitoring API を使用して既存の指標記述子を参照すると、どの指標が利用可能かわかります。

ほとんどの指標タイプは Stackdriver Monitoring によって事前定義されていますが、ご自身で指標スキーマを定義し、データをそこに送ることによって、カスタム指標を作成することもできます。たとえば、「小売店の日別売上高」は、カスタム指標です。カスタム指標を試してみるには、カスタム指標の使用をご覧ください。

各指標タイプでは、指標のデータのための一連のディメンションやファセットとして機能するラベルを定義します。たとえば、指標タイプ pubsub.googleapis.com/topic/send_message_operation_count は、Google Cloud Pub/Sub での公開操作のカウントを表します。これは、公開操作の成功と失敗の数を容易に取得することができるラベル response_code を 1 つ含んでいます。指標タイプはトピック ID もラベルに記録するのではないか、だから特定のトピックに関する公開情報を取得することができるのではないか、と期待されるかもしれません。しかし、それは、次のセクションで説明する監視対象リソースに任されています。

監視対象リソース

監視対象リソースとは、監視データを送信するか、監視の対象であるクラウド エンティティを表します。指標と同様に、監視対象リソースは監視対象リソースタイプごとにグループ分けされ、そのスキーマは監視対象リソース記述子によって定義されます。監視対象リソースタイプの例としては、VM インスタンス、データベース、VPN ゲートウェイなどが挙げられます。各リソース スキーマでは、特定のリソース インスタンス(特定のデータベースなど)を指定するために使用する一連のラベルが定義されています。監視対象リソースタイプの一覧については、監視対象リソースタイプをご覧ください。ご自身で監視対象リソースタイプを作成することはできません。

たとえば、監視対象リソースタイプ pubsub_topic は、Google Cloud Pub/Sub トピックを表します。これには、2 つのラベルが含まれています。

  • project_id: そのトピックが作成されたプロジェクト
  • topic_id: その特定のトピックの ID

リソース メタデータ

監視対象リソース記述子で定義されたラベルに加えて、Google Cloud Platform は、監視対象リソースにリソース メタデータと呼ばれる追加情報(キー、値)を付与します。リソース メタデータは、監視フィルタで使用することができます。リソース メタデータには、2 種類あります。

  • プラットフォーム リソース メタデータは、Google Cloud Platform によって定義され、リソースが属するセキュリティ グループなど、リソースに関する情報を追跡します。監視フィルタでは、プラットフォーム メタデータは resource.metadata.<key> として参照されます。
  • ユーザー リソース メタデータは、ユーザーが定義します。監視フィルタでは、resource.metadata.tag.<key> によって参照されます。ユーザー メタデータは、Compute Engine ドキュメントではラベルとも呼んでいます。

プラットフォーム メタデータ

プラットフォーム メタデータのキーと値は、Google Cloud Platform によって定義され、提供されます。監視フィルタでは、プラットフォーム メタデータは resource.metadata.<key> として参照されます。このデータを使用してリソースを抽出することは可能ですが、個々の監視対象リソース オブジェクト内のデータは表示されず、それをクエリすることもできません。

リソースのプラットフォーム メタデータの値は、変化することがあります。たとえば、リソースを別のセキュリティ グループに移動すると、リソースの security_group メタデータの値が変化します。現在定義されているプラットフォーム メタデータのキーについて、次の表で説明します。

プラットフォーム メタデータのキー 説明
cloud_account 文字列 リソースが属するクラウド サービス プロバイダ アカウント。
gaeapp 1 文字列 リソースが属する App Engine アプリケーション。
gaemodule 文字列 リソースが属する App Engine モジュール。
name 文字列 ユーザーが割り当てたリソース名。
load_balancer 文字列リスト* リソースの手前のロードバランサ。
tag キーと値 ユーザー リソース メタデータを格納。
region 文字列 リソースが配置されている地域。
security_group 文字列リスト* リソースが属するセキュリティ グループ。
spot_instance ブール値 これが仮想マシンのスポット インスタンスであれば、真。
subnet 文字列リスト 2 リソースに関連付けられたサブネット。
vpc 文字列リスト 2 リソースに関連付けられた AWS 仮想プライベート クラウド。

1 監視対象リソースタイプ gae_app と混同しないでください。多数のリソースタイプを App Engine アプリケーションに関連付けることができます。 2 文字列リストには、複数の文字列を格納することができます。リスト内のいずれかの文字列に一致すれば、文字列リストとの一致は成功となります。

ユーザー メタデータ

Compute Engine の VM インスタンスを含むいくつかのリソースには、ユーザー定義のメタデータを格納することができます。Compute Engine では、この種類のメタデータをラベルタグと呼んでいます。監視フィルタでは、ユーザー メタデータは resource.metadata.tag.<string> として参照されます。

たとえば、動画フロントエンドとして使用する Compute Engine の VM インスタンスに、次のラベルを割り当てることができます。

webserver-frontend:videos

Stackdriver Monitoring では、次のフィルタを使用してこれらの VM インスタンスを参照することができます。

resource.type = "gce_instance" AND resource.metadata.tag."webserver-frontend" = "videos"

Compute Engine タグを使用している場合は、次のようにタグの存在をテストするだけで十分です。

resource.type = "gce_instance" AND resource.metadata.tag:"webserver-frontend"

時系列とラベル

時系列とは、指標と監視対象リソースとの組み合わせに関連付けられている一連のタイムスタンプ付きデータポイントです。各指標タイプには、次の組み合わせによって一意的に識別される、任意の数の時系列を格納することができます。

  • 指標のタイプ名。
  • 指標タイプのラベルの値。
  • 監視対象リソースタイプ名。
  • 監視対象リソースタイプのラベルの値。

一部の指標タイプでは、時系列にどの監視対象リソースタイプを使用すべきかの選択が自明である場合があります。たとえば、Compute Engine の CPU 使用率指標は、常に gce_instance リソースタイプを使用します。しかしながら、agent.googleapis.com/cpu/utilization 指標では、時系列に gce_instanceaws_ec2_instance のうちのいずれかのリソースタイプを使用することができます。たとえリソースタイプが変化しなくても、時系列において、監視対象リソース オブジェクトは、測定中の VM インスタンスに応じて異なるラベル値を取ります。

カスタム指標にデータを書き込むとき、その指標にとって合理的な任意の監視対象リソース オブジェクトを使用することができます。ベスト プラクティスは、アプリケーション コードの実行基盤となる物理リソースを使用することです。詳細については、監視対象リソースタイプの選択をご覧ください。

たとえば、pubsub.googleapis.com/topic/send_message_operation_count 指標タイプについて考えてみます。この指標タイプのデータポイントを、次のように指定します。

  • 指標タイプ: pubsub.googleapis.com/topic/send_message_operation_count
  • 指標タイプラベルの値: response_code
  • 監視対象リソースタイプ: pubsub_topic
  • リソースのラベルの値: project_idtopic_id

時系列の数の見積もり

特定の指標タイプの最大時系列数は、指標ラベルの値、監視対象リソースタイプ、監視対象リソースラベルの可能な組み合わせの数に依存します。たとえば、上記の Cloud Pub/Sub の例において、3 個の異なる応答コードと 10 個の異なるトピックがあると仮定します。次の値を乗算して計算すると、最大 30 個の時系列が存在します。

  • 1 - 監視対象リソースタイプ pubsub_topic
  • 3 - response_code の値
  • 10 - {project_idtopic_id} の一意的な組み合わせであるトピック

時系列は、そのデータが存在する場合のみ、作成されます。10 個のトピックに対するすべての公開操作が成功した場合、response_code 値は常に success になるため、時系列は 10 個だけ作成されます。

指標の種類と値の型

各指標タイプは、指標の種類値の型を有します。値の型とは、各時系列点のデータ型です。指標の種類は、各時系列点が何を表し、ポイントの時間間隔が何を意味するのかを決定します。

  • gauge: 値の瞬時測定値。例: 特定の時点におけるマイクロ プロセッサの温度。この時間間隔は、時間軸上の 1 点です
  • delta: 有限の時間間隔中の値の変化。例: 1,200~1,300 時間の間に受信したサービス要求の数。
  • cumulative: ある時間間隔にわたっての累積値。時系列中の連続する点が、同じ開始時間と、先行する点よりも遅い終了時間とを有するようにする必要があります。やがて、イベントが累積値をゼロにリセットし、それ以後の点のための新たな開始時間を設定します。例: 仮想マシン インスタンスが最後に再起動して以来の故障数。

組み込み指標では、次の指標の種類と値の型との組み合わせが可能です。

値の型 GAUGE DELTA CUMULATIVE
BOOL × ×
INT64 
DOUBLE
STRING × ×
DISTRIBUTION
MONEY × × ×

カスタム指標は、さらに制限されています。カスタム指標では、次の指標の種類と値の型との組み合わせが可能です。

値の型 GAUGE DELTA CUMULATIVE
BOOL × ×
INT64  ×
DOUBLE ×
STRING × × ×
DISTRIBUTION ×
MONEY × × ×

指標名

すべての指標タイプは、compute.googleapis.com/instance/cpu/utilization のようなドメイン パス形式を使用して命名されます。指標は、サービスcompute)とパス名instance/cpu/utilization)を有します。次の表は、4 つの主要な指標グループについて、指標名がどのように形成されるかを示しています。

指標タイプ名の形式 説明
{service}.googleapis.com/{path-name} Google Cloud Platform(GCP)の指標
aws.googleapis.com/{service}/{path-name} Amazon Web Services(AWS)の指標
agent.googleapis.com/{service}/{path-name} サードパーティ アプリケーションの指標
custom.googleapis.com/{path-name} ユーザー定義のカスタム指標

カスタム指標を除くすべての指標タイプは、すべての Google Cloud Platform プロジェクトで表示されます。しかしながら、各プロジェクトは、そのプロジェクトのリソースからの時系列データにのみアクセスすることができます。Stackdriver アカウントは、そのすべての監視プロジェクトからの時系列データにアクセスすることができます。

すべての利用可能な(非カスタム)指標とサービスの一覧については、指標の一覧をご覧ください。

指標名とラベル名の規則

指標名(タイプ)には、ドメインとパスの要素を表すピリオド(.)とスラッシュ(「/」)に加えて、大文字と小文字、数字、アンダースコア(_)を使用することができます。各パス要素は、文字、数字、アンダースコアで始まります。指標名の最大長は、ドメインとパスを含めて 100 文字です。

指標記述子と監視対象リソース記述子のラベル名(キー)には、大文字と小文字、数字、アンダースコア(_)を使用することができます。ラベル名は、文字かアンダースコアで始まる必要があります。ラベル名の最大長は、100 文字です。

データ型

Monitoring API では、上記セクションで説明した指標、監視対象リソース、時系列は、次のデータ型にマップされます。

  • MetricDescriptor 指標タイプとそのディメンションを定義します。
  • Metric 指標の各ディメンションに値が付与されている、指標タイプのインスタンスを表します。
  • TimeSeries 指標と監視対象リソースとに関連付けられた測定値を保持します。
  • MonitoredResourceDescriptor 監視対象リソースのタイプを定義します。
  • MonitoredResource 特定のインスタンスを識別するラベルの値が付与されている、監視対象リソースタイプのインスタンスを表します。

これらの型は、以下のセクションでさらに説明します。

MetricDescriptor

MetricDescriptor オブジェクトは、次の例に示すように、指標タイプを表します。

{
  "type": "compute.googleapis.com/instance/cpu/utilization",
  "name": "projects/{your-project-id}/metricDescriptors/compute.googleapis.com/instance/cpu/utilization",
  "displayName": "CPU utilization",
  "description": "The percentage of the allocated CPU that is currently in use on the instance. Note that some machine types allow bursting above 100% usage.",
  "metricKind": "GAUGE",
  "valueType": "DOUBLE",
  "labels": [
   {
    "key": "instance_name",
    "valueType": "STRING",
    "description": "The name of the VM instance."
   }
  ],
  "unit": "1"
}

記述子には、次のフィールドが含まれています。

  • type は、サービス名で始まる、指標のタイプ名です。たとえば、compute.googleapis.com は Google Compute Engine であり、instance/cpu/utilization は測定値です。詳細については、指標名をご覧ください。
  • name は、プロジェクト ID によって指標タイプをさらに修飾します。いくつかの状況では、プロジェクト ID は重要です。
  • metricKind は、指標の種類です。他のオプションについては、MetricKind をご覧ください。
  • valueType は、測定値のデータ型です。他のオプションについては、ValueTypeをご覧ください。
  • labels には、指標のディメンションの記述が含まれています。各ディメンションは、ラベルキーによって識別され、ラベルキーには、型指定された値を割り当てることができます。この例では、唯一のディメンションは、CPU 使用率を測定中の VM インスタンスの名前を保持する「インスタンス名」です。
  • unit は、MetricDescriptor で説明したように、測定値の単位を記録します。

詳細については、MetricDescriptor のリファレンス マニュアルをご覧ください。

Metric

Metric オブジェクトは、指標タイプ名とすべての指標タイプのラベルの値からなる、指標タイプのインスタンスです。 Metric オブジェクトは、TimeSeries オブジェクトでのみ使用され、時系列を指定するためのヘルパー オブジェクトとみなすことができます。紛らわしいことに、「メトリクス」は、通常指標タイプのことを指します。

たとえば、次に示すのは、Metric オブジェクト、すなわち Compute Engine の CPU 使用率指標タイプのインスタンスです。

{
  "type": "compute.googleapis.com/instance/cpu/utilization",
  "labels": {
    "instance_name": "your-instance-name"
  },
}

Metric オブジェクトには、次のフィールドが含まれています。

  • type は、MetricDescriptor オブジェクトで定義される指標タイプ名です。
  • labels には、指標タイプのラベルの各々の値が含まれています。上記サンプルでは、指標記述子は、VM インスタンス名であるラベル instance_name を 1 つ含んでいます。

MonitoredResourceDescriptor

Stackdriver Monitoring は、MonitoredResourceDescriptor オブジェクトを使用して、監視対象リソースタイプを表します。Google Cloud Platform が、一連の監視対象リソースタイプを決定します。ユーザーが自ら作成することはできません。MetricDescriptor オブジェクトと同様に、次の例に示すように、MonitoredResourceDescriptor は、ディメンションとして機能するようにラベルを定義することができます。

{
  "type": "gce_instance",
  "name": "projects/{your-project-id}/monitoredResourceDescriptors/gce_instance",
  "description": "A virtual machine instance hosted in Google Compute Engine (GCE).",
  "displayName": "GCE Instance",
  "labels": [
   {
     "key": "project_id",
     "valueType": "STRING",
     "description": "The identifier of the GCP project associated with this resource (e.g., your-project-id)."
   },
   {
     "key": "instance_id",
     "valueType": "STRING",
     "description": "The VM instance name assigned by GCE."
   },
   {
     "key": "zone",
     "valueType": "STRING",
     "description": "The GCE zone in which the VM is running."
   }
  ],
}

MonitoredResourceDescriptor の中の重要なフィールドは、次のとおりです。

  • type は、監視対象リソースのタイプとして機能する識別子です。このサンプルでは、gce_instance は、Google Compute Engine の仮想マシン インスタンスを指します。監視対象リソースのタイプ名はグローバルです。
  • name は、タイプの参照に関する完全修飾名です。
  • labels は、このリソースタイプのディメンションを定義します。このサンプルでは、project_idinstance_id、インスタンスが存在する zone という 3 つのラベルがあります。

MonitoredResource

監視対象リソースは、MonitoredResource オブジェクトによって表されます。これは、Metric オブジェクトが MetricDescriptor のインスタンスであるのと同様に、MonitoredResourceDescriptor のインスタンスです。次の例では、gce_instance 記述子に基づいて監視対象 VM リソースを示しています。

{
  "type": "gce_instance",
  "labels": {
    "instance_id": "7745794955719604653",
    "zone": "us-central1-a",
    "project_id": "{your-project-id}"
}

TimeSeries

Monitoring API は、TimeSeries オブジェクトを、入力として(指標に新たなデータを書き込むため)と、出力として(メトリクスのデータを一覧表示するため)の両方で使用します。timeSeries.list メソッドによって返される可能性がある TimeSeries オブジェクトが、次の例に示されています。

{
 "metric": {
   "type": "compute.googleapis.com/instance/cpu/utilization"
   "labels": {
    "instance_name": "your-instance-name"
   },
 },
 "resource": {
   "type": "gce_instance",
   "labels": {
     "instance_id": "7745794955719604653",
     "zone": "us-central1-a",
     "project_id": "{your-project-id}"
   }
 },
 "metricKind": "GAUGE",
 "valueType": "DOUBLE",
 "points": [
  {
   "interval": {
    "startTime": "2016-05-02T15:01:01.763Z",
    "endTime": "2016-05-02T15:01:01.763Z"
   },
   "value": {
    "doubleValue": 0.06758632069686428
   }
  },
  {
   "interval": {
    "startTime": "2016-05-02T15:00:01.763Z",
    "endTime": "2016-05-02T15:00:01.763Z"
   },
   "value": {
    "doubleValue": 0.06738325923215598
   }
  },
  ...
 ]
}

時系列には、次のフィールドが含まれています。

  • metric は、Metric セクションで説明した指標オブジェクトです。
  • resource は、MonitoredResource で説明した監視対象リソース オブジェクトです。このオブジェクトには、監視対象リソースのタイプ名とそのラベル値が含まれています。
  • metricKindvalueType は、次の points フィールドのデータの種類を指定します。時系列がアライメントや集約操作によって生成されて異なるタイプにならない限り、これらは、指標の記述子内の対応する値と同じになります。詳細については、データの集約をご覧ください。
  • labels には、指標タイプのラベルのそれぞれの値が含まれています。このサンプルでは、指標記述子は、VM インスタンス名であるラベル instance_name を 1 つ含んでいます。
  • points は、それぞれ時間間隔と型付きデータ値とからなる測定値のリストです。サンプルでは、時間間隔の開始時間と終了時間は同じであり、これは、時間軸上の 1 点を意味しています。時間は、常に RFC 3339 形式で指定されています。詳細については、トラブルシューティングの例をご覧ください。

収集、保持、レイテンシ

指標データは、監視対象リソースごとに異なるスケジュールで収集されます。一部のデータは定期的に監視対象リソースから Stackdriver Monitoring によって「プル」され、一部のデータはアプリケーション、サービス、Stackdriver Monitoring エージェントによって「プッシュ」されます。

すべての指標データは、指標タイプの時系列内に保持されています。時系列は、少なくとも 1 つのデータポイントが含まれていれば、「存在」します。個々のデータポイントは、限られた時間の間保持され、その後「有効期限切れ」となって削除されます。保持期間については、割り当てのポリシーをご覧ください。指標データをより長期間保持するには、Google Cloud Storage や Google BigQuery などの別の場所にデータポイントを手動でコピーします。

レイテンシとは、Monitoring API から測定値を取得するまでにどのくらいの時間が経過するかを指します。時間は、監視対象リソースに応じて異なります。たとえば次のようなものがあります。

  • Compute Engine の VM インスタンスからのCPU 使用率メトリックは、毎分収集され、データは、データで記録された時間から 3~4 分後に Monitoring API に表示されます。新規作成された VM インスタンスについては、最初の指標が表示されるまで、さらに遅延が発生することがあります。

  • Monitoring API を使用すると、カスタム指標の既存の時系列に新しいデータポイントを書き込んだとき、データは、数秒後に表示されます。カスタム指標の新規の時系列に最初のデータポイントを書き込んだとき、データが表示されるまで数分かかることがあります。

保持ポリシーのために時系列内のすべてのデータが有効期限切れとなった場合、その時系列に次回書き込むときは、新規の時系列の場合と同程度のレイテンシが発生することがあります。

次のステップ

Monitoring API を使用して指標にアクセスし、カスタム指標を管理することに関する詳細については、カスタム指標の使用をご覧ください。

Java、Python、Node.js、Go による網羅的なカスタム指標の例を参照するには、サンプルコードをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。