OpenTelemetry 1.0.0 형식 - Amazon CloudWatch

OpenTelemetry 1.0.0 형식

참고

OpenTelemetry 1.0.0 형식을 사용하면 지표 속성이 0.7.0 형식에서 사용되는 StringKeyValue 유형 대신 KeyValue 객체 목록으로 인코딩됩니다. 소비자의 입장에서 볼 때 0.7.0과 1.0.0 형식 사이의 주요 변경 사항은 이 정도뿐입니다. 0.7.0 proto 파일에서 생성된 구문 분석기는 1.0.0 형식으로 인코딩된 지표 속성을 구문 분석하지 않습니다. 반대의 경우도 마찬가지입니다. 1.0.0 proto 파일에서 생성된 구문 분석는 0.7.0 형식으로 인코딩된 지표 속성을 구문 분석하지 않습니다.

OpenTelemetry는 도구, API 및 SDK 모음입니다. OpenTelemetry를 사용하여 분석을 위한 원격 측정 데이터(지표, 로그, 추적)를 계측하고 생성하며 수집하고 내보낼 수 있습니다. OpenTelemetry는 Cloud Native Computing Foundation(CNCF)의 일부입니다. 자세한 내용은 OpenTelemetry를 참조하세요.

전체 OpenTelemetry 1.0.0 사양에 대한 내용은 릴리스 버전 1.0.0을 참조하세요.

Kinesis 레코드에는 하나 이상의 ExportMetricsServiceRequest OpenTelemetry 데이터 구조가 포함될 수 있습니다. 각 데이터 구조는 바이트 단위의 레코드 길이를 나타내는 UnsignedVarInt32가 있는 헤더로 시작합니다. 각 ExportMetricsServiceRequest에는 동시에 여러 지표의 데이터가 포함될 수 있습니다.

다음은 ExportMetricsServiceRequest OpenTelemetry 데이터 구조 메시지의 문자열 표현입니다. OpenTelemetry는 Google Protocol Buffers 바이너리 프로토콜을 직렬화하며 이것은 사람이 읽을 수 없습니다.

resource_metrics { resource { attributes { key: "cloud.provider" value { string_value: "aws" } } attributes { key: "cloud.account.id" value { string_value: "123456789012" } } attributes { key: "cloud.region" value { string_value: "us-east-1" } } attributes { key: "aws.exporter.arn" value { string_value: "arn:aws:cloudwatch:us-east-1:123456789012:metric-stream/MyMetricStream" } } } scope_metrics { metrics { name: "amazonaws.com/AWS/DynamoDB/ConsumedReadCapacityUnits" unit: "NoneTranslated" summary { data_points { start_time_unix_nano: 60000000000 time_unix_nano: 120000000000 count: 1 sum: 1.0 quantile_values { value: 1.0 } quantile_values { quantile: 0.95 value: 1.0 } quantile_values { quantile: 0.99 value: 1.0 } quantile_values { quantile: 1.0 value: 1.0 } attributes { key: "Namespace" value { string_value: "AWS/DynamoDB" } } attributes { key: "MetricName" value { string_value: "ConsumedReadCapacityUnits" } } attributes { key: "Dimensions" value { kvlist_value { values { key: "TableName" value { string_value: "MyTable" } } } } } } data_points { start_time_unix_nano: 70000000000 time_unix_nano: 130000000000 count: 2 sum: 5.0 quantile_values { value: 2.0 } quantile_values { quantile: 1.0 value: 3.0 } attributes { key: "Namespace" value { string_value: "AWS/DynamoDB" } } attributes { key: "MetricName" value { string_value: "ConsumedReadCapacityUnits" } } attributes { key: "Dimensions" value { kvlist_value { values { key: "TableName" value { string_value: "MyTable" } } } } } } } } } }

OpenTelemetry 지표 데이터를 직렬화하는 최상위 객체

ExportMetricsServiceRequest는 OpenTelemetry Exporter 페이로드를 직렬화하는 최상위 래퍼입니다. 여기에는 하나 이상의 ResourceMetrics가 포함됩니다.

message ExportMetricsServiceRequest { // An array of ResourceMetrics. // For data coming from a single resource this array will typically contain one // element. Intermediary nodes (such as OpenTelemetry Collector) that receive // data from multiple origins typically batch the data before forwarding further and // in that case this array will contain multiple elements. repeated opentelemetry.proto.metrics.v1.ResourceMetrics resource_metrics = 1; }

ResourceMetrics는 MetricData 객체를 나타내는 최상위 객체입니다.

// A collection of ScopeMetrics from a Resource. message ResourceMetrics { reserved 1000; // The resource for the metrics in this message. // If this field is not set then no resource info is known. opentelemetry.proto.resource.v1.Resource resource = 1; // A list of metrics that originate from a resource. repeated ScopeMetrics scope_metrics = 2; // This schema_url applies to the data in the "resource" field. It does not apply // to the data in the "scope_metrics" field which have their own schema_url field. string schema_url = 3; }

Resource 객체

Resource 객체는 지표를 생성한 리소스에 관한 일부 정보를 포함하는 값 페어 객체입니다. AWS에서 생성한 지표의 경우 데이터 구조에 지표와 관련된 리소스(예: EC2 인스턴스 또는 S3 버킷)의 Amazon 리소스 이름(ARN)이 포함됩니다.

Resource 객체에는 키-값 페어 목록을 저장하는 attributes라는 속성이 포함되어 있습니다.

  • cloud.account.id에는 계정 ID가 포함됩니다.

  • cloud.region에는 리전이 포함됩니다.

  • aws.exporter.arn에는 지표 스트림 ARN이 포함됩니다.

  • cloud.provider은(는) 항상 aws입니다.

// Resource information. message Resource { // Set of attributes that describe the resource. // Attribute keys MUST be unique (it is not allowed to have more than one // attribute with the same key). repeated opentelemetry.proto.common.v1.KeyValue attributes = 1; // dropped_attributes_count is the number of dropped attributes. If the value is 0, then // no attributes were dropped. uint32 dropped_attributes_count = 2; }

ScopeMetrics 객체

scope 필드는 채워지지 않습니다. 내보내는 지표 필드만 채워집니다.

// A collection of Metrics produced by an Scope. message ScopeMetrics { // The instrumentation scope information for the metrics in this message. // Semantically when InstrumentationScope isn't set, it is equivalent with // an empty instrumentation scope name (unknown). opentelemetry.proto.common.v1.InstrumentationScope scope = 1; // A list of metrics that originate from an instrumentation library. repeated Metric metrics = 2; // This schema_url applies to all metrics in the "metrics" field. string schema_url = 3; }

Metric 객체

Metric 객체에는 SummaryDataPoint 목록을 포함하는 Summary 데이터 필드와 일부 메타데이터가 포함되어 있습니다.

지표 스트림의 경우 메타데이터는 다음과 같습니다.

  • nameamazonaws.com/metric_namespace/metric_name이 됩니다.

  • description은 비어 있게 됩니다.

  • unit은 지표 데이터의 단위를 측정 단위에 대한 통합 코드의 대소문자를 구분하는 변형에 매핑함으로써 채워집니다. 자세한 내용은 OpenTelemetry 1.0.0 형식으로 변환 단원 및 측정 단위에 대한 통합 코드를 참조하세요.

  • typeSUMMARY이 됩니다.

message Metric { reserved 4, 6, 8; // name of the metric, including its DNS name prefix. It must be unique. string name = 1; // description of the metric, which can be used in documentation. string description = 2; // unit in which the metric value is reported. Follows the format // described by http://unitsofmeasure.org/ucum.html. string unit = 3; // Data determines the aggregation type (if any) of the metric, what is the // reported value type for the data points, as well as the relatationship to // the time interval over which they are reported. oneof data { Gauge gauge = 5; Sum sum = 7; Histogram histogram = 9; ExponentialHistogram exponential_histogram = 10; Summary summary = 11; } } message Summary { repeated SummaryDataPoint data_points = 1; }

SummaryDataPoint 객체

SummaryDataPoint 객체에는 DoubleSummary 지표의 시계열에 있는 단일 데이터 포인트 값이 포함되어 있습니다.

// SummaryDataPoint is a single data point in a timeseries that describes the // time-varying values of a Summary metric. message SummaryDataPoint { reserved 1; // The set of key/value pairs that uniquely identify the timeseries from // where this point belongs. The list may be empty (may contain 0 elements). // Attribute keys MUST be unique (it is not allowed to have more than one // attribute with the same key). repeated opentelemetry.proto.common.v1.KeyValue attributes = 7; // StartTimeUnixNano is optional but strongly encouraged, see the // the detailed comments above Metric. // // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January // 1970. fixed64 start_time_unix_nano = 2; // TimeUnixNano is required, see the detailed comments above Metric. // // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January // 1970. fixed64 time_unix_nano = 3; // count is the number of values in the population. Must be non-negative. fixed64 count = 4; // sum of the values in the population. If count is zero then this field // must be zero. // // Note: Sum should only be filled out when measuring non-negative discrete // events, and is assumed to be monotonic over the values of these events. // Negative events *can* be recorded, but sum should not be filled out when // doing so. This is specifically to enforce compatibility w/ OpenMetrics, // see: https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#summary double sum = 5; // Represents the value at a given quantile of a distribution. // // To record Min and Max values following conventions are used: // - The 1.0 quantile is equivalent to the maximum value observed. // - The 0.0 quantile is equivalent to the minimum value observed. // // See the following issue for more context: // https://github.com/open-telemetry/opentelemetry-proto/issues/125 message ValueAtQuantile { // The quantile of a distribution. Must be in the interval // [0.0, 1.0]. double quantile = 1; // The value at the given quantile of a distribution. // // Quantile values must NOT be negative. double value = 2; } // (Optional) list of values at different quantiles of the distribution calculated // from the current snapshot. The quantiles must be strictly increasing. repeated ValueAtQuantile quantile_values = 6; // Flags that apply to this specific data point. See DataPointFlags // for the available flags and their meaning. uint32 flags = 8; }

자세한 내용은 OpenTelemetry 1.0.0 형식으로 변환 단원을 참조하십시오.