diff --git a/apis/core/v1beta1/collector_types.go b/apis/core/v1beta1/collector_types.go index a1301f91d4..a61f0f5987 100644 --- a/apis/core/v1beta1/collector_types.go +++ b/apis/core/v1beta1/collector_types.go @@ -17,19 +17,132 @@ const ( ) type CollectorSpec struct { - opnimeta.ImageSpec `json:",inline,omitempty"` - AgentEndpoint string `json:"agentEndpoint,omitempty"` - SystemNamespace string `json:"systemNamespace,omitempty"` - LoggingConfig *corev1.LocalObjectReference `json:"loggingConfig,omitempty"` - MetricsConfig *corev1.LocalObjectReference `json:"metricsConfig,omitempty"` - ConfigReloader *ConfigReloaderSpec `json:"configReloader,omitempty"` - LogLevel string `json:"logLevel,omitempty"` + opnimeta.ImageSpec `json:",inline,omitempty"` + AgentEndpoint string `json:"agentEndpoint,omitempty"` + SystemNamespace string `json:"systemNamespace,omitempty"` + LoggingConfig *corev1.LocalObjectReference `json:"loggingConfig,omitempty"` + MetricsConfig *corev1.LocalObjectReference `json:"metricsConfig,omitempty"` + ConfigReloader *ConfigReloaderSpec `json:"configReloader,omitempty"` + LogLevel string `json:"logLevel,omitempty"` + AggregatorOTELConfigSpec *AggregatorOTELConfigSpec `json:"aggregatorOtelCollectorSpec,omitempty"` + NodeOTELConfigSpec *NodeOTELConfigSpec `json:"nodeOtelCollectorSpec,omitempty"` } type ConfigReloaderSpec struct { opnimeta.ImageSpec `json:",inline,omitempty"` } +type AggregatorOTELConfigSpec struct { + Processors AggregatorOTELProcessors `json:"processors,omitempty"` + Exporters AggregatorOTELExporters `json:"exporters,omitempty"` +} + +type AggregatorOTELProcessors struct { + Batch BatchProcessorConfig `json:"batch,omitempty"` + MemoryLimiter MemoryLimiterProcessorConfig `json:"memoryLimiter,omitempty"` +} + +type AggregatorOTELExporters struct { + OTLPHTTP OTLPHTTPExporterConfig `json:"otlphttp,omitempty"` +} + +type NodeOTELConfigSpec struct { + Processors NodeOTELProcessors `json:"processors,omitempty"` + Exporters NodeOTELExporters `json:"exporters,omitempty"` +} + +type NodeOTELProcessors struct { + MemoryLimiter MemoryLimiterProcessorConfig `json:"memoryLimiter,omitempty"` +} + +type NodeOTELExporters struct { + OTLP OTLPExporterConfig `json:"otlp,omitempty"` +} + +// MemoryLimiterProcessorConfig has the attributes that we want to make +// available from memorylimiterexporter.Config. +// Also, we extend it with the JSON struct tags needed in order to kubebuilder +// and controller-gen work. +type MemoryLimiterProcessorConfig struct { + // CheckInterval is the time between measurements of memory usage for the + // purposes of avoiding going over the limits. Defaults to zero, so no + // checks will be performed. + // +kubebuilder:default:=1 + CheckIntervalSeconds uint32 `json:"checkIntervalSeconds,omitempty"` + + // MemoryLimitMiB is the maximum amount of memory, in MiB, targeted to be + // allocated by the process. + // +kubebuilder:default:=1000 + MemoryLimitMiB uint32 `json:"limitMib,omitempty"` + + // MemorySpikeLimitMiB is the maximum, in MiB, spike expected between the + // measurements of memory usage. + // +kubebuilder:default:=350 + MemorySpikeLimitMiB uint32 `json:"spikeLimitMib,omitempty"` + + // MemoryLimitPercentage is the maximum amount of memory, in %, targeted to be + // allocated by the process. The fixed memory settings MemoryLimitMiB has a higher precedence. + MemoryLimitPercentage uint32 `json:"limitPercentage,omitempty"` + + // MemorySpikePercentage is the maximum, in percents against the total memory, + // spike expected between the measurements of memory usage. + MemorySpikePercentage uint32 `json:"spikeLimitPercentage,omitempty"` +} + +// BatchProcessorConfig has the attributes that we want to make +// available from batchprocessor.Config. +// Also, we extend it with the JSON struct tags needed in order to kubebuilder +// and controller-gen work. +type BatchProcessorConfig struct { + // Timeout sets the time after which a batch will be sent regardless of size. + // When this is set to zero, batched data will be sent immediately. + // +kubebuilder:default:=15 + TimeoutSeconds uint32 `json:"timeoutSeconds,omitempty"` + + // SendBatchSize is the size of a batch which after hit, will trigger it to be sent. + // When this is set to zero, the batch size is ignored and data will be sent immediately + // subject to only send_batch_max_size. + // +kubebuilder:default:=1000 + SendBatchSize uint32 `json:"sendBatchSize,omitempty"` + + // SendBatchMaxSize is the maximum size of a batch. It must be larger than SendBatchSize. + // Larger batches are split into smaller units. + // Default value is 0, that means no maximum size. + SendBatchMaxSize uint32 `json:"sendBatchMaxSize,omitempty"` +} + +// CollectorSendingQueue has the attributes that we want to make +// available from exporterhelper.QueueSettings. +// Also, we extend it with the JSON struct tags needed in order to kubebuilder +// and controller-gen work. +type CollectorSendingQueue struct { + // Enabled indicates whether to not enqueue batches before sending to the consumerSender. + // +kubebuilder:default:=true + Enabled bool `json:"enabled,omitempty"` + // NumConsumers is the number of consumers from the queue. + // +kubebuilder:default:=4 + NumConsumers int `json:"numConsumers,omitempty"` + // QueueSize is the maximum number of batches allowed in queue at a given time. + // +kubebuilder:default:=100 + QueueSize int `json:"queueSize,omitempty"` +} + +// OTLPExporterConfig has the attributes that we want to make +// available from otlpexporter.Config. +// Also, we extend it with the JSON struct tags needed in order to kubebuilder +// and controller-gen work. +type OTLPExporterConfig struct { + SendingQueue CollectorSendingQueue `json:"sendingQueue,omitempty"` +} + +// OTLPHTTPExporterConfig has the attributes that we want to make +// available from otlphttpexporter.Config. +// Also, we extend it with the JSON struct tags needed in order to kubebuilder +// and controller-gen work. +type OTLPHTTPExporterConfig struct { + SendingQueue CollectorSendingQueue `json:"sendingQueue,omitempty"` +} + // CollectorStatus defines the observed state of Collector type CollectorStatus struct { Conditions []string `json:"conditions,omitempty"` @@ -73,6 +186,52 @@ func CollectorCRD() (*crd.CRD, error) { }, nil } +func NewDefaultAggregatorOTELConfigSpec() *AggregatorOTELConfigSpec { + return &AggregatorOTELConfigSpec{ + Processors: AggregatorOTELProcessors{ + MemoryLimiter: MemoryLimiterProcessorConfig{ + MemoryLimitMiB: 1000, + MemorySpikeLimitMiB: 350, + CheckIntervalSeconds: 1, + }, + Batch: BatchProcessorConfig{ + SendBatchSize: 1000, + TimeoutSeconds: 15, + }, + }, + Exporters: AggregatorOTELExporters{ + OTLPHTTP: OTLPHTTPExporterConfig{ + SendingQueue: CollectorSendingQueue{ + Enabled: true, + NumConsumers: 4, + QueueSize: 100, + }, + }, + }, + } +} + +func NewDefaultNodeOTELConfigSpec() *NodeOTELConfigSpec { + return &NodeOTELConfigSpec{ + Processors: NodeOTELProcessors{ + MemoryLimiter: MemoryLimiterProcessorConfig{ + MemoryLimitMiB: 250, + MemorySpikeLimitMiB: 50, + CheckIntervalSeconds: 1, + }, + }, + Exporters: NodeOTELExporters{ + OTLP: OTLPExporterConfig{ + SendingQueue: CollectorSendingQueue{ + Enabled: true, + NumConsumers: 4, + QueueSize: 100, + }, + }, + }, + } +} + func init() { SchemeBuilder.Register(&Collector{}, &CollectorList{}) } diff --git a/apis/core/v1beta1/zz_generated.deepcopy.go b/apis/core/v1beta1/zz_generated.deepcopy.go index a766fd422b..aac561f822 100644 --- a/apis/core/v1beta1/zz_generated.deepcopy.go +++ b/apis/core/v1beta1/zz_generated.deepcopy.go @@ -12,6 +12,56 @@ import ( apiv1 "opensearch.opster.io/api/v1" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AggregatorOTELConfigSpec) DeepCopyInto(out *AggregatorOTELConfigSpec) { + *out = *in + out.Processors = in.Processors + out.Exporters = in.Exporters +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AggregatorOTELConfigSpec. +func (in *AggregatorOTELConfigSpec) DeepCopy() *AggregatorOTELConfigSpec { + if in == nil { + return nil + } + out := new(AggregatorOTELConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AggregatorOTELExporters) DeepCopyInto(out *AggregatorOTELExporters) { + *out = *in + out.OTLPHTTP = in.OTLPHTTP +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AggregatorOTELExporters. +func (in *AggregatorOTELExporters) DeepCopy() *AggregatorOTELExporters { + if in == nil { + return nil + } + out := new(AggregatorOTELExporters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AggregatorOTELProcessors) DeepCopyInto(out *AggregatorOTELProcessors) { + *out = *in + out.Batch = in.Batch + out.MemoryLimiter = in.MemoryLimiter +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AggregatorOTELProcessors. +func (in *AggregatorOTELProcessors) DeepCopy() *AggregatorOTELProcessors { + if in == nil { + return nil + } + out := new(AggregatorOTELProcessors) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AlertManagerSpec) DeepCopyInto(out *AlertManagerSpec) { *out = *in @@ -262,6 +312,21 @@ func (in *AuthSpec) DeepCopy() *AuthSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BatchProcessorConfig) DeepCopyInto(out *BatchProcessorConfig) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BatchProcessorConfig. +func (in *BatchProcessorConfig) DeepCopy() *BatchProcessorConfig { + if in == nil { + return nil + } + out := new(BatchProcessorConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BootstrapToken) DeepCopyInto(out *BootstrapToken) { *out = *in @@ -382,6 +447,21 @@ func (in *CollectorList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CollectorSendingQueue) DeepCopyInto(out *CollectorSendingQueue) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CollectorSendingQueue. +func (in *CollectorSendingQueue) DeepCopy() *CollectorSendingQueue { + if in == nil { + return nil + } + out := new(CollectorSendingQueue) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CollectorSpec) DeepCopyInto(out *CollectorSpec) { *out = *in @@ -401,6 +481,16 @@ func (in *CollectorSpec) DeepCopyInto(out *CollectorSpec) { *out = new(ConfigReloaderSpec) (*in).DeepCopyInto(*out) } + if in.AggregatorOTELConfigSpec != nil { + in, out := &in.AggregatorOTELConfigSpec, &out.AggregatorOTELConfigSpec + *out = new(AggregatorOTELConfigSpec) + **out = **in + } + if in.NodeOTELConfigSpec != nil { + in, out := &in.NodeOTELConfigSpec, &out.NodeOTELConfigSpec + *out = new(NodeOTELConfigSpec) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CollectorSpec. @@ -916,6 +1006,21 @@ func (in *LoggingClusterStatus) DeepCopy() *LoggingClusterStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MemoryLimiterProcessorConfig) DeepCopyInto(out *MemoryLimiterProcessorConfig) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemoryLimiterProcessorConfig. +func (in *MemoryLimiterProcessorConfig) DeepCopy() *MemoryLimiterProcessorConfig { + if in == nil { + return nil + } + out := new(MemoryLimiterProcessorConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MonitoringCluster) DeepCopyInto(out *MonitoringCluster) { *out = *in @@ -1128,6 +1233,87 @@ func (in *NatsStatus) DeepCopy() *NatsStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeOTELConfigSpec) DeepCopyInto(out *NodeOTELConfigSpec) { + *out = *in + out.Processors = in.Processors + out.Exporters = in.Exporters +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeOTELConfigSpec. +func (in *NodeOTELConfigSpec) DeepCopy() *NodeOTELConfigSpec { + if in == nil { + return nil + } + out := new(NodeOTELConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeOTELExporters) DeepCopyInto(out *NodeOTELExporters) { + *out = *in + out.OTLP = in.OTLP +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeOTELExporters. +func (in *NodeOTELExporters) DeepCopy() *NodeOTELExporters { + if in == nil { + return nil + } + out := new(NodeOTELExporters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeOTELProcessors) DeepCopyInto(out *NodeOTELProcessors) { + *out = *in + out.MemoryLimiter = in.MemoryLimiter +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeOTELProcessors. +func (in *NodeOTELProcessors) DeepCopy() *NodeOTELProcessors { + if in == nil { + return nil + } + out := new(NodeOTELProcessors) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OTLPExporterConfig) DeepCopyInto(out *OTLPExporterConfig) { + *out = *in + out.SendingQueue = in.SendingQueue +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OTLPExporterConfig. +func (in *OTLPExporterConfig) DeepCopy() *OTLPExporterConfig { + if in == nil { + return nil + } + out := new(OTLPExporterConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OTLPHTTPExporterConfig) DeepCopyInto(out *OTLPHTTPExporterConfig) { + *out = *in + out.SendingQueue = in.SendingQueue +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OTLPHTTPExporterConfig. +func (in *OTLPHTTPExporterConfig) DeepCopy() *OTLPHTTPExporterConfig { + if in == nil { + return nil + } + out := new(OTLPHTTPExporterConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenIDConfigSpec) DeepCopyInto(out *OpenIDConfigSpec) { *out = *in diff --git a/config/crd/bases/core.opni.io_collectors.yaml b/config/crd/bases/core.opni.io_collectors.yaml index a96803ff3c..7ade24f160 100644 --- a/config/crd/bases/core.opni.io_collectors.yaml +++ b/config/crd/bases/core.opni.io_collectors.yaml @@ -28,6 +28,65 @@ spec: properties: agentEndpoint: type: string + aggregatorOtelCollectorSpec: + properties: + exporters: + properties: + otlphttp: + properties: + sendingQueue: + properties: + enabled: + default: true + type: boolean + numConsumers: + default: 4 + type: integer + queueSize: + default: 100 + type: integer + type: object + type: object + type: object + processors: + properties: + batch: + properties: + sendBatchMaxSize: + format: int32 + type: integer + sendBatchSize: + default: 1000 + format: int32 + type: integer + timeoutSeconds: + default: 15 + format: int32 + type: integer + type: object + memoryLimiter: + properties: + checkIntervalSeconds: + default: 1 + format: int32 + type: integer + limitMib: + default: 1000 + format: int32 + type: integer + limitPercentage: + format: int32 + type: integer + spikeLimitMib: + default: 350 + format: int32 + type: integer + spikeLimitPercentage: + format: int32 + type: integer + type: object + type: object + type: object configReloader: properties: image: @@ -69,6 +128,51 @@ spec: type: string type: object x-kubernetes-map-type: atomic + nodeOtelCollectorSpec: + properties: + exporters: + properties: + otlp: + properties: + sendingQueue: + properties: + enabled: + default: true + type: boolean + numConsumers: + default: 4 + type: integer + queueSize: + default: 100 + type: integer + type: object + type: object + type: object + processors: + properties: + memoryLimiter: + properties: + checkIntervalSeconds: + default: 1 + format: int32 + type: integer + limitMib: + default: 1000 + format: int32 + type: integer + limitPercentage: + format: int32 + type: integer + spikeLimitMib: + default: 350 + format: int32 + type: integer + spikeLimitPercentage: + format: int32 + type: integer + type: object + type: object + type: object systemNamespace: type: string type: object diff --git a/go.mod b/go.mod index 1e03076073..85d08423dd 100644 --- a/go.mod +++ b/go.mod @@ -116,9 +116,13 @@ require ( go.etcd.io/etcd/api/v3 v3.5.9 go.etcd.io/etcd/client/v3 v3.5.9 go.etcd.io/etcd/etcdctl/v3 v3.5.9 + go.opentelemetry.io/collector/exporter/otlpexporter v0.80.0 + go.opentelemetry.io/collector/exporter/otlphttpexporter v0.80.0 go.opentelemetry.io/collector/pdata v1.0.0-rcv0014 + go.opentelemetry.io/collector/processor/batchprocessor v0.80.0 + go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.80.0 go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.40.0 - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.1-0.20230612162650-64be7e574a17 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 go.opentelemetry.io/contrib/propagators/autoprop v0.42.0 go.opentelemetry.io/otel v1.16.0 @@ -164,14 +168,29 @@ require ( ) require ( - github.com/go-logr/zapr v1.2.4 // indirect - go.uber.org/zap v1.25.0 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/mostynb/go-grpc-compression v1.1.19 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/shirou/gopsutil/v3 v3.23.5 // indirect + github.com/tklauser/go-sysconf v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.0 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect + go.opentelemetry.io/collector/config/configauth v0.80.0 // indirect + go.opentelemetry.io/collector/config/configcompression v0.80.0 // indirect + go.opentelemetry.io/collector/config/configgrpc v0.80.0 // indirect + go.opentelemetry.io/collector/config/confighttp v0.80.0 // indirect + go.opentelemetry.io/collector/config/confignet v0.80.0 // indirect + go.opentelemetry.io/collector/config/configopaque v0.80.0 // indirect + go.opentelemetry.io/collector/config/configtls v0.80.0 // indirect + go.opentelemetry.io/collector/config/internal v0.80.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.80.0 // indirect ) require ( cloud.google.com/go v0.110.7 // indirect cloud.google.com/go/compute v1.23.0 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect cloud.google.com/go/iam v1.1.1 // indirect cloud.google.com/go/storage v1.30.1 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -438,7 +457,7 @@ require ( github.com/pborman/uuid v1.2.1 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect - github.com/pierrec/lz4/v4 v4.1.16 // indirect + github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/term v1.1.0 // indirect github.com/plar/go-adaptive-radix-tree v1.0.5 @@ -508,7 +527,7 @@ require ( go.opentelemetry.io/collector/config/configtelemetry v0.80.0 // indirect go.opentelemetry.io/collector/confmap v0.80.1-0.20230629234129-50c94c941969 // indirect go.opentelemetry.io/collector/consumer v0.80.0 // indirect - go.opentelemetry.io/collector/exporter v0.80.0 // indirect + go.opentelemetry.io/collector/exporter v0.80.0 go.opentelemetry.io/collector/extension v0.80.0 // indirect go.opentelemetry.io/collector/featuregate v1.0.0-rcv0013 // indirect go.opentelemetry.io/collector/processor v0.80.0 // indirect diff --git a/go.sum b/go.sum index 6ef4acd763..8091bc5f51 100644 --- a/go.sum +++ b/go.sum @@ -128,8 +128,9 @@ cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdi cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4= +cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8= cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= @@ -1045,6 +1046,8 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -1704,6 +1707,8 @@ github.com/longhorn/upgrade-responder v0.1.5 h1:d1GksWjckahzFruqmeHyWwOEt8+P6H5g github.com/longhorn/upgrade-responder v0.1.5/go.mod h1:6n1YZwCwERleK5BdvKsGnqV6Z7HJanAd2Pp/rl4Nw4c= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= @@ -1858,6 +1863,8 @@ github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mostynb/go-grpc-compression v1.1.19 h1:T57PAuic1tP+6PVgPpeZ15Nx6r6FqUqdnXeAslzxn0Y= +github.com/mostynb/go-grpc-compression v1.1.19/go.mod h1:oidYvYyefMmhcuvU8fLJ8FfZyTyVzJ6SkmD5fIKgRe8= github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ= github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= @@ -2023,8 +2030,8 @@ github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rK github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4/v4 v4.1.16 h1:kQPfno+wyx6C5572ABwV+Uo3pDFzQ7yhyGchSyRda0c= -github.com/pierrec/lz4/v4 v4.1.16/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= +github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -2049,6 +2056,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/poy/onpar v0.0.0-20200406201722-06f95a1c68e8/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= @@ -2194,6 +2203,10 @@ github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAm github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/shirou/gopsutil/v3 v3.23.5 h1:5SgDCeQ0KW0S4N0znjeM/eFHXXOKyv2dVNgRq/c9P6Y= +github.com/shirou/gopsutil/v3 v3.23.5/go.mod h1:Ng3Maa27Q2KARVJ0SPZF5NdrQSC3XHKP8IIWrHgMeLY= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= @@ -2329,6 +2342,10 @@ github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhso github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= +github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= +github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 h1:OXcKh35JaYsGMRzpvFkLv/MEyPuL49CThT1pZ8aSml4= @@ -2406,6 +2423,8 @@ github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE= github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= @@ -2474,30 +2493,58 @@ go.opentelemetry.io/collector v0.80.0 h1:jAsJzGhH++WI9lCGSS0ykfo+XX4H3Fp0bs5UaZP go.opentelemetry.io/collector v0.80.0/go.mod h1:WuFR0SJJbUsBF7YF8w0vjvfoxodzIAkFt+HIeF9eQ5A= go.opentelemetry.io/collector/component v0.80.0 h1:yL+YJDnsAYF8Yviu4MceqNfQN16PDi8hIMUEllxNBlA= go.opentelemetry.io/collector/component v0.80.0/go.mod h1:4BMtyTmTmw7u3GCibdI+DY8S3q+Hk3W6CLTOk+WHoGU= +go.opentelemetry.io/collector/config/configauth v0.80.0 h1:+8zH36zhLNp/efwxoJwdp1ORIV/RkjoTp9I3OOzvpOE= +go.opentelemetry.io/collector/config/configauth v0.80.0/go.mod h1:F0W34vz4zbqFhxJjvpwDKIaKE2t1baGuhEqreTQJTI0= +go.opentelemetry.io/collector/config/configcompression v0.80.0 h1:lmSOh1Y+tYK/Nzr6ge7V3Oe2csxj3/Q/cUFuEvEQ2kU= +go.opentelemetry.io/collector/config/configcompression v0.80.0/go.mod h1:xhHm1sEH7BTECAJo1xn64NMxeIvZGKdVGdSKUUc+YuM= +go.opentelemetry.io/collector/config/configgrpc v0.80.0 h1:xpPu+FNnJR3fcqg+JxBvMBIA+xtn3iv4/bWIEQCwIT4= +go.opentelemetry.io/collector/config/configgrpc v0.80.0/go.mod h1:3xKnuF9F8JqnbXz8vEN7ySasEFATwAea/lGVld4BBRo= +go.opentelemetry.io/collector/config/confighttp v0.80.0 h1:B2wkgDTs8kmzLDhm3zEKAq7TvjEyEHVuL0pc75Sv0mo= +go.opentelemetry.io/collector/config/confighttp v0.80.0/go.mod h1:uj8coqg+AGHi3PAlVxDNIBjs5QrS499Ab+ywo6KwvBA= +go.opentelemetry.io/collector/config/confignet v0.80.0 h1:ouYD6fPs2DCVmqE4h6XpaSyZi9D/Q2j3oSjjPCVSoeo= +go.opentelemetry.io/collector/config/confignet v0.80.0/go.mod h1:unOg7BZvpt6T5xsf+LyeOQvUhD8ld/2AbfOsmUZ/bPM= +go.opentelemetry.io/collector/config/configopaque v0.80.0 h1:+Jwkd/X9jtbj3PkFk+p6H3GdD/qEREOJ47L+hs12ckw= +go.opentelemetry.io/collector/config/configopaque v0.80.0/go.mod h1:pM1oy6gasukw3H6jAvc9Q9OtFaaY2IbfeuwCPAjOgXc= go.opentelemetry.io/collector/config/configtelemetry v0.80.0 h1:IE/uyLy/roZAnj+jxiYY1QGjP1VYzzen7e1k6bVDBoA= go.opentelemetry.io/collector/config/configtelemetry v0.80.0/go.mod h1:KEYQRiYJdx38iZkvcLKBZWH9fK4NeafxBwGRrRKMgyA= +go.opentelemetry.io/collector/config/configtls v0.80.0 h1:0NwckEIIzXv2Zz+rLswHb37jsDmMnqo2O4/Fl/+2KFM= +go.opentelemetry.io/collector/config/configtls v0.80.0/go.mod h1:fO1VgdtrcgcVA3Y2vB/YQvTh2tNNFW0R0NjWrtvjTOQ= +go.opentelemetry.io/collector/config/internal v0.80.0 h1:9mOlmdHiaNKS5HTVJ1+COx/URDjzX0zvUKcbsLC6S8k= +go.opentelemetry.io/collector/config/internal v0.80.0/go.mod h1:RKcLV1gQxhgwx+6rlPYsvGMq1RZNne3UeOUZkHxJnIg= go.opentelemetry.io/collector/confmap v0.80.1-0.20230629234129-50c94c941969 h1:kpNiFFSdOBbKQubR+VXYiTN3iy9ZXYv58UiLk/xVdxE= go.opentelemetry.io/collector/confmap v0.80.1-0.20230629234129-50c94c941969/go.mod h1:iCTnTqGgZZJumhJxpY7rrJz9UQ/0zjPmsJz2Z7Tp4RY= go.opentelemetry.io/collector/consumer v0.80.0 h1:IQfkrNvZ6/ZkfQs/d6JENgfYPE3g3NcVcy1eC8nku58= go.opentelemetry.io/collector/consumer v0.80.0/go.mod h1://MinWlTMlL44B8WvUzLnYWBKgxfgGE8grpxoUiL9aQ= go.opentelemetry.io/collector/exporter v0.80.0 h1:BjwrMGhlrJ6IyhOOkPruzycCk7dv6vuf+VORzsVtcLI= go.opentelemetry.io/collector/exporter v0.80.0/go.mod h1:qcvFsxN8AaSxJ60WxSF0zGUTCMhGBWY3Coa9iiONWbg= +go.opentelemetry.io/collector/exporter/otlpexporter v0.80.0 h1:WQOuXDt40i50lyS3JFIBp0dKEAltt54oERk7klBB5LQ= +go.opentelemetry.io/collector/exporter/otlpexporter v0.80.0/go.mod h1:vfD1P2bcPeK9Df77wzWX897teeBcCvnxA9aNRxDM3ks= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.80.0 h1:2rd+t/LCr7nOOBiHKaeSVbJKHmFbANkUMnumGYVCBCM= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.80.0/go.mod h1:vBz0hJe32gAEp8LWb8e7VwA96h6qlRxToy2acYV6lKw= go.opentelemetry.io/collector/extension v0.80.0 h1:Nx2QpwBAwcEcCVpqqqJIzpkhniGRhLC5Tr5s+e5H5p0= go.opentelemetry.io/collector/extension v0.80.0/go.mod h1:r61aYWq9NYZP22+LVqiLOEC0cHGksU+Ys5H+KWT3HgA= +go.opentelemetry.io/collector/extension/auth v0.80.0 h1:BElM8HXYVho2ZikMS8OpQQjmaMizB3qFGJ+kGZ4cyoI= +go.opentelemetry.io/collector/extension/auth v0.80.0/go.mod h1:wDpwb37PxV/aH/kecpPXtJqGSmiOYUyeLuQvRmWciAA= go.opentelemetry.io/collector/featuregate v1.0.0-rcv0013 h1:tiTUG9X/gEDN1oDYQOBVUFYQfhUG2CvgW9VhBc2uk1U= go.opentelemetry.io/collector/featuregate v1.0.0-rcv0013/go.mod h1:0mE3mDLmUrOXVoNsuvj+7dV14h/9HFl/Fy9YTLoLObo= go.opentelemetry.io/collector/pdata v1.0.0-rcv0014 h1:iT5qH0NLmkGeIdDtnBogYDx7L58t6CaWGL378DEo2QY= go.opentelemetry.io/collector/pdata v1.0.0-rcv0014/go.mod h1:BRvDrx43kiSoUx3mr7SoA7h9B8+OY99mUK+CZSQFWW4= go.opentelemetry.io/collector/processor v0.80.0 h1:UUKPh2E/pIru2WChWiFVrugc48m2Al5kHQ0d66cxh6w= go.opentelemetry.io/collector/processor v0.80.0/go.mod h1:ZFtJUIgpJmgkSnBGd4F+q4zb1TrhrQsNHGdDmijYlU8= +go.opentelemetry.io/collector/processor/batchprocessor v0.80.0 h1:B3phgqGYRbAM1ZjR7OlAS4hK1XcM2/FDLvzOCycyE6A= +go.opentelemetry.io/collector/processor/batchprocessor v0.80.0/go.mod h1:Qx1iqTNROrUIzecHbbQenO3NacvkKknnZzikD5qUFOg= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.80.0 h1:ZK9GRIjqHB74LIUwhCUv7tWO0HlVMdqpo0kTNs2TkF8= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.80.0/go.mod h1:Saosjjmi1q1vkLJ8EH/jTvhp37/tTPDa2Sa28G8jCqk= go.opentelemetry.io/collector/receiver v0.80.0 h1:+dJn57mWaksgKDnR06mAu5aReOcqg1pdgC6zqqLmtZ4= go.opentelemetry.io/collector/receiver v0.80.0/go.mod h1:DsyjwQZjlcbwoY4Kq4yx1tNL8Z4d8E7e4tbQYzBUw/g= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.80.0 h1:oWWztTJlNOp81JE27DRaHKJnyAympUn5boDI7dVG78I= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.80.0/go.mod h1:bb6RD5rDEwuruBw/yRlAQ4a3e0VpD1jKNztqbPnvC3k= go.opentelemetry.io/collector/semconv v0.81.0 h1:lCYNNo3powDvFIaTPP2jDKIrBiV1T92NK4QgL/aHYXw= go.opentelemetry.io/collector/semconv v0.81.0/go.mod h1:TlYPtzvsXyHOgr5eATi43qEMqwSmIziivJB2uctKswo= go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.40.0 h1:E4MMXDxufRnIHXhoTNOlNsdkWpC5HdLhfj84WNRKPkc= go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.40.0/go.mod h1:A8+gHkpqTfMKxdKWq1pp360nAs096K26CH5Sm2YHDdA= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0 h1:ZOLJc06r4CB42laIXg/7udr0pbZyuAihN10A/XuiQRY= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0/go.mod h1:5z+/ZWJQKXa9YT34fQNx5K8Hd1EoIhvtUygUQPqEOgQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.1-0.20230612162650-64be7e574a17 h1:mdcNStUIXngF/mH3xxAo4nbR4g65IXqLL1SvYMjz7JQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.1-0.20230612162650-64be7e574a17/go.mod h1:N2Nw/UmmvQn0yCnaUzvsWzTWIeffYIdFteg6mxqCWII= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 h1:pginetY7+onl4qN1vl0xW/V/v6OBZ0vVdH+esuJgvmM= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0/go.mod h1:XiYsayHc36K3EByOO6nbAXnAWbrUxdjUROCEeeROOH8= go.opentelemetry.io/contrib/propagators/autoprop v0.42.0 h1:s2RzYOAqHVgG23q8fPWYChobUoZM6rJZ98EnylJr66w= @@ -2871,6 +2918,7 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/pkg/otel/types.go b/pkg/otel/types.go index 5a676940da..deb07a21c4 100644 --- a/pkg/otel/types.go +++ b/pkg/otel/types.go @@ -6,6 +6,10 @@ import ( "github.com/rancher/opni/pkg/util" "github.com/samber/lo" + "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/exporter/otlphttpexporter" + "go.opentelemetry.io/collector/processor/batchprocessor" + "go.opentelemetry.io/collector/processor/memorylimiterprocessor" "google.golang.org/protobuf/types/known/durationpb" "gopkg.in/yaml.v2" ) @@ -27,6 +31,7 @@ type NodeConfig struct { Metrics MetricsConfig Containerized bool LogLevel string + OTELConfig NodeOTELConfig } type AggregatorConfig struct { @@ -35,6 +40,34 @@ type AggregatorConfig struct { Metrics MetricsConfig Containerized bool LogLevel string + OTELConfig AggregatorOTELConfig +} + +type AggregatorOTELConfig struct { + Processors *AggregatorOTELProcessors + Exporters *AggregatorOTELExporters +} + +type AggregatorOTELProcessors struct { + Batch batchprocessor.Config + MemoryLimiter memorylimiterprocessor.Config +} + +type AggregatorOTELExporters struct { + OTLPHTTP otlphttpexporter.Config +} + +type NodeOTELConfig struct { + Processors *NodeOTELProcessors + Exporters *NodeOTELExporters +} + +type NodeOTELProcessors struct { + MemoryLimiter memorylimiterprocessor.Config +} + +type NodeOTELExporters struct { + OTLP otlpexporter.Config } type LoggingConfig struct { diff --git a/pkg/resources/collector/templates.go b/pkg/resources/collector/templates.go index 6703685dfa..66269307fb 100644 --- a/pkg/resources/collector/templates.go +++ b/pkg/resources/collector/templates.go @@ -194,15 +194,16 @@ exporters: tls: insecure: true sending_queue: - num_consumers: 4 - queue_size: 100 + enabled: {{ .OTELConfig.Exporters.OTLP.QueueSettings.Enabled }} + num_consumers: {{ .OTELConfig.Exporters.OTLP.QueueSettings.NumConsumers }} + queue_size: {{ .OTELConfig.Exporters.OTLP.QueueSettings.QueueSize }} retry_on_failure: enabled: true processors: memory_limiter: - limit_mib: 250 - spike_limit_mib: 50 - check_interval: 1s + limit_mib: {{ .OTELConfig.Processors.MemoryLimiter.MemoryLimitMiB }} + spike_limit_mib: {{ .OTELConfig.Processors.MemoryLimiter.MemorySpikeLimitMiB }} + check_interval: {{ .OTELConfig.Processors.MemoryLimiter.CheckInterval }} k8sattributes: passthrough: false pod_association: @@ -269,12 +270,13 @@ receivers: processors: batch: - send_batch_size: 1000 - timeout: 15s + timeout: {{ .OTELConfig.Processors.Batch.Timeout }} + send_batch_size: {{ .OTELConfig.Processors.Batch.SendBatchSize }} + send_batch_max_size: {{ .OTELConfig.Processors.Batch.SendBatchMaxSize }} memory_limiter: - limit_mib: 1000 - spike_limit_mib: 350 - check_interval: 1s + limit_mib: {{ .OTELConfig.Processors.MemoryLimiter.MemoryLimitMiB }} + spike_limit_mib: {{ .OTELConfig.Processors.MemoryLimiter.MemorySpikeLimitMiB }} + check_interval: {{ .OTELConfig.Processors.MemoryLimiter.CheckInterval }} transform: log_statements: - context: log @@ -287,8 +289,9 @@ exporters: tls: insecure: true sending_queue: - num_consumers: 4 - queue_size: 100 + enabled: {{ .OTELConfig.Exporters.OTLPHTTP.QueueSettings.Enabled }} + num_consumers: {{ .OTELConfig.Exporters.OTLPHTTP.QueueSettings.NumConsumers }} + queue_size: {{ .OTELConfig.Exporters.OTLPHTTP.QueueSettings.QueueSize }} retry_on_failure: enabled: true {{ template "metrics-remotewrite-exporter" .}} diff --git a/pkg/resources/collector/workloads.go b/pkg/resources/collector/workloads.go index 0f64caf8d2..cc57b95255 100644 --- a/pkg/resources/collector/workloads.go +++ b/pkg/resources/collector/workloads.go @@ -5,7 +5,9 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "time" + opnicorev1beta1 "github.com/rancher/opni/apis/core/v1beta1" opniloggingv1beta1 "github.com/rancher/opni/apis/logging/v1beta1" monitoringv1beta1 "github.com/rancher/opni/apis/monitoring/v1beta1" "github.com/rancher/opni/pkg/logger" @@ -13,6 +15,11 @@ import ( "github.com/rancher/opni/pkg/resources" opnimeta "github.com/rancher/opni/pkg/util/meta" "github.com/samber/lo" + "go.opentelemetry.io/collector/exporter/exporterhelper" + "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/exporter/otlphttpexporter" + "go.opentelemetry.io/collector/processor/batchprocessor" + "go.opentelemetry.io/collector/processor/memorylimiterprocessor" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -62,6 +69,36 @@ func (r *Reconciler) getDaemonConfig(loggingReceivers []string) otel.NodeConfig Metrics: lo.FromPtr(r.getMetricsConfig()), Containerized: true, LogLevel: r.collector.Spec.LogLevel, + OTELConfig: r.getDaemonOTELConfig(), + } +} + +func (r *Reconciler) getDaemonOTELConfig() otel.NodeOTELConfig { + nodeOTELCfg := r.collector.Spec.NodeOTELConfigSpec + if nodeOTELCfg == nil { + r.logger.Warn("found no config for the daemon's OTEL Collector, falling back to default") + nodeOTELCfg = opnicorev1beta1.NewDefaultNodeOTELConfigSpec() + } + + return otel.NodeOTELConfig{ + Processors: &otel.NodeOTELProcessors{ + MemoryLimiter: memorylimiterprocessor.Config{ + CheckInterval: time.Duration(nodeOTELCfg.Processors.MemoryLimiter.CheckIntervalSeconds) * time.Second, + MemoryLimitMiB: nodeOTELCfg.Processors.MemoryLimiter.MemoryLimitMiB, + MemorySpikeLimitMiB: nodeOTELCfg.Processors.MemoryLimiter.MemorySpikeLimitMiB, + MemoryLimitPercentage: nodeOTELCfg.Processors.MemoryLimiter.MemoryLimitPercentage, + MemorySpikePercentage: nodeOTELCfg.Processors.MemoryLimiter.MemorySpikePercentage, + }, + }, + Exporters: &otel.NodeOTELExporters{ + OTLP: otlpexporter.Config{ + QueueSettings: exporterhelper.QueueSettings{ + Enabled: nodeOTELCfg.Exporters.OTLP.SendingQueue.Enabled, + NumConsumers: nodeOTELCfg.Exporters.OTLP.SendingQueue.NumConsumers, + QueueSize: nodeOTELCfg.Exporters.OTLP.SendingQueue.QueueSize, + }, + }, + }, } } @@ -74,9 +111,44 @@ func (r *Reconciler) getAggregatorConfig( AgentEndpoint: r.collector.Spec.AgentEndpoint, Containerized: true, LogLevel: r.collector.Spec.LogLevel, + OTELConfig: r.getAggregatorOTELConfig(), } } +func (r *Reconciler) getAggregatorOTELConfig() otel.AggregatorOTELConfig { + aggregatorOTELCfg := r.collector.Spec.AggregatorOTELConfigSpec + if aggregatorOTELCfg == nil { + r.logger.Warn("found no config for the aggregator's OTEL Collector, falling back to default") + aggregatorOTELCfg = opnicorev1beta1.NewDefaultAggregatorOTELConfigSpec() + } + return otel.AggregatorOTELConfig{ + Processors: &otel.AggregatorOTELProcessors{ + MemoryLimiter: memorylimiterprocessor.Config{ + CheckInterval: time.Duration(aggregatorOTELCfg.Processors.MemoryLimiter.CheckIntervalSeconds) * time.Second, + MemoryLimitMiB: aggregatorOTELCfg.Processors.MemoryLimiter.MemoryLimitMiB, + MemorySpikeLimitMiB: aggregatorOTELCfg.Processors.MemoryLimiter.MemorySpikeLimitMiB, + MemoryLimitPercentage: aggregatorOTELCfg.Processors.MemoryLimiter.MemoryLimitPercentage, + MemorySpikePercentage: aggregatorOTELCfg.Processors.MemoryLimiter.MemorySpikePercentage, + }, + Batch: batchprocessor.Config{ + Timeout: time.Duration(aggregatorOTELCfg.Processors.Batch.TimeoutSeconds) * time.Second, + SendBatchSize: aggregatorOTELCfg.Processors.Batch.SendBatchSize, + SendBatchMaxSize: aggregatorOTELCfg.Processors.Batch.SendBatchMaxSize, + }, + }, + Exporters: &otel.AggregatorOTELExporters{ + OTLPHTTP: otlphttpexporter.Config{ + QueueSettings: exporterhelper.QueueSettings{ + Enabled: aggregatorOTELCfg.Exporters.OTLPHTTP.SendingQueue.Enabled, + NumConsumers: aggregatorOTELCfg.Exporters.OTLPHTTP.SendingQueue.NumConsumers, + QueueSize: aggregatorOTELCfg.Exporters.OTLPHTTP.SendingQueue.QueueSize, + }, + }, + }, + } + +} + func (r *Reconciler) receiverConfig() (retData []byte, retReceivers []string, retErr error) { if r.collector.Spec.LoggingConfig != nil { retData = append(retData, []byte(templateLogAgentK8sReceiver)...) diff --git a/plugins/logging/pkg/agent/drivers/kubernetes_manager/kubernetes_manager.go b/plugins/logging/pkg/agent/drivers/kubernetes_manager/kubernetes_manager.go index 4cc9b7c35e..7b6f60585f 100644 --- a/plugins/logging/pkg/agent/drivers/kubernetes_manager/kubernetes_manager.go +++ b/plugins/logging/pkg/agent/drivers/kubernetes_manager/kubernetes_manager.go @@ -322,8 +322,10 @@ func (m *KubernetesManagerDriver) buildEmptyCollector() *opnicorev1beta1.Collect ImageSpec: opnimeta.ImageSpec{ ImagePullPolicy: lo.ToPtr(corev1.PullAlways), }, - SystemNamespace: m.Namespace, - AgentEndpoint: otel.AgentEndpoint(serviceName), + SystemNamespace: m.Namespace, + AgentEndpoint: otel.AgentEndpoint(serviceName), + AggregatorOTELConfigSpec: opnicorev1beta1.NewDefaultAggregatorOTELConfigSpec(), + NodeOTELConfigSpec: opnicorev1beta1.NewDefaultNodeOTELConfigSpec(), }, } } diff --git a/plugins/metrics/pkg/agent/drivers/opni_manager_otel/otel_driver.go b/plugins/metrics/pkg/agent/drivers/opni_manager_otel/otel_driver.go index a22bd29569..f8ac29bc4d 100644 --- a/plugins/metrics/pkg/agent/drivers/opni_manager_otel/otel_driver.go +++ b/plugins/metrics/pkg/agent/drivers/opni_manager_otel/otel_driver.go @@ -214,8 +214,10 @@ func (o *OTELNodeDriver) buildEmptyCollector() *opnicorev1beta1.Collector { ImageSpec: opnimeta.ImageSpec{ ImagePullPolicy: lo.ToPtr(corev1.PullAlways), }, - SystemNamespace: o.Namespace, - AgentEndpoint: otel.AgentEndpoint(serviceName), + SystemNamespace: o.Namespace, + AgentEndpoint: otel.AgentEndpoint(serviceName), + NodeOTELConfigSpec: opnicorev1beta1.NewDefaultNodeOTELConfigSpec(), + AggregatorOTELConfigSpec: opnicorev1beta1.NewDefaultAggregatorOTELConfigSpec(), }, } }