From e5b8f83935facb0a3b735372413b6144bfb2a95d Mon Sep 17 00:00:00 2001 From: Joao Grassi <5938087+joaopgrassi@users.noreply.github.com> Date: Thu, 28 Mar 2024 17:03:02 +0100 Subject: [PATCH] OpenTelemetryTracingProvider: Allow configuring samplers (#3134) * Add Dynatrace Sampler config Add API configurations for the Dynatrace sampler. * Add release notes * Fix doc typo in code snippet * Clarify Dynatrace fields * make gen --- mesh/v1alpha1/config.pb.go | 392 ++++++++++++++++++---- mesh/v1alpha1/config.proto | 70 ++++ mesh/v1alpha1/istio.mesh.v1alpha1.pb.html | 150 ++++++++- releasenotes/notes/3134.yaml | 8 + 4 files changed, 563 insertions(+), 57 deletions(-) create mode 100644 releasenotes/notes/3134.yaml diff --git a/mesh/v1alpha1/config.pb.go b/mesh/v1alpha1/config.pb.go index 355e5971924..69e46dcea19 100644 --- a/mesh/v1alpha1/config.pb.go +++ b/mesh/v1alpha1/config.pb.go @@ -3752,6 +3752,13 @@ type MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider struct { // // ``` ResourceDetectors *MeshConfig_ExtensionProvider_ResourceDetectors `protobuf:"bytes,5,opt,name=resource_detectors,json=resourceDetectors,proto3" json:"resource_detectors,omitempty"` + // Optional. Configure a [Sampler](https://opentelemetry.io/docs/specs/otel/trace/sdk/#sampler) + // to be used by the OpenTelemetry Tracer. + // + // Types that are assignable to Sampling: + // + // *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_ + Sampling isMeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_Sampling `protobuf_oneof:"sampling"` } func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider) Reset() { @@ -3821,6 +3828,51 @@ func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider) GetResourceD return nil } +func (m *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider) GetSampling() isMeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_Sampling { + if m != nil { + return m.Sampling + } + return nil +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider) GetDynatraceSampler() *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler { + if x, ok := x.GetSampling().(*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_); ok { + return x.DynatraceSampler + } + return nil +} + +type isMeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_Sampling interface { + isMeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_Sampling() +} + +type MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_ struct { + // The Dynatrace adaptive traffic management (ATM) sampler. + // + // Example configuration: + // + // ```yaml + // - name: otel-tracing + // opentelemetry: + // port: 443 + // service: "{your-environment-id}.live.dynatrace.com" + // http: + // path: "/api/v2/otlp/v1/traces" + // timeout: 10s + // headers: + // - name: "Authorization" + // value: "Api-Token dt0c01." + // resource_detectors: + // dynatrace: {} + // dynatrace_sampler: + // tenant: "{your-environment-id}" + // cluster_id: 1234 + DynatraceSampler *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler `protobuf:"bytes,6,opt,name=dynatrace_sampler,json=dynatraceSampler,proto3,oneof"` +} + +func (*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_) isMeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_Sampling() { +} + // Defines configuration for an HTTP service that can be used by an Extension Provider. // that does communication via HTTP. type MeshConfig_ExtensionProvider_HttpService struct { @@ -4240,6 +4292,166 @@ func (x *MeshConfig_ExtensionProvider_EnvoyOpenTelemetryLogProvider_LogFormat) G return nil } +type MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // REQUIRED. The Dynatrace customer's tenant identifier. + // + // The value can be obtained from the Istio deployment page in Dynatrace. + Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` + // REQUIRED. The identifier of the cluster in the Dynatrace platform. + // The cluster here is Dynatrace-specific concept and not related to the cluster concept in Istio/Envoy. + // + // The value can be obtained from the Istio deployment page in Dynatrace. + ClusterId int32 `protobuf:"varint,2,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` + // Optional. Number of sampled spans per minute to be used + // when the adaptive value cannot be obtained from the Dynatrace API. + // + // A default value of `1000` is used when: + // + // - `root_spans_per_minute` is unset + // - `root_spans_per_minute` is set to 0 + RootSpansPerMinute uint32 `protobuf:"varint,3,opt,name=root_spans_per_minute,json=rootSpansPerMinute,proto3" json:"root_spans_per_minute,omitempty"` + // Optional. Dynatrace HTTP API to obtain sampling configuration. + // + // When not provided, the Dynatrace Sampler will re-use the configuration from the OpenTelemetryTracingProvider HTTP Exporter + // (`service`, `port` and `http`), including the access token. + HttpService *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi `protobuf:"bytes,4,opt,name=http_service,json=httpService,proto3" json:"http_service,omitempty"` +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) Reset() { + *x = MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler{} + if protoimpl.UnsafeEnabled { + mi := &file_mesh_v1alpha1_config_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) ProtoMessage() {} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) ProtoReflect() protoreflect.Message { + mi := &file_mesh_v1alpha1_config_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler.ProtoReflect.Descriptor instead. +func (*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) Descriptor() ([]byte, []int) { + return file_mesh_v1alpha1_config_proto_rawDescGZIP(), []int{0, 5, 14, 0} +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) GetClusterId() int32 { + if x != nil { + return x.ClusterId + } + return 0 +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) GetRootSpansPerMinute() uint32 { + if x != nil { + return x.RootSpansPerMinute + } + return 0 +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler) GetHttpService() *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi { + if x != nil { + return x.HttpService + } + return nil +} + +type MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // REQUIRED. Specifies the Dynatrace environment to obtain the sampling configuration. + // The format is ``, where `` is the fully qualified Dynatrace environment + // host name defined in the ServiceEntry. + // + // Example: "{your-environment-id}.live.dynatrace.com". + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + // REQUIRED. Specifies the port of the service. + Port uint32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` + // REQUIRED. Specifies sampling configuration URI. + Http *MeshConfig_ExtensionProvider_HttpService `protobuf:"bytes,3,opt,name=http,proto3" json:"http,omitempty"` +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi) Reset() { + *x = MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi{} + if protoimpl.UnsafeEnabled { + mi := &file_mesh_v1alpha1_config_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi) ProtoMessage() { +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi) ProtoReflect() protoreflect.Message { + mi := &file_mesh_v1alpha1_config_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi.ProtoReflect.Descriptor instead. +func (*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi) Descriptor() ([]byte, []int) { + return file_mesh_v1alpha1_config_proto_rawDescGZIP(), []int{0, 5, 14, 0, 0} +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi) GetPort() uint32 { + if x != nil { + return x.Port + } + return 0 +} + +func (x *MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi) GetHttp() *MeshConfig_ExtensionProvider_HttpService { + if x != nil { + return x.Http + } + return nil +} + // OpenTelemetry Environment Resource Detector. // The resource detector reads attributes from the environment variable `OTEL_RESOURCE_ATTRIBUTES` // and adds them to the OpenTelemetry resource. @@ -4254,7 +4466,7 @@ type MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector func (x *MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector) Reset() { *x = MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector{} if protoimpl.UnsafeEnabled { - mi := &file_mesh_v1alpha1_config_proto_msgTypes[36] + mi := &file_mesh_v1alpha1_config_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4267,7 +4479,7 @@ func (x *MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetec func (*MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector) ProtoMessage() {} func (x *MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector) ProtoReflect() protoreflect.Message { - mi := &file_mesh_v1alpha1_config_proto_msgTypes[36] + mi := &file_mesh_v1alpha1_config_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4297,7 +4509,7 @@ type MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetector st func (x *MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetector) Reset() { *x = MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetector{} if protoimpl.UnsafeEnabled { - mi := &file_mesh_v1alpha1_config_proto_msgTypes[37] + mi := &file_mesh_v1alpha1_config_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4310,7 +4522,7 @@ func (x *MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetecto func (*MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetector) ProtoMessage() {} func (x *MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetector) ProtoReflect() protoreflect.Message { - mi := &file_mesh_v1alpha1_config_proto_msgTypes[37] + mi := &file_mesh_v1alpha1_config_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4348,7 +4560,7 @@ var file_mesh_v1alpha1_config_proto_rawDesc = []byte{ 0x6f, 0x1a, 0x34, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf4, 0x60, 0x0a, 0x0a, 0x4d, 0x65, 0x73, 0x68, + 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb4, 0x65, 0x0a, 0x0a, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x50, 0x6f, @@ -4610,7 +4822,7 @@ var file_mesh_v1alpha1_config_proto_rawDesc = []byte{ 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x64, 0x53, 0x69, 0x64, 0x65, 0x1a, 0xc4, 0x35, 0x0a, 0x11, 0x45, 0x78, + 0x73, 0x74, 0x69, 0x6f, 0x64, 0x53, 0x69, 0x64, 0x65, 0x1a, 0x84, 0x3a, 0x0a, 0x11, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x14, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x65, 0x78, @@ -4982,7 +5194,7 @@ var file_mesh_v1alpha1_config_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0xb9, 0x02, 0x0a, + 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0xf9, 0x06, 0x0a, 0x1c, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, @@ -5002,7 +5214,43 @@ var file_mesh_v1alpha1_config_proto_rawDesc = []byte{ 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, 0xae, 0x01, 0x0a, 0x0b, 0x48, 0x74, 0x74, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x8e, 0x01, 0x0a, 0x11, 0x64, 0x79, 0x6e, + 0x61, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6d, 0x65, 0x73, + 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x74, 0x72, 0x61, 0x63, 0x65, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x64, 0x79, 0x6e, 0x61, 0x74, 0x72, 0x61, + 0x63, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x1a, 0xa0, 0x03, 0x0a, 0x10, 0x44, 0x79, + 0x6e, 0x61, 0x74, 0x72, 0x61, 0x63, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x12, 0x16, + 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x73, 0x70, + 0x61, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x50, + 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x68, 0x74, 0x74, + 0x70, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x6c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, + 0x44, 0x79, 0x6e, 0x61, 0x74, 0x72, 0x61, 0x63, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x74, 0x72, 0x61, 0x63, 0x65, 0x41, 0x70, 0x69, 0x52, 0x0b, 0x68, + 0x74, 0x74, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x8f, 0x01, 0x0a, 0x0c, 0x44, + 0x79, 0x6e, 0x61, 0x74, 0x72, 0x61, 0x63, 0x65, 0x41, 0x70, 0x69, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x51, 0x0a, 0x04, 0x68, 0x74, 0x74, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, + 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, + 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x42, 0x0a, 0x0a, 0x08, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x1a, 0xae, 0x01, 0x0a, 0x0b, 0x48, 0x74, 0x74, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, @@ -5162,7 +5410,7 @@ func file_mesh_v1alpha1_config_proto_rawDescGZIP() []byte { } var file_mesh_v1alpha1_config_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_mesh_v1alpha1_config_proto_msgTypes = make([]protoimpl.MessageInfo, 38) +var file_mesh_v1alpha1_config_proto_msgTypes = make([]protoimpl.MessageInfo, 40) var file_mesh_v1alpha1_config_proto_goTypes = []interface{}{ (Resource)(0), // 0: istio.mesh.v1alpha1.Resource (MeshConfig_IngressControllerMode)(0), // 1: istio.mesh.v1alpha1.MeshConfig.IngressControllerMode @@ -5208,55 +5456,57 @@ var file_mesh_v1alpha1_config_proto_goTypes = []interface{}{ nil, // 41: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationHttpProvider.IncludeAdditionalHeadersInCheckEntry (*MeshConfig_ExtensionProvider_StackdriverProvider_Logging)(nil), // 42: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.Logging nil, // 43: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.Logging.LabelsEntry - (*MeshConfig_ExtensionProvider_EnvoyFileAccessLogProvider_LogFormat)(nil), // 44: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyFileAccessLogProvider.LogFormat - (*MeshConfig_ExtensionProvider_EnvoyOpenTelemetryLogProvider_LogFormat)(nil), // 45: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyOpenTelemetryLogProvider.LogFormat - (*MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector)(nil), // 46: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.EnvironmentResourceDetector - (*MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetector)(nil), // 47: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.DynatraceResourceDetector - (*duration.Duration)(nil), // 48: google.protobuf.Duration - (*v1alpha3.ConnectionPoolSettings_TCPSettings_TcpKeepalive)(nil), // 49: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive - (*ProxyConfig)(nil), // 50: istio.mesh.v1alpha1.ProxyConfig - (*wrappers.BoolValue)(nil), // 51: google.protobuf.BoolValue - (*v1alpha3.LocalityLoadBalancerSetting)(nil), // 52: istio.networking.v1alpha3.LocalityLoadBalancerSetting - (*v1.LabelSelector)(nil), // 53: k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector - (*v1alpha3.HTTPRetry)(nil), // 54: istio.networking.v1alpha3.HTTPRetry - (*v1alpha3.ClientTLSSettings)(nil), // 55: istio.networking.v1alpha3.ClientTLSSettings - (*wrappers.Int64Value)(nil), // 56: google.protobuf.Int64Value - (*_struct.Struct)(nil), // 57: google.protobuf.Struct + (*MeshConfig_ExtensionProvider_EnvoyFileAccessLogProvider_LogFormat)(nil), // 44: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyFileAccessLogProvider.LogFormat + (*MeshConfig_ExtensionProvider_EnvoyOpenTelemetryLogProvider_LogFormat)(nil), // 45: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyOpenTelemetryLogProvider.LogFormat + (*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler)(nil), // 46: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.DynatraceSampler + (*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi)(nil), // 47: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.DynatraceSampler.DynatraceApi + (*MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector)(nil), // 48: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.EnvironmentResourceDetector + (*MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetector)(nil), // 49: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.DynatraceResourceDetector + (*duration.Duration)(nil), // 50: google.protobuf.Duration + (*v1alpha3.ConnectionPoolSettings_TCPSettings_TcpKeepalive)(nil), // 51: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive + (*ProxyConfig)(nil), // 52: istio.mesh.v1alpha1.ProxyConfig + (*wrappers.BoolValue)(nil), // 53: google.protobuf.BoolValue + (*v1alpha3.LocalityLoadBalancerSetting)(nil), // 54: istio.networking.v1alpha3.LocalityLoadBalancerSetting + (*v1.LabelSelector)(nil), // 55: k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector + (*v1alpha3.HTTPRetry)(nil), // 56: istio.networking.v1alpha3.HTTPRetry + (*v1alpha3.ClientTLSSettings)(nil), // 57: istio.networking.v1alpha3.ClientTLSSettings + (*wrappers.Int64Value)(nil), // 58: google.protobuf.Int64Value + (*_struct.Struct)(nil), // 59: google.protobuf.Struct } var file_mesh_v1alpha1_config_proto_depIdxs = []int32{ - 48, // 0: istio.mesh.v1alpha1.MeshConfig.connect_timeout:type_name -> google.protobuf.Duration - 48, // 1: istio.mesh.v1alpha1.MeshConfig.protocol_detection_timeout:type_name -> google.protobuf.Duration - 49, // 2: istio.mesh.v1alpha1.MeshConfig.tcp_keepalive:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive + 50, // 0: istio.mesh.v1alpha1.MeshConfig.connect_timeout:type_name -> google.protobuf.Duration + 50, // 1: istio.mesh.v1alpha1.MeshConfig.protocol_detection_timeout:type_name -> google.protobuf.Duration + 51, // 2: istio.mesh.v1alpha1.MeshConfig.tcp_keepalive:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive 1, // 3: istio.mesh.v1alpha1.MeshConfig.ingress_controller_mode:type_name -> istio.mesh.v1alpha1.MeshConfig.IngressControllerMode 3, // 4: istio.mesh.v1alpha1.MeshConfig.access_log_encoding:type_name -> istio.mesh.v1alpha1.MeshConfig.AccessLogEncoding - 50, // 5: istio.mesh.v1alpha1.MeshConfig.default_config:type_name -> istio.mesh.v1alpha1.ProxyConfig + 52, // 5: istio.mesh.v1alpha1.MeshConfig.default_config:type_name -> istio.mesh.v1alpha1.ProxyConfig 13, // 6: istio.mesh.v1alpha1.MeshConfig.outbound_traffic_policy:type_name -> istio.mesh.v1alpha1.MeshConfig.OutboundTrafficPolicy 14, // 7: istio.mesh.v1alpha1.MeshConfig.inbound_traffic_policy:type_name -> istio.mesh.v1alpha1.MeshConfig.InboundTrafficPolicy 11, // 8: istio.mesh.v1alpha1.MeshConfig.config_sources:type_name -> istio.mesh.v1alpha1.ConfigSource - 51, // 9: istio.mesh.v1alpha1.MeshConfig.enable_auto_mtls:type_name -> google.protobuf.BoolValue + 53, // 9: istio.mesh.v1alpha1.MeshConfig.enable_auto_mtls:type_name -> google.protobuf.BoolValue 15, // 10: istio.mesh.v1alpha1.MeshConfig.ca_certificates:type_name -> istio.mesh.v1alpha1.MeshConfig.CertificateData - 52, // 11: istio.mesh.v1alpha1.MeshConfig.locality_lb_setting:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting - 48, // 12: istio.mesh.v1alpha1.MeshConfig.dns_refresh_rate:type_name -> google.protobuf.Duration + 54, // 11: istio.mesh.v1alpha1.MeshConfig.locality_lb_setting:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting + 50, // 12: istio.mesh.v1alpha1.MeshConfig.dns_refresh_rate:type_name -> google.protobuf.Duration 4, // 13: istio.mesh.v1alpha1.MeshConfig.h2_upgrade_policy:type_name -> istio.mesh.v1alpha1.MeshConfig.H2UpgradePolicy 12, // 14: istio.mesh.v1alpha1.MeshConfig.certificates:type_name -> istio.mesh.v1alpha1.Certificate 16, // 15: istio.mesh.v1alpha1.MeshConfig.service_settings:type_name -> istio.mesh.v1alpha1.MeshConfig.ServiceSettings - 51, // 16: istio.mesh.v1alpha1.MeshConfig.enable_prometheus_merge:type_name -> google.protobuf.BoolValue - 51, // 17: istio.mesh.v1alpha1.MeshConfig.verify_certificate_at_client:type_name -> google.protobuf.BoolValue + 53, // 16: istio.mesh.v1alpha1.MeshConfig.enable_prometheus_merge:type_name -> google.protobuf.BoolValue + 53, // 17: istio.mesh.v1alpha1.MeshConfig.verify_certificate_at_client:type_name -> google.protobuf.BoolValue 17, // 18: istio.mesh.v1alpha1.MeshConfig.ca:type_name -> istio.mesh.v1alpha1.MeshConfig.CA 18, // 19: istio.mesh.v1alpha1.MeshConfig.extension_providers:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider 19, // 20: istio.mesh.v1alpha1.MeshConfig.default_providers:type_name -> istio.mesh.v1alpha1.MeshConfig.DefaultProviders - 53, // 21: istio.mesh.v1alpha1.MeshConfig.discovery_selectors:type_name -> k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector + 55, // 21: istio.mesh.v1alpha1.MeshConfig.discovery_selectors:type_name -> k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector 20, // 22: istio.mesh.v1alpha1.MeshConfig.path_normalization:type_name -> istio.mesh.v1alpha1.MeshConfig.ProxyPathNormalization - 54, // 23: istio.mesh.v1alpha1.MeshConfig.default_http_retry_policy:type_name -> istio.networking.v1alpha3.HTTPRetry + 56, // 23: istio.mesh.v1alpha1.MeshConfig.default_http_retry_policy:type_name -> istio.networking.v1alpha3.HTTPRetry 21, // 24: istio.mesh.v1alpha1.MeshConfig.mesh_mTLS:type_name -> istio.mesh.v1alpha1.MeshConfig.TLSConfig 21, // 25: istio.mesh.v1alpha1.MeshConfig.tls_defaults:type_name -> istio.mesh.v1alpha1.MeshConfig.TLSConfig - 55, // 26: istio.mesh.v1alpha1.ConfigSource.tls_settings:type_name -> istio.networking.v1alpha3.ClientTLSSettings + 57, // 26: istio.mesh.v1alpha1.ConfigSource.tls_settings:type_name -> istio.networking.v1alpha3.ClientTLSSettings 0, // 27: istio.mesh.v1alpha1.ConfigSource.subscribed_resources:type_name -> istio.mesh.v1alpha1.Resource 5, // 28: istio.mesh.v1alpha1.MeshConfig.OutboundTrafficPolicy.mode:type_name -> istio.mesh.v1alpha1.MeshConfig.OutboundTrafficPolicy.Mode 6, // 29: istio.mesh.v1alpha1.MeshConfig.InboundTrafficPolicy.mode:type_name -> istio.mesh.v1alpha1.MeshConfig.InboundTrafficPolicy.Mode 22, // 30: istio.mesh.v1alpha1.MeshConfig.ServiceSettings.settings:type_name -> istio.mesh.v1alpha1.MeshConfig.ServiceSettings.Settings - 55, // 31: istio.mesh.v1alpha1.MeshConfig.CA.tls_settings:type_name -> istio.networking.v1alpha3.ClientTLSSettings - 48, // 32: istio.mesh.v1alpha1.MeshConfig.CA.request_timeout:type_name -> google.protobuf.Duration + 57, // 31: istio.mesh.v1alpha1.MeshConfig.CA.tls_settings:type_name -> istio.networking.v1alpha3.ClientTLSSettings + 50, // 32: istio.mesh.v1alpha1.MeshConfig.CA.request_timeout:type_name -> google.protobuf.Duration 24, // 33: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.envoy_ext_authz_http:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationHttpProvider 25, // 34: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.envoy_ext_authz_grpc:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationGrpcProvider 26, // 35: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.zipkin:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ZipkinTracingProvider @@ -5273,32 +5523,35 @@ var file_mesh_v1alpha1_config_proto_depIdxs = []int32{ 36, // 46: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.envoy_otel_als:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyOpenTelemetryLogProvider 8, // 47: istio.mesh.v1alpha1.MeshConfig.ProxyPathNormalization.normalization:type_name -> istio.mesh.v1alpha1.MeshConfig.ProxyPathNormalization.NormalizationType 9, // 48: istio.mesh.v1alpha1.MeshConfig.TLSConfig.min_protocol_version:type_name -> istio.mesh.v1alpha1.MeshConfig.TLSConfig.TLSProtocol - 48, // 49: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationHttpProvider.timeout:type_name -> google.protobuf.Duration + 50, // 49: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationHttpProvider.timeout:type_name -> google.protobuf.Duration 41, // 50: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationHttpProvider.include_additional_headers_in_check:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationHttpProvider.IncludeAdditionalHeadersInCheckEntry 23, // 51: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationHttpProvider.include_request_body_in_check:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationRequestBody - 48, // 52: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationGrpcProvider.timeout:type_name -> google.protobuf.Duration + 50, // 52: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationGrpcProvider.timeout:type_name -> google.protobuf.Duration 23, // 53: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationGrpcProvider.include_request_body_in_check:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyExternalAuthorizationRequestBody - 56, // 54: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.max_number_of_attributes:type_name -> google.protobuf.Int64Value - 56, // 55: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.max_number_of_annotations:type_name -> google.protobuf.Int64Value - 56, // 56: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.max_number_of_message_events:type_name -> google.protobuf.Int64Value + 58, // 54: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.max_number_of_attributes:type_name -> google.protobuf.Int64Value + 58, // 55: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.max_number_of_annotations:type_name -> google.protobuf.Int64Value + 58, // 56: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.max_number_of_message_events:type_name -> google.protobuf.Int64Value 42, // 57: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.logging:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.Logging 7, // 58: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenCensusAgentTracingProvider.context:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenCensusAgentTracingProvider.TraceContext 44, // 59: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyFileAccessLogProvider.log_format:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyFileAccessLogProvider.LogFormat 45, // 60: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyOpenTelemetryLogProvider.log_format:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyOpenTelemetryLogProvider.LogFormat 38, // 61: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.http:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.HttpService 40, // 62: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.resource_detectors:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors - 48, // 63: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.HttpService.timeout:type_name -> google.protobuf.Duration - 39, // 64: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.HttpService.headers:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.HttpHeader - 46, // 65: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.environment:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.EnvironmentResourceDetector - 47, // 66: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.dynatrace:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.DynatraceResourceDetector - 43, // 67: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.Logging.labels:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.Logging.LabelsEntry - 57, // 68: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyFileAccessLogProvider.LogFormat.labels:type_name -> google.protobuf.Struct - 57, // 69: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyOpenTelemetryLogProvider.LogFormat.labels:type_name -> google.protobuf.Struct - 70, // [70:70] is the sub-list for method output_type - 70, // [70:70] is the sub-list for method input_type - 70, // [70:70] is the sub-list for extension type_name - 70, // [70:70] is the sub-list for extension extendee - 0, // [0:70] is the sub-list for field type_name + 46, // 63: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.dynatrace_sampler:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.DynatraceSampler + 50, // 64: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.HttpService.timeout:type_name -> google.protobuf.Duration + 39, // 65: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.HttpService.headers:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.HttpHeader + 48, // 66: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.environment:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.EnvironmentResourceDetector + 49, // 67: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.dynatrace:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.ResourceDetectors.DynatraceResourceDetector + 43, // 68: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.Logging.labels:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.StackdriverProvider.Logging.LabelsEntry + 59, // 69: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyFileAccessLogProvider.LogFormat.labels:type_name -> google.protobuf.Struct + 59, // 70: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.EnvoyOpenTelemetryLogProvider.LogFormat.labels:type_name -> google.protobuf.Struct + 47, // 71: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.DynatraceSampler.http_service:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.DynatraceSampler.DynatraceApi + 38, // 72: istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.DynatraceSampler.DynatraceApi.http:type_name -> istio.mesh.v1alpha1.MeshConfig.ExtensionProvider.HttpService + 73, // [73:73] is the sub-list for method output_type + 73, // [73:73] is the sub-list for method input_type + 73, // [73:73] is the sub-list for extension type_name + 73, // [73:73] is the sub-list for extension extendee + 0, // [0:73] is the sub-list for field type_name } func init() { file_mesh_v1alpha1_config_proto_init() } @@ -5717,7 +5970,7 @@ func file_mesh_v1alpha1_config_proto_init() { } } file_mesh_v1alpha1_config_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector); i { + switch v := v.(*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler); i { case 0: return &v.state case 1: @@ -5729,6 +5982,30 @@ func file_mesh_v1alpha1_config_proto_init() { } } file_mesh_v1alpha1_config_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_DynatraceApi); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mesh_v1alpha1_config_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MeshConfig_ExtensionProvider_ResourceDetectors_EnvironmentResourceDetector); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mesh_v1alpha1_config_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MeshConfig_ExtensionProvider_ResourceDetectors_DynatraceResourceDetector); i { case 0: return &v.state @@ -5761,6 +6038,9 @@ func file_mesh_v1alpha1_config_proto_init() { (*MeshConfig_ExtensionProvider_EnvoyTcpAls)(nil), (*MeshConfig_ExtensionProvider_EnvoyOtelAls)(nil), } + file_mesh_v1alpha1_config_proto_msgTypes[27].OneofWrappers = []interface{}{ + (*MeshConfig_ExtensionProvider_OpenTelemetryTracingProvider_DynatraceSampler_)(nil), + } file_mesh_v1alpha1_config_proto_msgTypes[34].OneofWrappers = []interface{}{ (*MeshConfig_ExtensionProvider_EnvoyFileAccessLogProvider_LogFormat_Text)(nil), (*MeshConfig_ExtensionProvider_EnvoyFileAccessLogProvider_LogFormat_Labels)(nil), @@ -5771,7 +6051,7 @@ func file_mesh_v1alpha1_config_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_mesh_v1alpha1_config_proto_rawDesc, NumEnums: 10, - NumMessages: 38, + NumMessages: 40, NumExtensions: 0, NumServices: 0, }, diff --git a/mesh/v1alpha1/config.proto b/mesh/v1alpha1/config.proto index b4af0b9df25..6d5e7bb14ec 100644 --- a/mesh/v1alpha1/config.proto +++ b/mesh/v1alpha1/config.proto @@ -1113,6 +1113,76 @@ message MeshConfig { // environment: {} // ``` ResourceDetectors resource_detectors = 5; + + // Optional. Configure a [Sampler](https://opentelemetry.io/docs/specs/otel/trace/sdk/#sampler) + // to be used by the OpenTelemetry Tracer. + oneof sampling { + + // The Dynatrace adaptive traffic management (ATM) sampler. + // + // Example configuration: + // + // ```yaml + // - name: otel-tracing + // opentelemetry: + // port: 443 + // service: "{your-environment-id}.live.dynatrace.com" + // http: + // path: "/api/v2/otlp/v1/traces" + // timeout: 10s + // headers: + // - name: "Authorization" + // value: "Api-Token dt0c01." + // resource_detectors: + // dynatrace: {} + // dynatrace_sampler: + // tenant: "{your-environment-id}" + // cluster_id: 1234 + DynatraceSampler dynatrace_sampler = 6; + } + + message DynatraceSampler { + // REQUIRED. The Dynatrace customer's tenant identifier. + // + // The value can be obtained from the Istio deployment page in Dynatrace. + string tenant = 1; + + // REQUIRED. The identifier of the cluster in the Dynatrace platform. + // The cluster here is Dynatrace-specific concept and not related to the cluster concept in Istio/Envoy. + // + // The value can be obtained from the Istio deployment page in Dynatrace. + int32 cluster_id = 2; + + // Optional. Number of sampled spans per minute to be used + // when the adaptive value cannot be obtained from the Dynatrace API. + // + // A default value of `1000` is used when: + // + // - `root_spans_per_minute` is unset + // - `root_spans_per_minute` is set to 0 + uint32 root_spans_per_minute = 3; + + // Optional. Dynatrace HTTP API to obtain sampling configuration. + // + // When not provided, the Dynatrace Sampler will re-use the configuration from the OpenTelemetryTracingProvider HTTP Exporter + // (`service`, `port` and `http`), including the access token. + DynatraceApi http_service = 4; + + message DynatraceApi { + // REQUIRED. Specifies the Dynatrace environment to obtain the sampling configuration. + // The format is ``, where `` is the fully qualified Dynatrace environment + // host name defined in the ServiceEntry. + // + // Example: "{your-environment-id}.live.dynatrace.com". + string service = 1; + + // REQUIRED. Specifies the port of the service. + uint32 port = 2; + + // REQUIRED. Specifies sampling configuration URI. + HttpService http = 3; + } + } } // Defines configuration for an HTTP service that can be used by an Extension Provider. diff --git a/mesh/v1alpha1/istio.mesh.v1alpha1.pb.html b/mesh/v1alpha1/istio.mesh.v1alpha1.pb.html index 9a6851d1884..cfb44d8b552 100644 --- a/mesh/v1alpha1/istio.mesh.v1alpha1.pb.html +++ b/mesh/v1alpha1/istio.mesh.v1alpha1.pb.html @@ -5,7 +5,7 @@ layout: protoc-gen-docs generator: protoc-gen-docs weight: 20 -number_of_entries: 73 +number_of_entries: 75 ---

Configuration affecting the service mesh as a whole.

@@ -2394,6 +2394,33 @@

MeshConfig.Ex environment: {} + + +No + + + +dynatraceSampler +DynatraceSampler (oneof) + +

The Dynatrace adaptive traffic management (ATM) sampler.

+

Example configuration:

+
- name: otel-tracing
+  opentelemetry:
+    port: 443
+    service: "{your-environment-id}.live.dynatrace.com"
+    http:
+      path: "/api/v2/otlp/v1/traces"
+      timeout: 10s
+      headers:
+        - name: "Authorization"
+          value: "Api-Token dt0c01."
+    resource_detectors:
+      dynatrace: {}
+    dynatrace_sampler:
+      tenant: "{your-environment-id}"
+      cluster_id: 1234
+ No @@ -2652,6 +2679,127 @@

Me message: "%LOCAL_REPLY_BODY%" + + +No + + + + + +

MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.DynatraceSampler

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescriptionRequired
tenantstring +

REQUIRED. The Dynatrace customer’s tenant identifier.

+

The value can be obtained from the Istio deployment page in Dynatrace.

+ +
+No +
clusterIdint32 +

REQUIRED. The identifier of the cluster in the Dynatrace platform. +The cluster here is Dynatrace-specific concept and not related to the cluster concept in Istio/Envoy.

+

The value can be obtained from the Istio deployment page in Dynatrace.

+ +
+No +
rootSpansPerMinuteuint32 +

Optional. Number of sampled spans per minute to be used +when the adaptive value cannot be obtained from the Dynatrace API.

+

A default value of 1000 is used when:

+
    +
  • root_spans_per_minute is unset
  • +
  • root_spans_per_minute is set to 0
  • +
+ +
+No +
httpServiceDynatraceApi +

Optional. Dynatrace HTTP API to obtain sampling configuration.

+

When not provided, the Dynatrace Sampler will re-use the configuration from the OpenTelemetryTracingProvider HTTP Exporter +(service, port and http), including the access token.

+ +
+No +
+
+

MeshConfig.ExtensionProvider.OpenTelemetryTracingProvider.DynatraceSampler.DynatraceApi

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescriptionRequired
servicestring +

REQUIRED. Specifies the Dynatrace environment to obtain the sampling configuration. +The format is <Hostname>, where <Hostname> is the fully qualified Dynatrace environment +host name defined in the ServiceEntry.

+

Example: “{your-environment-id}.live.dynatrace.com”.

+ +
+No +
portuint32 +

REQUIRED. Specifies the port of the service.

+ +
+No +
httpHttpService +

REQUIRED. Specifies sampling configuration URI.

+
No diff --git a/releasenotes/notes/3134.yaml b/releasenotes/notes/3134.yaml new file mode 100644 index 00000000000..e90fcbeb87a --- /dev/null +++ b/releasenotes/notes/3134.yaml @@ -0,0 +1,8 @@ +apiVersion: release-notes/v2 +kind: feature +area: telemetry +issue: + - 50001 +releaseNotes: + - | + **Added** allow configuring Dynatrace Sampler in the OpenTelemetryTracingProvider \ No newline at end of file