diff --git a/docs/sources/flow/reference/components/prometheus.scrape.md b/docs/sources/flow/reference/components/prometheus.scrape.md index 6cd15ddb2553..a6f52a4c1ac8 100644 --- a/docs/sources/flow/reference/components/prometheus.scrape.md +++ b/docs/sources/flow/reference/components/prometheus.scrape.md @@ -48,7 +48,6 @@ Name | Type | Description | Default | Required `forward_to` | `list(MetricsReceiver)` | List of receivers to send scraped metrics to. | | yes `job_name` | `string` | The value to use for the job label if not already set. | component name | no `extra_metrics` | `bool` | Whether extra metrics should be generated for scrape targets. | `false` | no -`enable_protobuf_negotiation` | `bool` | Whether to enable protobuf negotiation with the client. | `false` | no `honor_labels` | `bool` | Indicator whether the scraped metrics should remain unmodified. | `false` | no `honor_timestamps` | `bool` | Indicator whether the scraped timestamps should be respected. | `true` | no `track_timestamps_staleness` | `bool` | Indicator whether to track the staleness of the scraped timestamps. | `false` | no @@ -56,6 +55,7 @@ Name | Type | Description | Default | Required `scrape_classic_histograms` | `bool` | Whether to scrape a classic histogram that is also exposed as a native histogram. | `false` | no `scrape_interval` | `duration` | How frequently to scrape the targets of this scrape configuration. | `"60s"` | no `scrape_timeout` | `duration` | The timeout for scraping targets of this configuration. | `"10s"` | no +`scrape_protocols` | `list(string)` | The protocols to negotiate during a scrape with the client. | __see below__ | no `metrics_path` | `string` | The HTTP resource path on which to fetch metrics from targets. | `/metrics` | no `scheme` | `string` | The URL scheme with which to fetch metrics from targets. | | no `body_size_limit` | `int` | An uncompressed response body larger than this many bytes causes the scrape to fail. 0 means no limit. | | no @@ -92,6 +92,21 @@ Name | Type | Description | Default | Required * It is recommended to set `track_timestamps_staleness` to `true` if the database where metrics are written to has enabled [out of order ingestion][mimir-ooo]. * If `track_timestamps_staleness` is set to `false`, samples with explicit timestamps will only be labeled as stale after a certain time period, which in Prometheus is 5 minutes by default. +The supported values for `scrape_protocols` are: +* `"PrometheusProto"` +* `"PrometheusText0.0.4"` +* `"OpenMetricsText0.0.1"` +* `"OpenMetricsText1.0.0"` + + +The default values are: +* `"PrometheusProto"` +* `"OpenMetricsText1.0.0"` +* `"OpenMetricsText0.0.1"` +* `"PrometheusText0.0.4"` + [prom-text-exposition-format]: https://prometheus.io/docs/instrumenting/exposition_formats/#text-based-format [prom-staleness]: https://prometheus.io/docs/prometheus/latest/querying/basics/#staleness [mimir-ooo]: https://grafana.com/docs/mimir/latest/configure/configure-out-of-order-samples-ingestion/ @@ -253,11 +268,8 @@ times out while scraping, or because the samples from the target could not be processed. When the target is behaving normally, the `up` metric is set to `1`. -To enable scraping of Prometheus' native histograms over gRPC, the -`enable_protobuf_negotiation` must be set to true. The -`scrape_classic_histograms` argument controls whether the component should also -scrape the 'classic' histogram equivalent of a native histogram, if it is -present. +The `scrape_classic_histograms` argument controls whether the component should also +scrape the 'classic' histogram equivalent of a native histogram, if it is present. [in-memory traffic]: {{< relref "../../concepts/component_controller.md#in-memory-traffic" >}} [run command]: {{< relref "../cli/run.md" >}} diff --git a/go.mod b/go.mod index bd466bed8759..e363514e08b6 100644 --- a/go.mod +++ b/go.mod @@ -9,17 +9,17 @@ retract ( ) require ( - cloud.google.com/go/pubsub v1.34.0 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0-beta.1 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 + cloud.google.com/go/pubsub v1.36.1 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 github.com/Azure/go-autorest/autorest v0.11.29 github.com/IBM/sarama v1.43.0 github.com/Lusitaniae/apache_exporter v0.11.1-0.20220518131644-f9522724dab4 github.com/Masterminds/sprig/v3 v3.2.3 github.com/PuerkitoBio/rehttp v1.3.0 github.com/alecthomas/kingpin/v2 v2.4.0 - github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 - github.com/aws/aws-sdk-go v1.50.27 // indirect + github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 + github.com/aws/aws-sdk-go v1.50.32 // indirect github.com/aws/aws-sdk-go-v2 v1.25.2 github.com/aws/aws-sdk-go-v2/config v1.27.4 github.com/aws/aws-sdk-go-v2/service/s3 v1.49.0 @@ -30,7 +30,7 @@ require ( github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf github.com/coreos/go-systemd/v22 v22.5.0 github.com/davidmparrott/kafka_exporter/v2 v2.0.1 - github.com/docker/docker v24.0.9+incompatible + github.com/docker/docker v25.0.3+incompatible github.com/docker/go-connections v0.5.0 github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 github.com/fatih/color v1.15.0 @@ -51,7 +51,7 @@ require ( github.com/google/dnsmasq_exporter v0.2.1-0.20230620100026-44b14480804a github.com/google/go-cmp v0.6.0 github.com/google/go-jsonnet v0.18.0 - github.com/google/pprof v0.0.0-20240117000934-35fc243c5815 + github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 github.com/google/renameio/v2 v2.0.0 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 @@ -59,7 +59,8 @@ require ( github.com/grafana/cloudflare-go v0.0.0-20230110200409-c627cf6792f2 github.com/grafana/dskit v0.0.0-20240104111617-ea101a3b86eb github.com/grafana/go-gelf/v2 v2.0.1 - github.com/grafana/loki v1.6.2-0.20240221085104-f9d188620153 // k190 branch + //TODO(ptodev): Update this to the next k branch + github.com/grafana/loki v1.6.2-0.20240322105128-3b5ed8c3ec88 // k190 branch github.com/grafana/pyroscope-go/godeltaprof v0.1.7 github.com/grafana/pyroscope/api v0.4.0 github.com/grafana/pyroscope/ebpf v0.4.3 @@ -69,7 +70,7 @@ require ( github.com/grafana/tail v0.0.0-20230510142333-77b18831edf0 github.com/grafana/vmware_exporter v0.0.5-beta github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 - github.com/hashicorp/consul/api v1.27.0 + github.com/hashicorp/consul/api v1.28.2 github.com/hashicorp/go-cleanhttp v0.5.2 github.com/hashicorp/go-discover v0.0.0-20230724184603-e89ebd1b2f65 github.com/hashicorp/go-multierror v1.1.1 @@ -92,7 +93,7 @@ require ( github.com/klauspost/compress v1.17.7 github.com/lib/pq v1.10.9 github.com/mackerelio/go-osstat v0.2.3 - github.com/miekg/dns v1.1.56 + github.com/miekg/dns v1.1.58 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c github.com/mitchellh/reflectwalk v1.0.2 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f @@ -148,7 +149,7 @@ require ( github.com/prometheus/blackbox_exporter v0.24.1-0.20230623125439-bd22efa1c900 github.com/prometheus/client_golang v1.19.0 github.com/prometheus/client_model v0.6.0 - github.com/prometheus/common v0.48.0 + github.com/prometheus/common v0.49.1-0.20240306132007-4199f18c3e92 github.com/prometheus/consul_exporter v0.8.0 github.com/prometheus/memcached_exporter v0.13.0 github.com/prometheus/mysqld_exporter v0.14.0 @@ -216,15 +217,15 @@ require ( go.uber.org/goleak v1.3.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.20.0 - golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc - golang.org/x/net v0.21.0 - golang.org/x/oauth2 v0.17.0 - golang.org/x/sys v0.17.0 + golang.org/x/crypto v0.21.0 + golang.org/x/exp v0.0.0-20240119083558-1b970713d09a + golang.org/x/net v0.22.0 + golang.org/x/oauth2 v0.18.0 + golang.org/x/sys v0.18.0 golang.org/x/text v0.14.0 golang.org/x/time v0.5.0 - google.golang.org/api v0.155.0 - google.golang.org/grpc v1.62.0 + google.golang.org/api v0.168.0 + google.golang.org/grpc v1.62.1 google.golang.org/protobuf v1.33.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 @@ -233,7 +234,7 @@ require ( k8s.io/apiextensions-apiserver v0.29.0 k8s.io/client-go v0.29.2 k8s.io/component-base v0.29.0 - k8s.io/klog/v2 v2.110.1 + k8s.io/klog/v2 v2.120.1 k8s.io/utils v0.0.0-20240102154912-e7106e64919e sigs.k8s.io/controller-runtime v0.17.2 sigs.k8s.io/yaml v1.4.0 @@ -241,14 +242,14 @@ require ( require ( cloud.google.com/go v0.112.0 // indirect - cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go/compute v1.23.4 // indirect cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect - cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/iam v1.1.6 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect github.com/AlekSi/pointer v1.1.0 // indirect github.com/Azure/azure-sdk-for-go v66.0.0+incompatible // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.4.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.10.2 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.8.2 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 // indirect @@ -264,7 +265,7 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 // indirect github.com/BurntSushi/toml v1.2.1 // indirect github.com/ClickHouse/clickhouse-go v1.5.4 // indirect github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 // indirect @@ -327,7 +328,7 @@ require ( github.com/dennwc/varint v1.0.0 // indirect github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/digitalocean/godo v1.104.1 // indirect + github.com/digitalocean/godo v1.109.0 // indirect github.com/dimchansky/utfbom v1.1.1 github.com/docker/cli v23.0.3+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect @@ -359,18 +360,18 @@ require ( github.com/go-kit/kit v0.13.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-openapi/analysis v0.21.4 // indirect - github.com/go-openapi/errors v0.20.4 // indirect - github.com/go-openapi/jsonpointer v0.20.0 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/loads v0.21.2 // indirect - github.com/go-openapi/runtime v0.26.0 // indirect - github.com/go-openapi/spec v0.20.9 // indirect - github.com/go-openapi/strfmt v0.21.7 // indirect - github.com/go-openapi/swag v0.22.4 // indirect - github.com/go-openapi/validate v0.22.1 // indirect + github.com/go-openapi/analysis v0.22.2 // indirect + github.com/go-openapi/errors v0.21.1 // indirect + github.com/go-openapi/jsonpointer v0.20.2 // indirect + github.com/go-openapi/jsonreference v0.20.4 // indirect + github.com/go-openapi/loads v0.21.5 // indirect + github.com/go-openapi/runtime v0.27.1 // indirect + github.com/go-openapi/spec v0.20.14 // indirect + github.com/go-openapi/strfmt v0.22.2 // indirect + github.com/go-openapi/swag v0.22.9 // indirect + github.com/go-openapi/validate v0.23.0 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect - github.com/go-resty/resty/v2 v2.7.0 // indirect + github.com/go-resty/resty/v2 v2.11.0 // indirect github.com/go-zookeeper/zk v1.0.3 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/goccy/go-json v0.10.2 // indirect @@ -390,12 +391,13 @@ require ( github.com/google/s2a-go v0.1.7 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/gophercloud/gophercloud v1.7.0 // indirect + github.com/googleapis/gax-go/v2 v2.12.2 // indirect + github.com/gophercloud/gophercloud v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/gosnmp/gosnmp v1.36.0 // indirect github.com/grafana/gomemcache v0.0.0-20231204155601-7de47a8c3cb0 // indirect - github.com/grafana/loki/pkg/push v0.0.0-20231212100434-384e5c2dc872 // k180 branch + //TODO(ptodev): Update this to the next k branch + github.com/grafana/loki/pkg/push v0.0.0-20240322105128-3b5ed8c3ec88 // k180 branch github.com/grobie/gomemcache v0.0.0-20230213081705-239240bbc445 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect @@ -410,12 +412,12 @@ require ( github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6 // indirect github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 // indirect github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect - github.com/hashicorp/go-sockaddr v1.0.2 // indirect + github.com/hashicorp/go-sockaddr v1.0.6 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/mdns v1.0.4 // indirect github.com/hashicorp/memberlist v0.5.0 // indirect - github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c // indirect + github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 // indirect github.com/hashicorp/serf v0.10.1 // indirect github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 // indirect github.com/hodgesds/perf-utils v0.7.0 // indirect @@ -426,7 +428,7 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/infinityworks/go-common v0.0.0-20170820165359-7f20a140fd37 // indirect github.com/influxdata/telegraf v1.16.3 // indirect - github.com/ionos-cloud/sdk-go/v6 v6.1.9 // indirect + github.com/ionos-cloud/sdk-go/v6 v6.1.11 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect github.com/jackc/pgconn v1.14.3 // indirect github.com/jackc/pgio v1.0.0 // indirect @@ -456,7 +458,7 @@ require ( github.com/krallistic/kazoo-go v0.0.0-20170526135507-a15279744f4e // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 // indirect - github.com/linode/linodego v1.23.0 // indirect + github.com/linode/linodego v1.29.0 // indirect github.com/lufia/iostat v1.2.1 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -511,10 +513,10 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/prometheus-community/go-runit v0.1.0 // indirect - github.com/prometheus/alertmanager v0.26.0 // indirect + github.com/prometheus/alertmanager v0.27.0 // indirect github.com/prometheus/common/sigv4 v0.1.0 github.com/prometheus/exporter-toolkit v0.11.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect @@ -525,7 +527,7 @@ require ( github.com/safchain/ethtool v0.3.0 // indirect github.com/samber/lo v1.38.1 // indirect github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da // indirect - github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21 + github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 // indirect github.com/sergi/go-diff v1.2.0 // indirect @@ -572,24 +574,24 @@ require ( go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect go.etcd.io/etcd/client/v3 v3.5.10 // indirect - go.mongodb.org/mongo-driver v1.12.0 // indirect + go.mongodb.org/mongo-driver v1.14.0 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/collector/config/internal v0.96.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect go.opentelemetry.io/otel/bridge/opencensus v1.24.0 // indirect go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect - golang.org/x/mod v0.14.0 // indirect + golang.org/x/mod v0.16.0 // indirect golang.org/x/sync v0.6.0 // indirect - golang.org/x/term v0.17.0 // indirect - golang.org/x/tools v0.16.1 + golang.org/x/term v0.18.0 // indirect + golang.org/x/tools v0.19.0 golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gonum.org/v1/gonum v0.14.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect + google.golang.org/genproto v0.0.0-20240205150955-31a09d347014 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78 // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -626,8 +628,9 @@ require ( require ( dario.cat/mergo v1.0.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 // indirect + github.com/Code-Hex/go-generics-cache v1.3.1 // indirect github.com/DataDog/sketches-go v1.4.4 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.21.0 // indirect github.com/Shopify/sarama v1.38.1 // indirect @@ -644,19 +647,21 @@ require ( github.com/aws/aws-sdk-go-v2/service/shield v1.24.0 // indirect github.com/aws/aws-sdk-go-v2/service/storagegateway v1.26.0 // indirect github.com/axiomhq/hyperloglog v0.0.0-20240124082744-24bca3a5b39b // indirect + github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 // indirect github.com/channelmeter/iso8601duration v0.0.0-20150204201828-8da3af7a2a61 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/log v0.1.0 // indirect github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc // indirect + github.com/distribution/reference v0.5.0 // indirect github.com/drone/envsubst v1.0.3 // indirect github.com/expr-lang/expr v1.16.1 // indirect github.com/go-jose/go-jose/v3 v3.0.3 // indirect github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect - github.com/golang-jwt/jwt/v5 v5.0.0 // indirect + github.com/golang-jwt/jwt/v5 v5.2.0 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/grafana/jfr-parser v0.8.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hetznercloud/hcloud-go/v2 v2.4.0 // indirect + github.com/hetznercloud/hcloud-go/v2 v2.6.0 // indirect github.com/influxdata/tdigest v0.0.2-0.20210216194612-fc98d27c9e8b // indirect github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/knadh/koanf/v2 v2.1.0 // indirect @@ -665,6 +670,7 @@ require ( github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect + github.com/moby/sys/user v0.1.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.96.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.96.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.96.0 // indirect @@ -720,17 +726,18 @@ replace ( k8s.io/klog/v2 => github.com/simonpasquier/klog-gokit/v3 v3.4.0 ) -// TODO(marctc): remove replace directive once: -// -// * There is a release of Prometheus which contains -// prometheus/prometheus#13002 -// and prometheus/prometheus#13497 -// We use the last v1-related tag as the replace statement does not work for v2 -// tags without the v2 suffix to the module root. -replace github.com/prometheus/prometheus => github.com/grafana/prometheus v1.8.2-0.20240130142130-51b39f24d406 // cmp_header_order branch +// We use the last v1-related tag as the replace statement, because go does not work for v2 +// tags without the v2 suffix to the module root. v0.51.0 should correspond with v2.51.0, etc. +replace github.com/prometheus/prometheus => github.com/prometheus/prometheus v0.51.0 + +// TODO: remove this replace directive once opentelemetry-collector-contrib/receiver/prometheusreceiver is updated to prometheus/prometheus v0.51.0 or later +replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver => github.com/grafana/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.0.0-20240326165551-1ae1b9218b1b replace gopkg.in/yaml.v2 => github.com/rfratto/go-yaml v0.0.0-20211119180816-77389c3526dc +// TODO: remove this replace directive once the upstream issue is fixed: https://github.com/prometheus/prometheus/issues/13842 +replace go.opentelemetry.io/collector/featuregate => github.com/grafana/opentelemetry-collector/featuregate v0.0.0-20240325174506-2fd1623b2ca0 // feature-gate-registration-error-handler branch + // Replace directives from Loki replace ( github.com/Azure/azure-sdk-for-go => github.com/Azure/azure-sdk-for-go v36.2.0+incompatible diff --git a/go.sum b/go.sum index 1fe561b288b1..d3e661429925 100644 --- a/go.sum +++ b/go.sum @@ -34,22 +34,22 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.23.4 h1:EBT9Nw4q3zyE7G45Wvv3MzolIrCJEuHys5muLY0wvAw= +cloud.google.com/go/compute v1.23.4/go.mod h1:/EJMj55asU6kAFnuZET8zqgwgJ9FvXWXOkkfQZa4ioI= 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/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= -cloud.google.com/go/kms v1.15.5 h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM= -cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/kms v1.15.6 h1:ktpEMQmsOAYj3VZwH020FcQlm23BVYg8T8O1woG2GcE= +cloud.google.com/go/kms v1.15.6/go.mod h1:yF75jttnIdHfGBoE51AKsD/Yqf+/jICzB9v1s1acsms= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.34.0 h1:ZtPbfwfi5rLaPeSvDC29fFoE20/tQvGrUS6kVJZJvkU= -cloud.google.com/go/pubsub v1.34.0/go.mod h1:alj4l4rBg+N3YTFDDC+/YyFTs6JAjam2QfYsddcAW4c= +cloud.google.com/go/pubsub v1.36.1 h1:dfEPuGCHGbWUhaMCTHUFjfroILEkx55iUmKBZTP5f+Y= +cloud.google.com/go/pubsub v1.36.1/go.mod h1:iYjCa9EzWOoBiTdd4ps7QoMtMln5NwaZQpK1hbRfBDE= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -77,24 +77,24 @@ github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9a github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= github.com/Azure/azure-sdk-for-go v36.2.0+incompatible h1:09cv2WoH0g6jl6m2iT+R9qcIPZKhXEL0sbmLhxP895s= github.com/Azure/azure-sdk-for-go v36.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0-beta.1 h1:ODs3brnqQM99Tq1PffODpAViYv3Bf8zOg464MU7p5ew= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0-beta.1/go.mod h1:3Ug6Qzto9anB6mGlEdgYMDF5zHQ+wwhEaYR4s17PHMw= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.4.0 h1:TuEMD+E+1aTjjLICGQOW6vLe8UWES7kopac9mUXL56Y= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.4.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 h1:UPeCRD+XY7QlaGQte2EVI2iOcWvUYA2XY8w5T/8v0NQ= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1/go.mod h1:oGV6NlB0cvi1ZbYRR2UN44QHxWFyGk+iylgD0qaMXjA= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 h1:MxA59PGoCFb+vCwRQi3PhQEwHj4+r2dhuv9HG+vM7iM= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNLjCUeKhgnAJWAKhEUQM+RJQo2H1fuGSw1Ky1E= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2/go.mod h1:FbdwsQ2EzwvXxOPcMFYO8ogEc9uMMIj3YkmCdXdAFmk= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0/go.mod h1:mLfWfj8v3jfWKsL9G4eoBoXVcsqcIUTapmdKy7uGOp0= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.10.2 h1:T3P5KJpcgN0m39dhaNM+JjSqF3Z5VqUlKHlth5FgN+8= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.10.2/go.mod h1:yA8WUvh3K/SABQEtFHg2Bx5D+414FyFqpT5Fu58P3ao= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 h1:QM6sE5k2ZT/vI5BEe0r7mqjsUSnhVBFbOsVkEuaEfiA= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0/go.mod h1:243D9iHbcQXoFUtgHJwL7gl2zx1aDuDMjvBZVGr2uW0= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 h1:bWh0Z2rOEDfB/ywv/l0iHN1JgyazE6kW/aIA89+CEK0= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1/go.mod h1:Bzf34hhAE9NSxailk8xVeLEZbUjOXcC+GnU1mMKdhLw= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.8.2 h1:f9lam+D19V0TDn17+aFhrVhWPpfsF5zaGHeqDGJZAVc= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.8.2/go.mod h1:29c9+gYpdWhyC4TPANZBPlgoWllMDhguL2AIByPYQtk= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU= @@ -163,14 +163,16 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 h1:hVeq+yCyUi+MsoO/CU95yqCIcdzra5ovzk8Q2BBpV2M= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0= github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= +github.com/Code-Hex/go-generics-cache v1.3.1 h1:i8rLwyhoyhaerr7JpjtYjJZUcCbWOdiYO3fZXLiEC4g= +github.com/Code-Hex/go-generics-cache v1.3.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4= github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= @@ -264,8 +266,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs= +github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= github.com/alicebob/miniredis v2.5.0+incompatible h1:yBHoLpsyjupjz3NL3MhKMVkR41j82Yjf3KFv7ApYzUI= @@ -298,7 +300,6 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20180319081651-7d2e70ef918f/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/avvmoto/buf-readerat v0.0.0-20171115124131-a17c8cb89270 h1:JIxGEMs4E5Zb6R7z2C5IgecI0mkqS97WAEF31wUbYTM= @@ -310,8 +311,8 @@ github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve github.com/aws/aws-sdk-go v1.34.34/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.38.68/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.50.27 h1:96ifhrSuja+AzdP3W/T2337igqVQ2FcSIJYkk+0rCeA= -github.com/aws/aws-sdk-go v1.50.27/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.50.32 h1:POt81DvegnpQKM4DMDLlHz1CO6OBnEoQ1gRhYFd7QRY= +github.com/aws/aws-sdk-go v1.50.32/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.7.0/go.mod h1:tb9wi5s61kTDA5qCkcDbt3KRVV74GGslQkl/DRdX/P4= github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= @@ -390,6 +391,8 @@ github.com/aybabtme/iocontrol v0.0.0-20150809002002-ad15bcfc95a0 h1:0NmehRCgyk5r github.com/aybabtme/iocontrol v0.0.0-20150809002002-ad15bcfc95a0/go.mod h1:6L7zgvqo0idzI7IO8de6ZC051AfXb5ipkIJ7bIA2tGA= github.com/basgys/goxml2json v1.1.0 h1:4ln5i4rseYfXNd86lGEB+Vi652IsIXIvggKM/BhUKVw= github.com/basgys/goxml2json v1.1.0/go.mod h1:wH7a5Np/Q4QoECFIU8zTQlZwZkrilY0itPfecMw41Dw= +github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= +github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0= github.com/beevik/ntp v1.3.0 h1:/w5VhpW5BGKS37vFm1p9oVk/t4HnnkKZAZIubHM6F7Q= github.com/beevik/ntp v1.3.0/go.mod h1:vD6h1um4kzXpqmLTuu0cCLcC+NfvC0IC+ltmEDA8E78= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= @@ -555,11 +558,13 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/digitalocean/godo v1.1.1/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= github.com/digitalocean/godo v1.10.0/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= -github.com/digitalocean/godo v1.104.1 h1:SZNxjAsskM/su0YW9P8Wx3gU0W1Z13b6tZlYNpl5BnA= -github.com/digitalocean/godo v1.104.1/go.mod h1:VAI/L5YDzMuPRU01lEEUSQ/sp5Z//1HnnFv/RBTEdbg= +github.com/digitalocean/godo v1.109.0 h1:4W97RJLJSUQ3veRZDNbp1Ol3Rbn6Lmt9bKGvfqYI5SU= +github.com/digitalocean/godo v1.109.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/cli v20.10.11+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -570,8 +575,8 @@ github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m3 github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v17.12.0-ce-rc1.0.20200916142827-bd33bbf0497b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= -github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v25.0.3+incompatible h1:D5fy/lYmY7bvZa0XTZ5/UJPljor41F+vdyJG5luQLfQ= +github.com/docker/docker v25.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -741,60 +746,43 @@ github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dT github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= -github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc= -github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= -github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.4 h1:unTcVm6PispJsMECE3zWgvG4xTiKda1LIR5rCRWLG6M= -github.com/go-openapi/errors v0.20.4/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= +github.com/go-openapi/analysis v0.22.2 h1:ZBmNoP2h5omLKr/srIC9bfqrUGzT6g6gNv03HE9Vpj0= +github.com/go-openapi/analysis v0.22.2/go.mod h1:pDF4UbZsQTo/oNuRfAWWd4dAh4yuYf//LYorPTjrpvo= +github.com/go-openapi/errors v0.21.1 h1:rVisxQPdETctjlYntm0Ek4dKf68nAQocCloCT50vWuI= +github.com/go-openapi/errors v0.21.1/go.mod h1:LyiY9bgc7AVVh6wtVvMYEyoj3KJYNoRw92mmvnMWgj8= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= -github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= +github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= +github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= -github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= -github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= -github.com/go-openapi/runtime v0.26.0 h1:HYOFtG00FM1UvqrcxbEJg/SwvDRvYLQKGhw2zaQjTcc= -github.com/go-openapi/runtime v0.26.0/go.mod h1:QgRGeZwrUcSHdeh4Ka9Glvo0ug1LC5WyE+EV88plZrQ= +github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU= +github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4= +github.com/go-openapi/loads v0.21.5 h1:jDzF4dSoHw6ZFADCGltDb2lE4F6De7aWSpe+IcsRzT0= +github.com/go-openapi/loads v0.21.5/go.mod h1:PxTsnFBoBe+z89riT+wYt3prmSBP6GDAQh2l9H1Flz8= +github.com/go-openapi/runtime v0.27.1 h1:ae53yaOoh+fx/X5Eaq8cRmavHgDma65XPZuvBqvJYto= +github.com/go-openapi/runtime v0.27.1/go.mod h1:fijeJEiEclyS8BRurYE1DE5TLb9/KZl6eAdbzjsrlLU= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= -github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= -github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8= -github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= -github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= -github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= -github.com/go-openapi/strfmt v0.21.7 h1:rspiXgNWgeUzhjo1YU01do6qsahtJNByjLVbPLNHb8k= -github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KAzYjclFs3ew= +github.com/go-openapi/spec v0.20.14 h1:7CBlRnw+mtjFGlPDRZmAMnq35cRzI91xj03HVyUi/Do= +github.com/go-openapi/spec v0.20.14/go.mod h1:8EOhTpBoFiask8rrgwbLC3zmJfz4zsCUueRuPM6GNkw= +github.com/go-openapi/strfmt v0.22.2 h1:DPYOrm6gexCfZZfXUaXFS4+Jw6HAaIIG0SZ5630f8yw= +github.com/go-openapi/strfmt v0.22.2/go.mod h1:HB/b7TCm91rno75Dembc1dFW/0FPLk5CEXsoF9ReNc4= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU= -github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE= +github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE= +github.com/go-openapi/validate v0.23.0 h1:2l7PJLzCis4YUGEoW6eoQw3WhyM65WSIcjX6SQnlfDw= +github.com/go-openapi/validate v0.23.0/go.mod h1:EeiAZ5bmpSIOJV1WLfyYF9qp/B1ZgSaEpHTJHtN5cbE= github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= -github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= +github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8= +github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v0.0.0-20180618115901-749ddf1598b4/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -815,30 +803,6 @@ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDs github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= -github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= -github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= -github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= -github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= -github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= -github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= -github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= -github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= -github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/goburrow/modbus v0.1.0/go.mod h1:Kx552D5rLIS8E7TyUwQ/UdHEqvX5T8tyiGBTlzMcZBg= github.com/goburrow/serial v0.1.0/go.mod h1:sAiqG0nRVswsm1C97xsttiYCzSLBmUZ/VSlVLZJ8haA= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= @@ -870,8 +834,8 @@ github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= -github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw= +github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= @@ -982,8 +946,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= -github.com/google/pprof v0.0.0-20240117000934-35fc243c5815 h1:WzfWbQz/Ze8v6l++GGbGNFZnUShVpP/0xffCPLL+ax8= -github.com/google/pprof v0.0.0-20240117000934-35fc243c5815/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q= +github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= @@ -1002,15 +966,15 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksP github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= +github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gopcua/opcua v0.1.12/go.mod h1:a6QH4F9XeODklCmWuvaOdL8v9H0d73CEKUHWVZLQyE8= github.com/gophercloud/gophercloud v0.0.0-20180828235145-f29afc2cceca/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= -github.com/gophercloud/gophercloud v1.7.0 h1:fyJGKh0LBvIZKLvBWvQdIgkaV5yTM3Jh9EYUh+UNCAs= -github.com/gophercloud/gophercloud v1.7.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/gophercloud/gophercloud v1.8.0 h1:TM3Jawprb2NrdOnvcHhWJalmKmAmOGgfZElM/3oBYCk= +github.com/gophercloud/gophercloud v1.8.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= @@ -1052,22 +1016,24 @@ github.com/grafana/jfr-parser/pprof v0.0.0-20240126072739-986e71dc0361 h1:TtNaja github.com/grafana/jfr-parser/pprof v0.0.0-20240126072739-986e71dc0361/go.mod h1:P5406BrWxjahTzVF6aCSumNI1KPlZJc0zO0v+zKZ4gc= github.com/grafana/jsonparser v0.0.0-20240209175146-098958973a2d h1:YwbJJ/PrVWVdnR+j/EAVuazdeP+Za5qbiH1Vlr+wFXs= github.com/grafana/jsonparser v0.0.0-20240209175146-098958973a2d/go.mod h1:796sq+UcONnSlzA3RtlBZ+b/hrerkZXiEmO8oMjyRwY= -github.com/grafana/loki v1.6.2-0.20240221085104-f9d188620153 h1:C191g5Ls8lIf9lkJEoScTQgoVDwUdK4HXKP5XtL+zAM= -github.com/grafana/loki v1.6.2-0.20240221085104-f9d188620153/go.mod h1:j2XCl3SmslPf+3Vs7uyoaJE/QkmUlL9JzTBTShSOSiU= -github.com/grafana/loki/pkg/push v0.0.0-20231212100434-384e5c2dc872 h1:6kPX7bngjBgUlHqADwZ6249UtzMaoQW5n0H8bOtnYeM= -github.com/grafana/loki/pkg/push v0.0.0-20231212100434-384e5c2dc872/go.mod h1:f3JSoxBTPXX5ec4FxxeC19nTBSxoTz+cBgS3cYLMcr0= +github.com/grafana/loki v1.6.2-0.20240322105128-3b5ed8c3ec88 h1:lW0NrRqSwfFbqg+vJolJZslcdkxMU9KQtylWoIwJ2iA= +github.com/grafana/loki v1.6.2-0.20240322105128-3b5ed8c3ec88/go.mod h1:fmYwXbq/crTXM5t3X1kf44Hzeb2YCVorkHdHxpO3oTk= +github.com/grafana/loki/pkg/push v0.0.0-20240322105128-3b5ed8c3ec88 h1:YPu0t93zA77Lrk7a55AT2DY7Gaot2CZr5QXPd+eY/UY= +github.com/grafana/loki/pkg/push v0.0.0-20240322105128-3b5ed8c3ec88/go.mod h1:f3JSoxBTPXX5ec4FxxeC19nTBSxoTz+cBgS3cYLMcr0= github.com/grafana/mysqld_exporter v0.12.2-0.20231005125903-364b9c41e595 h1:I9sRknI5ajd8whPOX0nBDXy5B6xUfhItClMy+6R4oqE= github.com/grafana/mysqld_exporter v0.12.2-0.20231005125903-364b9c41e595/go.mod h1:U8ifHC5pT2WuVTO7ki4KZmWLjfEKfktQiU3bh0J8scw= github.com/grafana/node_exporter v0.18.1-grafana-r01.0.20231004161416-702318429731 h1:vyyIYY2sLpmgFIckJ1vSO/oYkvB0thDF6UiFYp5PThM= github.com/grafana/node_exporter v0.18.1-grafana-r01.0.20231004161416-702318429731/go.mod h1:vOZxEzxm0nZmuNqjtIfvtmvdRtJik9POmcN5mQVLf5E= +github.com/grafana/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.0.0-20240326165551-1ae1b9218b1b h1:o7tJxI3dVrIwZwNd7feiMNjYRnbMvyGCQtxJGgfORQQ= +github.com/grafana/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.0.0-20240326165551-1ae1b9218b1b/go.mod h1:XVaL+FyxEWEfHkDI/X6FJgFYDA0080A1/qoOHQ43dxM= +github.com/grafana/opentelemetry-collector/featuregate v0.0.0-20240325174506-2fd1623b2ca0 h1:i/Ne0XwoRokYj52ZcSmnvuyID3h/uA91n0Ycg/grHU8= +github.com/grafana/opentelemetry-collector/featuregate v0.0.0-20240325174506-2fd1623b2ca0/go.mod h1:mm8+xyQfgDmqhyegZRNIQmoKsNnDTwWKFLsdMoXAb7A= github.com/grafana/opentelemetry-collector/otelcol v0.0.0-20240321103955-8919a1c85cbe h1:XffwtyK11B/undScvvYBi/LSWG7ob43lzkdhxmxZkJw= github.com/grafana/opentelemetry-collector/otelcol v0.0.0-20240321103955-8919a1c85cbe/go.mod h1:Xo58hEmoZFLyOIs9Wk400ME9gEFV+ttxCGcls6NxbhI= github.com/grafana/opentelemetry-collector/service v0.0.0-20240321103955-8919a1c85cbe h1:LEmmaAnTjtp7pWCsnc8iMfuHIHzDbYIiCXnxpMTOLms= github.com/grafana/opentelemetry-collector/service v0.0.0-20240321103955-8919a1c85cbe/go.mod h1:9El7PPhnV+2xPXLlyileLaUa5mOE+vw6sswmcZBaUlc= github.com/grafana/postgres_exporter v0.8.1-0.20210722175051-db35d7c2f520 h1:HnFWqxhoSF3WC7sKAdMZ+SRXvHLVZlZ3sbQjuUlTqkw= github.com/grafana/postgres_exporter v0.8.1-0.20210722175051-db35d7c2f520/go.mod h1:+HPXgiOV0InDHcZ2jNijL1SOKvo0eEPege5fQA0+ICI= -github.com/grafana/prometheus v1.8.2-0.20240130142130-51b39f24d406 h1:LVIOYe5j92m10wluP5hgeHqSkOLnZzcPxhYCkdbLXCE= -github.com/grafana/prometheus v1.8.2-0.20240130142130-51b39f24d406/go.mod h1:SRw624aMAxTfryAcP8rOjg4S/sHHaetx2lyJJ2nM83g= github.com/grafana/pyroscope-go/godeltaprof v0.1.7 h1:C11j63y7gymiW8VugJ9ZW0pWfxTZugdSJyC48olk5KY= github.com/grafana/pyroscope-go/godeltaprof v0.1.7/go.mod h1:Tk376Nbldo4Cha9RgiU7ik8WKFkNpfds98aUzS8omLE= github.com/grafana/pyroscope/api v0.4.0 h1:J86DxoNeLOvtJhB1Cn65JMZkXe682D+RqeoIUiYc/eo= @@ -1112,14 +1078,14 @@ github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoP github.com/hashicorp/consul/api v1.8.1/go.mod h1:sDjTOq0yUyv5G4h+BqSea7Fn6BU+XbolEz1952UB+mk= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= -github.com/hashicorp/consul/api v1.27.0 h1:gmJ6DPKQog1426xsdmgk5iqDyoRiNc+ipBdJOqKQFjc= -github.com/hashicorp/consul/api v1.27.0/go.mod h1:JkekNRSou9lANFdt+4IKx3Za7XY0JzzpQjEb4Ivo1c8= +github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8= +github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.7.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/consul/sdk v0.15.1 h1:kKIGxc7CZtflcF5DLfHeq7rOQmRq3vk7kwISN9bif8Q= -github.com/hashicorp/consul/sdk v0.15.1/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A= +github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8= +github.com/hashicorp/consul/sdk v0.16.0/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A= github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A= github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1185,8 +1151,9 @@ github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9 github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I= +github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -1223,8 +1190,8 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= github.com/hashicorp/net-rpc-msgpackrpc v0.0.0-20151116020338-a14192a58a69/go.mod h1:/z+jUGRBlwVpUZfjute9jWaF6/HuhjuFQuL1YXzVD1Q= -github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c h1:Nc3Mt2BAnq0/VoLEntF/nipX+K1S7pG+RgwiitSv6v0= -github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c/go.mod h1:O23qLAZuCx4htdY9zBaO4cJPXgleSFEdq6D/sezGgYE= +github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 h1:fI1LXuBaS1d9z1kmb++Og6YD8uMRwadXorCwE+xgOFA= +github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702/go.mod h1:z71gkJdrkAt/Rl6C7Q79VE7AwJ5lUF+M+fzFTyIHYB0= github.com/hashicorp/raft v1.0.1-0.20190409200437-d9fe23f7d472/go.mod h1:DVSAWItjLjTOkVbSpWQ0j0kUADIvDaCtBxIcbNAQLkI= github.com/hashicorp/raft-boltdb v0.0.0-20150201200839-d1e82c1ec3f1/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= github.com/hashicorp/serf v0.8.1/go.mod h1:h/Ru6tmZazX7WO/GDmwdpS975F019L4t5ng5IgwbNrE= @@ -1261,8 +1228,8 @@ github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKe github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/heroku/x v0.0.61 h1:yfoAAtnFWSFZj+UlS+RZL/h8QYEp1R4wHVEg0G+Hwh4= github.com/heroku/x v0.0.61/go.mod h1:C7xYbpMdond+s6L5VpniDUSVPRwm3kZum1o7XiD5ZHk= -github.com/hetznercloud/hcloud-go/v2 v2.4.0 h1:MqlAE+w125PLvJRCpAJmEwrIxoVdUdOyuFUhE/Ukbok= -github.com/hetznercloud/hcloud-go/v2 v2.4.0/go.mod h1:l7fA5xsncFBzQTyw29/dw5Yr88yEGKKdc6BHf24ONS0= +github.com/hetznercloud/hcloud-go/v2 v2.6.0 h1:RJOA2hHZ7rD1pScA4O1NF6qhkHyUdbbxjHgFNot8928= +github.com/hetznercloud/hcloud-go/v2 v2.6.0/go.mod h1:4J1cSE57+g0WS93IiHLV7ubTHItcp+awzeBp5bM9mfA= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= @@ -1306,8 +1273,8 @@ github.com/influxdata/telegraf v1.16.3 h1:x0qeuSGGMg5y+YqP/5ZHwXZu3bcBrO8AAQOTNl github.com/influxdata/telegraf v1.16.3/go.mod h1:fX/6k7qpIqzVPWyeIamb0wN5hbwc0ANUaTS80lPYFB8= github.com/influxdata/toml v0.0.0-20190415235208-270119a8ce65/go.mod h1:zApaNFpP/bTpQItGZNNUMISDMDAnTXu9UqJ4yT3ocz8= github.com/influxdata/wlog v0.0.0-20160411224016-7c63b0a71ef8/go.mod h1:/2NMgWB1DHM1ti/gqhOlg+LJeBVk6FqR5aVGYY0hlwI= -github.com/ionos-cloud/sdk-go/v6 v6.1.9 h1:Iq3VIXzeEbc8EbButuACgfLMiY5TPVWUPNrF+Vsddo4= -github.com/ionos-cloud/sdk-go/v6 v6.1.9/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k= +github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8= +github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= @@ -1427,8 +1394,6 @@ github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E github.com/k0kubun/pp/v3 v3.2.0 h1:h33hNTZ9nVFNP3u2Fsgz8JXiF5JINoZfFq4SvKJwNcs= github.com/k0kubun/pp/v3 v3.2.0/go.mod h1:ODtJQbQcIRfAD3N+theGCV1m/CBxweERz2dapdz1EwA= github.com/kardianos/service v1.0.0/go.mod h1:8CzDhVuCuugtsHyZoTvsOBuvonN/UDBvl0kH+BUxvbo= -github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI= github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= @@ -1444,7 +1409,6 @@ github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.12/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= @@ -1494,8 +1458,8 @@ github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8Lb github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linode/linodego v1.23.0 h1:s0ReCZtuN9Z1IoUN9w1RLeYO1dMZUGPwOQ/IBFsBHtU= -github.com/linode/linodego v1.23.0/go.mod h1:0U7wj/UQOqBNbKv1FYTXiBUXueR8DY4HvIotwE0ENgg= +github.com/linode/linodego v1.29.0 h1:gDSQWAbKMAQX8db9FDCXHhodQPrJmLcmthjx6m+PyV4= +github.com/linode/linodego v1.29.0/go.mod h1:3k6WvCM10gillgYcnoLqIL23ST27BD9HhMsCJWb3Bpk= github.com/lufia/iostat v1.2.1 h1:tnCdZBIglgxD47RyD55kfWQcJMGzO+1QBziSQfesf2k= github.com/lufia/iostat v1.2.1/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= @@ -1512,11 +1476,8 @@ github.com/mailru/easyjson v0.0.0-20180717111219-efc7eb8984d6/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -1572,8 +1533,8 @@ github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3N github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE= -github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY= +github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4= +github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY= github.com/mikioh/ipaddr v0.0.0-20190404000644-d465c8ab6721/go.mod h1:Ickgr2WtCLZ2MDGd4Gr0geeCH5HybhRJbonOgQpvSxc= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= @@ -1603,7 +1564,6 @@ github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/z github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= @@ -1622,6 +1582,8 @@ github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vyg github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= +github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= @@ -1633,7 +1595,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.7.0 h1:r3y12KyNxj/Sb/iOE46ws+3mS1+MZca1wlHQFPsY/JU= github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= @@ -1808,8 +1769,6 @@ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.96.0/go.mod h1:SpDMTfNxJhLoh90tzVbFVR6jBznomtSSfv1+mKR1s9I= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.96.0 h1:gK3nBuj0qhtt8HT4MuiW60KfNcnAA1hjdqnwdIbxHaU= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.96.0/go.mod h1:xc2JC4VmYfGsjaH834h0O+nCTHcddAGZkt5fJxQF7LE= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.96.0 h1:SK1GpgAte9WhTSeY6NiO6vHB+BhFF7akPlK7fyMO+ps= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.96.0/go.mod h1:yrd0L+k2JKVpyVXObHpHZXUlxgWX/RlGHz5RLxEUN2Q= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.96.0 h1:C7riRI0ehDu4k6lf/ei8OObT3jGJJ5PbJ7sRO/QSMMQ= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.96.0/go.mod h1:OvyUlG4f37oXFVqOBXi0+KdoQjmjjPuHkASu5DTFjXw= github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.96.0 h1:y9QNvhQ0XjJOJid4jNlEliJQI4+AFdEaN6weB9jMWaY= @@ -1897,8 +1856,8 @@ github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ github.com/pierrec/lz4/v4 v4.1.21/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= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1928,8 +1887,8 @@ github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.66.0 h github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.66.0/go.mod h1:KZHvrby65G+rA4V/vMTUXDV22TI+GgLIrCigYClpjzk= github.com/prometheus-operator/prometheus-operator/pkg/client v0.66.0 h1:gDJAO9dJbRZ3RAQ7MY+tjz1D3o1x7T4hd8Jbi0Xo854= github.com/prometheus-operator/prometheus-operator/pkg/client v0.66.0/go.mod h1:gNFnGtaWQ8SziJCfahdiAUlArtoL1+cm1hAD7l6L14w= -github.com/prometheus/alertmanager v0.26.0 h1:uOMJWfIwJguc3NaM3appWNbbrh6G/OjvaHMk22aBBYc= -github.com/prometheus/alertmanager v0.26.0/go.mod h1:rVcnARltVjavgVaNnmevxK7kOn7IZavyf0KNgHkbEpU= +github.com/prometheus/alertmanager v0.27.0 h1:V6nTa2J5V4s8TG4C4HtrBP/WNSebCCTYGGv4qecA/+I= +github.com/prometheus/alertmanager v0.27.0/go.mod h1:8Ia/R3urPmbzJ8OsdvmZvIprDwvwmYCmUbwBL+jlPOE= github.com/prometheus/blackbox_exporter v0.24.1-0.20230623125439-bd22efa1c900 h1:mb3ShwohzXGV4JUW0XlEGPElmCMTQzEaVnWUzuoGMak= github.com/prometheus/blackbox_exporter v0.24.1-0.20230623125439-bd22efa1c900/go.mod h1:DA04rk1tezjADhTMhq5fi3yOF1/Z0gY/pczP76BnvwQ= github.com/prometheus/client_golang v0.0.0-20180328130430-f504d69affe1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -1969,8 +1928,8 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9 github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.31.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= -github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +github.com/prometheus/common v0.49.1-0.20240306132007-4199f18c3e92 h1:nuwTDY/15McImfuXcUD6AA3alpUNEXfWws8K/8SXr68= +github.com/prometheus/common v0.49.1-0.20240306132007-4199f18c3e92/go.mod h1:Kxm+EULxRbUkjGU6WFsQqo3ORzB4tyKvlWFOE9mB2sE= github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4= github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= github.com/prometheus/consul_exporter v0.8.0 h1:2z3drFic65WFoHaJRKkmnJRRlBLmmxVqT8L9LO2yxAo= @@ -1996,6 +1955,8 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/prometheus v0.51.0 h1:aRdjTnmHLved29ILtdzZN2GNvOjWATtA/z+3fYuexOc= +github.com/prometheus/prometheus v0.51.0/go.mod h1:yv4MwOn3yHMQ6MZGHPg/U7Fcyqf+rxqiZfSur6myVtc= github.com/prometheus/snmp_exporter v0.24.1 h1:AihTbJHurMo8bjtjJde8U+4gMEvpvYvT21Xbd4SzJgY= github.com/prometheus/snmp_exporter v0.24.1/go.mod h1:j6uIGkdR0DXvKn7HJtSkeDj//UY0sWmdd6XhvdBjln0= github.com/prometheus/statsd_exporter v0.22.8 h1:Qo2D9ZzaQG+id9i5NYNGmbf1aa/KxKbB9aKfMS+Yib0= @@ -2021,8 +1982,6 @@ github.com/rivo/uniseg v0.4.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8= github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= @@ -2054,8 +2013,8 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCL github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21 h1:yWfiTPwYxB0l5fGMhl/G+liULugVIHD9AU77iNLrURQ= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 h1:/8rfZAdFfafRXOgz+ZpMZZWZ5pYggCY9t7e/BvjaBHM= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= @@ -2076,8 +2035,8 @@ github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= 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/shoenig/test v0.6.6 h1:Oe8TPH9wAbv++YPNDKJWUnI8Q4PPWCx3UbOfH+FxiMU= -github.com/shoenig/test v0.6.6/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= +github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v0.0.0-20200105231215-408a2507e114/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= @@ -2096,7 +2055,6 @@ github.com/simonpasquier/klog-gokit/v3 v3.4.0 h1:2eD2INbzUHuGNynPP86BCB8H6Lwfp6w github.com/simonpasquier/klog-gokit/v3 v3.4.0/go.mod h1:RREVB5Cc6yYHsweRfhUyM1ZP+Odb8ehxLfY8jaiqvjg= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -2260,12 +2218,8 @@ github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= -github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= @@ -2302,6 +2256,8 @@ github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.einride.tech/aip v0.66.0 h1:XfV+NQX6L7EOYK11yoHHFtndeaWh3KbD9/cN/6iWEt8= +go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= @@ -2319,11 +2275,8 @@ go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lL go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao= go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= -go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= -go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= -go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= -go.mongodb.org/mongo-driver v1.12.0 h1:aPx33jmn/rQuJXPQLZQ8NtfPQG8CaqgLThFtqRb0PiE= -go.mongodb.org/mongo-driver v1.12.0/go.mod h1:AZkxhPnFJUoH7kZlFkVKucV20K387miPfm7oimrSmK0= +go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= +go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -2391,8 +2344,6 @@ go.opentelemetry.io/collector/extension/auth v0.96.0 h1:10ZSoVCF0WI8IYS+kD7lbdvb go.opentelemetry.io/collector/extension/auth v0.96.0/go.mod h1:UX0SpWMwRvzEaVr6fxP2CNooQ2JnuTEnTGYD8kCAjWc= go.opentelemetry.io/collector/extension/zpagesextension v0.96.0 h1:eSjSBqWIN+OiEBgZhRq8B2LDmqZMgBRMNAF1oGfp4XI= go.opentelemetry.io/collector/extension/zpagesextension v0.96.0/go.mod h1:wWBmrP4H/gEInjtCiwZHlDj5+MuWI8bLybCSIrNXoNE= -go.opentelemetry.io/collector/featuregate v1.3.0 h1:nrFSx+zfjdisjE9oCx25Aep3nJ9RaUjeE1qFL6eovoU= -go.opentelemetry.io/collector/featuregate v1.3.0/go.mod h1:mm8+xyQfgDmqhyegZRNIQmoKsNnDTwWKFLsdMoXAb7A= go.opentelemetry.io/collector/pdata v1.3.0 h1:JRYN7tVHYFwmtQhIYbxWeiKSa2L1nCohyAs8sYqKFZo= go.opentelemetry.io/collector/pdata v1.3.0/go.mod h1:t7W0Undtes53HODPdSujPLTnfSR5fzT+WpL+RTaaayo= go.opentelemetry.io/collector/processor v0.96.0 h1:TGo7tLbLJo9tBZ9NNoSlB7xBP5osUXThKxCmg96gSko= @@ -2411,8 +2362,8 @@ go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7E go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418= go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux v0.45.0 h1:CaagQrotQLgtDlHU6u9pE/Mf4mAwiLD8wrReIVt06lY= go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux v0.45.0/go.mod h1:LOjFy00/ZMyMYfKFPta6kZe2cDUc1sNo/qtv1pSORWA= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= go.opentelemetry.io/contrib/propagators/b3 v1.24.0 h1:n4xwCdTx3pZqZs2CjS/CUZAs03y3dZcGhC/FepKtEUY= @@ -2483,7 +2434,6 @@ golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -2496,7 +2446,6 @@ golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -2516,9 +2465,10 @@ golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2Uz golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto/x509roots/fallback v0.0.0-20240208163226-62c9f1799c91 h1:Lyizcy9jX02jYR0ceBkL6S+jRys8Uepf7wt1vrz6Ras= golang.org/x/crypto/x509roots/fallback v0.0.0-20240208163226-62c9f1799c91/go.mod h1:kNa9WdvYnzFwC79zRpLRMJbdEFlhyM5RPFBBZp/wWH8= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -2534,8 +2484,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= -golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA= +golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -2566,8 +2516,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2625,11 +2575,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= @@ -2638,8 +2586,9 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20170807180024-9a379c6b3e95/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2656,13 +2605,12 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= -golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2692,11 +2640,9 @@ golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2760,7 +2706,6 @@ golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2768,7 +2713,6 @@ golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2795,9 +2739,11 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -2807,8 +2753,10 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2826,6 +2774,7 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2834,6 +2783,7 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -2849,14 +2799,10 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -2914,8 +2860,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2966,8 +2912,8 @@ google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00 google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA= -google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= +google.golang.org/api v0.168.0 h1:MBRe+Ki4mMN93jhDDbpuRLjRddooArz4FeSObvUMmjY= +google.golang.org/api v0.168.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -3039,12 +2985,12 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ= -google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= -google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe h1:0poefMBYvYbs7g5UkjS6HcxBPaTRAmznle9jnxYoAI8= -google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe h1:bQnxqljG/wqi4NTXu2+DJ3n7APcEA882QZ1JvhQAq9o= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto v0.0.0-20240205150955-31a09d347014 h1:g/4bk7P6TPMkAUbUhquq98xey1slwvuVJPosdBqYJlU= +google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M= +google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8 h1:8eadJkXbwDEMNwcB5O0s5Y5eCfyuCLdvaiOIaGTrWmQ= +google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78 h1:Xs9lu+tLXxLIfuci70nG4cpwaRC+mRQPUL7LoIeDJC4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= google.golang.org/grpc v0.0.0-20180920234847-8997b5fa0873/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -3081,8 +3027,8 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk= -google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -3147,7 +3093,6 @@ gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/internal/build/build.go b/internal/build/build.go index 3e3b1bce12df..6b728e4928a6 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -2,6 +2,7 @@ package build import ( "github.com/prometheus/client_golang/prometheus" + collectorversion "github.com/prometheus/client_golang/prometheus/collectors/version" "github.com/prometheus/common/version" ) @@ -34,7 +35,7 @@ func injectVersion() { func NewCollector(program string) prometheus.Collector { injectVersion() - return version.NewCollector(program) + return collectorversion.NewCollector(program) } // Print returns version information. diff --git a/internal/cmd/integration-tests/tests/scrape-prom-metrics/config.river b/internal/cmd/integration-tests/tests/scrape-prom-metrics/config.river index cf546412a554..21c443934fda 100644 --- a/internal/cmd/integration-tests/tests/scrape-prom-metrics/config.river +++ b/internal/cmd/integration-tests/tests/scrape-prom-metrics/config.river @@ -4,7 +4,6 @@ prometheus.scrape "scrape_prom_metrics" { ] forward_to = [prometheus.remote_write.scrape_prom_metrics.receiver] scrape_classic_histograms = true - enable_protobuf_negotiation = true scrape_interval = "1s" scrape_timeout = "500ms" } diff --git a/internal/component/all/all.go b/internal/component/all/all.go index f6911eb95b30..3dcd4f6c1df0 100644 --- a/internal/component/all/all.go +++ b/internal/component/all/all.go @@ -139,4 +139,6 @@ import ( _ "github.com/grafana/agent/internal/component/remote/kubernetes/secret" // Import remote.kubernetes.secret _ "github.com/grafana/agent/internal/component/remote/s3" // Import remote.s3 _ "github.com/grafana/agent/internal/component/remote/vault" // Import remote.vault + + _ "github.com/grafana/agent/internal/util/otelfeaturegatefix" // Gracefully handle duplicate OTEL feature gates ) diff --git a/internal/component/discovery/aws/ec2.go b/internal/component/discovery/aws/ec2.go index 7f8deb3693ab..0e7f87460730 100644 --- a/internal/component/discovery/aws/ec2.go +++ b/internal/component/discovery/aws/ec2.go @@ -108,8 +108,7 @@ func (args *EC2Arguments) Validate() error { // New creates a new discovery.ec2 component. func NewEC2(opts component.Options, args EC2Arguments) (component.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { - conf := args.(EC2Arguments).Convert() - return promaws.NewEC2Discovery(conf, opts.Logger), nil + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { + return args.(EC2Arguments).Convert() }) } diff --git a/internal/component/discovery/aws/lightsail.go b/internal/component/discovery/aws/lightsail.go index fa9c76a6ef12..a478c0bd6ff2 100644 --- a/internal/component/discovery/aws/lightsail.go +++ b/internal/component/discovery/aws/lightsail.go @@ -90,8 +90,7 @@ func (args *LightsailArguments) Validate() error { // New creates a new discovery.lightsail component. func NewLightsail(opts component.Options, args LightsailArguments) (component.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { - conf := args.(LightsailArguments).Convert() - return promaws.NewLightsailDiscovery(conf, opts.Logger), nil + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { + return args.(LightsailArguments).Convert() }) } diff --git a/internal/component/discovery/azure/azure.go b/internal/component/discovery/azure/azure.go index 78a8a669e074..034bf6dbd4ca 100644 --- a/internal/component/discovery/azure/azure.go +++ b/internal/component/discovery/azure/azure.go @@ -118,8 +118,8 @@ func (a *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.azure component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger), nil + return newArgs.Convert() }) } diff --git a/internal/component/discovery/consul/consul.go b/internal/component/discovery/consul/consul.go index a7fe7b95ec09..d4c8d418a921 100644 --- a/internal/component/discovery/consul/consul.go +++ b/internal/component/discovery/consul/consul.go @@ -93,8 +93,8 @@ func (args *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.consul component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/consulagent/consulagent.go b/internal/component/discovery/consulagent/consulagent.go index 2610fbcc9c96..df0540c480dd 100644 --- a/internal/component/discovery/consulagent/consulagent.go +++ b/internal/component/discovery/consulagent/consulagent.go @@ -80,8 +80,8 @@ func (args *Arguments) Convert() *SDConfig { // New returns a new instance of a discovery.consulagent component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/consulagent/promtail_consulagent.go b/internal/component/discovery/consulagent/promtail_consulagent.go index 2e5d92b336b4..61d081e82d1b 100644 --- a/internal/component/discovery/consulagent/promtail_consulagent.go +++ b/internal/component/discovery/consulagent/promtail_consulagent.go @@ -118,6 +118,11 @@ type SDConfig struct { TLSConfig config.TLSConfig `yaml:"tls_config,omitempty"` } +// NewDiscovererMetrics implements discovery.DiscovererConfig. +func (c *SDConfig) NewDiscovererMetrics(reg prometheus.Registerer, rmi discovery.RefreshMetricsInstantiator) discovery.DiscovererMetrics { + return newDiscovererMetrics(reg, rmi) +} + // Name returns the name of the Config. func (*SDConfig) Name() string { return "consulagent" } diff --git a/internal/component/discovery/consulagent/promtail_consulagent_metrics.go b/internal/component/discovery/consulagent/promtail_consulagent_metrics.go new file mode 100644 index 000000000000..ef410eb2bd8b --- /dev/null +++ b/internal/component/discovery/consulagent/promtail_consulagent_metrics.go @@ -0,0 +1,67 @@ +// This code is copied from Promtail (https://https://github.com/grafana/loki/tree/3b5ed8c3ec88/clients/pkg/promtail/discovery/consulagent). +// Some changes have been made to improve the component: +// - "Namespace: namespace" has been removed + +// This code was adapted from the consul service discovery +// package in prometheus: https://github.com/prometheus/prometheus/blob/main/discovery/consul/metrics.go +// which is copyrighted: 2015 The Prometheus Authors +// and licensed under the Apache License, Version 2.0 (the "License"); + +package consulagent + +import ( + "github.com/prometheus/client_golang/prometheus" + + "github.com/prometheus/prometheus/discovery" +) + +var _ discovery.DiscovererMetrics = (*consulMetrics)(nil) + +type consulMetrics struct { + rpcFailuresCount prometheus.Counter + rpcDuration *prometheus.SummaryVec + + servicesRPCDuration prometheus.Observer + serviceRPCDuration prometheus.Observer + + metricRegisterer discovery.MetricRegisterer +} + +func newDiscovererMetrics(reg prometheus.Registerer, _ discovery.RefreshMetricsInstantiator) discovery.DiscovererMetrics { + m := &consulMetrics{ + rpcFailuresCount: prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "sd_consulagent_rpc_failures_total", + Help: "The number of Consul Agent RPC call failures.", + }), + rpcDuration: prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Name: "sd_consulagent_rpc_duration_seconds", + Help: "The duration of a Consul Agent RPC call in seconds.", + Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, + }, + []string{"endpoint", "call"}, + ), + } + + m.metricRegisterer = discovery.NewMetricRegisterer(reg, []prometheus.Collector{ + m.rpcFailuresCount, + m.rpcDuration, + }) + + // Initialize metric vectors. + m.servicesRPCDuration = m.rpcDuration.WithLabelValues("agent", "services") + m.serviceRPCDuration = m.rpcDuration.WithLabelValues("agent", "service") + + return m +} + +// Register implements discovery.DiscovererMetrics. +func (m *consulMetrics) Register() error { + return m.metricRegisterer.RegisterMetrics() +} + +// Unregister implements discovery.DiscovererMetrics. +func (m *consulMetrics) Unregister() { + m.metricRegisterer.UnregisterMetrics() +} diff --git a/internal/component/discovery/digitalocean/digitalocean.go b/internal/component/discovery/digitalocean/digitalocean.go index 1cae77f9bedd..666c07d70f92 100644 --- a/internal/component/discovery/digitalocean/digitalocean.go +++ b/internal/component/discovery/digitalocean/digitalocean.go @@ -82,8 +82,8 @@ func (a *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.digitalocean component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/discovery.go b/internal/component/discovery/discovery.go index 2d4014cbb776..bb0169167318 100644 --- a/internal/component/discovery/discovery.go +++ b/internal/component/discovery/discovery.go @@ -93,12 +93,12 @@ type Exports struct { Targets []Target `river:"targets,attr"` } -// Discoverer is an alias for Prometheus' Discoverer interface, so users of this package don't need +// DiscovererConfig is an alias for Prometheus' discovery.Config interface, so users of this package don't need // to import github.com/prometheus/prometheus/discover as well. -type Discoverer discovery.Discoverer +type DiscovererConfig discovery.Config -// Creator is a function provided by an implementation to create a concrete Discoverer instance. -type Creator func(component.Arguments) (Discoverer, error) +// Creator is a function provided by an implementation to create a concrete DiscovererConfig instance. +type Creator func(component.Arguments) DiscovererConfig // Component is a reusable component for any discovery implementation. // it will handle dynamic updates and exporting targets appropriately for a scrape implementation. @@ -110,13 +110,36 @@ type Component struct { newDiscoverer chan struct{} creator Creator + + sdMetrics discovery.DiscovererMetrics + refreshMetrics discovery.DiscovererMetrics } // New creates a discovery component given arguments and a concrete Discovery implementation function. func New(o component.Options, args component.Arguments, creator Creator) (*Component, error) { + // The metrics stay the same, even if the config of the SD mechanism changes. + // This means it's ok to do the registration now, with the initial config. + // This is similar ot how Prometheus does it. + discConfig := creator(args) + //TODO(ptodev): Change upstream Prometheus to have NewDiscovererMetrics outside of discovery.Config, + // to show that it's independent of the config. + + //TODO(ptodev): It looks messy to have a refresh metrics separate from the other SD metrics. + // Can we make this cleaner? The reason it was made like this currently, + // is so that metrics exposed by Prometheus executables don't change. + refreshMetrics := discovery.NewRefreshMetrics(o.Registerer) + sdMetrics := discConfig.NewDiscovererMetrics(o.Registerer, refreshMetrics) + + err := sdMetrics.Register() + if err != nil { + return nil, err + } + c := &Component{ - opts: o, - creator: creator, + opts: o, + creator: creator, + sdMetrics: sdMetrics, + refreshMetrics: refreshMetrics, // buffered to avoid deadlock from the first immediate update newDiscoverer: make(chan struct{}, 1), } @@ -125,6 +148,9 @@ func New(o component.Options, args component.Arguments, creator Creator) (*Compo // Run implements component.Component. func (c *Component) Run(ctx context.Context) error { + var wg sync.WaitGroup + defer wg.Wait() + var cancel context.CancelFunc for { select { @@ -145,14 +171,25 @@ func (c *Component) Run(ctx context.Context) error { c.discMut.Lock() disc := c.latestDisc c.discMut.Unlock() - go c.runDiscovery(newCtx, disc) + wg.Add(1) + go func() { + c.runDiscovery(newCtx, disc) + c.sdMetrics.Unregister() + c.refreshMetrics.Unregister() + wg.Done() + }() } } } // Update implements component.Component. func (c *Component) Update(args component.Arguments) error { - disc, err := c.creator(args) + discConfig := c.creator(args) + + disc, err := discConfig.NewDiscoverer(discovery.DiscovererOptions{ + Logger: c.opts.Logger, + Metrics: c.sdMetrics, + }) if err != nil { return err } @@ -174,7 +211,7 @@ var MaxUpdateFrequency = 5 * time.Second // runDiscovery is a utility for consuming and forwarding target groups from a discoverer. // It will handle collating targets (and clearing), as well as time based throttling of updates. -func (c *Component) runDiscovery(ctx context.Context, d Discoverer) { +func (c *Component) runDiscovery(ctx context.Context, d discovery.Discoverer) { // all targets we have seen so far cache := map[string]*targetgroup.Group{} diff --git a/internal/component/discovery/dns/dns.go b/internal/component/discovery/dns/dns.go index 3a774ae291be..914db1270400 100644 --- a/internal/component/discovery/dns/dns.go +++ b/internal/component/discovery/dns/dns.go @@ -70,8 +70,8 @@ func (args Arguments) Convert() dns.SDConfig { // New returns a new instance of a discovery.dns component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { - conf := args.(Arguments).Convert() - return dns.NewDiscovery(conf, opts.Logger), nil + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { + newArgs := args.(Arguments).Convert() + return &newArgs }) } diff --git a/internal/component/discovery/docker/docker.go b/internal/component/discovery/docker/docker.go index 517311174b60..c8e884247963 100644 --- a/internal/component/discovery/docker/docker.go +++ b/internal/component/discovery/docker/docker.go @@ -101,8 +101,8 @@ func (args Arguments) Convert() moby.DockerSDConfig { // New returns a new instance of a discovery.docker component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { - conf := args.(Arguments).Convert() - return moby.NewDockerDiscovery(&conf, opts.Logger) + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { + newArgs := args.(Arguments).Convert() + return &newArgs }) } diff --git a/internal/component/discovery/dockerswarm/dockerswarm.go b/internal/component/discovery/dockerswarm/dockerswarm.go index 030d8cad99e9..30a5dc7f10be 100644 --- a/internal/component/discovery/dockerswarm/dockerswarm.go +++ b/internal/component/discovery/dockerswarm/dockerswarm.go @@ -99,8 +99,8 @@ func (f *Filter) convert() prom_discovery.Filter { // New returns a new instance of discovery.dockerswarm component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/eureka/eureka.go b/internal/component/discovery/eureka/eureka.go index 1ca6bee6868f..60f41c4c2748 100644 --- a/internal/component/discovery/eureka/eureka.go +++ b/internal/component/discovery/eureka/eureka.go @@ -64,8 +64,8 @@ func (a *Arguments) Convert() *prom_discovery.SDConfig { } func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/file/file.go b/internal/component/discovery/file/file.go index 5d075cbfb82f..555a982ad557 100644 --- a/internal/component/discovery/file/file.go +++ b/internal/component/discovery/file/file.go @@ -45,8 +45,8 @@ func (a *Arguments) Convert() *prom_discovery.SDConfig { } func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger), nil + return newArgs.Convert() }) } diff --git a/internal/component/discovery/gce/gce.go b/internal/component/discovery/gce/gce.go index ca5d3a540149..30aacced7506 100644 --- a/internal/component/discovery/gce/gce.go +++ b/internal/component/discovery/gce/gce.go @@ -60,8 +60,8 @@ func (args Arguments) Convert() gce.SDConfig { // New returns a new instance of a discovery.gce component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { - conf := args.(Arguments).Convert() - return gce.NewDiscovery(conf, opts.Logger) + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { + newArgs := args.(Arguments).Convert() + return &newArgs }) } diff --git a/internal/component/discovery/hetzner/hetzner.go b/internal/component/discovery/hetzner/hetzner.go index be10a499d50c..1b3c1aa2ddd7 100644 --- a/internal/component/discovery/hetzner/hetzner.go +++ b/internal/component/discovery/hetzner/hetzner.go @@ -67,8 +67,8 @@ func (args *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.hetzner component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/http/http.go b/internal/component/discovery/http/http.go index fe74b8fd6665..cc0b6e823e7c 100644 --- a/internal/component/discovery/http/http.go +++ b/internal/component/discovery/http/http.go @@ -7,7 +7,6 @@ import ( "github.com/grafana/agent/internal/component/common/config" "github.com/grafana/agent/internal/component/discovery" "github.com/grafana/agent/internal/featuregate" - promcfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/prometheus/discovery/http" ) @@ -56,8 +55,7 @@ func (args Arguments) Convert() *http.SDConfig { } func New(opts component.Options, args Arguments) (component.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { - conf := args.(Arguments).Convert() - return http.NewDiscovery(conf, opts.Logger, []promcfg.HTTPClientOption{}) + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { + return args.(Arguments).Convert() }) } diff --git a/internal/component/discovery/http/http_test.go b/internal/component/discovery/http/http_test.go index 2827f495d11c..1ed68afd729e 100644 --- a/internal/component/discovery/http/http_test.go +++ b/internal/component/discovery/http/http_test.go @@ -13,6 +13,7 @@ import ( "github.com/grafana/agent/internal/component/common/config" "github.com/grafana/agent/internal/component/discovery" "github.com/grafana/river" + "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/stretchr/testify/require" "go.uber.org/atomic" @@ -91,6 +92,7 @@ func TestComponent(t *testing.T) { assert.Equal(t, 8, len(args.Targets)) cancel() }, + Registerer: prometheus.NewRegistry(), }, Arguments{ RefreshInterval: time.Second, diff --git a/internal/component/discovery/ionos/ionos.go b/internal/component/discovery/ionos/ionos.go index d1ae37cf3537..d48c55ed2b4f 100644 --- a/internal/component/discovery/ionos/ionos.go +++ b/internal/component/discovery/ionos/ionos.go @@ -66,8 +66,8 @@ func (a *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.ionos component, func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/kubelet/kubelet.go b/internal/component/discovery/kubelet/kubelet.go index 1fcad0bcbd43..2e4dda42e575 100644 --- a/internal/component/discovery/kubelet/kubelet.go +++ b/internal/component/discovery/kubelet/kubelet.go @@ -17,8 +17,10 @@ import ( "github.com/grafana/agent/internal/component/common/config" "github.com/grafana/agent/internal/component/discovery" "github.com/grafana/agent/internal/featuregate" + "github.com/prometheus/client_golang/prometheus" commonConfig "github.com/prometheus/common/config" "github.com/prometheus/common/model" + prom_discovery "github.com/prometheus/prometheus/discovery" "github.com/prometheus/prometheus/discovery/refresh" "github.com/prometheus/prometheus/discovery/targetgroup" "github.com/prometheus/prometheus/util/strutil" @@ -78,6 +80,49 @@ type Arguments struct { Namespaces []string `river:"namespaces,attr,optional"` } +type DiscoveryCreator struct { + args Arguments + opts component.Options +} + +// Name implements discovery.DiscovererConfig. +func (args *DiscoveryCreator) Name() string { + return "kubelet" +} + +// NewDiscoverer implements discovery.DiscovererConfig. +func (dc *DiscoveryCreator) NewDiscoverer(discOpts prom_discovery.DiscovererOptions) (prom_discovery.Discoverer, error) { + m, ok := discOpts.Metrics.(*kubeletMetrics) + if !ok { + return nil, fmt.Errorf("invalid discovery metrics type") + } + + kubeletDiscovery, err := NewKubeletDiscovery(dc.args) + if err != nil { + return nil, err + } + + interval := defaultKubeletRefreshInterval + if dc.args.Interval != 0 { + interval = dc.args.Interval + } + + return refresh.NewDiscovery(refresh.Options{ + Logger: dc.opts.Logger, + Mech: "kubelet", + Interval: interval, + RefreshF: kubeletDiscovery.Refresh, + MetricsInstantiator: m.refreshMetrics, + }), nil +} + +// NewDiscovererMetrics implements discovery.DiscovererConfig. +func (*DiscoveryCreator) NewDiscovererMetrics(_ prometheus.Registerer, rmi prom_discovery.RefreshMetricsInstantiator) prom_discovery.DiscovererMetrics { + return newDiscovererMetrics(rmi) +} + +var _ discovery.DiscovererConfig = (*DiscoveryCreator)(nil) + // SetToDefault implements river.Defaulter. func (args *Arguments) SetToDefault() { cloneDefaultKubeletUrl := *defaultKubeletURL @@ -97,17 +142,12 @@ func (args *Arguments) Validate() error { // New returns a new instance of a discovery.kubelet component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - kubeletDiscovery, err := NewKubeletDiscovery(newArgs) - if err != nil { - return nil, err - } - interval := defaultKubeletRefreshInterval - if newArgs.Interval != 0 { - interval = newArgs.Interval + return &DiscoveryCreator{ + args: newArgs, + opts: opts, } - return refresh.NewDiscovery(opts.Logger, "kubelet", interval, kubeletDiscovery.Refresh), nil }) } diff --git a/internal/component/discovery/kubelet/metrics.go b/internal/component/discovery/kubelet/metrics.go new file mode 100644 index 000000000000..9db35017ad47 --- /dev/null +++ b/internal/component/discovery/kubelet/metrics.go @@ -0,0 +1,26 @@ +package kubelet + +import ( + "github.com/prometheus/prometheus/discovery" +) + +var _ discovery.DiscovererMetrics = (*kubeletMetrics)(nil) + +type kubeletMetrics struct { + refreshMetrics discovery.RefreshMetricsInstantiator +} + +func newDiscovererMetrics(rmi discovery.RefreshMetricsInstantiator) discovery.DiscovererMetrics { + m := &kubeletMetrics{ + refreshMetrics: rmi, + } + return m +} + +// Register implements discovery.DiscovererMetrics. +func (m *kubeletMetrics) Register() error { + return nil +} + +// Unregister implements discovery.DiscovererMetrics. +func (m *kubeletMetrics) Unregister() {} diff --git a/internal/component/discovery/kubernetes/kubernetes.go b/internal/component/discovery/kubernetes/kubernetes.go index 7f379bac53ee..123a4b5885b8 100644 --- a/internal/component/discovery/kubernetes/kubernetes.go +++ b/internal/component/discovery/kubernetes/kubernetes.go @@ -106,8 +106,8 @@ func (am *AttachMetadataConfig) convert() *promk8s.AttachMetadataConfig { // New returns a new instance of a discovery.kubernetes component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return promk8s.New(opts.Logger, newArgs.Convert()) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/kuma/kuma.go b/internal/component/discovery/kuma/kuma.go index f4adf85de00d..68dc7b9e780f 100644 --- a/internal/component/discovery/kuma/kuma.go +++ b/internal/component/discovery/kuma/kuma.go @@ -72,8 +72,8 @@ func (args *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.kuma component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewKumaHTTPDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/linode/linode.go b/internal/component/discovery/linode/linode.go index 152167c01048..8341e9d116fc 100644 --- a/internal/component/discovery/linode/linode.go +++ b/internal/component/discovery/linode/linode.go @@ -67,8 +67,8 @@ func (args *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.linode component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/marathon/marathon.go b/internal/component/discovery/marathon/marathon.go index c94873292553..e589b81caabf 100644 --- a/internal/component/discovery/marathon/marathon.go +++ b/internal/component/discovery/marathon/marathon.go @@ -82,8 +82,8 @@ func (a *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of discovery.marathon component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(*newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/nerve/nerve.go b/internal/component/discovery/nerve/nerve.go index d7a71f28ac24..3a9e8f2f771c 100644 --- a/internal/component/discovery/nerve/nerve.go +++ b/internal/component/discovery/nerve/nerve.go @@ -61,8 +61,8 @@ func (args *Arguments) Convert() *prom_discovery.NerveSDConfig { // New returns a new instance of a discovery.nerve component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewNerveDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/nomad/nomad.go b/internal/component/discovery/nomad/nomad.go index f2a86a4773ba..b4e298fd12cc 100644 --- a/internal/component/discovery/nomad/nomad.go +++ b/internal/component/discovery/nomad/nomad.go @@ -73,8 +73,8 @@ func (a *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.azure component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/openstack/openstack.go b/internal/component/discovery/openstack/openstack.go index 885c151d831e..b6144296b403 100644 --- a/internal/component/discovery/openstack/openstack.go +++ b/internal/component/discovery/openstack/openstack.go @@ -102,8 +102,8 @@ func (args *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.openstack component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/ovhcloud/ovhcloud.go b/internal/component/discovery/ovhcloud/ovhcloud.go index ee5abd990288..391e8971d59d 100644 --- a/internal/component/discovery/ovhcloud/ovhcloud.go +++ b/internal/component/discovery/ovhcloud/ovhcloud.go @@ -89,8 +89,8 @@ func (args *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.ovhcloud component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/puppetdb/puppetdb.go b/internal/component/discovery/puppetdb/puppetdb.go index 7299051ea7f0..678b9e567ef4 100644 --- a/internal/component/discovery/puppetdb/puppetdb.go +++ b/internal/component/discovery/puppetdb/puppetdb.go @@ -76,8 +76,8 @@ func (args *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.puppetdb component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/scaleway/scaleway.go b/internal/component/discovery/scaleway/scaleway.go index 2a20c71f85c8..057a80de2205 100644 --- a/internal/component/discovery/scaleway/scaleway.go +++ b/internal/component/discovery/scaleway/scaleway.go @@ -179,8 +179,8 @@ func (r *Role) UnmarshalText(text []byte) error { // New returns a new instance of a discovery.scaleway component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/serverset/serverset.go b/internal/component/discovery/serverset/serverset.go index c63855822fa3..1a68f0266822 100644 --- a/internal/component/discovery/serverset/serverset.go +++ b/internal/component/discovery/serverset/serverset.go @@ -67,8 +67,8 @@ func (args *Arguments) Convert() *prom_discovery.ServersetSDConfig { // New returns a new instance of a discovery.serverset component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewServersetDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/triton/triton.go b/internal/component/discovery/triton/triton.go index 0aa1fea3f96f..923ed24d1d83 100644 --- a/internal/component/discovery/triton/triton.go +++ b/internal/component/discovery/triton/triton.go @@ -74,8 +74,8 @@ func (args *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.triton component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.New(opts.Logger, newArgs.Convert()) + return newArgs.Convert() }) } diff --git a/internal/component/discovery/uyuni/uyuni.go b/internal/component/discovery/uyuni/uyuni.go index 4d67ead59d8a..3dc3ee532bfd 100644 --- a/internal/component/discovery/uyuni/uyuni.go +++ b/internal/component/discovery/uyuni/uyuni.go @@ -89,8 +89,8 @@ func (a *Arguments) Convert() *prom_discovery.SDConfig { // New returns a new instance of a discovery.uyuni component. func New(opts component.Options, args Arguments) (*discovery.Component, error) { - return discovery.New(opts, args, func(args component.Arguments) (discovery.Discoverer, error) { + return discovery.New(opts, args, func(args component.Arguments) discovery.DiscovererConfig { newArgs := args.(Arguments) - return prom_discovery.NewDiscovery(newArgs.Convert(), opts.Logger) + return newArgs.Convert() }) } diff --git a/internal/component/loki/source/api/internal/lokipush/push_api_server.go b/internal/component/loki/source/api/internal/lokipush/push_api_server.go index 1842522dfae3..515aec1eaec6 100644 --- a/internal/component/loki/source/api/internal/lokipush/push_api_server.go +++ b/internal/component/loki/source/api/internal/lokipush/push_api_server.go @@ -137,7 +137,7 @@ func (s *PushAPIServer) getRelabelRules() []*relabel.Config { func (s *PushAPIServer) handleLoki(w http.ResponseWriter, r *http.Request) { logger := util_log.WithContext(r.Context(), util_log.Logger) userID, _ := tenant.TenantID(r.Context()) - req, err := push.ParseRequest(logger, userID, r, nil, nil, push.ParseLokiRequest) + req, err := push.ParseRequest(logger, userID, r, nil, nil, push.ParseLokiRequest, nil) if err != nil { level.Warn(s.logger).Log("msg", "failed to parse incoming push request", "err", err.Error()) http.Error(w, err.Error(), http.StatusBadRequest) diff --git a/internal/component/loki/source/docker/internal/dockertarget/target.go b/internal/component/loki/source/docker/internal/dockertarget/target.go index 5e118fab98c3..b71550e07dc1 100644 --- a/internal/component/loki/source/docker/internal/dockertarget/target.go +++ b/internal/component/loki/source/docker/internal/dockertarget/target.go @@ -14,7 +14,7 @@ import ( "sync" "time" - docker_types "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/docker/docker/pkg/stdcopy" "github.com/go-kit/log" @@ -94,7 +94,7 @@ func (t *Target) processLoop(ctx context.Context) { t.wg.Add(1) defer t.wg.Done() - opts := docker_types.ContainerLogsOptions{ + opts := container.LogsOptions{ ShowStdout: true, ShowStderr: true, Follow: true, diff --git a/internal/component/otelcol/exporter/prometheus/internal/convert/convert.go b/internal/component/otelcol/exporter/prometheus/internal/convert/convert.go index a8f4d4a91c02..300a9238118f 100644 --- a/internal/component/otelcol/exporter/prometheus/internal/convert/convert.go +++ b/internal/component/otelcol/exporter/prometheus/internal/convert/convert.go @@ -24,7 +24,6 @@ import ( "github.com/prometheus/prometheus/model/exemplar" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/metadata" - "github.com/prometheus/prometheus/model/textparse" "github.com/prometheus/prometheus/model/timestamp" "github.com/prometheus/prometheus/model/value" "github.com/prometheus/prometheus/storage" @@ -130,7 +129,7 @@ func (conv *Converter) ConsumeMetrics(ctx context.Context, md pmetric.Metrics) e func (conv *Converter) consumeResourceMetrics(app storage.Appender, rm pmetric.ResourceMetrics) { resourceMD := conv.createOrUpdateMetadata("target_info", metadata.Metadata{ - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Help: "Target metadata", }) resAttrs := rm.Resource().Attributes() @@ -224,7 +223,7 @@ func (conv *Converter) getOrCreateResource(res pcommon.Resource) *memorySeries { func (conv *Converter) consumeScopeMetrics(app storage.Appender, memResource *memorySeries, sm pmetric.ScopeMetrics, resAttrs pcommon.Map) { scopeMD := conv.createOrUpdateMetadata("otel_scope_info", metadata.Metadata{ - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, }) memScope := conv.getOrCreateScope(memResource, sm.Scope()) @@ -303,7 +302,7 @@ func (conv *Converter) consumeGauge(app storage.Appender, memResource *memorySer metricName := prometheus.BuildCompliantName(m, "", conv.opts.AddMetricSuffixes) metricMD := conv.createOrUpdateMetadata(metricName, metadata.Metadata{ - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Unit: m.Unit(), Help: m.Description(), }) @@ -418,12 +417,12 @@ func (conv *Converter) consumeSum(app storage.Appender, memResource *memorySerie // SHOULD be converted to a cumulative temporarlity and become a Prometheus // Sum. // * Otherwise, it MUST be dropped. - var convType textparse.MetricType + var convType model.MetricType switch { case m.Sum().AggregationTemporality() == pmetric.AggregationTemporalityCumulative && m.Sum().IsMonotonic(): - convType = textparse.MetricTypeCounter + convType = model.MetricTypeCounter case m.Sum().AggregationTemporality() == pmetric.AggregationTemporalityCumulative && !m.Sum().IsMonotonic(): - convType = textparse.MetricTypeGauge + convType = model.MetricTypeGauge case m.Sum().AggregationTemporality() == pmetric.AggregationTemporalityDelta && m.Sum().IsMonotonic(): // Drop non-cumulative summaries for now, which is permitted by the spec. // @@ -457,7 +456,7 @@ func (conv *Converter) consumeSum(app storage.Appender, memResource *memorySerie level.Error(conv.log).Log("msg", "failed to write metric sample", metricName, "err", err) } - if convType == textparse.MetricTypeCounter { + if convType == model.MetricTypeCounter { for i := 0; i < dp.Exemplars().Len(); i++ { if err := conv.writeExemplar(app, memSeries, dp.Exemplars().At(i)); err != nil { level.Error(conv.log).Log("msg", "failed to write exemplar for metric sample", metricName, "err", err) @@ -478,7 +477,7 @@ func (conv *Converter) consumeHistogram(app storage.Appender, memResource *memor } metricMD := conv.createOrUpdateMetadata(metricName, metadata.Metadata{ - Type: textparse.MetricTypeHistogram, + Type: model.MetricTypeHistogram, Unit: m.Unit(), Help: m.Description(), }) @@ -612,7 +611,7 @@ func (conv *Converter) consumeExponentialHistogram(app storage.Appender, memReso } metricMD := conv.createOrUpdateMetadata(metricName, metadata.Metadata{ - Type: textparse.MetricTypeHistogram, + Type: model.MetricTypeHistogram, Unit: m.Unit(), Help: m.Description(), }) @@ -687,7 +686,7 @@ func (conv *Converter) consumeSummary(app storage.Appender, memResource *memoryS metricName := prometheus.BuildCompliantName(m, "", conv.opts.AddMetricSuffixes) metricMD := conv.createOrUpdateMetadata(metricName, metadata.Metadata{ - Type: textparse.MetricTypeSummary, + Type: model.MetricTypeSummary, Unit: m.Unit(), Help: m.Description(), }) diff --git a/internal/component/otelcol/receiver/prometheus/internal/metadata.go b/internal/component/otelcol/receiver/prometheus/internal/metadata.go index cea58a0e1dc9..537e998111f0 100644 --- a/internal/component/otelcol/receiver/prometheus/internal/metadata.go +++ b/internal/component/otelcol/receiver/prometheus/internal/metadata.go @@ -4,7 +4,7 @@ package internal // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver/internal" import ( - "github.com/prometheus/prometheus/model/textparse" + "github.com/prometheus/common/model" "github.com/prometheus/prometheus/scrape" ) @@ -17,28 +17,28 @@ type dataPoint struct { var internalMetricMetadata = map[string]*scrape.MetricMetadata{ scrapeUpMetricName: { Metric: scrapeUpMetricName, - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Help: "The scraping was successful", }, "scrape_duration_seconds": { Metric: "scrape_duration_seconds", Unit: "seconds", - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Help: "Duration of the scrape", }, "scrape_samples_scraped": { Metric: "scrape_samples_scraped", - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Help: "The number of samples the target exposed", }, "scrape_series_added": { Metric: "scrape_series_added", - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Help: "The approximate number of new series in this scrape", }, "scrape_samples_post_metric_relabeling": { Metric: "scrape_samples_post_metric_relabeling", - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Help: "The number of samples remaining after metric relabeling was applied", }, } @@ -54,7 +54,7 @@ func metadataForMetric(metricName string, mc scrape.MetricMetadataStore) (*scrap // try with suffixes trimmed, in-case it is a "merged" metric type. normalizedName := normalizeMetricName(metricName) if metadata, ok := mc.GetMetadata(normalizedName); ok { - if metadata.Type == textparse.MetricTypeCounter { + if metadata.Type == model.MetricTypeCounter { return &metadata, metricName } return &metadata, normalizedName @@ -62,6 +62,6 @@ func metadataForMetric(metricName string, mc scrape.MetricMetadataStore) (*scrap // Otherwise, the metric is unknown return &scrape.MetricMetadata{ Metric: metricName, - Type: textparse.MetricTypeUnknown, + Type: model.MetricTypeUnknown, }, metricName } diff --git a/internal/component/otelcol/receiver/prometheus/internal/metricfamily_test.go b/internal/component/otelcol/receiver/prometheus/internal/metricfamily_test.go index 10c0f9579480..2ac031389f48 100644 --- a/internal/component/otelcol/receiver/prometheus/internal/metricfamily_test.go +++ b/internal/component/otelcol/receiver/prometheus/internal/metricfamily_test.go @@ -8,8 +8,8 @@ import ( "testing" "time" + "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/labels" - "github.com/prometheus/prometheus/model/textparse" "github.com/prometheus/prometheus/model/value" "github.com/prometheus/prometheus/scrape" "github.com/stretchr/testify/require" @@ -36,61 +36,61 @@ func (tmc testMetadataStore) LengthMetadata() int { var mc = testMetadataStore{ "counter": scrape.MetricMetadata{ Metric: "cr", - Type: textparse.MetricTypeCounter, + Type: model.MetricTypeCounter, Help: "This is some help for a counter", Unit: "By", }, "gauge": scrape.MetricMetadata{ Metric: "ge", - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Help: "This is some help for a gauge", Unit: "1", }, "gaugehistogram": scrape.MetricMetadata{ Metric: "gh", - Type: textparse.MetricTypeGaugeHistogram, + Type: model.MetricTypeGaugeHistogram, Help: "This is some help for a gauge histogram", Unit: "?", }, "histogram": scrape.MetricMetadata{ Metric: "hg", - Type: textparse.MetricTypeHistogram, + Type: model.MetricTypeHistogram, Help: "This is some help for a histogram", Unit: "ms", }, "histogram_with_created": scrape.MetricMetadata{ Metric: "hg", - Type: textparse.MetricTypeHistogram, + Type: model.MetricTypeHistogram, Help: "This is some help for a histogram", Unit: "ms", }, "histogram_stale": scrape.MetricMetadata{ Metric: "hg_stale", - Type: textparse.MetricTypeHistogram, + Type: model.MetricTypeHistogram, Help: "This is some help for a histogram", Unit: "ms", }, "summary": scrape.MetricMetadata{ Metric: "s", - Type: textparse.MetricTypeSummary, + Type: model.MetricTypeSummary, Help: "This is some help for a summary", Unit: "ms", }, "summary_with_created": scrape.MetricMetadata{ Metric: "s", - Type: textparse.MetricTypeSummary, + Type: model.MetricTypeSummary, Help: "This is some help for a summary", Unit: "ms", }, "summary_stale": scrape.MetricMetadata{ Metric: "s_stale", - Type: textparse.MetricTypeSummary, + Type: model.MetricTypeSummary, Help: "This is some help for a summary", Unit: "ms", }, "unknown": scrape.MetricMetadata{ Metric: "u", - Type: textparse.MetricTypeUnknown, + Type: model.MetricTypeUnknown, Help: "This is some help for an unknown metric", Unit: "?", }, diff --git a/internal/component/otelcol/receiver/prometheus/internal/transaction.go b/internal/component/otelcol/receiver/prometheus/internal/transaction.go index 6b59674c199d..a7d420cdf5d6 100644 --- a/internal/component/otelcol/receiver/prometheus/internal/transaction.go +++ b/internal/component/otelcol/receiver/prometheus/internal/transaction.go @@ -209,6 +209,12 @@ func (t *transaction) AppendHistogram(_ storage.SeriesRef, _ labels.Labels, _ in return 0, nil } +// AppendCTZeroSample implements storage.Appender. +func (tr *transaction) AppendCTZeroSample(_ storage.SeriesRef, _ labels.Labels, _ int64, _ int64) (storage.SeriesRef, error) { + //TODO(ptodev): implementr this later + return 0, nil +} + func (t *transaction) getSeriesRef(ls labels.Labels, mtype pmetric.MetricType) uint64 { var hash uint64 hash, t.bufBytes = getSeriesRef(t.bufBytes, ls, mtype) diff --git a/internal/component/otelcol/receiver/prometheus/internal/util.go b/internal/component/otelcol/receiver/prometheus/internal/util.go index 405a181f47a5..1a96c32c1fa2 100644 --- a/internal/component/otelcol/receiver/prometheus/internal/util.go +++ b/internal/component/otelcol/receiver/prometheus/internal/util.go @@ -11,7 +11,6 @@ import ( "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/labels" - "github.com/prometheus/prometheus/model/textparse" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" ) @@ -96,28 +95,28 @@ func getBoundary(metricType pmetric.MetricType, labels labels.Labels) (float64, } // convToMetricType returns the data type and if it is monotonic -func convToMetricType(metricType textparse.MetricType) (pmetric.MetricType, bool) { +func convToMetricType(metricType model.MetricType) (pmetric.MetricType, bool) { switch metricType { - case textparse.MetricTypeCounter: + case model.MetricTypeCounter: // always use float64, as it's the internal data type used in prometheus return pmetric.MetricTypeSum, true - // textparse.MetricTypeUnknown is converted to gauge by default to prevent Prometheus untyped metrics from being dropped - case textparse.MetricTypeGauge, textparse.MetricTypeUnknown: + // model.MetricTypeUnknown is converted to gauge by default to prevent Prometheus untyped metrics from being dropped + case model.MetricTypeGauge, model.MetricTypeUnknown: return pmetric.MetricTypeGauge, false - case textparse.MetricTypeHistogram: + case model.MetricTypeHistogram: return pmetric.MetricTypeHistogram, true // dropping support for gaugehistogram for now until we have an official spec of its implementation // a draft can be found in: https://docs.google.com/document/d/1KwV0mAXwwbvvifBvDKH_LU1YjyXE_wxCkHNoCGq1GX0/edit#heading=h.1cvzqd4ksd23 - // case textparse.MetricTypeGaugeHistogram: + // case model.MetricTypeGaugeHistogram: // return - case textparse.MetricTypeSummary: + case model.MetricTypeSummary: return pmetric.MetricTypeSummary, true - case textparse.MetricTypeInfo, textparse.MetricTypeStateset: + case model.MetricTypeInfo, model.MetricTypeStateset: return pmetric.MetricTypeSum, false - case textparse.MetricTypeGaugeHistogram: + case model.MetricTypeGaugeHistogram: fallthrough default: - // including: textparse.MetricTypeGaugeHistogram + // including: model.MetricTypeGaugeHistogram return pmetric.MetricTypeEmpty, false } } diff --git a/internal/component/otelcol/receiver/prometheus/internal/util_test.go b/internal/component/otelcol/receiver/prometheus/internal/util_test.go index 3bea1ac42471..3dcd74f01681 100644 --- a/internal/component/otelcol/receiver/prometheus/internal/util_test.go +++ b/internal/component/otelcol/receiver/prometheus/internal/util_test.go @@ -9,7 +9,6 @@ import ( "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/labels" - "github.com/prometheus/prometheus/model/textparse" "github.com/prometheus/prometheus/scrape" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -18,25 +17,25 @@ import ( ) var testMetadata = map[string]scrape.MetricMetadata{ - "counter_test": {Metric: "counter_test", Type: textparse.MetricTypeCounter, Help: "", Unit: ""}, - "counter_test2": {Metric: "counter_test2", Type: textparse.MetricTypeCounter, Help: "", Unit: ""}, - "gauge_test": {Metric: "gauge_test", Type: textparse.MetricTypeGauge, Help: "", Unit: ""}, - "gauge_test2": {Metric: "gauge_test2", Type: textparse.MetricTypeGauge, Help: "", Unit: ""}, - "hist_test": {Metric: "hist_test", Type: textparse.MetricTypeHistogram, Help: "", Unit: ""}, - "hist_test2": {Metric: "hist_test2", Type: textparse.MetricTypeHistogram, Help: "", Unit: ""}, - "ghist_test": {Metric: "ghist_test", Type: textparse.MetricTypeGaugeHistogram, Help: "", Unit: ""}, - "summary_test": {Metric: "summary_test", Type: textparse.MetricTypeSummary, Help: "", Unit: ""}, - "summary_test2": {Metric: "summary_test2", Type: textparse.MetricTypeSummary, Help: "", Unit: ""}, - "unknown_test": {Metric: "unknown_test", Type: textparse.MetricTypeUnknown, Help: "", Unit: ""}, - "poor_name": {Metric: "poor_name", Type: textparse.MetricTypeGauge, Help: "", Unit: ""}, - "poor_name_count": {Metric: "poor_name_count", Type: textparse.MetricTypeCounter, Help: "", Unit: ""}, - "scrape_foo": {Metric: "scrape_foo", Type: textparse.MetricTypeCounter, Help: "", Unit: ""}, + "counter_test": {Metric: "counter_test", Type: model.MetricTypeCounter, Help: "", Unit: ""}, + "counter_test2": {Metric: "counter_test2", Type: model.MetricTypeCounter, Help: "", Unit: ""}, + "gauge_test": {Metric: "gauge_test", Type: model.MetricTypeGauge, Help: "", Unit: ""}, + "gauge_test2": {Metric: "gauge_test2", Type: model.MetricTypeGauge, Help: "", Unit: ""}, + "hist_test": {Metric: "hist_test", Type: model.MetricTypeHistogram, Help: "", Unit: ""}, + "hist_test2": {Metric: "hist_test2", Type: model.MetricTypeHistogram, Help: "", Unit: ""}, + "ghist_test": {Metric: "ghist_test", Type: model.MetricTypeGaugeHistogram, Help: "", Unit: ""}, + "summary_test": {Metric: "summary_test", Type: model.MetricTypeSummary, Help: "", Unit: ""}, + "summary_test2": {Metric: "summary_test2", Type: model.MetricTypeSummary, Help: "", Unit: ""}, + "unknown_test": {Metric: "unknown_test", Type: model.MetricTypeUnknown, Help: "", Unit: ""}, + "poor_name": {Metric: "poor_name", Type: model.MetricTypeGauge, Help: "", Unit: ""}, + "poor_name_count": {Metric: "poor_name_count", Type: model.MetricTypeCounter, Help: "", Unit: ""}, + "scrape_foo": {Metric: "scrape_foo", Type: model.MetricTypeCounter, Help: "", Unit: ""}, "example_process_start_time_seconds": {Metric: "example_process_start_time_seconds", - Type: textparse.MetricTypeGauge, Help: "", Unit: ""}, + Type: model.MetricTypeGauge, Help: "", Unit: ""}, "process_start_time_seconds": {Metric: "process_start_time_seconds", - Type: textparse.MetricTypeGauge, Help: "", Unit: ""}, + Type: model.MetricTypeGauge, Help: "", Unit: ""}, "subprocess_start_time_seconds": {Metric: "subprocess_start_time_seconds", - Type: textparse.MetricTypeGauge, Help: "", Unit: ""}, + Type: model.MetricTypeGauge, Help: "", Unit: ""}, } func TestTimestampFromMs(t *testing.T) { @@ -53,55 +52,55 @@ func TestTimestampFromFloat64(t *testing.T) { func TestConvToMetricType(t *testing.T) { tests := []struct { name string - mtype textparse.MetricType + mtype model.MetricType want pmetric.MetricType wantMonotonic bool }{ { name: "textparse.counter", - mtype: textparse.MetricTypeCounter, + mtype: model.MetricTypeCounter, want: pmetric.MetricTypeSum, wantMonotonic: true, }, { name: "textparse.gauge", - mtype: textparse.MetricTypeGauge, + mtype: model.MetricTypeGauge, want: pmetric.MetricTypeGauge, wantMonotonic: false, }, { name: "textparse.unknown", - mtype: textparse.MetricTypeUnknown, + mtype: model.MetricTypeUnknown, want: pmetric.MetricTypeGauge, wantMonotonic: false, }, { name: "textparse.histogram", - mtype: textparse.MetricTypeHistogram, + mtype: model.MetricTypeHistogram, want: pmetric.MetricTypeHistogram, wantMonotonic: true, }, { name: "textparse.summary", - mtype: textparse.MetricTypeSummary, + mtype: model.MetricTypeSummary, want: pmetric.MetricTypeSummary, wantMonotonic: true, }, { name: "textparse.metric_type_info", - mtype: textparse.MetricTypeInfo, + mtype: model.MetricTypeInfo, want: pmetric.MetricTypeSum, wantMonotonic: false, }, { name: "textparse.metric_state_set", - mtype: textparse.MetricTypeStateset, + mtype: model.MetricTypeStateset, want: pmetric.MetricTypeSum, wantMonotonic: false, }, { name: "textparse.metric_gauge_hostogram", - mtype: textparse.MetricTypeGaugeHistogram, + mtype: model.MetricTypeGaugeHistogram, want: pmetric.MetricTypeEmpty, wantMonotonic: false, }, diff --git a/internal/component/prometheus/fanout.go b/internal/component/prometheus/fanout.go index e25e37141faf..9d3401070d1c 100644 --- a/internal/component/prometheus/fanout.go +++ b/internal/component/prometheus/fanout.go @@ -186,6 +186,12 @@ func (a *appender) AppendExemplar(ref storage.SeriesRef, l labels.Labels, e exem return ref, multiErr } +// AppendCTZeroSample implements storage.Appender. +func (a *appender) AppendCTZeroSample(ref storage.SeriesRef, l labels.Labels, t int64, ct int64) (storage.SeriesRef, error) { + //TODO(ptodev): implementr this later + return 0, nil +} + // UpdateMetadata satisfies the Appender interface. func (a *appender) UpdateMetadata(ref storage.SeriesRef, l labels.Labels, m metadata.Metadata) (storage.SeriesRef, error) { if a.start.IsZero() { diff --git a/internal/component/prometheus/interceptor.go b/internal/component/prometheus/interceptor.go index d8e515ec5d38..90d73af10c74 100644 --- a/internal/component/prometheus/interceptor.go +++ b/internal/component/prometheus/interceptor.go @@ -156,6 +156,12 @@ func (a *interceptappender) AppendExemplar( return a.child.AppendExemplar(ref, l, e) } +// AppendCTZeroSample satisfies the Appender interface. +func (a *interceptappender) AppendCTZeroSample(ref storage.SeriesRef, l labels.Labels, t int64, ct int64) (storage.SeriesRef, error) { + //TODO: Implement this later + return 0, nil +} + // UpdateMetadata satisfies the Appender interface. func (a *interceptappender) UpdateMetadata( ref storage.SeriesRef, diff --git a/internal/component/prometheus/operator/common/crdmanager.go b/internal/component/prometheus/operator/common/crdmanager.go index d5f4b9bbb975..72cea8deaac5 100644 --- a/internal/component/prometheus/operator/common/crdmanager.go +++ b/internal/component/prometheus/operator/common/crdmanager.go @@ -16,6 +16,7 @@ import ( "github.com/grafana/agent/internal/service/cluster" "github.com/grafana/agent/internal/service/http" "github.com/grafana/agent/internal/service/labelstore" + "github.com/grafana/agent/internal/util" "github.com/grafana/ckit/shard" "github.com/prometheus/common/model" "github.com/prometheus/prometheus/config" @@ -32,6 +33,7 @@ import ( "github.com/grafana/agent/internal/component/prometheus/operator/configgen" compscrape "github.com/grafana/agent/internal/component/prometheus/scrape" promopv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" + prom_client "github.com/prometheus/client_golang/prometheus" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" ) @@ -66,6 +68,8 @@ type crdManager struct { client *kubernetes.Clientset kind string + + reg prom_client.Registerer } const ( @@ -92,10 +96,19 @@ func newCrdManager(opts component.Options, cluster cluster.Cluster, logger log.L kind: kind, clusteringUpdated: make(chan struct{}, 1), ls: ls, + reg: opts.Registerer, } } func (c *crdManager) Run(ctx context.Context) error { + wrappedReg := util.WrapWithUnregisterer(c.reg) + defer wrappedReg.UnregisterAll() + + sdMetrics, err := discovery.CreateAndRegisterSDMetrics(wrappedReg) + if err != nil { + return fmt.Errorf("creating and registering service discovery metrics: %w", err) + } + restConfig, err := c.args.Client.BuildRESTConfig(c.logger) if err != nil { return fmt.Errorf("creating rest config: %w", err) @@ -106,7 +119,7 @@ func (c *crdManager) Run(ctx context.Context) error { } // Start prometheus service discovery manager - c.discoveryManager = discovery.NewManager(ctx, c.logger, discovery.Name(c.opts.ID)) + c.discoveryManager = discovery.NewManager(ctx, c.logger, wrappedReg, sdMetrics, discovery.Name(c.opts.ID)) go func() { err := c.discoveryManager.Run() if err != nil { @@ -117,7 +130,13 @@ func (c *crdManager) Run(ctx context.Context) error { // Start prometheus scrape manager. flowAppendable := prometheus.NewFanout(c.args.ForwardTo, c.opts.ID, c.opts.Registerer, c.ls) opts := &scrape.Options{} - c.scrapeManager = scrape.NewManager(opts, c.logger, flowAppendable) + + scrapeManager, err := scrape.NewManager(opts, c.logger, flowAppendable, wrappedReg) + if err != nil { + return fmt.Errorf("creating scrape manager: %w", err) + } + c.scrapeManager = scrapeManager + defer c.scrapeManager.Stop() targetSetsChan := make(chan map[string][]*targetgroup.Group) go func() { diff --git a/internal/component/prometheus/operator/configgen/config_gen.go b/internal/component/prometheus/operator/configgen/config_gen.go index 5c215b3b8f3b..2fed30198594 100644 --- a/internal/component/prometheus/operator/configgen/config_gen.go +++ b/internal/component/prometheus/operator/configgen/config_gen.go @@ -173,6 +173,7 @@ func (cg *ConfigGenerator) generateDefaultScrapeConfig() *config.ScrapeConfig { c := config.DefaultScrapeConfig c.ScrapeInterval = config.DefaultGlobalConfig.ScrapeInterval c.ScrapeTimeout = config.DefaultGlobalConfig.ScrapeTimeout + c.ScrapeProtocols = config.DefaultScrapeProtocols if opt.DefaultScrapeInterval != 0 { c.ScrapeInterval = model.Duration(opt.DefaultScrapeInterval) diff --git a/internal/component/prometheus/operator/configgen/config_gen_podmonitor_test.go b/internal/component/prometheus/operator/configgen/config_gen_podmonitor_test.go index fca82b1d1dc4..f14d1009462e 100644 --- a/internal/component/prometheus/operator/configgen/config_gen_podmonitor_test.go +++ b/internal/component/prometheus/operator/configgen/config_gen_podmonitor_test.go @@ -64,12 +64,14 @@ func TestGeneratePodMonitorConfig(t *testing.T) { `), expected: &config.ScrapeConfig{ - JobName: "podMonitor/operator/podmonitor/1", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Hour), - ScrapeTimeout: model.Duration(42 * time.Second), - MetricsPath: "/metrics", - Scheme: "http", + JobName: "podMonitor/operator/podmonitor/1", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Hour), + ScrapeTimeout: model.Duration(42 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/metrics", + Scheme: "http", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, @@ -120,12 +122,14 @@ func TestGeneratePodMonitorConfig(t *testing.T) { replacement: http_metrics `), expected: &config.ScrapeConfig{ - JobName: "podMonitor/operator/podmonitor/1", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Hour), - ScrapeTimeout: model.Duration(42 * time.Second), - MetricsPath: "/metrics", - Scheme: "http", + JobName: "podMonitor/operator/podmonitor/1", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Hour), + ScrapeTimeout: model.Duration(42 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/metrics", + Scheme: "http", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, @@ -176,12 +180,14 @@ func TestGeneratePodMonitorConfig(t *testing.T) { replacement: "8080" `), expected: &config.ScrapeConfig{ - JobName: "podMonitor/operator/podmonitor/1", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Hour), - ScrapeTimeout: model.Duration(42 * time.Second), - MetricsPath: "/metrics", - Scheme: "http", + JobName: "podMonitor/operator/podmonitor/1", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Hour), + ScrapeTimeout: model.Duration(42 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/metrics", + Scheme: "http", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, @@ -232,12 +238,14 @@ func TestGeneratePodMonitorConfig(t *testing.T) { replacement: "8080" `), expected: &config.ScrapeConfig{ - JobName: "podMonitor/operator/podmonitor/1", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Hour), - ScrapeTimeout: model.Duration(42 * time.Second), - MetricsPath: "/metrics", - Scheme: "http", + JobName: "podMonitor/operator/podmonitor/1", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Hour), + ScrapeTimeout: model.Duration(42 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/metrics", + Scheme: "http", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, @@ -379,13 +387,15 @@ func TestGeneratePodMonitorConfig(t *testing.T) { source_labels: [foo] `), expected: &config.ScrapeConfig{ - JobName: "podMonitor/operator/podmonitor/1", - HonorTimestamps: false, - HonorLabels: true, - ScrapeInterval: model.Duration(12 * time.Minute), - ScrapeTimeout: model.Duration(17 * time.Second), - MetricsPath: "/foo", - Scheme: "https", + JobName: "podMonitor/operator/podmonitor/1", + HonorTimestamps: false, + HonorLabels: true, + ScrapeInterval: model.Duration(12 * time.Minute), + ScrapeTimeout: model.Duration(17 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/foo", + Scheme: "https", + EnableCompression: true, Params: url.Values{ "a": []string{"b"}, }, diff --git a/internal/component/prometheus/operator/configgen/config_gen_probe_test.go b/internal/component/prometheus/operator/configgen/config_gen_probe_test.go index 25b2910a3fa1..fe448429a539 100644 --- a/internal/component/prometheus/operator/configgen/config_gen_probe_test.go +++ b/internal/component/prometheus/operator/configgen/config_gen_probe_test.go @@ -78,12 +78,14 @@ func TestGenerateProbeConfig(t *testing.T) { replacement: foo.bar `), expected: &config.ScrapeConfig{ - JobName: "probe/operator/myprobe", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Minute), - ScrapeTimeout: model.Duration(10 * time.Second), - MetricsPath: "", - Scheme: "http", + JobName: "probe/operator/myprobe", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Minute), + ScrapeTimeout: model.Duration(10 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "", + Scheme: "http", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, @@ -156,13 +158,15 @@ func TestGenerateProbeConfig(t *testing.T) { action: replace `), expected: &config.ScrapeConfig{ - JobName: "probe/default/testprobe1", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Minute), - ScrapeTimeout: model.Duration(10 * time.Second), - MetricsPath: "/probe", - Scheme: "http", - Params: url.Values{"module": []string{"http_2xx"}}, + JobName: "probe/default/testprobe1", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Minute), + ScrapeTimeout: model.Duration(10 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/probe", + Scheme: "http", + EnableCompression: true, + Params: url.Values{"module": []string{"http_2xx"}}, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, diff --git a/internal/component/prometheus/operator/configgen/config_gen_servicemonitor_test.go b/internal/component/prometheus/operator/configgen/config_gen_servicemonitor_test.go index 80fb36e87e42..53a5d3ca2573 100644 --- a/internal/component/prometheus/operator/configgen/config_gen_servicemonitor_test.go +++ b/internal/component/prometheus/operator/configgen/config_gen_servicemonitor_test.go @@ -74,12 +74,14 @@ func TestGenerateServiceMonitorConfig(t *testing.T) { replacement: ${1} `), expected: &config.ScrapeConfig{ - JobName: "serviceMonitor/operator/svcmonitor/1", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Minute), - ScrapeTimeout: model.Duration(10 * time.Second), - MetricsPath: "/metrics", - Scheme: "http", + JobName: "serviceMonitor/operator/svcmonitor/1", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Minute), + ScrapeTimeout: model.Duration(10 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/metrics", + Scheme: "http", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, @@ -142,12 +144,14 @@ func TestGenerateServiceMonitorConfig(t *testing.T) { replacement: http_metrics `), expected: &config.ScrapeConfig{ - JobName: "serviceMonitor/operator/svcmonitor/1", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Minute), - ScrapeTimeout: model.Duration(10 * time.Second), - MetricsPath: "/metrics", - Scheme: "http", + JobName: "serviceMonitor/operator/svcmonitor/1", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Minute), + ScrapeTimeout: model.Duration(10 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/metrics", + Scheme: "http", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, @@ -210,12 +214,14 @@ func TestGenerateServiceMonitorConfig(t *testing.T) { replacement: "4242" `), expected: &config.ScrapeConfig{ - JobName: "serviceMonitor/operator/svcmonitor/1", - HonorTimestamps: true, - ScrapeInterval: model.Duration(time.Minute), - ScrapeTimeout: model.Duration(10 * time.Second), - MetricsPath: "/metrics", - Scheme: "http", + JobName: "serviceMonitor/operator/svcmonitor/1", + HonorTimestamps: true, + ScrapeInterval: model.Duration(time.Minute), + ScrapeTimeout: model.Duration(10 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/metrics", + Scheme: "http", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, @@ -377,10 +383,12 @@ func TestGenerateServiceMonitorConfig(t *testing.T) { Params: url.Values{ "a": []string{"b"}, }, - ScrapeInterval: model.Duration(12 * time.Minute), - ScrapeTimeout: model.Duration(17 * time.Second), - MetricsPath: "/foo", - Scheme: "https", + ScrapeInterval: model.Duration(12 * time.Minute), + ScrapeTimeout: model.Duration(17 * time.Second), + ScrapeProtocols: config.DefaultScrapeProtocols, + MetricsPath: "/foo", + Scheme: "https", + EnableCompression: true, HTTPClientConfig: commonConfig.HTTPClientConfig{ FollowRedirects: falseVal, EnableHTTP2: false, diff --git a/internal/component/prometheus/scrape/scrape.go b/internal/component/prometheus/scrape/scrape.go index e87dc5e10820..a664ec3a5b3b 100644 --- a/internal/component/prometheus/scrape/scrape.go +++ b/internal/component/prometheus/scrape/scrape.go @@ -18,11 +18,13 @@ import ( "github.com/grafana/agent/internal/service/http" "github.com/grafana/agent/internal/service/labelstore" "github.com/grafana/agent/internal/useragent" + "github.com/grafana/agent/internal/util" client_prometheus "github.com/prometheus/client_golang/prometheus" config_util "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/prometheus/config" "github.com/prometheus/prometheus/discovery/targetgroup" + "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/scrape" "github.com/prometheus/prometheus/storage" ) @@ -63,6 +65,11 @@ type Arguments struct { ScrapeInterval time.Duration `river:"scrape_interval,attr,optional"` // The timeout for scraping targets of this config. ScrapeTimeout time.Duration `river:"scrape_timeout,attr,optional"` + // The protocols to negotiate during a scrape. It tells clients what + // protocol are accepted by Prometheus and with what preference (most wanted is first). + // Supported values (case sensitive): PrometheusProto, OpenMetricsText0.0.1, + // OpenMetricsText1.0.0, PrometheusText0.0.4. + ScrapeProtocols []string `river:"scrape_protocols,attr,optional"` // The HTTP resource path on which to fetch metrics from targets. MetricsPath string `river:"metrics_path,attr,optional"` // The URL scheme with which to fetch metrics from targets. @@ -89,12 +96,23 @@ type Arguments struct { HTTPClientConfig component_config.HTTPClientConfig `river:",squash"` // Scrape Options - ExtraMetrics bool `river:"extra_metrics,attr,optional"` - EnableProtobufNegotiation bool `river:"enable_protobuf_negotiation,attr,optional"` + ExtraMetrics bool `river:"extra_metrics,attr,optional"` Clustering cluster.ComponentBlock `river:"clustering,block,optional"` } +var defaultScrapeProtocols = convertDefaultScrapeProtocols() + +func convertDefaultScrapeProtocols() []string { + // We use `DefaultProtoFirstScrapeProtocols` to keep the native histograms disabled by default. + // See https://github.com/prometheus/prometheus/pull/12738/files#diff-17f1012e0c2fbd9bcd8dff3c23b18ff4b6676eef3beca6f8a3e72e6a36633334R64-R68 + protocols := make([]string, 0, len(config.DefaultScrapeProtocols)) + for _, p := range config.DefaultScrapeProtocols { + protocols = append(protocols, string(p)) + } + return protocols +} + // SetToDefault implements river.Defaulter. func (arg *Arguments) SetToDefault() { *arg = Arguments{ @@ -106,6 +124,7 @@ func (arg *Arguments) SetToDefault() { HTTPClientConfig: component_config.DefaultHTTPClientConfig, ScrapeInterval: 1 * time.Minute, // From config.DefaultGlobalConfig ScrapeTimeout: 10 * time.Second, // From config.DefaultGlobalConfig + ScrapeProtocols: defaultScrapeProtocols, } } @@ -115,6 +134,19 @@ func (arg *Arguments) Validate() error { return fmt.Errorf("scrape_timeout (%s) greater than scrape_interval (%s) for scrape config with job name %q", arg.ScrapeTimeout, arg.ScrapeInterval, arg.JobName) } + // Validate scrape protocols + existing := make(map[string]struct{}) + for _, p := range arg.ScrapeProtocols { + if _, ok := existing[p]; ok { + return fmt.Errorf("duplicate scrape protocol %q: make sure the scrape protocols provided are unique", p) + } + promSP := config.ScrapeProtocol(p) + if err := promSP.Validate(); err != nil { + return fmt.Errorf("invalid scrape protocol %q: %w", p, err) + } + existing[p] = struct{}{} + } + // We must explicitly Validate because HTTPClientConfig is squashed and it won't run otherwise return arg.HTTPClientConfig.Validate() } @@ -131,6 +163,8 @@ type Component struct { scraper *scrape.Manager appendable *prometheus.Fanout targetsGauge client_prometheus.Gauge + + reg *util.Unregisterer } var ( @@ -163,9 +197,13 @@ func New(o component.Options, args Arguments) (*Component, error) { HTTPClientOptions: []config_util.HTTPClientOption{ config_util.WithDialContextFunc(httpData.DialFunc), }, - EnableProtobufNegotiation: args.EnableProtobufNegotiation, } - scraper := scrape.NewManager(scrapeOptions, o.Logger, flowAppendable) + + wrappedReg := util.WrapWithUnregisterer(o.Registerer) + scraper, err := scrape.NewManager(scrapeOptions, o.Logger, flowAppendable, wrappedReg) + if err != nil { + return nil, fmt.Errorf("failed to create scrape manager: %w", err) + } targetsGauge := client_prometheus.NewGauge(client_prometheus.GaugeOpts{ Name: "agent_prometheus_scrape_targets_gauge", @@ -182,6 +220,7 @@ func New(o component.Options, args Arguments) (*Component, error) { scraper: scraper, appendable: flowAppendable, targetsGauge: targetsGauge, + reg: wrappedReg, } // Call to Update() to set the receivers and targets once at the start. @@ -194,6 +233,7 @@ func New(o component.Options, args Arguments) (*Component, error) { // Run implements component.Component. func (c *Component) Run(ctx context.Context) error { + defer c.reg.UnregisterAll() defer c.scraper.Stop() targetSetsChan := make(chan map[string][]*targetgroup.Group) @@ -306,6 +346,13 @@ func getPromScrapeConfigs(jobName string, c Arguments) *config.ScrapeConfig { dec.LabelNameLengthLimit = c.LabelNameLengthLimit dec.LabelValueLengthLimit = c.LabelValueLengthLimit + // Scrape protocols + scrapeProtocols := make([]config.ScrapeProtocol, 0, len(c.ScrapeProtocols)) + for _, p := range c.ScrapeProtocols { + scrapeProtocols = append(scrapeProtocols, config.ScrapeProtocol(p)) + } + dec.ScrapeProtocols = scrapeProtocols + // HTTP scrape client settings dec.HTTPClientConfig = *c.HTTPClientConfig.Convert() return &dec @@ -345,6 +392,7 @@ type TargetStatus struct { func BuildTargetStatuses(targets map[string][]*scrape.Target) []TargetStatus { var res []TargetStatus + b := labels.NewScratchBuilder(0) for job, stt := range targets { for _, st := range stt { var lastError string @@ -356,7 +404,7 @@ func BuildTargetStatuses(targets map[string][]*scrape.Target) []TargetStatus { JobName: job, URL: st.URL().String(), Health: string(st.Health()), - Labels: st.Labels().Map(), + Labels: st.Labels(&b).Map(), LastError: lastError, LastScrape: st.LastScrape(), LastScrapeDuration: st.LastScrapeDuration(), diff --git a/internal/converter/internal/prometheusconvert/component/scrape.go b/internal/converter/internal/prometheusconvert/component/scrape.go index c22b8470daed..7c2c827a366d 100644 --- a/internal/converter/internal/prometheusconvert/component/scrape.go +++ b/internal/converter/internal/prometheusconvert/component/scrape.go @@ -46,29 +46,36 @@ func toScrapeArguments(scrapeConfig *prom_config.ScrapeConfig, forwardTo []stora return nil } + // Scrape protocols + scrapeProtocols := make([]string, 0, len(scrapeConfig.ScrapeProtocols)) + for _, p := range scrapeConfig.ScrapeProtocols { + scrapeProtocols = append(scrapeProtocols, string(p)) + } + return &scrape.Arguments{ - Targets: targets, - ForwardTo: forwardTo, - JobName: scrapeConfig.JobName, - HonorLabels: scrapeConfig.HonorLabels, - HonorTimestamps: scrapeConfig.HonorTimestamps, - TrackTimestampsStaleness: scrapeConfig.TrackTimestampsStaleness, - Params: scrapeConfig.Params, - ScrapeClassicHistograms: scrapeConfig.ScrapeClassicHistograms, - ScrapeInterval: time.Duration(scrapeConfig.ScrapeInterval), - ScrapeTimeout: time.Duration(scrapeConfig.ScrapeTimeout), - MetricsPath: scrapeConfig.MetricsPath, - Scheme: scrapeConfig.Scheme, - BodySizeLimit: scrapeConfig.BodySizeLimit, - SampleLimit: scrapeConfig.SampleLimit, - TargetLimit: scrapeConfig.TargetLimit, - LabelLimit: scrapeConfig.LabelLimit, - LabelNameLengthLimit: scrapeConfig.LabelNameLengthLimit, - LabelValueLengthLimit: scrapeConfig.LabelValueLengthLimit, - HTTPClientConfig: *common.ToHttpClientConfig(&scrapeConfig.HTTPClientConfig), - ExtraMetrics: false, - EnableProtobufNegotiation: false, - Clustering: cluster.ComponentBlock{Enabled: false}, + Targets: targets, + ForwardTo: forwardTo, + JobName: scrapeConfig.JobName, + HonorLabels: scrapeConfig.HonorLabels, + HonorTimestamps: scrapeConfig.HonorTimestamps, + TrackTimestampsStaleness: scrapeConfig.TrackTimestampsStaleness, + Params: scrapeConfig.Params, + ScrapeClassicHistograms: scrapeConfig.ScrapeClassicHistograms, + ScrapeInterval: time.Duration(scrapeConfig.ScrapeInterval), + ScrapeTimeout: time.Duration(scrapeConfig.ScrapeTimeout), + //TODO: Do we need to deep copy the slice? + ScrapeProtocols: scrapeProtocols, + MetricsPath: scrapeConfig.MetricsPath, + Scheme: scrapeConfig.Scheme, + BodySizeLimit: scrapeConfig.BodySizeLimit, + SampleLimit: scrapeConfig.SampleLimit, + TargetLimit: scrapeConfig.TargetLimit, + LabelLimit: scrapeConfig.LabelLimit, + LabelNameLengthLimit: scrapeConfig.LabelNameLengthLimit, + LabelValueLengthLimit: scrapeConfig.LabelValueLengthLimit, + HTTPClientConfig: *common.ToHttpClientConfig(&scrapeConfig.HTTPClientConfig), + ExtraMetrics: false, + Clustering: cluster.ComponentBlock{Enabled: false}, } } diff --git a/internal/converter/internal/staticconvert/internal/build/builder_integrations.go b/internal/converter/internal/staticconvert/internal/build/builder_integrations.go index a76f6446ccca..69ec8f896ed1 100644 --- a/internal/converter/internal/staticconvert/internal/build/builder_integrations.go +++ b/internal/converter/internal/staticconvert/internal/build/builder_integrations.go @@ -173,6 +173,9 @@ func (b *ConfigBuilder) appendExporter(commonConfig *int_config.Common, name str scrapeConfig.ScrapeTimeout = b.cfg.Integrations.ConfigV1.PrometheusGlobalConfig.ScrapeTimeout } + // TODO: Consider making this configurable if we add static mode support for native histograms. + scrapeConfig.ScrapeProtocols = prom_config.DefaultScrapeProtocols + scrapeConfigs := []*prom_config.ScrapeConfig{&scrapeConfig} promConfig := &prom_config.Config{ diff --git a/internal/converter/internal/staticconvert/testdata/integrations.river b/internal/converter/internal/staticconvert/testdata/integrations.river index 201f5e99e1c2..f44f8e214633 100644 --- a/internal/converter/internal/staticconvert/testdata/integrations.river +++ b/internal/converter/internal/staticconvert/testdata/integrations.river @@ -10,9 +10,10 @@ discovery.relabel "integrations_agent" { } prometheus.scrape "integrations_agent" { - targets = discovery.relabel.integrations_agent.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/agent" + targets = discovery.relabel.integrations_agent.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/agent" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -45,9 +46,10 @@ discovery.relabel "integrations_apache_http" { } prometheus.scrape "integrations_apache_http" { - targets = discovery.relabel.integrations_apache_http.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/apache_http" + targets = discovery.relabel.integrations_apache_http.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/apache_http" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -77,9 +79,10 @@ discovery.relabel "integrations_blackbox" { } prometheus.scrape "integrations_blackbox" { - targets = discovery.relabel.integrations_blackbox.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/blackbox" + targets = discovery.relabel.integrations_blackbox.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/blackbox" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -114,9 +117,10 @@ discovery.relabel "integrations_snmp" { } prometheus.scrape "integrations_snmp" { - targets = discovery.relabel.integrations_snmp.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/snmp" + targets = discovery.relabel.integrations_snmp.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/snmp" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -141,9 +145,10 @@ discovery.relabel "integrations_azure_exporter" { } prometheus.scrape "integrations_azure_exporter" { - targets = discovery.relabel.integrations_azure_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/azure_exporter" + targets = discovery.relabel.integrations_azure_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/azure_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -164,9 +169,10 @@ discovery.relabel "integrations_cadvisor" { } prometheus.scrape "integrations_cadvisor" { - targets = discovery.relabel.integrations_cadvisor.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/cadvisor" + targets = discovery.relabel.integrations_cadvisor.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/cadvisor" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -236,9 +242,10 @@ discovery.relabel "integrations_cloudwatch_exporter" { } prometheus.scrape "integrations_cloudwatch_exporter" { - targets = discovery.relabel.integrations_cloudwatch_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/cloudwatch_exporter" + targets = discovery.relabel.integrations_cloudwatch_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/cloudwatch_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -259,9 +266,10 @@ discovery.relabel "integrations_consul_exporter" { } prometheus.scrape "integrations_consul_exporter" { - targets = discovery.relabel.integrations_consul_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/consul_exporter" + targets = discovery.relabel.integrations_consul_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/consul_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -290,9 +298,10 @@ discovery.relabel "integrations_dnsmasq_exporter" { } prometheus.scrape "integrations_dnsmasq_exporter" { - targets = discovery.relabel.integrations_dnsmasq_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/dnsmasq_exporter" + targets = discovery.relabel.integrations_dnsmasq_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/dnsmasq_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -313,9 +322,10 @@ discovery.relabel "integrations_elasticsearch_exporter" { } prometheus.scrape "integrations_elasticsearch_exporter" { - targets = discovery.relabel.integrations_elasticsearch_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/elasticsearch_exporter" + targets = discovery.relabel.integrations_elasticsearch_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/elasticsearch_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -340,9 +350,10 @@ discovery.relabel "integrations_gcp_exporter" { } prometheus.scrape "integrations_gcp_exporter" { - targets = discovery.relabel.integrations_gcp_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/gcp_exporter" + targets = discovery.relabel.integrations_gcp_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/gcp_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -366,9 +377,10 @@ discovery.relabel "integrations_github_exporter" { } prometheus.scrape "integrations_github_exporter" { - targets = discovery.relabel.integrations_github_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/github_exporter" + targets = discovery.relabel.integrations_github_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/github_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -389,9 +401,10 @@ discovery.relabel "integrations_kafka_exporter" { } prometheus.scrape "integrations_kafka_exporter" { - targets = discovery.relabel.integrations_kafka_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/kafka_exporter" + targets = discovery.relabel.integrations_kafka_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/kafka_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -420,9 +433,10 @@ discovery.relabel "integrations_memcached_exporter" { } prometheus.scrape "integrations_memcached_exporter" { - targets = discovery.relabel.integrations_memcached_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/memcached_exporter" + targets = discovery.relabel.integrations_memcached_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/memcached_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -463,9 +477,10 @@ discovery.relabel "integrations_mongodb_exporter" { } prometheus.scrape "integrations_mongodb_exporter" { - targets = discovery.relabel.integrations_mongodb_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/mongodb_exporter" + targets = discovery.relabel.integrations_mongodb_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/mongodb_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -493,9 +508,10 @@ discovery.relabel "integrations_mssql" { } prometheus.scrape "integrations_mssql" { - targets = discovery.relabel.integrations_mssql.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/mssql" + targets = discovery.relabel.integrations_mssql.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/mssql" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -524,9 +540,10 @@ discovery.relabel "integrations_mysqld_exporter" { } prometheus.scrape "integrations_mysqld_exporter" { - targets = discovery.relabel.integrations_mysqld_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/mysqld_exporter" + targets = discovery.relabel.integrations_mysqld_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/mysqld_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -562,9 +579,10 @@ discovery.relabel "integrations_node_exporter" { } prometheus.scrape "integrations_node_exporter" { - targets = discovery.relabel.integrations_node_exporter.output - forward_to = [prometheus.relabel.integrations_node_exporter.receiver] - job_name = "integrations/node_exporter" + targets = discovery.relabel.integrations_node_exporter.output + forward_to = [prometheus.relabel.integrations_node_exporter.receiver] + job_name = "integrations/node_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -601,10 +619,11 @@ discovery.relabel "integrations_oracledb" { } prometheus.scrape "integrations_oracledb" { - targets = discovery.relabel.integrations_oracledb.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/oracledb" - scrape_timeout = "1m0s" + targets = discovery.relabel.integrations_oracledb.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/oracledb" + scrape_timeout = "1m0s" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -633,9 +652,10 @@ discovery.relabel "integrations_postgres_exporter" { } prometheus.scrape "integrations_postgres_exporter" { - targets = discovery.relabel.integrations_postgres_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/postgres_exporter" + targets = discovery.relabel.integrations_postgres_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/postgres_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -661,9 +681,10 @@ discovery.relabel "integrations_process_exporter" { } prometheus.scrape "integrations_process_exporter" { - targets = discovery.relabel.integrations_process_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/process_exporter" + targets = discovery.relabel.integrations_process_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/process_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -693,9 +714,10 @@ discovery.relabel "integrations_redis_exporter" { } prometheus.scrape "integrations_redis_exporter" { - targets = discovery.relabel.integrations_redis_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/redis_exporter" + targets = discovery.relabel.integrations_redis_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/redis_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -721,9 +743,10 @@ discovery.relabel "integrations_snowflake" { } prometheus.scrape "integrations_snowflake" { - targets = discovery.relabel.integrations_snowflake.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/snowflake" + targets = discovery.relabel.integrations_snowflake.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/snowflake" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -746,10 +769,11 @@ discovery.relabel "integrations_squid" { } prometheus.scrape "integrations_squid" { - targets = discovery.relabel.integrations_squid.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/squid" - scrape_timeout = "1m0s" + targets = discovery.relabel.integrations_squid.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/squid" + scrape_timeout = "1m0s" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" @@ -770,9 +794,10 @@ discovery.relabel "integrations_statsd_exporter" { } prometheus.scrape "integrations_statsd_exporter" { - targets = discovery.relabel.integrations_statsd_exporter.output - forward_to = [prometheus.remote_write.integrations.receiver] - job_name = "integrations/statsd_exporter" + targets = discovery.relabel.integrations_statsd_exporter.output + forward_to = [prometheus.remote_write.integrations.receiver] + job_name = "integrations/statsd_exporter" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] tls_config { ca_file = "/something7.cert" diff --git a/internal/static/config/config_test.go b/internal/static/config/config_test.go index 8b7e7aef72b1..2bdee8b6a58d 100644 --- a/internal/static/config/config_test.go +++ b/internal/static/config/config_test.go @@ -79,6 +79,7 @@ metrics: Prometheus: promCfg.GlobalConfig{ ScrapeInterval: model.Duration(1 * time.Minute), ScrapeTimeout: model.Duration(33 * time.Second), + ScrapeProtocols: promCfg.DefaultScrapeProtocols, EvaluationInterval: model.Duration(1 * time.Minute), }, } @@ -101,6 +102,7 @@ metrics: Prometheus: promCfg.GlobalConfig{ ScrapeInterval: model.Duration(1 * time.Minute), ScrapeTimeout: model.Duration(33 * time.Second), + ScrapeProtocols: promCfg.DefaultScrapeProtocols, EvaluationInterval: model.Duration(1 * time.Minute), }, } diff --git a/internal/static/integrations/node_exporter/node_exporter_test.go b/internal/static/integrations/node_exporter/node_exporter_test.go index 3fe58233cf8d..d0dd64e481ce 100644 --- a/internal/static/integrations/node_exporter/node_exporter_test.go +++ b/internal/static/integrations/node_exporter/node_exporter_test.go @@ -55,7 +55,7 @@ func TestNodeExporter(t *testing.T) { body, err := io.ReadAll(res.Body) require.NoError(t, err) - p := textparse.NewPromParser(body) + p := textparse.NewPromParser(body, nil) for { _, err := p.Next() if err == io.EOF { diff --git a/internal/static/integrations/redis_exporter/redis_exporter_test.go b/internal/static/integrations/redis_exporter/redis_exporter_test.go index 6b10be315f2b..8a71d16243cc 100644 --- a/internal/static/integrations/redis_exporter/redis_exporter_test.go +++ b/internal/static/integrations/redis_exporter/redis_exporter_test.go @@ -180,7 +180,7 @@ func TestRedisCases(t *testing.T) { foundMetricNames[name] = false } - p := textparse.NewPromParser(body) + p := textparse.NewPromParser(body, nil) for { entry, err := p.Next() if err == io.EOF { diff --git a/internal/static/integrations/v2/autoscrape/appender.go b/internal/static/integrations/v2/autoscrape/appender.go index 04be1c7d6ada..0a0b6f9072a4 100644 --- a/internal/static/integrations/v2/autoscrape/appender.go +++ b/internal/static/integrations/v2/autoscrape/appender.go @@ -33,6 +33,10 @@ func (fa *failedAppender) AppendExemplar(ref storage.SeriesRef, l labels.Labels, return 0, fmt.Errorf("no such instance %s", fa.instanceName) } +func (fa *failedAppender) AppendCTZeroSample(ref storage.SeriesRef, l labels.Labels, t int64, ct int64) (storage.SeriesRef, error) { + return 0, fmt.Errorf("no such instance %s", fa.instanceName) +} + func (fa *failedAppender) UpdateMetadata(ref storage.SeriesRef, l labels.Labels, m metadata.Metadata) (storage.SeriesRef, error) { return 0, fmt.Errorf("no such instance %s", fa.instanceName) } diff --git a/internal/static/integrations/v2/autoscrape/autoscrape.go b/internal/static/integrations/v2/autoscrape/autoscrape.go index 8d1bd02ae07f..acf7d75c6b8e 100644 --- a/internal/static/integrations/v2/autoscrape/autoscrape.go +++ b/internal/static/integrations/v2/autoscrape/autoscrape.go @@ -10,6 +10,7 @@ import ( "github.com/grafana/agent/internal/static/metrics" "github.com/grafana/agent/internal/static/metrics/instance" "github.com/grafana/agent/internal/static/server" + "github.com/grafana/agent/internal/util/prom_global_metrics" "github.com/oklog/run" config_util "github.com/prometheus/common/config" "github.com/prometheus/common/model" @@ -214,16 +215,31 @@ func newInstanceScraper( config_util.WithDialContextFunc(dialerFunc), ), } - sd := discovery.NewManager(ctx, l, sdOpts...) - sm := scrape.NewManager(&scrape.Options{ - HTTPClientOptions: []config_util.HTTPClientOption{ - // If dialerFunc is nil, scrape.NewManager will use Go's default dialer. - config_util.WithDialContextFunc(dialerFunc), + sd := discovery.NewManager( + ctx, + l, + prom_global_metrics.PromDiscoveryManagerRegistry, + prom_global_metrics.PromSdMetrics, + sdOpts..., + ) + + sm, err := scrape.NewManager( + &scrape.Options{ + HTTPClientOptions: []config_util.HTTPClientOption{ + // If dialerFunc is nil, scrape.NewManager will use Go's default dialer. + config_util.WithDialContextFunc(dialerFunc), + }, }, - }, l, &agentAppender{ - inst: instanceName, - is: s, - }) + l, + &agentAppender{ + inst: instanceName, + is: s, + }, + prom_global_metrics.PromScrapeManagerRegistry, + ) + if err != nil { + panic(err) + } is := &instanceScraper{ log: l, diff --git a/internal/static/integrations/v2/autoscrape/autoscrape_test.go b/internal/static/integrations/v2/autoscrape/autoscrape_test.go index 9aaa148ecdc8..3e3115cde7cf 100644 --- a/internal/static/integrations/v2/autoscrape/autoscrape_test.go +++ b/internal/static/integrations/v2/autoscrape/autoscrape_test.go @@ -59,6 +59,7 @@ func TestAutoscrape(t *testing.T) { Source: t.Name(), }}, } + require.NoError(t, cfg.Validate(prom_config.DefaultGlobalConfig)) return cfg }(), }}) @@ -84,15 +85,19 @@ var noOpAppender = mockAppender{ AppendHistogramFunc: func(ref storage.SeriesRef, l labels.Labels, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (storage.SeriesRef, error) { return storage.SeriesRef(globalRef.Inc()), nil }, + AppendCTZeroSampleFunc: func(ref storage.SeriesRef, l labels.Labels, t int64, ct int64) (storage.SeriesRef, error) { + return storage.SeriesRef(globalRef.Inc()), nil + }, } type mockAppender struct { - AppendFunc func(ref storage.SeriesRef, l labels.Labels, t int64, v float64) (storage.SeriesRef, error) - CommitFunc func() error - RollbackFunc func() error - AppendExemplarFunc func(ref storage.SeriesRef, l labels.Labels, e exemplar.Exemplar) (storage.SeriesRef, error) - UpdateMetadataFunc func(ref storage.SeriesRef, l labels.Labels, m metadata.Metadata) (storage.SeriesRef, error) - AppendHistogramFunc func(ref storage.SeriesRef, l labels.Labels, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (storage.SeriesRef, error) + AppendFunc func(ref storage.SeriesRef, l labels.Labels, t int64, v float64) (storage.SeriesRef, error) + CommitFunc func() error + RollbackFunc func() error + AppendExemplarFunc func(ref storage.SeriesRef, l labels.Labels, e exemplar.Exemplar) (storage.SeriesRef, error) + UpdateMetadataFunc func(ref storage.SeriesRef, l labels.Labels, m metadata.Metadata) (storage.SeriesRef, error) + AppendHistogramFunc func(ref storage.SeriesRef, l labels.Labels, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (storage.SeriesRef, error) + AppendCTZeroSampleFunc func(ref storage.SeriesRef, l labels.Labels, t int64, ct int64) (storage.SeriesRef, error) } func (ma *mockAppender) Append(ref storage.SeriesRef, l labels.Labels, t int64, v float64) (storage.SeriesRef, error) { @@ -110,6 +115,10 @@ func (ma *mockAppender) AppendHistogram(ref storage.SeriesRef, l labels.Labels, return ma.AppendHistogramFunc(ref, l, t, h, fh) } +func (ma *mockAppender) AppendCTZeroSample(ref storage.SeriesRef, l labels.Labels, t int64, ct int64) (storage.SeriesRef, error) { + return ma.AppendCTZeroSampleFunc(ref, l, t, ct) +} + type mockInstance struct { instance.NoOpInstance app storage.Appender diff --git a/internal/static/integrations/v2/integrations.go b/internal/static/integrations/v2/integrations.go index 1896280e3f13..719bbcb0fa77 100644 --- a/internal/static/integrations/v2/integrations.go +++ b/internal/static/integrations/v2/integrations.go @@ -32,6 +32,8 @@ import ( "github.com/grafana/agent/internal/static/traces" "github.com/prometheus/prometheus/discovery" "github.com/prometheus/prometheus/discovery/targetgroup" + + _ "github.com/grafana/agent/internal/util/otelfeaturegatefix" // Gracefully handle duplicate OTEL feature gates ) var ( diff --git a/internal/static/logs/logs.go b/internal/static/logs/logs.go index 2d6c478fe510..161d421fa63c 100644 --- a/internal/static/logs/logs.go +++ b/internal/static/logs/logs.go @@ -23,6 +23,8 @@ import ( "github.com/grafana/loki/clients/pkg/promtail/wal" "github.com/grafana/loki/pkg/tracing" "github.com/prometheus/client_golang/prometheus" + + _ "github.com/grafana/agent/internal/util/otelfeaturegatefix" // Gracefully handle duplicate OTEL feature gates ) func init() { diff --git a/internal/static/logs/logs_test.go b/internal/static/logs/logs_test.go index 255c99b55f59..a54b2fcdfc9d 100644 --- a/internal/static/logs/logs_test.go +++ b/internal/static/logs/logs_test.go @@ -54,7 +54,7 @@ func TestLogs(t *testing.T) { }) go func() { _ = http.Serve(lis, http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { - req, err := push.ParseRequest(log.NewNopLogger(), "user_id", r, nil, nil, push.ParseLokiRequest) + req, err := push.ParseRequest(log.NewNopLogger(), "user_id", r, nil, nil, push.ParseLokiRequest, nil) require.NoError(t, err) pushes <- req diff --git a/internal/static/metrics/agent.go b/internal/static/metrics/agent.go index 0c2c74530050..e3384739a755 100644 --- a/internal/static/metrics/agent.go +++ b/internal/static/metrics/agent.go @@ -20,7 +20,6 @@ import ( "github.com/grafana/agent/internal/static/metrics/cluster/client" "github.com/grafana/agent/internal/static/metrics/instance" "github.com/grafana/agent/internal/util" - "github.com/prometheus/prometheus/discovery" ) // DefaultConfig is the default settings for the Prometheus-lite client. @@ -155,7 +154,6 @@ type Agent struct { // New creates and starts a new Agent. func New(reg prometheus.Registerer, cfg Config, logger log.Logger) (*Agent, error) { // This registers discovery metrics with the default registry which should be the reg specified above. - discovery.RegisterMetrics() return newAgent(reg, cfg, logger, defaultInstanceFactory) } diff --git a/internal/static/metrics/http.go b/internal/static/metrics/http.go index 51e5aa64e6a6..db53b358987f 100644 --- a/internal/static/metrics/http.go +++ b/internal/static/metrics/http.go @@ -59,6 +59,7 @@ func ListTargetsHandler(targets map[string]TargetSet) http.Handler { return http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) { resp := ListTargetsResponse{} + b := labels.NewScratchBuilder(0) for instance, tset := range targets { for key, targets := range tset { for _, tgt := range targets { @@ -74,7 +75,7 @@ func ListTargetsHandler(targets map[string]TargetSet) http.Handler { Endpoint: tgt.URL().String(), State: string(tgt.Health()), DiscoveredLabels: tgt.DiscoveredLabels(), - Labels: tgt.Labels(), + Labels: tgt.Labels(&b), LastScrape: tgt.LastScrape(), ScrapeDuration: tgt.LastScrapeDuration().Milliseconds(), ScrapeError: lastError, diff --git a/internal/static/metrics/instance/configstore/api_test.go b/internal/static/metrics/instance/configstore/api_test.go index 71bd55881047..3e5b2ae38861 100644 --- a/internal/static/metrics/instance/configstore/api_test.go +++ b/internal/static/metrics/instance/configstore/api_test.go @@ -135,6 +135,7 @@ func TestAPI_GetConfiguration_ScrubSecrets(t *testing.T) { scrape_configs: - job_name: local_scrape follow_redirects: true + enable_compression: true enable_http2: true honor_timestamps: true metrics_path: /metrics diff --git a/internal/static/metrics/instance/global.go b/internal/static/metrics/instance/global.go index 38643b7a94f9..246559cd4d69 100644 --- a/internal/static/metrics/instance/global.go +++ b/internal/static/metrics/instance/global.go @@ -8,8 +8,14 @@ import ( ) // DefaultGlobalConfig holds default global settings to be used across all instances. -var DefaultGlobalConfig = GlobalConfig{ - Prometheus: config.DefaultGlobalConfig, +var DefaultGlobalConfig = globalConfig() + +func globalConfig() GlobalConfig { + cfg := GlobalConfig{Prometheus: config.DefaultGlobalConfig} + // We use `DefaultScrapeProtocols` to keep the native histograms disabled by default. + // See https://github.com/prometheus/prometheus/pull/12738/files#diff-17f1012e0c2fbd9bcd8dff3c23b18ff4b6676eef3beca6f8a3e72e6a36633334R64-R68 + cfg.Prometheus.ScrapeProtocols = config.DefaultScrapeProtocols + return cfg } // GlobalConfig holds global settings that apply to all instances by default. diff --git a/internal/static/metrics/instance/host_filter_test.go b/internal/static/metrics/instance/host_filter_test.go index 8eca3a3f519a..e5cd12c3f45a 100644 --- a/internal/static/metrics/instance/host_filter_test.go +++ b/internal/static/metrics/instance/host_filter_test.go @@ -174,6 +174,7 @@ func TestHostFilter_PatchSD(t *testing.T) { scheme: http track_timestamps_staleness: false follow_redirects: true + enable_compression: true enable_http2: true kubernetes_sd_configs: - role: service diff --git a/internal/static/metrics/instance/instance.go b/internal/static/metrics/instance/instance.go index a0de2176272f..600ee8766e6a 100644 --- a/internal/static/metrics/instance/instance.go +++ b/internal/static/metrics/instance/instance.go @@ -13,6 +13,7 @@ import ( "net/http" "os" "path/filepath" + "strings" "sync" "time" @@ -22,6 +23,7 @@ import ( "github.com/grafana/agent/internal/static/metrics/wal" "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/internal/util" + "github.com/grafana/agent/internal/util/prom_global_metrics" "github.com/oklog/run" "github.com/prometheus/client_golang/prometheus" config_util "github.com/prometheus/common/config" @@ -156,6 +158,13 @@ func (c *Config) ApplyDefaults(global GlobalConfig) error { return fmt.Errorf("found multiple scrape configs with job name %q", sc.JobName) } jobNames[sc.JobName] = struct{}{} + + if sc.ScrapeProtocols == nil { + sc.ScrapeProtocols = c.global.Prometheus.ScrapeProtocols + } + if err := validateScrapeProtocols(sc.ScrapeProtocols); err != nil { + return fmt.Errorf("invalid scrape protocols provided: %w", err) + } } rwNames := map[string]struct{}{} @@ -195,6 +204,24 @@ func (c *Config) ApplyDefaults(global GlobalConfig) error { return nil } +// validateScrapeProtocols return errors if we see problems with accept scrape protocols option. +func validateScrapeProtocols(sps []config.ScrapeProtocol) error { + if len(sps) == 0 { + return errors.New("scrape_protocols cannot be empty") + } + dups := map[string]struct{}{} + for _, sp := range sps { + if _, ok := dups[strings.ToLower(string(sp))]; ok { + return fmt.Errorf("duplicated protocol in scrape_protocols, got %v", sps) + } + if err := sp.Validate(); err != nil { + return fmt.Errorf("scrape_protocols: %w", err) + } + dups[strings.ToLower(string(sp))] = struct{}{} + } + return nil +} + // Clone makes a deep copy of the config along with global settings. func (c *Config) Clone() (Config, error) { bb, err := MarshalConfig(c, false) @@ -617,7 +644,13 @@ func (i *Instance) newDiscoveryManager(ctx context.Context, cfg *Config) (*disco ctx, cancel := context.WithCancel(ctx) logger := log.With(i.logger, "component", "discovery manager") - manager := discovery.NewManager(ctx, logger, discovery.Name("scrape")) + manager := discovery.NewManager( + ctx, + logger, + prom_global_metrics.PromDiscoveryManagerRegistry, + prom_global_metrics.PromSdMetrics, + discovery.Name("scrape"), + ) // TODO(rfratto): refactor this to a function? // TODO(rfratto): ensure job name name is unique @@ -783,7 +816,16 @@ func newScrapeManager(o *scrape.Options, logger log.Logger, app storage.Appendab // data race of modifying that global, we lock a mutex here briefly. managerMtx.Lock() defer managerMtx.Unlock() - return scrape.NewManager(o, logger, app) + mgr, err := scrape.NewManager( + o, + logger, + app, + prom_global_metrics.PromScrapeManagerRegistry, + ) + if err != nil { + panic(err) + } + return mgr } type runGroupContext struct { diff --git a/internal/static/metrics/instance/instance_test.go b/internal/static/metrics/instance/instance_test.go index 0f97aecac232..57b45acb849c 100644 --- a/internal/static/metrics/instance/instance_test.go +++ b/internal/static/metrics/instance/instance_test.go @@ -306,13 +306,12 @@ func getTestServer(t *testing.T) (addr string, closeFunc func()) { func getTestGlobalConfig(t *testing.T) GlobalConfig { t.Helper() - return GlobalConfig{ - Prometheus: config.GlobalConfig{ - ScrapeInterval: model.Duration(time.Millisecond * 50), - ScrapeTimeout: model.Duration(time.Millisecond * 25), - EvaluationInterval: model.Duration(time.Hour), - }, - } + var cfg = DefaultGlobalConfig + cfg.Prometheus.ScrapeInterval = model.Duration(time.Millisecond * 50) + cfg.Prometheus.ScrapeTimeout = model.Duration(time.Millisecond * 25) + cfg.Prometheus.EvaluationInterval = model.Duration(time.Hour) + + return cfg } func getTestConfig(t *testing.T, global *GlobalConfig, scrapeAddr string) Config { @@ -404,6 +403,10 @@ func (a *mockAppender) AppendHistogram(ref storage.SeriesRef, l labels.Labels, t return 0, nil } +func (a *mockAppender) AppendCTZeroSample(ref storage.SeriesRef, l labels.Labels, t int64, ct int64) (storage.SeriesRef, error) { + return 0, nil +} + func (a *mockAppender) Commit() error { return nil } diff --git a/internal/static/metrics/instance/marshal_test.go b/internal/static/metrics/instance/marshal_test.go index b102c3d635d2..31e30d5e842e 100644 --- a/internal/static/metrics/instance/marshal_test.go +++ b/internal/static/metrics/instance/marshal_test.go @@ -32,6 +32,7 @@ func TestMarshal_UnmarshalConfig_RetainSecrets(t *testing.T) { scrape_configs: - job_name: local_scrape follow_redirects: true + enable_compression: true enable_http2: true honor_timestamps: true metrics_path: /metrics @@ -89,6 +90,7 @@ func TestMarshal_UnmarshalConfig_ScrubSecrets(t *testing.T) { scrape_configs: - job_name: local_scrape follow_redirects: true + enable_compression: true enable_http2: true honor_timestamps: true metrics_path: /metrics diff --git a/internal/static/metrics/wal/wal.go b/internal/static/metrics/wal/wal.go index 513a43df5da1..d1c7dabb3899 100644 --- a/internal/static/metrics/wal/wal.go +++ b/internal/static/metrics/wal/wal.go @@ -783,13 +783,13 @@ func (a *appender) AppendExemplar(ref storage.SeriesRef, _ labels.Labels, e exem func (a *appender) AppendHistogram(ref storage.SeriesRef, l labels.Labels, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (storage.SeriesRef, error) { if h != nil { - if err := tsdb.ValidateHistogram(h); err != nil { + if err := h.Validate(); err != nil { return 0, err } } if fh != nil { - if err := tsdb.ValidateFloatHistogram(fh); err != nil { + if err := fh.Validate(); err != nil { return 0, err } } @@ -848,6 +848,11 @@ func (a *appender) AppendHistogram(ref storage.SeriesRef, l labels.Labels, t int return storage.SeriesRef(series.ref), nil } +func (a *appender) AppendCTZeroSample(_ storage.SeriesRef, _ labels.Labels, _ int64, _ int64) (storage.SeriesRef, error) { + // TODO(ptodev): implement this later + return 0, nil +} + func (a *appender) UpdateMetadata(ref storage.SeriesRef, _ labels.Labels, m metadata.Metadata) (storage.SeriesRef, error) { // TODO(rfratto): implement pushing metadata to WAL return 0, nil diff --git a/internal/static/traces/promsdprocessor/prom_sd_processor.go b/internal/static/traces/promsdprocessor/prom_sd_processor.go index c88bfbca33b2..37297c8ce435 100644 --- a/internal/static/traces/promsdprocessor/prom_sd_processor.go +++ b/internal/static/traces/promsdprocessor/prom_sd_processor.go @@ -9,6 +9,7 @@ import ( "github.com/grafana/agent/internal/component/discovery" promsdconsumer "github.com/grafana/agent/internal/static/traces/promsdprocessor/consumer" util "github.com/grafana/agent/internal/util/log" + "github.com/grafana/agent/internal/util/prom_global_metrics" "github.com/prometheus/prometheus/config" promdiscovery "github.com/prometheus/prometheus/discovery" "github.com/prometheus/prometheus/discovery/targetgroup" @@ -36,7 +37,13 @@ func newTraceProcessor(nextConsumer consumer.Traces, operationType string, podAs ctx, cancel := context.WithCancel(context.Background()) logger := log.With(util.Logger, "component", "traces service disco") - mgr := promdiscovery.NewManager(ctx, logger, promdiscovery.Name("traces service disco")) + mgr := promdiscovery.NewManager( + ctx, + logger, + prom_global_metrics.PromDiscoveryManagerRegistry, + prom_global_metrics.PromSdMetrics, + promdiscovery.Name("traces service disco"), + ) relabelConfigs := map[string][]*relabel.Config{} managerConfig := map[string]promdiscovery.Configs{} diff --git a/internal/static/traces/remotewriteexporter/exporter_test.go b/internal/static/traces/remotewriteexporter/exporter_test.go index 63025ec12016..2bb4c76f7d15 100644 --- a/internal/static/traces/remotewriteexporter/exporter_test.go +++ b/internal/static/traces/remotewriteexporter/exporter_test.go @@ -181,3 +181,7 @@ func (a *mockAppender) UpdateMetadata(_ storage.SeriesRef, _ labels.Labels, _ me func (a *mockAppender) AppendHistogram(_ storage.SeriesRef, _ labels.Labels, _ int64, _ *histogram.Histogram, _ *histogram.FloatHistogram) (storage.SeriesRef, error) { return 0, nil } + +func (a *mockAppender) AppendCTZeroSample(_ storage.SeriesRef, _ labels.Labels, _ int64, _ int64) (storage.SeriesRef, error) { + return 0, nil +} diff --git a/internal/static/traces/traces.go b/internal/static/traces/traces.go index 3226e8084dbd..56491fb7e711 100644 --- a/internal/static/traces/traces.go +++ b/internal/static/traces/traces.go @@ -10,6 +10,8 @@ import ( "github.com/grafana/agent/internal/util/zapadapter" prom_client "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" + + _ "github.com/grafana/agent/internal/util/otelfeaturegatefix" // Gracefully handle duplicate OTEL feature gates ) // Traces wraps the OpenTelemetry collector to enable tracing pipelines diff --git a/internal/util/otelfeaturegatefix/featuregate_override.go b/internal/util/otelfeaturegatefix/featuregate_override.go new file mode 100644 index 000000000000..aa5c2b54587a --- /dev/null +++ b/internal/util/otelfeaturegatefix/featuregate_override.go @@ -0,0 +1,13 @@ +package otelfeaturegatefix + +import "go.opentelemetry.io/collector/featuregate" + +func init() { + // Override the default behavior of the feature gate to not panic when a gate is already registered. + // TODO: Remove this once https://github.com/prometheus/prometheus/issues/13842 is completed and we upgraded Prometheus. + featuregate.GlobalRegistry().SetAlreadyRegisteredErrHandler( + func(g *featuregate.Gate, err error) *featuregate.Gate { + return g + }, + ) +} diff --git a/internal/util/prom_global_metrics/prom_global_metrics.go b/internal/util/prom_global_metrics/prom_global_metrics.go new file mode 100644 index 000000000000..32afee78f4cf --- /dev/null +++ b/internal/util/prom_global_metrics/prom_global_metrics.go @@ -0,0 +1,64 @@ +// Package prom_global_metrics is used by static mode to create and register prometheus metrics for service discovery. +// In the past, Prometheus SD metrics were registered with the global registry in the Prometheus codebase. +// This is no longer the case. Flow mode uses new Prometheus features to register metrics per component, +// which enables it to show more accurate SD metrics because each SD instance will have its own series. +// For static mode we will keep simulating the old behavior of using global metrics. +package prom_global_metrics + +import ( + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/prometheus/discovery" +) + +var PromSdMetrics map[string]discovery.DiscovererMetrics + +var PromDiscoveryManagerRegistry RecyclingRegistry +var PromScrapeManagerRegistry RecyclingRegistry + +func init() { + var err error + PromSdMetrics, err = discovery.CreateAndRegisterSDMetrics(prometheus.DefaultRegisterer) + if err != nil { + panic(err) + } + + PromDiscoveryManagerRegistry = NewRecyclingRegistry(prometheus.DefaultRegisterer) + PromScrapeManagerRegistry = NewRecyclingRegistry(prometheus.DefaultRegisterer) +} + +// RecyclingRegistry will never throw an AlreadyRegistered error. +// It's useful when you want to reuse the same metrics. +type RecyclingRegistry struct { + reg prometheus.Registerer +} + +var _ prometheus.Registerer = RecyclingRegistry{} + +func NewRecyclingRegistry(reg prometheus.Registerer) RecyclingRegistry { + return RecyclingRegistry{reg: reg} +} + +// MustRegister implements prometheus.Registerer. +func (r RecyclingRegistry) MustRegister(cols ...prometheus.Collector) { + for _, c := range cols { + err := r.Register(c) + if err != nil { + panic(err) + } + } +} + +// Register implements prometheus.Registerer. +func (r RecyclingRegistry) Register(c prometheus.Collector) error { + err := r.reg.Register(c) + if _, ok := err.(prometheus.AlreadyRegisteredError); ok { + return nil + } else { + return err + } +} + +// Unregister implements prometheus.Registerer. +func (r RecyclingRegistry) Unregister(c prometheus.Collector) bool { + return r.reg.Unregister(c) +} diff --git a/internal/util/testappender/internal/dtobuilder/dtobuilder.go b/internal/util/testappender/internal/dtobuilder/dtobuilder.go index 7af96e485d85..d13edadb2c7f 100644 --- a/internal/util/testappender/internal/dtobuilder/dtobuilder.go +++ b/internal/util/testappender/internal/dtobuilder/dtobuilder.go @@ -13,7 +13,6 @@ import ( "github.com/prometheus/prometheus/model/histogram" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/metadata" - "github.com/prometheus/prometheus/model/textparse" "google.golang.org/protobuf/types/known/timestamppb" "k8s.io/utils/ptr" ) @@ -153,15 +152,15 @@ func (b *builder) buildFamiliesFromMetadata() { } } -func textParseToMetricType(tp textparse.MetricType) dto.MetricType { +func textParseToMetricType(tp model.MetricType) dto.MetricType { switch tp { - case textparse.MetricTypeCounter: + case model.MetricTypeCounter: return dto.MetricType_COUNTER - case textparse.MetricTypeGauge: + case model.MetricTypeGauge: return dto.MetricType_GAUGE - case textparse.MetricTypeHistogram: + case model.MetricTypeHistogram: return dto.MetricType_HISTOGRAM - case textparse.MetricTypeSummary: + case model.MetricTypeSummary: return dto.MetricType_SUMMARY default: // There are other values for m.Type, but they're all diff --git a/internal/util/testappender/testappender.go b/internal/util/testappender/testappender.go index 041732900044..4e0da34098f3 100644 --- a/internal/util/testappender/testappender.go +++ b/internal/util/testappender/testappender.go @@ -121,6 +121,12 @@ func (app *Appender) AppendExemplar(ref storage.SeriesRef, l labels.Labels, e ex return 0, nil } +// AppendCTZeroSample implements storage.Appender. +func (app *Appender) AppendCTZeroSample(ref storage.SeriesRef, l labels.Labels, t int64, ct int64) (storage.SeriesRef, error) { + //TODO(ptodev): implementr this later + return 0, nil +} + // UpdateMetadata associates metadata for a given named metric. l must not be // empty. Only the `__name__` label is used from the label set; other labels // are ignored. diff --git a/internal/util/testappender/testappender_test.go b/internal/util/testappender/testappender_test.go index 797f4cfde999..1885e9a3fb8a 100644 --- a/internal/util/testappender/testappender_test.go +++ b/internal/util/testappender/testappender_test.go @@ -5,10 +5,10 @@ import ( "testing" "github.com/grafana/agent/internal/util/testappender" + "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/exemplar" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/metadata" - "github.com/prometheus/prometheus/model/textparse" "github.com/stretchr/testify/require" ) @@ -16,7 +16,7 @@ func Example() { var app testappender.Appender app.Append(0, labels.FromStrings("__name__", "example_metric", "foo", "bar"), 60, 1234) app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, }) expect := ` @@ -58,7 +58,7 @@ func TestAppender_Metadata(t *testing.T) { var app testappender.Appender app.Append(0, labels.FromStrings("__name__", "example_metric", "foo", "bar"), 60, 1234) app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, Help: "example metric", }) @@ -74,7 +74,7 @@ func TestAppender_Metadata(t *testing.T) { var app testappender.Appender app.Append(0, labels.FromStrings("__name__", "example_metric", "foo", "bar"), 60, 1234) app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, }) expect := ` @@ -90,7 +90,7 @@ func TestAppender_Types(t *testing.T) { var app testappender.Appender app.Append(0, labels.FromStrings("__name__", "example_metric", "foo", "bar"), 60, 1234) app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeUnknown, + Type: model.MetricTypeUnknown, }) expect := ` @@ -104,7 +104,7 @@ func TestAppender_Types(t *testing.T) { var app testappender.Appender app.Append(0, labels.FromStrings("__name__", "example_metric", "foo", "bar"), 60, 1234) app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeCounter, + Type: model.MetricTypeCounter, }) expect := ` @@ -118,7 +118,7 @@ func TestAppender_Types(t *testing.T) { var app testappender.Appender app.Append(0, labels.FromStrings("__name__", "example_metric", "foo", "bar"), 60, 1234) app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, }) expect := ` @@ -134,7 +134,7 @@ func TestAppender_Types(t *testing.T) { // Summaries have quantiles from 0 to 1, counts, and sums. Append the // metadata first and then append all the various samples. app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeSummary, + Type: model.MetricTypeSummary, }) app.Append(0, labels.FromStrings("__name__", "example_metric", "foo", "bar", "quantile", "0"), 10, 10) @@ -164,7 +164,7 @@ func TestAppender_Types(t *testing.T) { // Histograms have buckets, counts, and sums. Append the metadata first and // then append all the various samples. app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeHistogram, + Type: model.MetricTypeHistogram, }) app.Append(0, labels.FromStrings("__name__", "example_metric_bucket", "foo", "bar", "le", "0.5"), 10, 10) @@ -196,7 +196,7 @@ func TestAppender_Exemplars(t *testing.T) { var app testappender.Appender app.Append(0, labels.FromStrings("__name__", "example_metric_total", "foo", "bar"), 60, 1234) app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric_total"), metadata.Metadata{ - Type: textparse.MetricTypeCounter, + Type: model.MetricTypeCounter, }) app.AppendExemplar(0, labels.FromStrings("__name__", "example_metric_total", "foo", "bar"), exemplar.Exemplar{ Labels: labels.FromStrings("hello", "world"), @@ -218,7 +218,7 @@ func TestAppender_Exemplars(t *testing.T) { // Histograms have buckets, counts, and sums. Append the metadata first and // then append all the various samples. app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric"), metadata.Metadata{ - Type: textparse.MetricTypeHistogram, + Type: model.MetricTypeHistogram, }) app.Append(0, labels.FromStrings("__name__", "example_metric_bucket", "foo", "bar", "le", "0.5"), 10, 10) @@ -255,10 +255,10 @@ func TestAppender_MultipleMetrics(t *testing.T) { var app testappender.Appender app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric_a"), metadata.Metadata{ - Type: textparse.MetricTypeCounter, + Type: model.MetricTypeCounter, }) app.UpdateMetadata(0, labels.FromStrings("__name__", "example_metric_b"), metadata.Metadata{ - Type: textparse.MetricTypeGauge, + Type: model.MetricTypeGauge, }) app.Append(0, labels.FromStrings("__name__", "example_metric_a", "foo", "bar"), 10, 10)