API로 사용자 정의 측정항목 만들기

이 문서에서는 사용자 정의 측정항목을 만들고 Cloud Monitoring API를 사용하여 이 측정항목 데이터를 작성하는 방법을 설명합니다. 사용자 정의 측정항목은 기본 제공 Cloud Monitoring 측정항목과 동일한 요소를 사용합니다.

  • 데이터 포인트 집합
  • 데이터 포인트의 의미를 알려주는 측정항목 유형 정보
  • 데이터 포인트의 출처를 알려주는 모니터링 리소스 정보

커스텀 측정항목이라고도 하는 사용자 정의 측정항목은 기본 제공 측정항목과 동일한 방식으로 사용할 수 있습니다. 즉, 이 측정항목 데이터에 대한 차트와 알림을 만들 수 있습니다.

애플리케이션을 계측하려면 공급업체 및 제품별 API 또는 클라이언트 라이브러리 대신 OpenTelemetry와 같은 오픈소스인 공급업체 중립적인 계측 프레임워크를 사용하는 것이 좋습니다. 애플리케이션을 계측하는 방법은 계측 및 관측 가능성을 참조하세요.

시작하기 전에

모든 측정항목의 기반 구조에 대해 알아보려면 측정항목, 시계열, 리소스를 참조하세요.

Cloud Monitoring을 사용하려면 결제가 사용 설정된 Google Cloud 프로젝트가 있어야 합니다. 필요한 경우 다음을 수행합니다.

  1. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  2. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  3. Monitoring API가 사용 설정되어 있는지 확인합니다. 자세한 내용은 Monitoring API 사용 설정을 참조하세요.
  4. Google Cloud 외부에서 실행되는 애플리케이션의 경우 Google Cloud 프로젝트가 애플리케이션을 인증해야 합니다. 일반적으로 프로젝트의 서비스 계정을 만들고 환경 변수를 구성하여 인증을 설정합니다.

    Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행되는 애플리케이션의 경우 인스턴스의 AWS 커넥터 프로젝트에 대한 서비스 계정을 만듭니다.

    서비스 계정 만들기에 대한 자세한 내용은 인증 시작하기를 참조하세요.

사용자 정의 측정항목 유형 만들기

사용자 정의 측정항목을 만들려면 측정항목에 대해 여러 정보를 지정하는 MetricDescriptor 객체를 정의하거나 측정항목 데이터를 작성합니다. 측정항목 데이터를 작성하면 Monitoring이 제공된 데이터 구조에 따라 측정항목 설명을 만듭니다. 측정항목 설명 설계에 대한 자세한 내용은 사용자 정의 측정항목에 대한 측정항목 설명을 참조하세요.

측정항목 설명자 자동 생성

사용자 정의 측정항목의 측정항목 설명이 아직 존재하지 않는 경우 측정항목 데이터를 작성하면 측정항목 설명이 자동으로 생성됩니다. 하지만 이 새 측정항목 설명자는 정확히 원하는 설명자가 아닐 수도 있습니다. 측정항목 설명자는 몇 가지 가정과 기본값에 따라 자동으로 생성됩니다.

timeSeries.create 호출에 포함된 TimeSeries 객체가 존재하지 않는 측정항목 유형 이름을 지정하는 Metric 객체를 참조할 때는 Cloud Monitoring이 새 MetricDescriptor를 만듭니다. Cloud Monitoring은 다음 규칙에 따라 MetricDescriptor를 채웁니다.

  • type: 유형은 Metric 객체의 type 필드에서 복사됩니다.
  • name: 메서드 호출의 프로젝트 ID 및 Metric 객체의 type 값으로 만든 이름입니다.
  • labels: Metric 객체에 표시되는 라벨입니다. 새 측정항목 설명의 각 라벨 설명에는 다음과 같은 필드가 포함됩니다.
    • key: Metric 객체의 라벨 키
    • valueType: STRING
    • description: 설정되지 않음
  • metricKind: TimeSeries 객체의 metricKind 매개변수를 지정하지 않는 한 측정항목 종류가 GAUGE로 설정됩니다. metricKind를 지정하면 새 측정항목에 해당 종류가 적용됩니다. GAUGECUMULATIVE 종류만 지정할 수 있습니다.
  • valueType: 값 유형은 기록 중인 Point의 입력 값에서 가져옵니다. 값 유형은 BOOL, INT64, DOUBLE, DISTRIBUTION 중 하나여야 합니다. TimeSeriesvalueType 필드에 값 유형을 지정하면 해당 유형은 Point의 유형과 일치해야 합니다.
  • unit: 설정되지 않음
  • description: "Auto created custom metric.".
  • displayName: 설정되지 않음

하나의 timeSeries.create 호출에 존재하지 않는 동일한 측정항목 유형을 참조하는 여러 TimeSeries 객체를 포함시킬 수 있습니다. 이 경우 새 측정항목 설명의 라벨은 create에 대한 이 호출의 모든 시계열에 있는 Metric 객체에 있는 모든 라벨의 통합으로 구성됩니다.

다음 단계: 사용자 정의 측정항목 작성을 참조하세요.

측정항목 설명 수동 생성

측정항목 설명을 만들려면 다음을 수행합니다.

  1. 측정항목 설명의 구조를 결정합니다. 기본 제공 측정항목을 찾아보고 시계열 데이터를 살펴보면 옵션을 선택하는 데 도움이 됩니다.

    1. 사용자 정의 측정항목의 측정항목 이름을 선택합니다.

    2. 측정항목의 표시 이름과 설명을 선택합니다. 표시 이름은 Google Cloud 콘솔에서 사용됩니다.

    3. 사용자 정의 측정항목을 정의하고 시계열 데이터를 작성할 프로젝트를 선택합니다. 여러 프로젝트에서 동일한 측정항목이 필요한 경우 각 프로젝트에서 측정항목을 동일하게 정의합니다.

      AWS 계정에서 관리하는 리소스에서 사용자 정의 측정항목을 작성하려면 해당 계정의 AWS 커넥터 프로젝트에서 측정항목 설명을 만듭니다.

    4. 측정항목의 종류, 값 유형, 단위(선택사항)를 결정합니다. 사용자 정의 측정항목에서 지원되지 않는 값 유형 및 측정항목 종류도 일부 있습니다. 이러한 필드에 대한 자세한 내용은 값 유형 및 측정항목 종류를 참조하세요.

    5. 측정항목 라벨(이름, 값 유형, 설명)을 선택합니다.

  2. 기록되는 측정항목 데이터에 따라 모니터링 리소스를 결정합니다. 다음 목록에서 선택하세요.

  3. MetricDescriptor 객체를 만든 후 metricDescriptors.create 메서드 호출 인수로 전달합니다.

일반적으로 기존 측정항목 설명과 동일한 유형 이름을 사용하여 metricDescriptors.create를 호출하면 오류가 발생합니다. 하지만 새 MetricDescriptor 객체의 모든 필드가 기존 설명의 필드와 정확히 일치할 경우에는 오류에 해당하지 않으며 아무런 영향도 미치지 않습니다.

다음 예시에서는 게이지 측정항목을 만듭니다.

프로토콜

측정항목 설명을 만들려면 metricDescriptors.create 메서드를 사용합니다. 메서드의 참조 페이지에서 API 탐색기 위젯을 사용하여 이 메서드를 실행할 수 있습니다. 자세한 내용은 API 탐색기를 참조하세요.

다음은 metricDescriptors.create의 샘플 매개변수입니다.

  • name (URL): projects/[PROJECT_ID]
  • 요청 본문: 다음과 같은 MetricDescriptor 객체를 제공합니다.

    {
      "name": "",
      "description": "Daily sales records from all branch stores.",
      "displayName": "Sales",
      "type": "custom.googleapis.com/stores/sales",
      "metricKind": "GAUGE",
      "valueType": "DOUBLE",
      "unit": "{USD}",
      "labels": [
        {
          "key": "store_id",
          "valueType": "STRING",
          "description": "The ID of the store."
        },
      ],
    }
    

[PROJECT_ID] 대신 프로젝트 ID를 사용하여 위젯의 필드에 이 값을 입력합니다.

요청 본문으로 채워진 이 API 대화상자에서 측정항목 설명을 만들어보세요.

메서드를 실행하려면 실행 버튼을 클릭합니다.

사용해 보기

새 측정항목을 만들 때 MetricDescriptorname 필드는 무시되고 생략될 수 있습니다. create 메서드는 name 필드가 채워진 새 측정항목 설명을 반환합니다. 이 예시에서는 다음과 같습니다.

"name": "projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales"

예를 들어 측정항목 설명을 가져오려면 이 이름을 사용합니다.

C#

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

        public static object CreateMetric(string projectId,
            string metricType = "custom.googleapis.com/stores/daily_sales")
        {
            // Create client.
            MetricServiceClient metricServiceClient = MetricServiceClient.Create();

            // Prepare custom metric descriptor.
            MetricDescriptor metricDescriptor = new MetricDescriptor();
            metricDescriptor.DisplayName = "Daily Sales";
            metricDescriptor.Description = "Daily sales records from all branch stores.";
            metricDescriptor.MetricKind = MetricKind.Gauge;
            metricDescriptor.ValueType = MetricDescriptor.Types.ValueType.Double;
            metricDescriptor.Type = metricType;
            metricDescriptor.Unit = "{USD}";
            LabelDescriptor labels = new LabelDescriptor();
            labels.Key = "store_id";
            labels.ValueType = LabelDescriptor.Types.ValueType.String;
            labels.Description = "The ID of the store.";
            metricDescriptor.Labels.Add(labels);
            CreateMetricDescriptorRequest request = new CreateMetricDescriptorRequest
            {
                ProjectName = new ProjectName(projectId),
            };
            request.MetricDescriptor = metricDescriptor;
            // Make the request.
            MetricDescriptor response = metricServiceClient.CreateMetricDescriptor(request);
            Console.WriteLine("Done creating metric descriptor:");
            Console.WriteLine(JObject.Parse($"{response}").ToString());
            return 0;
        }

Go

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


import (
	"context"
	"fmt"
	"io"

	monitoring "cloud.google.com/go/monitoring/apiv3"
	"cloud.google.com/go/monitoring/apiv3/v2/monitoringpb"
	"google.golang.org/genproto/googleapis/api/label"
	"google.golang.org/genproto/googleapis/api/metric"
	metricpb "google.golang.org/genproto/googleapis/api/metric"
)

// createCustomMetric creates a custom metric specified by the metric type.
func createCustomMetric(w io.Writer, projectID, metricType string) (*metricpb.MetricDescriptor, error) {
	ctx := context.Background()
	c, err := monitoring.NewMetricClient(ctx)
	if err != nil {
		return nil, err
	}
	defer c.Close()
	md := &metric.MetricDescriptor{
		Name: "Custom Metric",
		Type: metricType,
		Labels: []*label.LabelDescriptor{{
			Key:         "environment",
			ValueType:   label.LabelDescriptor_STRING,
			Description: "An arbitrary measurement",
		}},
		MetricKind:  metric.MetricDescriptor_GAUGE,
		ValueType:   metric.MetricDescriptor_INT64,
		Unit:        "s",
		Description: "An arbitrary measurement",
		DisplayName: "Custom Metric",
	}
	req := &monitoringpb.CreateMetricDescriptorRequest{
		Name:             "projects/" + projectID,
		MetricDescriptor: md,
	}
	m, err := c.CreateMetricDescriptor(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("could not create custom metric: %w", err)
	}

	fmt.Fprintf(w, "Created %s\n", m.GetName())
	return m, nil
}

Java

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// Your Google Cloud Platform project ID
final String projectId = System.getProperty("projectId");

try (final MetricServiceClient client = MetricServiceClient.create();) {
  ProjectName projectName = ProjectName.of(projectId);

  MetricDescriptor descriptor =
      MetricDescriptor.newBuilder()
          .setType(type)
          .addLabels(
              LabelDescriptor.newBuilder()
                  .setKey("store_id")
                  .setValueType(LabelDescriptor.ValueType.STRING))
          .setDescription("This is a simple example of a custom metric.")
          .setMetricKind(MetricDescriptor.MetricKind.GAUGE)
          .setValueType(MetricDescriptor.ValueType.DOUBLE)
          .build();

  CreateMetricDescriptorRequest request =
      CreateMetricDescriptorRequest.newBuilder()
          .setName(projectName.toString())
          .setMetricDescriptor(descriptor)
          .build();

  descriptor = client.createMetricDescriptor(request);
  System.out.println("Created descriptor " + descriptor.getName());
}

Node.js

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');

// Creates a client
const client = new monitoring.MetricServiceClient();

/**
 * TODO(developer): Uncomment and edit the following lines of code.
 */
// const projectId = 'YOUR_PROJECT_ID';
async function createMetricDescriptor() {
  const request = {
    name: client.projectPath(projectId),
    metricDescriptor: {
      description: 'Daily sales records from all branch stores.',
      displayName: 'Daily Sales',
      type: 'custom.googleapis.com/stores/daily_sales',
      metricKind: 'GAUGE',
      valueType: 'DOUBLE',
      unit: '{USD}',
      labels: [
        {
          key: 'store_id',
          valueType: 'STRING',
          description: 'The ID of the store.',
        },
      ],
    },
  };

  // Creates a custom metric descriptor
  const [descriptor] = await client.createMetricDescriptor(request);
  console.log('Created custom Metric:\n');
  console.log(`Name: ${descriptor.displayName}`);
  console.log(`Description: ${descriptor.description}`);
  console.log(`Type: ${descriptor.type}`);
  console.log(`Kind: ${descriptor.metricKind}`);
  console.log(`Value Type: ${descriptor.valueType}`);
  console.log(`Unit: ${descriptor.unit}`);
  console.log('Labels:');
  descriptor.labels.forEach(label => {
    console.log(`  ${label.key} (${label.valueType}) - ${label.description}`);
  });
}
createMetricDescriptor();

PHP

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

use Google\Api\LabelDescriptor;
use Google\Api\MetricDescriptor;
use Google\Cloud\Monitoring\V3\Client\MetricServiceClient;
use Google\Cloud\Monitoring\V3\CreateMetricDescriptorRequest;

/**
 * Create a new metric in Stackdriver Monitoring.
 * Example:
 * ```
 * create_metric($projectId);
 * ```
 *
 * @param string $projectId Your project ID
 */
function create_metric($projectId)
{
    $metrics = new MetricServiceClient([
        'projectId' => $projectId,
    ]);

    $projectName = 'projects/' . $projectId;

    $descriptor = new MetricDescriptor();
    $descriptor->setDescription('Daily sales records from all branch stores.');
    $descriptor->setDisplayName('Daily Sales');
    $descriptor->setType('custom.googleapis.com/stores/daily_sales');
    $descriptor->setMetricKind(MetricDescriptor\MetricKind::GAUGE);
    $descriptor->setValueType(MetricDescriptor\ValueType::DOUBLE);
    $descriptor->setUnit('{USD}');
    $label = new LabelDescriptor();
    $label->setKey('store_id');
    $label->setValueType(LabelDescriptor\ValueType::STRING);
    $label->setDescription('The ID of the store.');
    $labels = [$label];
    $descriptor->setLabels($labels);
    $createMetricDescriptorRequest = (new CreateMetricDescriptorRequest())
        ->setName($projectName)
        ->setMetricDescriptor($descriptor);

    $descriptor = $metrics->createMetricDescriptor($createMetricDescriptorRequest);
    printf('Created a metric: ' . $descriptor->getName() . PHP_EOL);
}

Python

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

from google.api import label_pb2 as ga_label
from google.api import metric_pb2 as ga_metric
from google.cloud import monitoring_v3

client = monitoring_v3.MetricServiceClient()
project_name = f"projects/{project_id}"
descriptor = ga_metric.MetricDescriptor()
descriptor.type = "custom.googleapis.com/my_metric" + str(uuid.uuid4())
descriptor.metric_kind = ga_metric.MetricDescriptor.MetricKind.GAUGE
descriptor.value_type = ga_metric.MetricDescriptor.ValueType.DOUBLE
descriptor.description = "This is a simple example of a custom metric."

labels = ga_label.LabelDescriptor()
labels.key = "TestLabel"
labels.value_type = ga_label.LabelDescriptor.ValueType.STRING
labels.description = "This is a test label"
descriptor.labels.append(labels)

descriptor = client.create_metric_descriptor(
    name=project_name, metric_descriptor=descriptor
)
print("Created {}.".format(descriptor.name))

Ruby

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

# Your Google Cloud Platform project ID
# project_id = "YOUR_PROJECT_ID"

# Example metric type
# metric_type = "custom.googleapis.com/my_metric"

client = Google::Cloud::Monitoring.metric_service
project_name = client.project_path project: project_id

descriptor = Google::Api::MetricDescriptor.new(
  type:        metric_type,
  metric_kind: Google::Api::MetricDescriptor::MetricKind::GAUGE,
  value_type:  Google::Api::MetricDescriptor::ValueType::DOUBLE,
  description: "This is a simple example of a custom metric."
)

result = client.create_metric_descriptor name:              project_name,
                                         metric_descriptor: descriptor
p "Created #{result.name}"
p result

문제가 발생할 경우 API 호출 문제 해결을 참조하세요.

다음 단계: 사용자 정의 측정항목 작성을 참조하세요.

사용자 정의 측정항목 작성

사용자 정의 측정항목의 측정항목 유형에만 데이터를 작성할 수 있습니다. 데이터를 작성하려면 timeSeries.create 메서드를 사용하세요. 시계열이 있으면 이 메서드가 새 데이터 포인트를 기존 시계열에 추가합니다. 시계열이 없으면 이 메서드가 시계열을 만들고 데이터를 추가합니다.

TimeSeries 객체 목록을 timeSeries.create에 전달하여 데이터 포인트를 작성합니다. 최대 목록 크기는 200이고 목록의 객체마다 다른 시계열을 지정해야 합니다.

  • metricresource 필드 값은 특정 TimeSeries 객체를 식별합니다. 이 필드는 데이터의 측정항목 유형과 데이터가 수집된 모니터링 리소스를 나타냅니다.
  • metricKindvalueType 필드는 생략합니다. 이 두 필드는 데이터 포인트를 쓸 때 무시됩니다.
  • TimeSeries 객체에는 단일 Point 객체만 포함되어야 합니다.

    • 포인트의 값 및 시간 간격이 측정항목 유형의 정의와 일치해야 합니다. 다양한 측정항목 종류의 시간 간격에 대한 자세한 내용은 TimeInterval을 참조하세요.
    • 포인트의 시간 간격이 시계열에 이미 존재하는 포인트보다 늦은 시점에 존재해야 합니다.
    • 간격의 종료 시간이 25시간보다 이전이거나 5분보다 늦은 시점이어서는 안 됩니다.
  • 동일한 시계열에 포인트를 2개 이상 작성하려면 각 포인트에 대해 timeSeries.create 메서드를 개별적으로 호출합니다. 5초당 포인트 1개보다 빠른 속도로 단일 시계열에 데이터를 작성하지 마세요. 여러 시계열에 데이터 포인트를 추가할 때는 비율 제한이 없습니다.

프로토콜

측정항목 데이터를 작성하려면 timeSeries.create 메서드를 사용하세요. 메서드의 참조 페이지에서 API 탐색기 위젯을 사용하여 이 메서드를 실행할 수 있습니다. 자세한 내용은 API 탐색기를 참조하세요.

측정항목 설명 수동 생성에서 만든 stores/daily_sales 측정항목에 대한 포인트를 작성하려면 다음 안내를 따르세요.

  1. timeSeries.create의 참조 페이지로 이동합니다.
  2. API 탐색기 위젯에 아래의 매개변수를 제공합니다.
  3. 실행 버튼을 클릭합니다.

다음 샘플 매개변수를 사용합니다.

  • 이름: projects/[PROJECT_ID]
  • 요청 본문: TimeSeries 객체 목록을 포함합니다. 다음 샘플에는 목록의 시계열이 하나만 있습니다.

    {
     "timeSeries": [
      {
       "metric": {
        "type": "custom.googleapis.com/my_metric",
        "labels": {
         "my_label": "my_value"
        }
       },
       "resource": {
        "type": "gce_instance",
        "labels": {
         "project_id": "[PROJECT_ID]",
         "instance_id": "1234567890123456789",
         "zone": "us-central1-f"
        }
       },
       "points": [
        {
         "interval": {
          "endTime": "2018-06-01T10:00:00-04:00"
         },
         "value": {
          "doubleValue": 123.45
         }
        }
       ]
      }
     ]
    }
    

사용해 보기

C#

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

        public static object WriteTimeSeriesData(string projectId)
        {
            // Create client.
            MetricServiceClient metricServiceClient = MetricServiceClient.Create();
            // Initialize request argument(s).
            ProjectName name = new ProjectName(projectId);
            // Prepare a data point.
            Point dataPoint = new Point();
            TypedValue salesTotal = new TypedValue();
            salesTotal.DoubleValue = 123.45;
            dataPoint.Value = salesTotal;
            Timestamp timeStamp = new Timestamp();
            timeStamp.Seconds = (long)(DateTime.UtcNow - s_unixEpoch).TotalSeconds;
            TimeInterval interval = new TimeInterval();
            interval.EndTime = timeStamp;
            dataPoint.Interval = interval;

            // Prepare custom metric.
            Metric metric = new Metric();
            metric.Type = "custom.googleapis.com/stores/daily_sales";
            metric.Labels.Add("store_id", "Pittsburgh");

            // Prepare monitored resource.
            MonitoredResource resource = new MonitoredResource();
            resource.Type = "global";
            resource.Labels.Add("project_id", projectId);

            // Create a new time series using inputs.
            TimeSeries timeSeriesData = new TimeSeries();
            timeSeriesData.Metric = metric;
            timeSeriesData.Resource = resource;
            timeSeriesData.Points.Add(dataPoint);

            // Add newly created time series to list of time series to be written.
            IEnumerable<TimeSeries> timeSeries = new List<TimeSeries> { timeSeriesData };
            // Write time series data.
            metricServiceClient.CreateTimeSeries(name, timeSeries);
            Console.WriteLine("Done writing time series data:");
            Console.WriteLine(JObject.Parse($"{timeSeriesData}").ToString());
            return 0;
        }

Go

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


// writeTimeSeriesValue writes a value for the custom metric created
func writeTimeSeriesValue(projectID, metricType string) error {
	ctx := context.Background()
	c, err := monitoring.NewMetricClient(ctx)
	if err != nil {
		return err
	}
	defer c.Close()
	now := &timestamp.Timestamp{
		Seconds: time.Now().Unix(),
	}
	req := &monitoringpb.CreateTimeSeriesRequest{
		Name: "projects/" + projectID,
		TimeSeries: []*monitoringpb.TimeSeries{{
			Metric: &metricpb.Metric{
				Type: metricType,
				Labels: map[string]string{
					"environment": "STAGING",
				},
			},
			Resource: &monitoredres.MonitoredResource{
				Type: "gce_instance",
				Labels: map[string]string{
					"instance_id": "test-instance",
					"zone":        "us-central1-f",
				},
			},
			Points: []*monitoringpb.Point{{
				Interval: &monitoringpb.TimeInterval{
					StartTime: now,
					EndTime:   now,
				},
				Value: &monitoringpb.TypedValue{
					Value: &monitoringpb.TypedValue_Int64Value{
						Int64Value: rand.Int63n(10),
					},
				},
			}},
		}},
	}
	log.Printf("writeTimeseriesRequest: %+v\n", req)

	err = c.CreateTimeSeries(ctx, req)
	if err != nil {
		return fmt.Errorf("could not write time series value, %w ", err)
	}
	return nil
}

Java

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

String projectId = System.getProperty("projectId");

// Prepares an individual data point
TimeInterval interval =
    TimeInterval.newBuilder()
        .setEndTime(Timestamps.fromMillis(System.currentTimeMillis()))
        .build();
TypedValue value = TypedValue.newBuilder().setDoubleValue(123.45).build();
Point point = Point.newBuilder().setInterval(interval).setValue(value).build();

List<Point> pointList = new ArrayList<>();
pointList.add(point);

ProjectName name = ProjectName.of(projectId);

// Prepares the metric descriptor
Map<String, String> metricLabels = new HashMap<>();
Metric metric =
    Metric.newBuilder()
        .setType("custom.googleapis.com/my_metric")
        .putAllLabels(metricLabels)
        .build();

// Prepares the monitored resource descriptor
Map<String, String> resourceLabels = new HashMap<>();
resourceLabels.put("instance_id", "1234567890123456789");
resourceLabels.put("zone", "us-central1-f");

MonitoredResource resource =
    MonitoredResource.newBuilder().setType("gce_instance").putAllLabels(resourceLabels).build();

// Prepares the time series request
TimeSeries timeSeries =
    TimeSeries.newBuilder()
        .setMetric(metric)
        .setResource(resource)
        .addAllPoints(pointList)
        .build();

List<TimeSeries> timeSeriesList = new ArrayList<>();
timeSeriesList.add(timeSeries);

CreateTimeSeriesRequest request =
    CreateTimeSeriesRequest.newBuilder()
        .setName(name.toString())
        .addAllTimeSeries(timeSeriesList)
        .build();

// Writes time series data
try (final MetricServiceClient client = MetricServiceClient.create();) {
  client.createTimeSeries(request);
}
System.out.println("Done writing time series value.");

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 writeTimeSeriesData() {
  /**
   * TODO(developer): Uncomment and edit the following lines of code.
   */
  // const projectId = 'YOUR_PROJECT_ID';

  const dataPoint = {
    interval: {
      endTime: {
        seconds: Date.now() / 1000,
      },
    },
    value: {
      doubleValue: 123.45,
    },
  };

  const timeSeriesData = {
    metric: {
      type: 'custom.googleapis.com/stores/daily_sales',
      labels: {
        store_id: 'Pittsburgh',
      },
    },
    resource: {
      type: 'global',
      labels: {
        project_id: projectId,
      },
    },
    points: [dataPoint],
  };

  const request = {
    name: client.projectPath(projectId),
    timeSeries: [timeSeriesData],
  };

  // Writes time series data
  const result = await client.createTimeSeries(request);
  console.log('Done writing time series data.', result);
}
writeTimeSeriesData();

PHP

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

use Google\Api\Metric;
use Google\Api\MonitoredResource;
use Google\Cloud\Monitoring\V3\Client\MetricServiceClient;
use Google\Cloud\Monitoring\V3\CreateTimeSeriesRequest;
use Google\Cloud\Monitoring\V3\Point;
use Google\Cloud\Monitoring\V3\TimeInterval;
use Google\Cloud\Monitoring\V3\TimeSeries;
use Google\Cloud\Monitoring\V3\TypedValue;
use Google\Protobuf\Timestamp;

/**
 * Example:
 * ```
 * write_timeseries($projectId);
 * ```
 *
 * @param string $projectId Your project ID
 */
function write_timeseries($projectId)
{
    $metrics = new MetricServiceClient([
        'projectId' => $projectId,
    ]);

    $projectName = 'projects/' . $projectId;

    $endTime = new Timestamp();
    $endTime->setSeconds(time());
    $interval = new TimeInterval();
    $interval->setEndTime($endTime);

    $value = new TypedValue();
    $value->setDoubleValue(123.45);

    $point = new Point();
    $point->setValue($value);
    $point->setInterval($interval);
    $points = [$point];

    $metric = new Metric();
    $metric->setType('custom.googleapis.com/stores/daily_sales');
    $labels = ['store_id' => 'Pittsburg'];
    $metric->setLabels($labels);

    $resource = new MonitoredResource();
    $resource->setType('global');
    $labels = ['project_id' => $projectId];
    $resource->setLabels($labels);

    $timeSeries = new TimeSeries();
    $timeSeries->setMetric($metric);
    $timeSeries->setResource($resource);
    $timeSeries->setPoints($points);
    $createTimeSeriesRequest = (new CreateTimeSeriesRequest())
        ->setName($projectName)
        ->setTimeSeries([$timeSeries]);

    $metrics->createTimeSeries($createTimeSeriesRequest);

    printf('Done writing time series data.' . PHP_EOL);
}

Python

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

from google.cloud import monitoring_v3

client = monitoring_v3.MetricServiceClient()
project_name = f"projects/{project_id}"

series = monitoring_v3.TimeSeries()
series.metric.type = "custom.googleapis.com/my_metric" + str(uuid.uuid4())
series.resource.type = "gce_instance"
series.resource.labels["instance_id"] = "1234567890123456789"
series.resource.labels["zone"] = "us-central1-c"
series.metric.labels["TestLabel"] = "My Label Data"
now = time.time()
seconds = int(now)
nanos = int((now - seconds) * 10**9)
interval = monitoring_v3.TimeInterval(
    {"end_time": {"seconds": seconds, "nanos": nanos}}
)
point = monitoring_v3.Point({"interval": interval, "value": {"double_value": 3.14}})
series.points = [point]
client.create_time_series(name=project_name, time_series=[series])

Ruby

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

# Your Google Cloud Platform project ID
# project_id = "YOUR_PROJECT_ID"

# Example metric type
# metric_type = "custom.googleapis.com/my_metric"

client = Google::Cloud::Monitoring.metric_service
project_name = client.project_path project: project_id

series = Google::Cloud::Monitoring::V3::TimeSeries.new
series.metric = Google::Api::Metric.new type: metric_type

resource = Google::Api::MonitoredResource.new type: "global"
resource.labels["project_id"] = project_id
series.resource = resource

point = Google::Cloud::Monitoring::V3::Point.new
point.value = Google::Cloud::Monitoring::V3::TypedValue.new double_value: 3.14
now = Time.now
end_time = Google::Protobuf::Timestamp.new seconds: now.to_i, nanos: now.nsec
point.interval = Google::Cloud::Monitoring::V3::TimeInterval.new end_time: end_time
series.points << point

client.create_time_series name: project_name, time_series: [series]
p "Time series created."

문제가 발생할 경우 API 호출 문제 해결을 참조하세요.

사용자 정의 측정항목 삭제

사용자 정의 측정항목을 삭제하려면 측정항목 설명을 삭제합니다. Google Cloud 프로젝트에 저장된 시계열 데이터는 삭제할 수 없습니다. 하지만 측정항목 설명을 삭제하면 데이터에 액세스할 수 없게 됩니다. 데이터는 데이터 보관 정책에 따라 만료 및 삭제됩니다.

기본 제공 측정항목의 측정항목 설명은 삭제할 수 없습니다.

측정항목 설명을 삭제하려면 metricDescriptors.delete 메서드를 호출합니다.

프로토콜

측정항목 설명을 삭제하려면 metricDescriptors.delete 메서드를 호출합니다. 메서드의 참조 페이지에서 API 탐색기 위젯을 사용하여 이 메서드를 실행할 수 있습니다. 자세한 내용은 API 탐색기를 참조하세요.

측정항목 설명 수동 생성에서 만든 stores/daily_sales 측정항목을 삭제하려면 다음 안내를 따르세요.

  1. metricDescriptors.delete의 참조 페이지로 이동합니다.
  2. API 탐색기 위젯에 측정항목 설명자 이름을 제공합니다.

    이름: projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales

  3. 실행 버튼을 클릭합니다.

사용해 보기

C#

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

public static object DeleteMetric(string projectId, string metricType)
{
    // Create client.
    MetricServiceClient metricServiceClient = MetricServiceClient.Create();
    // Initialize request argument(s).
    MetricDescriptorName name = new MetricDescriptorName(projectId, metricType);
    // Make the request.
    metricServiceClient.DeleteMetricDescriptor(name);
    Console.WriteLine($"Done deleting metric descriptor: {name}");
    return 0;
}

Go

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


import (
	"context"
	"fmt"
	"io"

	monitoring "cloud.google.com/go/monitoring/apiv3"
	"cloud.google.com/go/monitoring/apiv3/v2/monitoringpb"
)

// deleteMetric deletes the given metric. name should be of the form
// "projects/PROJECT_ID/metricDescriptors/METRIC_TYPE".
func deleteMetric(w io.Writer, name string) error {
	ctx := context.Background()
	c, err := monitoring.NewMetricClient(ctx)
	if err != nil {
		return err
	}
	defer c.Close()
	req := &monitoringpb.DeleteMetricDescriptorRequest{
		Name: name,
	}

	if err := c.DeleteMetricDescriptor(ctx, req); err != nil {
		return fmt.Errorf("could not delete metric: %w", err)
	}
	fmt.Fprintf(w, "Deleted metric: %q\n", name)
	return nil
}

Java

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

final String projectId = System.getProperty("projectId");
try (final MetricServiceClient client = MetricServiceClient.create();) {
  MetricDescriptorName metricName = MetricDescriptorName.of(projectId, type);
  client.deleteMetricDescriptor(metricName);
  System.out.println("Deleted descriptor " + type);
}

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 deleteMetricDescriptor() {
  /**
   * TODO(developer): Uncomment and edit the following lines of code.
   */
  // const projectId = 'YOUR_PROJECT_ID';
  // const metricId = 'custom.googleapis.com/stores/daily_sales';

  const request = {
    name: client.projectMetricDescriptorPath(projectId, metricId),
  };

  // Deletes a metric descriptor
  const [result] = await client.deleteMetricDescriptor(request);
  console.log(`Deleted ${metricId}`, result);
}
deleteMetricDescriptor();

PHP

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

use Google\Cloud\Monitoring\V3\Client\MetricServiceClient;
use Google\Cloud\Monitoring\V3\DeleteMetricDescriptorRequest;

/**
 * Example:
 * ```
 * delete_metric($projectId, $databaseId);
 * ```
 *
 * @param string $projectId Your project ID
 * @param string $metricId  The ID of the Metric Descriptor to delete
 */
function delete_metric($projectId, $metricId)
{
    $metrics = new MetricServiceClient([
        'projectId' => $projectId,
    ]);

    $metricPath = $metrics->metricDescriptorName($projectId, $metricId);
    $deleteMetricDescriptorRequest = (new DeleteMetricDescriptorRequest())
        ->setName($metricPath);
    $metrics->deleteMetricDescriptor($deleteMetricDescriptorRequest);

    printf('Deleted a metric: ' . $metricPath . PHP_EOL);
}

Python

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

from google.cloud import monitoring_v3

client = monitoring_v3.MetricServiceClient()
client.delete_metric_descriptor(name=descriptor_name)
print("Deleted metric descriptor {}.".format(descriptor_name))

Ruby

Monitoring에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

# Your Google Cloud Platform project ID
# project_id = "YOUR_PROJECT_ID"

# Example metric type
# metric_type = "custom.googleapis.com/my_metric"

client = Google::Cloud::Monitoring.metric_service
metric_name = client.metric_descriptor_path project:           project_id,
                                            metric_descriptor: metric_type

client.delete_metric_descriptor name: metric_name
p "Deleted metric descriptor #{metric_name}."

문제가 발생할 경우 API 호출 문제 해결을 참조하세요.

사용자 정의 측정항목 수정

사용자 정의 측정항목을 수정하려면 측정항목을 정의하는 MetricDescriptor 객체를 업데이트해야 합니다. 지원되는 유일한 수정은 라벨을 추가하는 것입니다.

기존 사용자 정의 측정항목에 라벨을 추가하려면 timeSeries.create 메서드를 사용하고 시계열 데이터에 새 라벨을 포함합니다. 작성할 라벨이 유효하고 총 라벨 수가 30개 미만인 경우 라벨 설명에 라벨이 추가됩니다.

그러면 처음부터 측정항목에 라벨이 있었던 것처럼 시계열 데이터가 작성됩니다.

새 라벨을 추가하는 것보다 더 많은 작업을 하려면 측정항목 설명자를 삭제하고 다시 만들어야 합니다. 이 경우 오래된 측정항목 설명자에 대해 이전에 수집된 시계열 데이터가 모두 손실됩니다. 자세한 내용은 사용자 정의 측정항목 삭제를 참조하세요.

측정항목 이름은 변경할 수 없습니다.

다음 단계