diff --git a/ADOPTERS.md b/ADOPTERS.md index de6440bc7e69..52621c48a34d 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -7,3 +7,4 @@ * [Heureka Group](https://heureka.group) * [Norwegian Refugee Council](https://www.nrc.no/) * [Dropbox](https://www.dropbox.com/) +* [ASML](https://www.asml.com/) \ No newline at end of file diff --git a/clients/cmd/promtail/Dockerfile b/clients/cmd/promtail/Dockerfile index bb951765411a..c18b96ddcc54 100644 --- a/clients/cmd/promtail/Dockerfile +++ b/clients/cmd/promtail/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9-bookworm as build +FROM golang:1.22.2-bookworm as build COPY . /src/loki WORKDIR /src/loki @@ -9,7 +9,7 @@ RUN make clean && make BUILD_IN_CONTAINER=false PROMTAIL_JOURNAL_ENABLED=true pr FROM debian:12.5-slim # tzdata required for the timestamp stage to work RUN apt-get update && \ - apt-get install -qy tzdata ca-certificates libsystemd-dev && \ + apt-get install -qy tzdata ca-certificates wget libsystemd-dev && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY --from=build /src/loki/clients/cmd/promtail/promtail /usr/bin/promtail COPY clients/cmd/promtail/promtail-docker-config.yaml /etc/promtail/config.yml diff --git a/clients/cmd/promtail/Dockerfile.arm32 b/clients/cmd/promtail/Dockerfile.arm32 index bb0019332b23..8724b1ff58b7 100644 --- a/clients/cmd/promtail/Dockerfile.arm32 +++ b/clients/cmd/promtail/Dockerfile.arm32 @@ -1,4 +1,4 @@ -FROM golang:1.21.9-bookworm as build +FROM golang:1.22.2-bookworm as build COPY . /src/loki WORKDIR /src/loki @@ -9,7 +9,7 @@ RUN make clean && make BUILD_IN_CONTAINER=false PROMTAIL_JOURNAL_ENABLED=true pr FROM debian:12.5-slim # tzdata required for the timestamp stage to work RUN apt-get update && \ - apt-get install -qy tzdata ca-certificates libsystemd-dev && \ + apt-get install -qy tzdata ca-certificates wget libsystemd-dev && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY --from=build /src/loki/clients/cmd/promtail/promtail /usr/bin/promtail COPY clients/cmd/promtail/promtail-local-config.yaml /etc/promtail/local-config.yaml diff --git a/clients/cmd/promtail/Dockerfile.cross b/clients/cmd/promtail/Dockerfile.cross index c19c7f4d3f49..0968b99ea3fd 100644 --- a/clients/cmd/promtail/Dockerfile.cross +++ b/clients/cmd/promtail/Dockerfile.cross @@ -2,7 +2,7 @@ ARG BUILD_IMAGE=grafana/loki-build-image:0.33.1 # Directories in this file are referenced from the root of the project not this folder # This file is intended to be called from the root like so: # docker build -t grafana/promtail -f clients/cmd/promtail/Dockerfile . -FROM golang:1.21.9-alpine as goenv +FROM 1.22.2-alpine as goenv RUN go env GOARCH > /goarch && \ go env GOARM > /goarm @@ -16,7 +16,7 @@ RUN make clean && GOARCH=$(cat /goarch) GOARM=$(cat /goarm) make BUILD_IN_CONTAI FROM debian:12.5-slim # tzdata required for the timestamp stage to work RUN apt-get update && \ - apt-get install -qy tzdata ca-certificates libsystemd-dev && \ + apt-get install -qy tzdata ca-certificates wget libsystemd-dev && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY --from=build /src/loki/clients/cmd/promtail/promtail /usr/bin/promtail COPY clients/cmd/promtail/promtail-local-config.yaml /etc/promtail/local-config.yaml diff --git a/cmd/logcli/Dockerfile b/cmd/logcli/Dockerfile index a0c8e3a67cd2..9eaf3dda8fc7 100644 --- a/cmd/logcli/Dockerfile +++ b/cmd/logcli/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 as build +FROM golang:1.22.2 as build COPY . /src/loki WORKDIR /src/loki diff --git a/cmd/logql-analyzer/Dockerfile b/cmd/logql-analyzer/Dockerfile index 1413a33e6249..abfbbe0c8851 100644 --- a/cmd/logql-analyzer/Dockerfile +++ b/cmd/logql-analyzer/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 as build +FROM golang:1.22.2 as build COPY . /src/loki WORKDIR /src/loki diff --git a/cmd/loki-canary-boringcrypto/Dockerfile b/cmd/loki-canary-boringcrypto/Dockerfile index 481450664180..932f70b50013 100644 --- a/cmd/loki-canary-boringcrypto/Dockerfile +++ b/cmd/loki-canary-boringcrypto/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 as build +FROM golang:1.22.2 as build COPY . /src/loki WORKDIR /src/loki diff --git a/cmd/loki-canary/Dockerfile b/cmd/loki-canary/Dockerfile index ec8889df25a5..930c0f3bb161 100644 --- a/cmd/loki-canary/Dockerfile +++ b/cmd/loki-canary/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 as build +FROM golang:1.22.2 as build COPY . /src/loki WORKDIR /src/loki diff --git a/cmd/loki-canary/Dockerfile.cross b/cmd/loki-canary/Dockerfile.cross index 60a5ff732f38..c137e65cce02 100644 --- a/cmd/loki-canary/Dockerfile.cross +++ b/cmd/loki-canary/Dockerfile.cross @@ -2,7 +2,7 @@ ARG BUILD_IMAGE=grafana/loki-build-image:0.33.1 # Directories in this file are referenced from the root of the project not this folder # This file is intended to be called from the root like so: # docker build -t grafana/promtail -f cmd/promtail/Dockerfile . -FROM golang:1.21.9-alpine as goenv +FROM golang:1.22.2-alpine as goenv RUN go env GOARCH > /goarch && \ go env GOARM > /goarm diff --git a/cmd/loki/Dockerfile b/cmd/loki/Dockerfile index 55c80ef61216..ed85213b0d2f 100644 --- a/cmd/loki/Dockerfile +++ b/cmd/loki/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 as build +FROM golang:1.22.2 as build COPY . /src/loki WORKDIR /src/loki diff --git a/cmd/loki/Dockerfile.cross b/cmd/loki/Dockerfile.cross index 833f9b266ba1..fcc475f6e77d 100644 --- a/cmd/loki/Dockerfile.cross +++ b/cmd/loki/Dockerfile.cross @@ -2,7 +2,7 @@ ARG BUILD_IMAGE=grafana/loki-build-image:0.33.1 # Directories in this file are referenced from the root of the project not this folder # This file is intended to be called from the root like so: # docker build -t grafana/loki -f cmd/loki/Dockerfile . -FROM golang:1.21.9-alpine as goenv +FROM golang:1.22.2-alpine as goenv RUN go env GOARCH > /goarch && \ go env GOARM > /goarm diff --git a/cmd/loki/Dockerfile.debug b/cmd/loki/Dockerfile.debug index 9b1f427a696e..def64b370b57 100644 --- a/cmd/loki/Dockerfile.debug +++ b/cmd/loki/Dockerfile.debug @@ -3,7 +3,7 @@ ARG BUILD_IMAGE=grafana/loki-build-image:0.33.1 # This file is intended to be called from the root like so: # docker build -t grafana/loki -f cmd/loki/Dockerfile.debug . -FROM golang:1.21.9-alpine as goenv +FROM golang:1.22.2-alpine as goenv RUN go env GOARCH > /goarch && \ go env GOARM > /goarm && \ go install github.com/go-delve/delve/cmd/dlv@latest diff --git a/cmd/migrate/Dockerfile b/cmd/migrate/Dockerfile index f83c26bf893d..91861fa718ff 100644 --- a/cmd/migrate/Dockerfile +++ b/cmd/migrate/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 as build +FROM golang:1.22.2 as build COPY . /src/loki WORKDIR /src/loki RUN make clean && make BUILD_IN_CONTAINER=false migrate diff --git a/cmd/querytee/Dockerfile b/cmd/querytee/Dockerfile index c32752b0604f..77be07225f5e 100644 --- a/cmd/querytee/Dockerfile +++ b/cmd/querytee/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 as build +FROM golang:1.22.2 as build COPY . /src/loki WORKDIR /src/loki diff --git a/cmd/querytee/Dockerfile.cross b/cmd/querytee/Dockerfile.cross index 5f84f9ab410d..05d63ee55325 100644 --- a/cmd/querytee/Dockerfile.cross +++ b/cmd/querytee/Dockerfile.cross @@ -2,7 +2,7 @@ ARG BUILD_IMAGE=grafana/loki-build-image:0.33.1 # Directories in this file are referenced from the root of the project not this folder # This file is intended to be called from the root like so: # docker build -t grafana/promtail -f cmd/promtail/Dockerfile . -FROM golang:1.21.9-alpine as goenv +FROM golang:1.22.2-alpine as goenv RUN go env GOARCH > /goarch && \ go env GOARM > /goarm diff --git a/docs/sources/setup/install/helm/reference.md b/docs/sources/setup/install/helm/reference.md index 9d3e04fe9d8e..529bf63b7570 100644 --- a/docs/sources/setup/install/helm/reference.md +++ b/docs/sources/setup/install/helm/reference.md @@ -2630,7 +2630,7 @@ null "tolerations": [] }, "useExternalLicense": false, - "version": "v1.8.6" + "version": "v3.0.0" } @@ -3457,7 +3457,7 @@ null string Uses the specified users from the `loki.tenants` list to create the htpasswd file if `loki.tenants` is not set, the `gateway.basicAuth.username` and `gateway.basicAuth.password` are used The value is templated using `tpl`. Override this to use a custom htpasswd, e.g. in case the default causes high CPU load.
-"{{ if .Values.loki.tenants }}\n\n  {{- range $t := .Values.loki.tenants }}\n{{ htpasswd (required \"All tenants must have a 'name' set\" $t.name) (required \"All tenants must have a 'password' set\" $t.password) }}\n\n  {{- end }}\n{{ else }} {{ htpasswd (required \"'gateway.basicAuth.username' is required\" .Values.gateway.basicAuth.username) (required \"'gateway.basicAuth.password' is required\" .Values.gateway.basicAuth.password) }} {{ end }}"
+"{{ if .Values.loki.tenants }}\n\n\n  {{- range $t := .Values.loki.tenants }}\n{{ htpasswd (required \"All tenants must have a 'name' set\" $t.name) (required \"All tenants must have a 'password' set\" $t.password) }}\n\n\n  {{- end }}\n{{ else }} {{ htpasswd (required \"'gateway.basicAuth.username' is required\" .Values.gateway.basicAuth.username) (required \"'gateway.basicAuth.password' is required\" .Values.gateway.basicAuth.password) }} {{ end }}"
 
@@ -6420,6 +6420,7 @@ false }, "tenant": { "name": "self-monitoring", + "password": null, "secretNamespace": "{{ .Release.Namespace }}" } }, @@ -6697,6 +6698,7 @@ null
 {
   "name": "self-monitoring",
+  "password": null,
   "secretNamespace": "{{ .Release.Namespace }}"
 }
 
@@ -6709,6 +6711,15 @@ null
 "self-monitoring"
 
+ + + + monitoring.selfMonitoring.tenant.password + string + Password of the gateway for Basic auth +
+null
+
diff --git a/integration/client/client.go b/integration/client/client.go index 6e9e861ad970..e04e6715606a 100644 --- a/integration/client/client.go +++ b/integration/client/client.go @@ -111,7 +111,7 @@ func (c *Client) PushOTLPLogLine(line string, timestamp time.Time, logAttributes return c.pushOTLPLogLine(line, timestamp, logAttributes) } -func formatTS(ts time.Time) string { +func FormatTS(ts time.Time) string { return strconv.FormatInt(ts.UnixNano(), 10) } @@ -130,7 +130,7 @@ func (c *Client) pushLogLine(line string, timestamp time.Time, structuredMetadat }, Values: [][]any{ { - formatTS(timestamp), + FormatTS(timestamp), line, structuredMetadata, }, @@ -509,7 +509,7 @@ func (c *Client) RunQuery(ctx context.Context, query string, extraHeaders ...Hea v := url.Values{} v.Set("query", query) - v.Set("time", formatTS(c.Now.Add(time.Second))) + v.Set("time", FormatTS(c.Now.Add(time.Second))) u, err := url.Parse(c.baseURL) if err != nil { @@ -568,8 +568,8 @@ func (c *Client) parseResponse(buf []byte, statusCode int) (*Response, error) { func (c *Client) rangeQueryURL(query string, start, end time.Time) string { v := url.Values{} v.Set("query", query) - v.Set("start", formatTS(start)) - v.Set("end", formatTS(end)) + v.Set("start", FormatTS(start)) + v.Set("end", FormatTS(end)) u, err := url.Parse(c.baseURL) if err != nil { diff --git a/integration/explore_logs_test.go b/integration/explore_logs_test.go new file mode 100644 index 000000000000..c902efd8781e --- /dev/null +++ b/integration/explore_logs_test.go @@ -0,0 +1,223 @@ +//go:build integration + +package integration + +import ( + "context" + "encoding/json" + "io" + "net/url" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/grafana/loki/v3/integration/client" + "github.com/grafana/loki/v3/integration/cluster" +) + +type DetectedField struct { + Label string `json:"label"` + Type string `json:"type"` + Cardinality uint64 `json:"cardinality"` +} + +type DetectedFields []DetectedField +type DetectedFieldResponse struct { + Fields DetectedFields `json:"fields"` +} + +func Test_ExploreLogsApis(t *testing.T) { + clu := cluster.New(nil, cluster.SchemaWithTSDBAndTSDB, func(c *cluster.Cluster) { + c.SetSchemaVer("v13") + }) + defer func() { + assert.NoError(t, clu.Cleanup()) + }() + + // run initially the compactor, indexgateway, and distributor. + var ( + tCompactor = clu.AddComponent( + "compactor", + "-target=compactor", + "-compactor.compaction-interval=1s", + "-compactor.retention-delete-delay=1s", + // By default, a minute is added to the delete request start time. This compensates for that. + "-compactor.delete-request-cancel-period=-60s", + "-compactor.deletion-mode=filter-and-delete", + ) + tIndexGateway = clu.AddComponent( + "index-gateway", + "-target=index-gateway", + ) + tDistributor = clu.AddComponent( + "distributor", + "-target=distributor", + ) + ) + require.NoError(t, clu.Run()) + + // then, run only the ingester and query scheduler. + var ( + tIngester = clu.AddComponent( + "ingester", + "-target=ingester", + "-boltdb.shipper.index-gateway-client.server-address="+tIndexGateway.GRPCURL(), + ) + tQueryScheduler = clu.AddComponent( + "query-scheduler", + "-target=query-scheduler", + "-query-scheduler.use-scheduler-ring=false", + "-boltdb.shipper.index-gateway-client.server-address="+tIndexGateway.GRPCURL(), + ) + ) + require.NoError(t, clu.Run()) + + // the run querier. + var ( + tQuerier = clu.AddComponent( + "querier", + "-target=querier", + "-querier.scheduler-address="+tQueryScheduler.GRPCURL(), + "-boltdb.shipper.index-gateway-client.server-address="+tIndexGateway.GRPCURL(), + "-common.compactor-address="+tCompactor.HTTPURL(), + ) + ) + require.NoError(t, clu.Run()) + + // finally, run the query-frontend. + var ( + tQueryFrontend = clu.AddComponent( + "query-frontend", + "-target=query-frontend", + "-frontend.scheduler-address="+tQueryScheduler.GRPCURL(), + "-boltdb.shipper.index-gateway-client.server-address="+tIndexGateway.GRPCURL(), + "-common.compactor-address="+tCompactor.HTTPURL(), + "-querier.per-request-limits-enabled=true", + "-frontend.encoding=protobuf", + "-querier.shard-aggregations=quantile_over_time", + "-frontend.tail-proxy-url="+tQuerier.HTTPURL(), + ) + ) + require.NoError(t, clu.Run()) + + tenantID := randStringRunes() + + now := time.Now() + cliDistributor := client.New(tenantID, "", tDistributor.HTTPURL()) + cliDistributor.Now = now + cliIngester := client.New(tenantID, "", tIngester.HTTPURL()) + cliIngester.Now = now + cliQueryFrontend := client.New(tenantID, "", tQueryFrontend.HTTPURL()) + cliQueryFrontend.Now = now + + t.Run("/detected_fields", func(t *testing.T) { + // ingest some log lines + require.NoError(t, cliDistributor.PushLogLine("foo=bar color=red", now.Add(-45*time.Minute), nil, map[string]string{"job": "fake"})) + require.NoError(t, cliDistributor.PushLogLine("foo=bar color=blue", now.Add(-45*time.Minute), nil, map[string]string{"job": "fake"})) + + require.NoError(t, cliDistributor.PushLogLine("foo=bar color=red", now.Add(-5*time.Second), nil, map[string]string{"job": "fake"})) + require.NoError(t, cliDistributor.PushLogLine("foo=bar color=purple", now.Add(-5*time.Second), nil, map[string]string{"job": "fake"})) + + require.NoError(t, cliDistributor.PushLogLine("foo=bar color=green", now, nil, map[string]string{"job": "fake"})) + require.NoError(t, cliDistributor.PushLogLine("foo=bar color=red", now, nil, map[string]string{"job": "fake"})) + + // validate logs are there + resp, err := cliQueryFrontend.RunRangeQuery(context.Background(), `{job="fake"}`) + require.NoError(t, err) + assert.Equal(t, "streams", resp.Data.ResultType) + + var lines []string + for _, stream := range resp.Data.Stream { + for _, val := range stream.Values { + lines = append(lines, val[1]) + } + } + assert.ElementsMatch(t, []string{"foo=bar color=red", "foo=bar color=blue", "foo=bar color=red", "foo=bar color=purple", "foo=bar color=green", "foo=bar color=red"}, lines) + + t.Run("non-split queries", func(t *testing.T) { + start := cliQueryFrontend.Now.Add(-1 * time.Minute) + end := cliQueryFrontend.Now.Add(time.Minute) + + v := url.Values{} + v.Set("query", `{job="fake"}`) + v.Set("start", client.FormatTS(start)) + v.Set("end", client.FormatTS(end)) + + u := url.URL{} + u.Path = "/loki/api/v1/detected_fields" + u.RawQuery = v.Encode() + dfResp, err := cliQueryFrontend.Get(u.String()) + require.NoError(t, err) + defer dfResp.Body.Close() + + buf, err := io.ReadAll(dfResp.Body) + require.NoError(t, err) + + var detectedFieldResponse DetectedFieldResponse + err = json.Unmarshal(buf, &detectedFieldResponse) + require.NoError(t, err) + + require.Equal(t, 2, len(detectedFieldResponse.Fields)) + + var fooField, colorField DetectedField + for _, field := range detectedFieldResponse.Fields { + if field.Label == "foo" { + fooField = field + } + + if field.Label == "color" { + colorField = field + } + } + + require.Equal(t, "string", fooField.Type) + require.Equal(t, "string", colorField.Type) + require.Equal(t, uint64(1), fooField.Cardinality) + require.Equal(t, uint64(3), colorField.Cardinality) + }) + + t.Run("split queries", func(t *testing.T) { + start := cliQueryFrontend.Now.Add(-24 * time.Hour) + end := cliQueryFrontend.Now.Add(time.Minute) + + v := url.Values{} + v.Set("query", `{job="fake"}`) + v.Set("start", client.FormatTS(start)) + v.Set("end", client.FormatTS(end)) + + u := url.URL{} + u.Path = "/loki/api/v1/detected_fields" + u.RawQuery = v.Encode() + dfResp, err := cliQueryFrontend.Get(u.String()) + require.NoError(t, err) + defer dfResp.Body.Close() + + buf, err := io.ReadAll(dfResp.Body) + require.NoError(t, err) + + var detectedFieldResponse DetectedFieldResponse + err = json.Unmarshal(buf, &detectedFieldResponse) + require.NoError(t, err) + + require.Equal(t, 2, len(detectedFieldResponse.Fields)) + + var fooField, colorField DetectedField + for _, field := range detectedFieldResponse.Fields { + if field.Label == "foo" { + fooField = field + } + + if field.Label == "color" { + colorField = field + } + } + + require.Equal(t, "string", fooField.Type) + require.Equal(t, "string", colorField.Type) + require.Equal(t, uint64(1), fooField.Cardinality) + require.Equal(t, uint64(4), colorField.Cardinality) + }) + }) +} diff --git a/loki-build-image/Dockerfile b/loki-build-image/Dockerfile index 097bdd205fe7..beb7b0078dae 100644 --- a/loki-build-image/Dockerfile +++ b/loki-build-image/Dockerfile @@ -6,7 +6,7 @@ # on how to publish a new build image. # Install helm (https://helm.sh/) and helm-docs (https://github.com/norwoodj/helm-docs) for generating Helm Chart reference. -FROM golang:1.21.9-bullseye as helm +FROM golang:1.22.2-bookworm as helm ARG TARGETARCH ARG HELM_VER="v3.2.3" RUN curl -L "https://get.helm.sh/helm-${HELM_VER}-linux-$TARGETARCH.tar.gz" | tar zx && \ @@ -38,7 +38,7 @@ RUN apk add --no-cache curl && \ FROM alpine:3.18.6 as docker RUN apk add --no-cache docker-cli docker-cli-buildx -FROM golang:1.21.9-bullseye as drone +FROM golang:1.22.2-bookworm as drone ARG TARGETARCH RUN curl -L "https://github.com/drone/drone-cli/releases/download/v1.7.0/drone_linux_$TARGETARCH".tar.gz | tar zx && \ install -t /usr/local/bin drone @@ -48,35 +48,35 @@ RUN curl -L "https://github.com/drone/drone-cli/releases/download/v1.7.0/drone_l # Error: # github.com/fatih/faillint@v1.5.0 requires golang.org/x/tools@v0.0.0-20200207224406-61798d64f025 # (not golang.org/x/tools@v0.0.0-20190918214920-58d531046acd from golang.org/x/tools/cmd/goyacc@58d531046acdc757f177387bc1725bfa79895d69) -FROM golang:1.21.9-bullseye as faillint +FROM golang:1.22.2-bookworm as faillint RUN GO111MODULE=on go install github.com/fatih/faillint@v1.11.0 RUN GO111MODULE=on go install golang.org/x/tools/cmd/goimports@v0.7.0 -FROM golang:1.21.9-bullseye as delve +FROM golang:1.22.2-bookworm as delve RUN GO111MODULE=on go install github.com/go-delve/delve/cmd/dlv@latest # Install ghr used to push binaries and template the release # This collides with the version of go tools used in the base image, thus we install it in its own image and copy it over. -FROM golang:1.21.9-bullseye as ghr +FROM golang:1.22.2-bookworm as ghr RUN GO111MODULE=on go install github.com/tcnksm/ghr@9349474 # Install nfpm (https://nfpm.goreleaser.com) for creating .deb and .rpm packages. -FROM golang:1.21.9-bullseye as nfpm +FROM golang:1.22.2-bookworm as nfpm RUN GO111MODULE=on go install github.com/goreleaser/nfpm/v2/cmd/nfpm@v2.11.3 # Install gotestsum -FROM golang:1.21.9-bullseye as gotestsum +FROM golang:1.22.2-bookworm as gotestsum RUN GO111MODULE=on go install gotest.tools/gotestsum@v1.8.2 # Install tools used to compile jsonnet. -FROM golang:1.21.9-bullseye as jsonnet -RUN GO111MODULE=on go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@v0.4.0 -RUN GO111MODULE=on go install github.com/monitoring-mixins/mixtool/cmd/mixtool@bca3066 -RUN GO111MODULE=on go install github.com/google/go-jsonnet/cmd/jsonnet@v0.18.0 +FROM golang:1.22.2-bookworm as jsonnet +RUN GO111MODULE=on go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@v0.5.1 +RUN GO111MODULE=on go install github.com/monitoring-mixins/mixtool/cmd/mixtool@16dc166166d91e93475b86b9355a4faed2400c18 +RUN GO111MODULE=on go install github.com/google/go-jsonnet/cmd/jsonnet@v0.20.0 FROM aquasec/trivy as trivy -FROM golang:1.21.9-bullseye +FROM golang:1.22.2-bookworm RUN apt-get update && \ apt-get install -qy \ musl gnupg ragel \ diff --git a/operator/Dockerfile b/operator/Dockerfile index 5f155e833f76..6e03c5d92bcc 100644 --- a/operator/Dockerfile +++ b/operator/Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM golang:1.21.9 as builder +FROM golang:1.22.2 as builder WORKDIR /workspace # Copy the Go Modules manifests diff --git a/operator/Dockerfile.cross b/operator/Dockerfile.cross index 060edee23948..a1b6d8853b44 100644 --- a/operator/Dockerfile.cross +++ b/operator/Dockerfile.cross @@ -1,6 +1,6 @@ ARG BUILD_IMAGE=grafana/loki-build-image:0.33.1 -FROM golang:1.21.9-alpine as goenv +FROM golang:1.22.2-alpine as goenv RUN go env GOARCH > /goarch && \ go env GOARM > /goarm diff --git a/operator/calculator.Dockerfile b/operator/calculator.Dockerfile index 9ffd31d1154d..4a1a89cc83dc 100644 --- a/operator/calculator.Dockerfile +++ b/operator/calculator.Dockerfile @@ -1,5 +1,5 @@ # Build the calculator binary -FROM golang:1.21.9 as builder +FROM golang:1.22.2 as builder WORKDIR /workspace # Copy the Go Modules manifests diff --git a/pkg/logproto/logproto.pb.go b/pkg/logproto/logproto.pb.go index 300fd59539b9..e8c7215990bf 100644 --- a/pkg/logproto/logproto.pb.go +++ b/pkg/logproto/logproto.pb.go @@ -2755,7 +2755,7 @@ type DetectedField struct { Label string `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"` Type DetectedFieldType `protobuf:"bytes,2,opt,name=type,proto3,casttype=DetectedFieldType" json:"type,omitempty"` Cardinality uint64 `protobuf:"varint,3,opt,name=cardinality,proto3" json:"cardinality,omitempty"` - Sketch []byte `protobuf:"bytes,4,opt,name=sketch,proto3" json:"-"` + Sketch []byte `protobuf:"bytes,4,opt,name=sketch,proto3" json:"sketch,omitempty"` } func (m *DetectedField) Reset() { *m = DetectedField{} } @@ -3033,169 +3033,171 @@ func init() { func init() { proto.RegisterFile("pkg/logproto/logproto.proto", fileDescriptor_c28a5f14f1f4c79a) } var fileDescriptor_c28a5f14f1f4c79a = []byte{ - // 2590 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x1a, 0x4d, 0x6f, 0x1b, 0xc7, - 0x95, 0x4b, 0x2e, 0xbf, 0x1e, 0x29, 0x59, 0x1e, 0xd1, 0x36, 0x41, 0xdb, 0xa4, 0x32, 0x68, 0x13, - 0x35, 0x76, 0xc4, 0x58, 0x69, 0xd2, 0xc4, 0x69, 0x9a, 0x9a, 0x52, 0xac, 0xc8, 0x51, 0x1c, 0x67, - 0xa4, 0x38, 0x69, 0xd1, 0x20, 0x58, 0x91, 0x23, 0x6a, 0x21, 0x72, 0x97, 0xde, 0x1d, 0xc6, 0xe1, - 0xad, 0x7f, 0xa0, 0x68, 0x8a, 0x1e, 0xda, 0x5e, 0x0a, 0x14, 0x28, 0xd0, 0x22, 0x45, 0x2f, 0x45, - 0x8f, 0x45, 0x7b, 0xe9, 0x21, 0xbd, 0xa5, 0xb7, 0x20, 0x07, 0xb6, 0x56, 0x2e, 0x85, 0x4e, 0x01, - 0x7a, 0xcb, 0xa9, 0x98, 0xaf, 0xfd, 0x12, 0x59, 0x87, 0x8a, 0x83, 0xc0, 0x17, 0x71, 0xe6, 0xcd, - 0x9b, 0x37, 0xf3, 0x3e, 0xe6, 0x7d, 0xad, 0xe0, 0xfc, 0xe0, 0xa0, 0xdb, 0xec, 0xb9, 0xdd, 0x81, - 0xe7, 0x32, 0x37, 0x18, 0xac, 0x88, 0xbf, 0xa8, 0xa0, 0xe7, 0xb5, 0x4a, 0xd7, 0xed, 0xba, 0x12, - 0x87, 0x8f, 0xe4, 0x7a, 0xad, 0xd1, 0x75, 0xdd, 0x6e, 0x8f, 0x36, 0xc5, 0x6c, 0x77, 0xb8, 0xd7, - 0x64, 0x76, 0x9f, 0xfa, 0xcc, 0xea, 0x0f, 0x14, 0xc2, 0x92, 0xa2, 0x7e, 0xa7, 0xd7, 0x77, 0x3b, - 0xb4, 0xd7, 0xf4, 0x99, 0xc5, 0x7c, 0xf9, 0x57, 0x61, 0x2c, 0x72, 0x8c, 0xc1, 0xd0, 0xdf, 0x17, - 0x7f, 0x24, 0x10, 0xff, 0xd9, 0x80, 0x33, 0x5b, 0xd6, 0x2e, 0xed, 0xed, 0xb8, 0xb7, 0xad, 0xde, - 0x90, 0xfa, 0x84, 0xfa, 0x03, 0xd7, 0xf1, 0x29, 0x5a, 0x83, 0x5c, 0x8f, 0x2f, 0xf8, 0x55, 0x63, - 0x29, 0xb3, 0x5c, 0x5a, 0xbd, 0xb4, 0x12, 0x5c, 0x79, 0xe2, 0x06, 0x09, 0xf5, 0x5f, 0x72, 0x98, - 0x37, 0x22, 0x6a, 0x6b, 0xed, 0x36, 0x94, 0x22, 0x60, 0xb4, 0x00, 0x99, 0x03, 0x3a, 0xaa, 0x1a, - 0x4b, 0xc6, 0x72, 0x91, 0xf0, 0x21, 0xba, 0x02, 0xd9, 0x77, 0x39, 0x99, 0x6a, 0x7a, 0xc9, 0x58, - 0x2e, 0xad, 0x9e, 0x0f, 0x0f, 0x79, 0xc3, 0xb1, 0xef, 0x0c, 0xa9, 0xd8, 0xad, 0x0e, 0x92, 0x98, - 0x57, 0xd3, 0xcf, 0x1a, 0xf8, 0x12, 0x9c, 0x3e, 0xb6, 0x8e, 0xce, 0x42, 0x4e, 0x60, 0xc8, 0x1b, - 0x17, 0x89, 0x9a, 0xe1, 0x0a, 0xa0, 0x6d, 0xe6, 0x51, 0xab, 0x4f, 0x2c, 0xc6, 0xef, 0x7b, 0x67, - 0x48, 0x7d, 0x86, 0x5f, 0x85, 0xc5, 0x18, 0x54, 0xb1, 0xfd, 0x0c, 0x94, 0xfc, 0x10, 0xac, 0x78, - 0xaf, 0x84, 0xd7, 0x0a, 0xf7, 0x90, 0x28, 0x22, 0xfe, 0xb5, 0x01, 0x10, 0xae, 0xa1, 0x3a, 0x80, - 0x5c, 0x7d, 0xd9, 0xf2, 0xf7, 0x05, 0xc3, 0x26, 0x89, 0x40, 0xd0, 0x65, 0x38, 0x1d, 0xce, 0x6e, - 0xba, 0xdb, 0xfb, 0x96, 0xd7, 0x11, 0x32, 0x30, 0xc9, 0xf1, 0x05, 0x84, 0xc0, 0xf4, 0x2c, 0x46, - 0xab, 0x99, 0x25, 0x63, 0x39, 0x43, 0xc4, 0x98, 0x73, 0xcb, 0xa8, 0x63, 0x39, 0xac, 0x6a, 0x0a, - 0x71, 0xaa, 0x19, 0x87, 0x73, 0xfd, 0x52, 0xbf, 0x9a, 0x5d, 0x32, 0x96, 0xe7, 0x88, 0x9a, 0xe1, - 0x0f, 0x32, 0x50, 0x7e, 0x7d, 0x48, 0xbd, 0x91, 0x12, 0x00, 0xaa, 0x43, 0xc1, 0xa7, 0x3d, 0xda, - 0x66, 0xae, 0x27, 0x35, 0xd2, 0x4a, 0x57, 0x0d, 0x12, 0xc0, 0x50, 0x05, 0xb2, 0x3d, 0xbb, 0x6f, - 0x33, 0x71, 0xad, 0x39, 0x22, 0x27, 0xe8, 0x2a, 0x64, 0x7d, 0x66, 0x79, 0x4c, 0xdc, 0xa5, 0xb4, - 0x5a, 0x5b, 0x91, 0x86, 0xb9, 0xa2, 0x0d, 0x73, 0x65, 0x47, 0x1b, 0x66, 0xab, 0xf0, 0xe1, 0xb8, - 0x91, 0x7a, 0xff, 0x5f, 0x0d, 0x83, 0xc8, 0x2d, 0xe8, 0x19, 0xc8, 0x50, 0xa7, 0x23, 0xee, 0xfb, - 0x45, 0x77, 0xf2, 0x0d, 0xe8, 0x0a, 0x14, 0x3b, 0xb6, 0x47, 0xdb, 0xcc, 0x76, 0x1d, 0xc1, 0xd5, - 0xfc, 0xea, 0x62, 0xa8, 0x91, 0x75, 0xbd, 0x44, 0x42, 0x2c, 0x74, 0x19, 0x72, 0x3e, 0x17, 0x9d, - 0x5f, 0xcd, 0x73, 0x5b, 0x68, 0x55, 0x8e, 0xc6, 0x8d, 0x05, 0x09, 0xb9, 0xec, 0xf6, 0x6d, 0x46, - 0xfb, 0x03, 0x36, 0x22, 0x0a, 0x07, 0x3d, 0x0e, 0xf9, 0x0e, 0xed, 0x51, 0xae, 0xf0, 0x82, 0x50, - 0xf8, 0x42, 0x84, 0xbc, 0x58, 0x20, 0x1a, 0x01, 0xbd, 0x0d, 0xe6, 0xa0, 0x67, 0x39, 0xd5, 0xa2, - 0xe0, 0x62, 0x3e, 0x44, 0xbc, 0xd5, 0xb3, 0x9c, 0xd6, 0x73, 0x9f, 0x8c, 0x1b, 0x4f, 0x77, 0x6d, - 0xb6, 0x3f, 0xdc, 0x5d, 0x69, 0xbb, 0xfd, 0x66, 0xd7, 0xb3, 0xf6, 0x2c, 0xc7, 0x6a, 0xf6, 0xdc, - 0x03, 0xbb, 0xf9, 0xee, 0x53, 0x4d, 0xfe, 0x06, 0xef, 0x0c, 0xa9, 0x67, 0x53, 0xaf, 0xc9, 0xc9, - 0xac, 0x08, 0x95, 0xf0, 0xad, 0x44, 0x90, 0xbd, 0x61, 0x16, 0x72, 0x0b, 0x79, 0x7c, 0x2f, 0x0d, - 0x68, 0xdb, 0xea, 0x0f, 0x7a, 0x74, 0x26, 0x95, 0x05, 0xca, 0x49, 0x9f, 0x58, 0x39, 0x99, 0x59, - 0x95, 0x13, 0x4a, 0xda, 0x9c, 0x4d, 0xd2, 0xd9, 0x2f, 0x2a, 0xe9, 0xdc, 0x57, 0x22, 0x69, 0x5c, - 0x05, 0x93, 0xcf, 0xb8, 0x53, 0xf2, 0xac, 0xbb, 0x42, 0x9e, 0x65, 0xc2, 0x87, 0x78, 0x0b, 0x72, - 0xf2, 0x2e, 0xa8, 0x96, 0x14, 0x78, 0xfc, 0x7d, 0x84, 0xc2, 0xce, 0x68, 0x31, 0x2e, 0x84, 0x62, - 0xcc, 0x08, 0x01, 0xe1, 0xbf, 0x18, 0x30, 0xa7, 0xb4, 0xa8, 0x7c, 0xcc, 0x2e, 0xe4, 0xe5, 0x1b, - 0xd7, 0xfe, 0xe5, 0x5c, 0xd2, 0xbf, 0x5c, 0xeb, 0x58, 0x03, 0x46, 0xbd, 0x56, 0xf3, 0xc3, 0x71, - 0xc3, 0xf8, 0x64, 0xdc, 0x78, 0x6c, 0x1a, 0xa3, 0xda, 0xa7, 0x6b, 0xbf, 0xa4, 0x09, 0xa3, 0x4b, - 0xe2, 0x76, 0xcc, 0x57, 0xa6, 0x70, 0x6a, 0x45, 0x86, 0x82, 0x4d, 0xa7, 0x4b, 0x7d, 0x4e, 0xd9, - 0xe4, 0x5a, 0x24, 0x12, 0x87, 0xb3, 0x79, 0xd7, 0xf2, 0x1c, 0xdb, 0xe9, 0xfa, 0xd5, 0x8c, 0xf0, - 0x9d, 0xc1, 0x1c, 0xff, 0xd2, 0x80, 0xc5, 0x98, 0x29, 0x2a, 0x26, 0x9e, 0x85, 0x9c, 0xcf, 0xa5, - 0xab, 0x79, 0x88, 0x28, 0x72, 0x5b, 0xc0, 0x5b, 0xf3, 0xea, 0xf2, 0x39, 0x39, 0x27, 0x0a, 0xff, - 0xc1, 0x5d, 0xed, 0xef, 0x06, 0x94, 0x45, 0x00, 0xd0, 0xef, 0x03, 0x81, 0xe9, 0x58, 0x7d, 0xaa, - 0x54, 0x25, 0xc6, 0x91, 0xa8, 0xc0, 0x8f, 0x2b, 0xe8, 0xa8, 0x30, 0xab, 0x23, 0x33, 0x4e, 0xec, - 0xc8, 0x8c, 0xf0, 0xad, 0x54, 0x20, 0xcb, 0x4d, 0x72, 0x24, 0x9c, 0x58, 0x91, 0xc8, 0x09, 0x7e, - 0x0c, 0xe6, 0x14, 0x17, 0x4a, 0xb4, 0xd3, 0x02, 0x59, 0x1f, 0x72, 0x52, 0x13, 0xe8, 0x1b, 0x50, - 0x0c, 0x12, 0x00, 0xc1, 0x6d, 0xa6, 0x95, 0x3b, 0x1a, 0x37, 0xd2, 0xcc, 0x27, 0xe1, 0x02, 0x6a, - 0x44, 0x83, 0xab, 0xd1, 0x2a, 0x1e, 0x8d, 0x1b, 0x12, 0xa0, 0x42, 0x29, 0xba, 0x00, 0xe6, 0x3e, - 0x8f, 0x4f, 0x5c, 0x04, 0x66, 0xab, 0x70, 0x34, 0x6e, 0x88, 0x39, 0x11, 0x7f, 0xf1, 0x06, 0x94, - 0xb7, 0x68, 0xd7, 0x6a, 0x8f, 0xd4, 0xa1, 0x15, 0x4d, 0x8e, 0x1f, 0x68, 0x68, 0x1a, 0x8f, 0x40, - 0x39, 0x38, 0xf1, 0x9d, 0xbe, 0xaf, 0x5e, 0x43, 0x29, 0x80, 0xbd, 0xea, 0xe3, 0x5f, 0x19, 0xa0, - 0x6c, 0x00, 0xe1, 0x48, 0x56, 0xc1, 0xfd, 0x17, 0x1c, 0x8d, 0x1b, 0x0a, 0xa2, 0x93, 0x06, 0xf4, - 0x3c, 0xe4, 0x7d, 0x71, 0x22, 0x27, 0x96, 0x34, 0x2d, 0xb1, 0xd0, 0x3a, 0xc5, 0x4d, 0xe4, 0x68, - 0xdc, 0xd0, 0x88, 0x44, 0x0f, 0xd0, 0x4a, 0x2c, 0xf0, 0x4a, 0xc6, 0xe6, 0x8f, 0xc6, 0x8d, 0x08, - 0x34, 0x1a, 0x88, 0xf1, 0xe7, 0x06, 0x94, 0x76, 0x2c, 0x3b, 0x30, 0xa1, 0xaa, 0x56, 0x51, 0xe8, - 0x5f, 0x25, 0x80, 0x5b, 0x62, 0x87, 0xf6, 0xac, 0xd1, 0x75, 0xd7, 0x13, 0x74, 0xe7, 0x48, 0x30, - 0x0f, 0x63, 0xa5, 0x39, 0x31, 0x56, 0x66, 0x67, 0x77, 0xc7, 0x5f, 0xad, 0xf3, 0xbb, 0x61, 0x16, - 0xd2, 0x0b, 0x19, 0xfc, 0x47, 0x03, 0xca, 0x92, 0x79, 0x65, 0x79, 0x3f, 0x82, 0x9c, 0x94, 0x8d, - 0x60, 0xff, 0xff, 0x38, 0xa6, 0x4b, 0xb3, 0x38, 0x25, 0x45, 0x13, 0xbd, 0x08, 0xf3, 0x1d, 0xcf, - 0x1d, 0x0c, 0x68, 0x67, 0x5b, 0xb9, 0xbf, 0x74, 0xd2, 0xfd, 0xad, 0x47, 0xd7, 0x49, 0x02, 0x1d, - 0xff, 0xc3, 0x80, 0x39, 0xe5, 0x4c, 0x94, 0xba, 0x02, 0x11, 0x1b, 0x27, 0x8e, 0x78, 0xe9, 0x59, - 0x23, 0xde, 0x59, 0xc8, 0x75, 0x3d, 0x77, 0x38, 0xd0, 0x0e, 0x49, 0xcd, 0x66, 0x8b, 0x84, 0xf8, - 0x06, 0xcc, 0x6b, 0x56, 0xa6, 0x78, 0xd4, 0x5a, 0xd2, 0xa3, 0x6e, 0x76, 0xa8, 0xc3, 0xec, 0x3d, - 0x3b, 0xf0, 0x91, 0x0a, 0x1f, 0xff, 0xd4, 0x80, 0x85, 0x24, 0x0a, 0x5a, 0x4f, 0x24, 0xf0, 0x8f, - 0x4e, 0x27, 0x17, 0xcd, 0xdd, 0x35, 0x69, 0x95, 0xc1, 0x3f, 0x7d, 0xbf, 0x0c, 0xbe, 0x12, 0x75, - 0x32, 0x45, 0xe5, 0x15, 0xf0, 0x2f, 0x0c, 0x98, 0x8b, 0xe9, 0x12, 0x3d, 0x0b, 0xe6, 0x9e, 0xe7, - 0xf6, 0x67, 0x52, 0x94, 0xd8, 0x81, 0xbe, 0x0d, 0x69, 0xe6, 0xce, 0xa4, 0xa6, 0x34, 0x73, 0xb9, - 0x96, 0x14, 0xfb, 0x19, 0x99, 0x1f, 0xcb, 0x19, 0x7e, 0x1a, 0x8a, 0x82, 0xa1, 0x5b, 0x96, 0xed, - 0x4d, 0x0c, 0x18, 0x93, 0x19, 0x7a, 0x1e, 0x4e, 0x49, 0x67, 0x38, 0x79, 0x73, 0x79, 0xd2, 0xe6, - 0xb2, 0xde, 0x7c, 0x1e, 0xb2, 0x6b, 0xfb, 0x43, 0xe7, 0x80, 0x6f, 0xe9, 0x58, 0xcc, 0xd2, 0x5b, - 0xf8, 0x18, 0x9f, 0x81, 0x45, 0xfe, 0x06, 0xa9, 0xe7, 0xaf, 0xb9, 0x43, 0x87, 0xe9, 0xfa, 0xe4, - 0x32, 0x54, 0xe2, 0x60, 0x65, 0x25, 0x15, 0xc8, 0xb6, 0x39, 0x40, 0xd0, 0x98, 0x23, 0x72, 0x82, - 0x7f, 0x6b, 0x00, 0xda, 0xa0, 0x4c, 0x9c, 0xb2, 0xb9, 0x1e, 0x3c, 0x8f, 0x1a, 0x14, 0xfa, 0x16, - 0x6b, 0xef, 0x53, 0xcf, 0xd7, 0xf9, 0x8b, 0x9e, 0x7f, 0x1d, 0xc9, 0x22, 0xbe, 0x02, 0x8b, 0xb1, - 0x5b, 0x2a, 0x9e, 0x6a, 0x50, 0x68, 0x2b, 0x98, 0x0a, 0x79, 0xc1, 0x1c, 0xff, 0x29, 0x0d, 0x05, - 0xb1, 0x81, 0xd0, 0x3d, 0x74, 0x05, 0x4a, 0x7b, 0xb6, 0xd3, 0xa5, 0xde, 0xc0, 0xb3, 0x95, 0x08, - 0xcc, 0xd6, 0xa9, 0xa3, 0x71, 0x23, 0x0a, 0x26, 0xd1, 0x09, 0x7a, 0x02, 0xf2, 0x43, 0x9f, 0x7a, - 0xef, 0xd8, 0xf2, 0xa5, 0x17, 0x5b, 0x95, 0xc3, 0x71, 0x23, 0xf7, 0x86, 0x4f, 0xbd, 0xcd, 0x75, - 0x1e, 0x7c, 0x86, 0x62, 0x44, 0xe4, 0x6f, 0x07, 0xbd, 0xa2, 0xcc, 0x54, 0x24, 0x70, 0xad, 0xef, - 0xf0, 0xeb, 0x27, 0x5c, 0xdd, 0xc0, 0x73, 0xfb, 0x94, 0xed, 0xd3, 0xa1, 0xdf, 0x6c, 0xbb, 0xfd, - 0xbe, 0xeb, 0x34, 0x45, 0xc5, 0x2d, 0x98, 0xe6, 0x11, 0x94, 0x6f, 0x57, 0x96, 0xbb, 0x03, 0x79, - 0xb6, 0xef, 0xb9, 0xc3, 0xee, 0xbe, 0x08, 0x0c, 0x99, 0xd6, 0xd5, 0xd9, 0xe9, 0x69, 0x0a, 0x44, - 0x0f, 0xd0, 0x23, 0x5c, 0x5a, 0xb4, 0x7d, 0xe0, 0x0f, 0xfb, 0xb2, 0xc6, 0x6b, 0x65, 0x8f, 0xc6, - 0x0d, 0xe3, 0x09, 0x12, 0x80, 0xf1, 0x4f, 0xd2, 0xd0, 0x88, 0x94, 0xc6, 0xd7, 0x5d, 0xef, 0x55, - 0xca, 0x3c, 0xbb, 0x7d, 0xd3, 0xea, 0x53, 0x6d, 0x1b, 0x0d, 0x28, 0xf5, 0x05, 0xf0, 0x9d, 0xc8, - 0x13, 0x80, 0x7e, 0x80, 0x87, 0x2e, 0x02, 0x88, 0x37, 0x23, 0xd7, 0xe5, 0x6b, 0x28, 0x0a, 0x88, - 0x58, 0x5e, 0x8b, 0x49, 0xaa, 0x39, 0x23, 0x67, 0x4a, 0x42, 0x9b, 0x49, 0x09, 0xcd, 0x4c, 0x27, - 0x10, 0x4b, 0xd4, 0xd6, 0xb3, 0x71, 0x5b, 0xc7, 0xff, 0x34, 0xa0, 0xbe, 0xa5, 0x6f, 0x7e, 0x42, - 0x71, 0x68, 0x7e, 0xd3, 0x0f, 0x88, 0xdf, 0xcc, 0x97, 0xe3, 0x17, 0xd7, 0x01, 0xb6, 0x6c, 0x87, - 0x5e, 0xb7, 0x7b, 0x8c, 0x7a, 0x13, 0xaa, 0x98, 0x9f, 0x67, 0x42, 0x97, 0x40, 0xe8, 0x9e, 0xe6, - 0x73, 0x2d, 0xe2, 0x87, 0x1f, 0x04, 0x1b, 0xe9, 0x07, 0xa8, 0xb6, 0x4c, 0xc2, 0x45, 0x39, 0x90, - 0xdf, 0x13, 0xec, 0xc9, 0x90, 0x1a, 0x6b, 0xc4, 0x84, 0xbc, 0xb7, 0xbe, 0xa7, 0x0e, 0x7f, 0xe6, - 0x3e, 0x19, 0x91, 0x68, 0x8f, 0x35, 0xfd, 0x91, 0xc3, 0xac, 0xf7, 0x22, 0xfb, 0x89, 0x3e, 0x04, - 0x59, 0x2a, 0xe9, 0xca, 0x4e, 0x4c, 0xba, 0x5e, 0x50, 0xc7, 0x7c, 0xa9, 0xaa, 0xf3, 0x85, 0xd0, - 0x03, 0x0a, 0xa5, 0x28, 0x0f, 0xf8, 0x28, 0x98, 0x1e, 0xdd, 0xd3, 0xa1, 0x1a, 0x85, 0x27, 0x07, - 0x98, 0x62, 0x1d, 0xff, 0xd5, 0x80, 0x85, 0x0d, 0xca, 0xe2, 0x49, 0xd0, 0x43, 0xa4, 0x52, 0xfc, - 0x32, 0x9c, 0x8e, 0xdc, 0x5f, 0x71, 0xff, 0x54, 0x22, 0xf3, 0x39, 0x13, 0xf2, 0xbf, 0xe9, 0x74, - 0xe8, 0x7b, 0xaa, 0xa0, 0x8c, 0x27, 0x3d, 0xb7, 0xa0, 0x14, 0x59, 0x44, 0xd7, 0x12, 0xe9, 0xce, - 0x62, 0xa2, 0x5f, 0xc9, 0x43, 0x76, 0xab, 0xa2, 0x78, 0x92, 0x65, 0xa3, 0x4a, 0x66, 0x83, 0xd4, - 0x60, 0x1b, 0x90, 0x50, 0x97, 0x20, 0x1b, 0x0d, 0x4e, 0x02, 0xfa, 0x4a, 0x90, 0xf7, 0x04, 0x73, - 0xf4, 0x08, 0x98, 0x9e, 0x7b, 0x57, 0xe7, 0xb1, 0x73, 0xe1, 0x91, 0xc4, 0xbd, 0x4b, 0xc4, 0x12, - 0x7e, 0x1e, 0x32, 0xc4, 0xbd, 0x8b, 0xea, 0x00, 0x9e, 0xe5, 0x74, 0xe9, 0xed, 0xa0, 0x82, 0x2a, - 0x93, 0x08, 0x64, 0x4a, 0xe2, 0xb0, 0x06, 0xa7, 0xa3, 0x37, 0x92, 0xea, 0x5e, 0x81, 0xfc, 0xeb, - 0xc3, 0xa8, 0xb8, 0x2a, 0x09, 0x71, 0xc9, 0x42, 0x5d, 0x23, 0x71, 0x9b, 0x81, 0x10, 0x8e, 0x2e, - 0x40, 0x91, 0x59, 0xbb, 0x3d, 0x7a, 0x33, 0x74, 0x73, 0x21, 0x80, 0xaf, 0xf2, 0xe2, 0xef, 0x76, - 0x24, 0x03, 0x0a, 0x01, 0xe8, 0x71, 0x58, 0x08, 0xef, 0x7c, 0xcb, 0xa3, 0x7b, 0xf6, 0x7b, 0x42, - 0xc3, 0x65, 0x72, 0x0c, 0x8e, 0x96, 0xe1, 0x54, 0x08, 0xdb, 0x16, 0x99, 0x86, 0x29, 0x50, 0x93, - 0x60, 0x2e, 0x1b, 0xc1, 0xee, 0x4b, 0x77, 0x86, 0x56, 0x4f, 0x3c, 0xbe, 0x32, 0x89, 0x40, 0xf0, - 0xdf, 0x0c, 0x38, 0x2d, 0x55, 0xcd, 0x2c, 0xf6, 0x50, 0x5a, 0xfd, 0xef, 0x0c, 0x40, 0x51, 0x0e, - 0x94, 0x69, 0x7d, 0x33, 0xda, 0x08, 0xe2, 0xa9, 0x4c, 0x49, 0xd4, 0xb4, 0x12, 0x14, 0xf6, 0x72, - 0x30, 0xe4, 0x44, 0x3a, 0x24, 0x8b, 0x6b, 0x53, 0x16, 0xcd, 0x12, 0x42, 0xd4, 0x2f, 0xaf, 0xf5, - 0x77, 0x47, 0x8c, 0xfa, 0xaa, 0xe4, 0x15, 0xb5, 0xbe, 0x00, 0x10, 0xf9, 0xc3, 0xcf, 0xa2, 0x0e, - 0x13, 0x56, 0x63, 0x86, 0x67, 0x29, 0x10, 0xd1, 0x03, 0xfc, 0x87, 0x34, 0xcc, 0xdd, 0x76, 0x7b, - 0xc3, 0x30, 0x30, 0x3e, 0x4c, 0x01, 0x23, 0x56, 0x87, 0x67, 0x75, 0x1d, 0x8e, 0xc0, 0xf4, 0x19, - 0x1d, 0x08, 0xcb, 0xca, 0x10, 0x31, 0x46, 0x18, 0xca, 0xcc, 0xf2, 0xba, 0x94, 0xc9, 0xea, 0xa6, - 0x9a, 0x13, 0x69, 0x67, 0x0c, 0x86, 0x96, 0xa0, 0x64, 0x75, 0xbb, 0x1e, 0xed, 0x5a, 0x8c, 0xb6, - 0x46, 0xd5, 0xbc, 0x38, 0x2c, 0x0a, 0xc2, 0x6f, 0xc1, 0xbc, 0x16, 0x96, 0x52, 0xe9, 0x93, 0x90, - 0x7f, 0x57, 0x40, 0x26, 0xf4, 0xc5, 0x24, 0xaa, 0x72, 0x63, 0x1a, 0x2d, 0xde, 0x67, 0xd7, 0x77, - 0xc6, 0x37, 0x20, 0x27, 0xd1, 0xd1, 0x85, 0x68, 0x8d, 0x22, 0x9b, 0x34, 0x7c, 0xae, 0x0a, 0x0e, - 0x0c, 0x39, 0x49, 0x48, 0x29, 0x5e, 0xd8, 0x86, 0x84, 0x10, 0xf5, 0x8b, 0xff, 0x6b, 0xc0, 0x99, - 0x75, 0xca, 0x68, 0x9b, 0xd1, 0xce, 0x75, 0x9b, 0xf6, 0x3a, 0x5f, 0x6b, 0xf9, 0x1c, 0x34, 0xc1, - 0x32, 0x91, 0x26, 0x18, 0xf7, 0x3b, 0x3d, 0xdb, 0xa1, 0x5b, 0x91, 0x2e, 0x4a, 0x08, 0xe0, 0x1e, - 0x62, 0x8f, 0x5f, 0x5c, 0x2e, 0xcb, 0x0f, 0x1b, 0x11, 0x48, 0xa0, 0xe1, 0x5c, 0xa8, 0x61, 0x6c, - 0xc3, 0xd9, 0x24, 0xd3, 0x4a, 0x47, 0x4d, 0xc8, 0x89, 0xbd, 0x13, 0xda, 0xaf, 0xb1, 0x1d, 0x44, - 0xa1, 0x25, 0x8e, 0x4f, 0x27, 0x8f, 0xc7, 0x3f, 0xe3, 0xd5, 0x6e, 0x74, 0xa7, 0x50, 0x2a, 0x37, - 0x22, 0xe5, 0x60, 0xe5, 0x04, 0x7d, 0x0b, 0x4c, 0x36, 0x1a, 0x28, 0xbf, 0xda, 0x3a, 0xf3, 0xf9, - 0xb8, 0x71, 0x3a, 0xb6, 0x6d, 0x67, 0x34, 0xa0, 0x44, 0xa0, 0x70, 0xdb, 0x6b, 0x5b, 0x5e, 0xc7, - 0x76, 0xac, 0x9e, 0xcd, 0xa4, 0xac, 0x4c, 0x12, 0x05, 0xa1, 0x8b, 0x90, 0xf3, 0x0f, 0x28, 0x6b, - 0xcb, 0xcc, 0xb9, 0xac, 0x8b, 0x00, 0x05, 0xc4, 0xbf, 0x89, 0x28, 0x5d, 0xda, 0xf3, 0x09, 0x95, - 0x6e, 0x9c, 0x58, 0xe9, 0xc6, 0x7d, 0x94, 0x8e, 0x7f, 0x10, 0xaa, 0x48, 0x5f, 0x51, 0xa9, 0xe8, - 0x45, 0x98, 0xef, 0xc4, 0x56, 0xa6, 0xab, 0x4a, 0xf6, 0x4e, 0x13, 0xe8, 0x78, 0x23, 0xd4, 0x88, - 0x80, 0x4c, 0xd1, 0x48, 0x42, 0xcc, 0xe9, 0x63, 0x62, 0x7e, 0xfc, 0x51, 0x28, 0x06, 0x5f, 0x98, - 0x50, 0x09, 0xf2, 0xd7, 0x5f, 0x23, 0x6f, 0x5e, 0x23, 0xeb, 0x0b, 0x29, 0x54, 0x86, 0x42, 0xeb, - 0xda, 0xda, 0x2b, 0x62, 0x66, 0xac, 0x7e, 0x90, 0xd3, 0x61, 0xd9, 0x43, 0xdf, 0x85, 0xac, 0x8c, - 0xb5, 0x67, 0xc3, 0xeb, 0x46, 0x3f, 0xe4, 0xd4, 0xce, 0x1d, 0x83, 0x4b, 0xbe, 0x71, 0xea, 0x49, - 0x03, 0xdd, 0x84, 0x92, 0x00, 0xaa, 0xb6, 0xeb, 0x85, 0x64, 0xf7, 0x33, 0x46, 0xe9, 0xe2, 0x94, - 0xd5, 0x08, 0xbd, 0xab, 0x90, 0x95, 0x22, 0x38, 0x9b, 0x48, 0x89, 0x26, 0xdc, 0x26, 0xd6, 0x88, - 0xc6, 0x29, 0xf4, 0x1c, 0x98, 0x3b, 0x96, 0xdd, 0x43, 0x91, 0x8c, 0x2c, 0xd2, 0x2d, 0xad, 0x9d, - 0x4d, 0x82, 0x23, 0xc7, 0xbe, 0x10, 0x34, 0x7d, 0xcf, 0x25, 0x3b, 0x4f, 0x7a, 0x7b, 0xf5, 0xf8, - 0x42, 0x70, 0xf2, 0x6b, 0xb2, 0x35, 0xa9, 0xfb, 0x1f, 0xe8, 0x62, 0xfc, 0xa8, 0x44, 0xbb, 0xa4, - 0x56, 0x9f, 0xb6, 0x1c, 0x10, 0xdc, 0x82, 0x52, 0xa4, 0xf7, 0x10, 0x15, 0xeb, 0xf1, 0xc6, 0x49, - 0x54, 0xac, 0x13, 0x1a, 0x16, 0x38, 0x85, 0x36, 0xa0, 0xc0, 0xf3, 0x58, 0xf1, 0x8d, 0xe2, 0x7c, - 0x32, 0x5d, 0x8d, 0xa4, 0x29, 0xb5, 0x0b, 0x93, 0x17, 0x03, 0x42, 0xdf, 0x87, 0xe2, 0x06, 0x65, - 0xca, 0xd7, 0x9f, 0x4b, 0x06, 0x8b, 0x09, 0x92, 0x8a, 0x07, 0x1c, 0x9c, 0x42, 0x6f, 0x89, 0x94, - 0x3a, 0xee, 0xeb, 0x50, 0x63, 0x8a, 0x4f, 0x0b, 0xee, 0xb5, 0x34, 0x1d, 0x21, 0xa0, 0xfc, 0x66, - 0x8c, 0xb2, 0x8a, 0x8a, 0x8d, 0x29, 0x4f, 0x30, 0xa0, 0xdc, 0xb8, 0xcf, 0x7f, 0x0a, 0xe0, 0xd4, - 0xea, 0xdb, 0xfa, 0x63, 0xf9, 0xba, 0xc5, 0x2c, 0xf4, 0x1a, 0xcc, 0x0b, 0x59, 0x06, 0x5f, 0xd3, - 0x63, 0x36, 0x7f, 0xec, 0xd3, 0x7d, 0xcc, 0xe6, 0x8f, 0x7f, 0xc2, 0xc7, 0xa9, 0xd6, 0xdb, 0x1f, - 0xdd, 0xab, 0xa7, 0x3e, 0xbe, 0x57, 0x4f, 0x7d, 0x76, 0xaf, 0x6e, 0xfc, 0xf8, 0xb0, 0x6e, 0xfc, - 0xfe, 0xb0, 0x6e, 0x7c, 0x78, 0x58, 0x37, 0x3e, 0x3a, 0xac, 0x1b, 0xff, 0x3e, 0xac, 0x1b, 0xff, - 0x39, 0xac, 0xa7, 0x3e, 0x3b, 0xac, 0x1b, 0xef, 0x7f, 0x5a, 0x4f, 0x7d, 0xf4, 0x69, 0x3d, 0xf5, - 0xf1, 0xa7, 0xf5, 0xd4, 0x0f, 0x1f, 0xbb, 0x7f, 0xf9, 0x28, 0x1d, 0x5d, 0x4e, 0xfc, 0x3c, 0xf5, - 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x90, 0x3c, 0x9c, 0xf7, 0xd2, 0x21, 0x00, 0x00, + // 2611 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0x4d, 0x6c, 0x1b, 0xc7, + 0xd5, 0x5c, 0x72, 0xf9, 0xf7, 0x48, 0xc9, 0xf2, 0x88, 0xb6, 0x09, 0xda, 0xe1, 0x2a, 0x83, 0xef, + 0x4b, 0xdc, 0xd8, 0x11, 0x63, 0xa7, 0x49, 0x1d, 0xa7, 0x69, 0x6a, 0x4a, 0xb1, 0x63, 0x47, 0x71, + 0x9c, 0x91, 0xe2, 0xa4, 0x45, 0x83, 0x60, 0x45, 0x8e, 0xa8, 0x85, 0xc8, 0x5d, 0x7a, 0x77, 0x18, + 0x87, 0xb7, 0x02, 0x3d, 0x17, 0x0d, 0xd0, 0x43, 0xdb, 0x4b, 0xd1, 0x02, 0x05, 0x5a, 0xa4, 0xe8, + 0xa5, 0xe8, 0xb1, 0x68, 0x2f, 0x3d, 0xa4, 0xb7, 0xf4, 0x16, 0xe4, 0xc0, 0xd6, 0xca, 0xa5, 0xd0, + 0x29, 0x40, 0x6f, 0x39, 0x15, 0xf3, 0xb3, 0xbb, 0xb3, 0x2b, 0xb2, 0x0e, 0x15, 0x07, 0x81, 0x2f, + 0xe2, 0xcc, 0x9b, 0x37, 0x6f, 0xe6, 0xfd, 0xcc, 0xfb, 0x5b, 0xc1, 0xe9, 0xe1, 0x5e, 0xaf, 0xd5, + 0xf7, 0x7a, 0x43, 0xdf, 0x63, 0x5e, 0x34, 0x58, 0x15, 0x7f, 0x51, 0x29, 0x9c, 0x37, 0x6a, 0x3d, + 0xaf, 0xe7, 0x49, 0x1c, 0x3e, 0x92, 0xeb, 0x0d, 0xab, 0xe7, 0x79, 0xbd, 0x3e, 0x6d, 0x89, 0xd9, + 0xf6, 0x68, 0xa7, 0xc5, 0x9c, 0x01, 0x0d, 0x98, 0x3d, 0x18, 0x2a, 0x84, 0x15, 0x45, 0xfd, 0x4e, + 0x7f, 0xe0, 0x75, 0x69, 0xbf, 0x15, 0x30, 0x9b, 0x05, 0xf2, 0xaf, 0xc2, 0x58, 0xe6, 0x18, 0xc3, + 0x51, 0xb0, 0x2b, 0xfe, 0x48, 0x20, 0xfe, 0x93, 0x01, 0x27, 0x36, 0xec, 0x6d, 0xda, 0xdf, 0xf2, + 0x6e, 0xdb, 0xfd, 0x11, 0x0d, 0x08, 0x0d, 0x86, 0x9e, 0x1b, 0x50, 0xb4, 0x06, 0x85, 0x3e, 0x5f, + 0x08, 0xea, 0xc6, 0x4a, 0xee, 0x6c, 0xe5, 0xe2, 0xb9, 0xd5, 0xe8, 0xca, 0x53, 0x37, 0x48, 0x68, + 0xf0, 0x92, 0xcb, 0xfc, 0x31, 0x51, 0x5b, 0x1b, 0xb7, 0xa1, 0xa2, 0x81, 0xd1, 0x12, 0xe4, 0xf6, + 0xe8, 0xb8, 0x6e, 0xac, 0x18, 0x67, 0xcb, 0x84, 0x0f, 0xd1, 0x05, 0xc8, 0xbf, 0xcb, 0xc9, 0xd4, + 0xb3, 0x2b, 0xc6, 0xd9, 0xca, 0xc5, 0xd3, 0xf1, 0x21, 0x6f, 0xb8, 0xce, 0x9d, 0x11, 0x15, 0xbb, + 0xd5, 0x41, 0x12, 0xf3, 0x72, 0xf6, 0x92, 0x81, 0xcf, 0xc1, 0xf1, 0x43, 0xeb, 0xe8, 0x24, 0x14, + 0x04, 0x86, 0xbc, 0x71, 0x99, 0xa8, 0x19, 0xae, 0x01, 0xda, 0x64, 0x3e, 0xb5, 0x07, 0xc4, 0x66, + 0xfc, 0xbe, 0x77, 0x46, 0x34, 0x60, 0xf8, 0x55, 0x58, 0x4e, 0x40, 0x15, 0xdb, 0xcf, 0x42, 0x25, + 0x88, 0xc1, 0x8a, 0xf7, 0x5a, 0x7c, 0xad, 0x78, 0x0f, 0xd1, 0x11, 0xf1, 0x2f, 0x0d, 0x80, 0x78, + 0x0d, 0x35, 0x01, 0xe4, 0xea, 0xcb, 0x76, 0xb0, 0x2b, 0x18, 0x36, 0x89, 0x06, 0x41, 0xe7, 0xe1, + 0x78, 0x3c, 0xbb, 0xe9, 0x6d, 0xee, 0xda, 0x7e, 0x57, 0xc8, 0xc0, 0x24, 0x87, 0x17, 0x10, 0x02, + 0xd3, 0xb7, 0x19, 0xad, 0xe7, 0x56, 0x8c, 0xb3, 0x39, 0x22, 0xc6, 0x9c, 0x5b, 0x46, 0x5d, 0xdb, + 0x65, 0x75, 0x53, 0x88, 0x53, 0xcd, 0x38, 0x9c, 0xeb, 0x97, 0x06, 0xf5, 0xfc, 0x8a, 0x71, 0x76, + 0x81, 0xa8, 0x19, 0xfe, 0x20, 0x07, 0xd5, 0xd7, 0x47, 0xd4, 0x1f, 0x2b, 0x01, 0xa0, 0x26, 0x94, + 0x02, 0xda, 0xa7, 0x1d, 0xe6, 0xf9, 0x52, 0x23, 0xed, 0x6c, 0xdd, 0x20, 0x11, 0x0c, 0xd5, 0x20, + 0xdf, 0x77, 0x06, 0x0e, 0x13, 0xd7, 0x5a, 0x20, 0x72, 0x82, 0x2e, 0x43, 0x3e, 0x60, 0xb6, 0xcf, + 0xc4, 0x5d, 0x2a, 0x17, 0x1b, 0xab, 0xd2, 0x30, 0x57, 0x43, 0xc3, 0x5c, 0xdd, 0x0a, 0x0d, 0xb3, + 0x5d, 0xfa, 0x70, 0x62, 0x65, 0xde, 0xff, 0xa7, 0x65, 0x10, 0xb9, 0x05, 0x3d, 0x0b, 0x39, 0xea, + 0x76, 0xc5, 0x7d, 0xbf, 0xe8, 0x4e, 0xbe, 0x01, 0x5d, 0x80, 0x72, 0xd7, 0xf1, 0x69, 0x87, 0x39, + 0x9e, 0x2b, 0xb8, 0x5a, 0xbc, 0xb8, 0x1c, 0x6b, 0x64, 0x3d, 0x5c, 0x22, 0x31, 0x16, 0x3a, 0x0f, + 0x85, 0x80, 0x8b, 0x2e, 0xa8, 0x17, 0xb9, 0x2d, 0xb4, 0x6b, 0x07, 0x13, 0x6b, 0x49, 0x42, 0xce, + 0x7b, 0x03, 0x87, 0xd1, 0xc1, 0x90, 0x8d, 0x89, 0xc2, 0x41, 0x4f, 0x40, 0xb1, 0x4b, 0xfb, 0x94, + 0x2b, 0xbc, 0x24, 0x14, 0xbe, 0xa4, 0x91, 0x17, 0x0b, 0x24, 0x44, 0x40, 0x6f, 0x83, 0x39, 0xec, + 0xdb, 0x6e, 0xbd, 0x2c, 0xb8, 0x58, 0x8c, 0x11, 0x6f, 0xf5, 0x6d, 0xb7, 0xfd, 0xdc, 0x27, 0x13, + 0xeb, 0x99, 0x9e, 0xc3, 0x76, 0x47, 0xdb, 0xab, 0x1d, 0x6f, 0xd0, 0xea, 0xf9, 0xf6, 0x8e, 0xed, + 0xda, 0xad, 0xbe, 0xb7, 0xe7, 0xb4, 0xde, 0x7d, 0xba, 0xc5, 0xdf, 0xe0, 0x9d, 0x11, 0xf5, 0x1d, + 0xea, 0xb7, 0x38, 0x99, 0x55, 0xa1, 0x12, 0xbe, 0x95, 0x08, 0xb2, 0x37, 0xcc, 0x52, 0x61, 0xa9, + 0x88, 0xef, 0x65, 0x01, 0x6d, 0xda, 0x83, 0x61, 0x9f, 0xce, 0xa5, 0xb2, 0x48, 0x39, 0xd9, 0x23, + 0x2b, 0x27, 0x37, 0xaf, 0x72, 0x62, 0x49, 0x9b, 0xf3, 0x49, 0x3a, 0xff, 0x45, 0x25, 0x5d, 0xf8, + 0x4a, 0x24, 0x8d, 0xeb, 0x60, 0xf2, 0x19, 0x77, 0x4a, 0xbe, 0x7d, 0x57, 0xc8, 0xb3, 0x4a, 0xf8, + 0x10, 0x6f, 0x40, 0x41, 0xde, 0x05, 0x35, 0xd2, 0x02, 0x4f, 0xbe, 0x8f, 0x58, 0xd8, 0xb9, 0x50, + 0x8c, 0x4b, 0xb1, 0x18, 0x73, 0x42, 0x40, 0xf8, 0xcf, 0x06, 0x2c, 0x28, 0x2d, 0x2a, 0x1f, 0xb3, + 0x0d, 0x45, 0xf9, 0xc6, 0x43, 0xff, 0x72, 0x2a, 0xed, 0x5f, 0xae, 0x74, 0xed, 0x21, 0xa3, 0x7e, + 0xbb, 0xf5, 0xe1, 0xc4, 0x32, 0x3e, 0x99, 0x58, 0x8f, 0xcf, 0x62, 0x34, 0xf4, 0xe9, 0xa1, 0x5f, + 0x0a, 0x09, 0xa3, 0x73, 0xe2, 0x76, 0x2c, 0x50, 0xa6, 0x70, 0x6c, 0x55, 0x86, 0x82, 0xeb, 0x6e, + 0x8f, 0x06, 0x9c, 0xb2, 0xc9, 0xb5, 0x48, 0x24, 0x0e, 0x67, 0xf3, 0xae, 0xed, 0xbb, 0x8e, 0xdb, + 0x0b, 0xea, 0x39, 0xe1, 0x3b, 0xa3, 0x39, 0xfe, 0xb9, 0x01, 0xcb, 0x09, 0x53, 0x54, 0x4c, 0x5c, + 0x82, 0x42, 0xc0, 0xa5, 0x1b, 0xf2, 0xa0, 0x29, 0x72, 0x53, 0xc0, 0xdb, 0x8b, 0xea, 0xf2, 0x05, + 0x39, 0x27, 0x0a, 0xff, 0xc1, 0x5d, 0xed, 0x6f, 0x06, 0x54, 0x45, 0x00, 0x08, 0xdf, 0x07, 0x02, + 0xd3, 0xb5, 0x07, 0x54, 0xa9, 0x4a, 0x8c, 0xb5, 0xa8, 0xc0, 0x8f, 0x2b, 0x85, 0x51, 0x61, 0x5e, + 0x47, 0x66, 0x1c, 0xd9, 0x91, 0x19, 0xf1, 0x5b, 0xa9, 0x41, 0x9e, 0x9b, 0xe4, 0x58, 0x38, 0xb1, + 0x32, 0x91, 0x13, 0xfc, 0x38, 0x2c, 0x28, 0x2e, 0x94, 0x68, 0x67, 0x05, 0xb2, 0x01, 0x14, 0xa4, + 0x26, 0xd0, 0xff, 0x41, 0x39, 0x4a, 0x00, 0x04, 0xb7, 0xb9, 0x76, 0xe1, 0x60, 0x62, 0x65, 0x59, + 0x40, 0xe2, 0x05, 0x64, 0xe9, 0xc1, 0xd5, 0x68, 0x97, 0x0f, 0x26, 0x96, 0x04, 0xa8, 0x50, 0x8a, + 0xce, 0x80, 0xb9, 0xcb, 0xe3, 0x13, 0x17, 0x81, 0xd9, 0x2e, 0x1d, 0x4c, 0x2c, 0x31, 0x27, 0xe2, + 0x2f, 0xbe, 0x06, 0xd5, 0x0d, 0xda, 0xb3, 0x3b, 0x63, 0x75, 0x68, 0x2d, 0x24, 0xc7, 0x0f, 0x34, + 0x42, 0x1a, 0x8f, 0x42, 0x35, 0x3a, 0xf1, 0x9d, 0x41, 0xa0, 0x5e, 0x43, 0x25, 0x82, 0xbd, 0x1a, + 0xe0, 0x5f, 0x18, 0xa0, 0x6c, 0x00, 0x61, 0x2d, 0xab, 0xe0, 0xfe, 0x0b, 0x0e, 0x26, 0x96, 0x82, + 0x84, 0x49, 0x03, 0x7a, 0x1e, 0x8a, 0x81, 0x38, 0x91, 0x13, 0x4b, 0x9b, 0x96, 0x58, 0x68, 0x1f, + 0xe3, 0x26, 0x72, 0x30, 0xb1, 0x42, 0x44, 0x12, 0x0e, 0xd0, 0x6a, 0x22, 0xf0, 0x4a, 0xc6, 0x16, + 0x0f, 0x26, 0x96, 0x06, 0xd5, 0x03, 0x31, 0xfe, 0xdc, 0x80, 0xca, 0x96, 0xed, 0x44, 0x26, 0x54, + 0x0f, 0x55, 0x14, 0xfb, 0x57, 0x09, 0xe0, 0x96, 0xd8, 0xa5, 0x7d, 0x7b, 0x7c, 0xd5, 0xf3, 0x05, + 0xdd, 0x05, 0x12, 0xcd, 0xe3, 0x58, 0x69, 0x4e, 0x8d, 0x95, 0xf9, 0xf9, 0xdd, 0xf1, 0x57, 0xeb, + 0xfc, 0x6e, 0x98, 0xa5, 0xec, 0x52, 0x0e, 0xff, 0xc1, 0x80, 0xaa, 0x64, 0x5e, 0x59, 0xde, 0x0f, + 0xa0, 0x20, 0x65, 0x23, 0xd8, 0xff, 0x1f, 0x8e, 0xe9, 0xdc, 0x3c, 0x4e, 0x49, 0xd1, 0x44, 0x2f, + 0xc2, 0x62, 0xd7, 0xf7, 0x86, 0x43, 0xda, 0xdd, 0x54, 0xee, 0x2f, 0x9b, 0x76, 0x7f, 0xeb, 0xfa, + 0x3a, 0x49, 0xa1, 0xe3, 0xbf, 0x1b, 0xb0, 0xa0, 0x9c, 0x89, 0x52, 0x57, 0x24, 0x62, 0xe3, 0xc8, + 0x11, 0x2f, 0x3b, 0x6f, 0xc4, 0x3b, 0x09, 0x85, 0x9e, 0xef, 0x8d, 0x86, 0xa1, 0x43, 0x52, 0xb3, + 0xf9, 0x22, 0x21, 0xbe, 0x01, 0x8b, 0x21, 0x2b, 0x33, 0x3c, 0x6a, 0x23, 0xed, 0x51, 0xaf, 0x77, + 0xa9, 0xcb, 0x9c, 0x1d, 0x27, 0xf2, 0x91, 0x0a, 0x1f, 0xff, 0xc4, 0x80, 0xa5, 0x34, 0x0a, 0x5a, + 0x4f, 0x25, 0xf0, 0x8f, 0xcd, 0x26, 0xa7, 0xe7, 0xee, 0x21, 0x69, 0x95, 0xc1, 0x3f, 0x73, 0xbf, + 0x0c, 0xbe, 0xa6, 0x3b, 0x99, 0xb2, 0xf2, 0x0a, 0xf8, 0x67, 0x06, 0x2c, 0x24, 0x74, 0x89, 0x2e, + 0x81, 0xb9, 0xe3, 0x7b, 0x83, 0xb9, 0x14, 0x25, 0x76, 0xa0, 0x6f, 0x42, 0x96, 0x79, 0x73, 0xa9, + 0x29, 0xcb, 0x3c, 0xae, 0x25, 0xc5, 0x7e, 0x4e, 0xe6, 0xc7, 0x72, 0x86, 0x9f, 0x81, 0xb2, 0x60, + 0xe8, 0x96, 0xed, 0xf8, 0x53, 0x03, 0xc6, 0x74, 0x86, 0x9e, 0x87, 0x63, 0xd2, 0x19, 0x4e, 0xdf, + 0x5c, 0x9d, 0xb6, 0xb9, 0x1a, 0x6e, 0x3e, 0x0d, 0xf9, 0xb5, 0xdd, 0x91, 0xbb, 0xc7, 0xb7, 0x74, + 0x6d, 0x66, 0x87, 0x5b, 0xf8, 0x18, 0x9f, 0x80, 0x65, 0xfe, 0x06, 0xa9, 0x1f, 0xac, 0x79, 0x23, + 0x97, 0x85, 0xf5, 0xc9, 0x79, 0xa8, 0x25, 0xc1, 0xca, 0x4a, 0x6a, 0x90, 0xef, 0x70, 0x80, 0xa0, + 0xb1, 0x40, 0xe4, 0x04, 0xff, 0xc6, 0x00, 0x74, 0x8d, 0x32, 0x71, 0xca, 0xf5, 0xf5, 0xe8, 0x79, + 0x34, 0xa0, 0x34, 0xb0, 0x59, 0x67, 0x97, 0xfa, 0x41, 0x98, 0xbf, 0x84, 0xf3, 0xaf, 0x23, 0x59, + 0xc4, 0x17, 0x60, 0x39, 0x71, 0x4b, 0xc5, 0x53, 0x03, 0x4a, 0x1d, 0x05, 0x53, 0x21, 0x2f, 0x9a, + 0xe3, 0x3f, 0x66, 0xa1, 0x24, 0x36, 0x10, 0xba, 0x83, 0x2e, 0x40, 0x65, 0xc7, 0x71, 0x7b, 0xd4, + 0x1f, 0xfa, 0x8e, 0x12, 0x81, 0xd9, 0x3e, 0x76, 0x30, 0xb1, 0x74, 0x30, 0xd1, 0x27, 0xe8, 0x49, + 0x28, 0x8e, 0x02, 0xea, 0xbf, 0xe3, 0xc8, 0x97, 0x5e, 0x6e, 0xd7, 0xf6, 0x27, 0x56, 0xe1, 0x8d, + 0x80, 0xfa, 0xd7, 0xd7, 0x79, 0xf0, 0x19, 0x89, 0x11, 0x91, 0xbf, 0x5d, 0xf4, 0x8a, 0x32, 0x53, + 0x91, 0xc0, 0xb5, 0xbf, 0xc5, 0xaf, 0x9f, 0x72, 0x75, 0x43, 0xdf, 0x1b, 0x50, 0xb6, 0x4b, 0x47, + 0x41, 0xab, 0xe3, 0x0d, 0x06, 0x9e, 0xdb, 0x12, 0x15, 0xb7, 0x60, 0x9a, 0x47, 0x50, 0xbe, 0x5d, + 0x59, 0xee, 0x16, 0x14, 0xd9, 0xae, 0xef, 0x8d, 0x7a, 0xbb, 0x22, 0x30, 0xe4, 0xda, 0x97, 0xe7, + 0xa7, 0x17, 0x52, 0x20, 0xe1, 0x00, 0x3d, 0xca, 0xa5, 0x45, 0x3b, 0x7b, 0xc1, 0x68, 0x20, 0x6b, + 0xbc, 0x76, 0xfe, 0x60, 0x62, 0x19, 0x4f, 0x92, 0x08, 0x8c, 0x7f, 0x9c, 0x05, 0x4b, 0x2b, 0x8d, + 0xaf, 0x7a, 0xfe, 0xab, 0x94, 0xf9, 0x4e, 0xe7, 0xa6, 0x3d, 0xa0, 0xa1, 0x6d, 0x58, 0x50, 0x19, + 0x08, 0xe0, 0x3b, 0xda, 0x13, 0x80, 0x41, 0x84, 0x87, 0x1e, 0x01, 0x10, 0x6f, 0x46, 0xae, 0xcb, + 0xd7, 0x50, 0x16, 0x10, 0xb1, 0xbc, 0x96, 0x90, 0x54, 0x6b, 0x4e, 0xce, 0x94, 0x84, 0xae, 0xa7, + 0x25, 0x34, 0x37, 0x9d, 0x48, 0x2c, 0xba, 0xad, 0xe7, 0x93, 0xb6, 0x8e, 0xff, 0x61, 0x40, 0x73, + 0x23, 0xbc, 0xf9, 0x11, 0xc5, 0x11, 0xf2, 0x9b, 0x7d, 0x40, 0xfc, 0xe6, 0xbe, 0x1c, 0xbf, 0xb8, + 0x09, 0xb0, 0xe1, 0xb8, 0xf4, 0xaa, 0xd3, 0x67, 0xd4, 0x9f, 0x52, 0xc5, 0xfc, 0x34, 0x17, 0xbb, + 0x04, 0x42, 0x77, 0x42, 0x3e, 0xd7, 0x34, 0x3f, 0xfc, 0x20, 0xd8, 0xc8, 0x3e, 0x40, 0xb5, 0xe5, + 0x52, 0x2e, 0xca, 0x85, 0xe2, 0x8e, 0x60, 0x4f, 0x86, 0xd4, 0x44, 0x23, 0x26, 0xe6, 0xbd, 0xfd, + 0x1d, 0x75, 0xf8, 0xb3, 0xf7, 0xc9, 0x88, 0x44, 0x7b, 0xac, 0x15, 0x8c, 0x5d, 0x66, 0xbf, 0xa7, + 0xed, 0x27, 0xe1, 0x21, 0xc8, 0x56, 0x49, 0x57, 0x7e, 0x6a, 0xd2, 0xf5, 0x82, 0x3a, 0xe6, 0x4b, + 0x55, 0x9d, 0x2f, 0xc4, 0x1e, 0x50, 0x28, 0x45, 0x79, 0xc0, 0xc7, 0xc0, 0xf4, 0xe9, 0x4e, 0x18, + 0xaa, 0x51, 0x7c, 0x72, 0x84, 0x29, 0xd6, 0xf1, 0x5f, 0x0c, 0x58, 0xba, 0x46, 0x59, 0x32, 0x09, + 0x7a, 0x88, 0x54, 0x8a, 0x5f, 0x86, 0xe3, 0xda, 0xfd, 0x15, 0xf7, 0x4f, 0xa7, 0x32, 0x9f, 0x13, + 0x31, 0xff, 0xd7, 0xdd, 0x2e, 0x7d, 0x4f, 0x15, 0x94, 0xc9, 0xa4, 0xe7, 0x16, 0x54, 0xb4, 0x45, + 0x74, 0x25, 0x95, 0xee, 0x2c, 0xa7, 0xfa, 0x95, 0x3c, 0x64, 0xb7, 0x6b, 0x8a, 0x27, 0x59, 0x36, + 0xaa, 0x64, 0x36, 0x4a, 0x0d, 0x36, 0x01, 0x09, 0x75, 0x09, 0xb2, 0x7a, 0x70, 0x12, 0xd0, 0x57, + 0xa2, 0xbc, 0x27, 0x9a, 0xa3, 0x47, 0xc1, 0xf4, 0xbd, 0xbb, 0x61, 0x1e, 0xbb, 0x10, 0x1f, 0x49, + 0xbc, 0xbb, 0x44, 0x2c, 0xe1, 0xe7, 0x21, 0x47, 0xbc, 0xbb, 0xa8, 0x09, 0xe0, 0xdb, 0x6e, 0x8f, + 0xde, 0x8e, 0x2a, 0xa8, 0x2a, 0xd1, 0x20, 0x33, 0x12, 0x87, 0x35, 0x38, 0xae, 0xdf, 0x48, 0xaa, + 0x7b, 0x15, 0x8a, 0xaf, 0x8f, 0x74, 0x71, 0xd5, 0x52, 0xe2, 0x92, 0x85, 0x7a, 0x88, 0xc4, 0x6d, + 0x06, 0x62, 0x38, 0x3a, 0x03, 0x65, 0x66, 0x6f, 0xf7, 0xe9, 0xcd, 0xd8, 0xcd, 0xc5, 0x00, 0xbe, + 0xca, 0x8b, 0xbf, 0xdb, 0x5a, 0x06, 0x14, 0x03, 0xd0, 0x13, 0xb0, 0x14, 0xdf, 0xf9, 0x96, 0x4f, + 0x77, 0x9c, 0xf7, 0x84, 0x86, 0xab, 0xe4, 0x10, 0x1c, 0x9d, 0x85, 0x63, 0x31, 0x6c, 0x53, 0x64, + 0x1a, 0xa6, 0x40, 0x4d, 0x83, 0xb9, 0x6c, 0x04, 0xbb, 0x2f, 0xdd, 0x19, 0xd9, 0x7d, 0xf1, 0xf8, + 0xaa, 0x44, 0x83, 0xe0, 0xbf, 0x1a, 0x70, 0x5c, 0xaa, 0x9a, 0xd9, 0xec, 0xa1, 0xb4, 0xfa, 0xdf, + 0x1a, 0x80, 0x74, 0x0e, 0x94, 0x69, 0xfd, 0xbf, 0xde, 0x08, 0xe2, 0xa9, 0x4c, 0x45, 0xd4, 0xb4, + 0x12, 0x14, 0xf7, 0x72, 0x30, 0x14, 0x44, 0x3a, 0x24, 0x8b, 0x6b, 0x53, 0x16, 0xcd, 0x12, 0x42, + 0xd4, 0x2f, 0xaf, 0xf5, 0xb7, 0xc7, 0x8c, 0x06, 0xaa, 0xe4, 0x15, 0xb5, 0xbe, 0x00, 0x10, 0xf9, + 0xc3, 0xcf, 0xa2, 0x2e, 0x13, 0x56, 0x63, 0xc6, 0x67, 0x29, 0x10, 0x09, 0x07, 0xf8, 0xf7, 0x59, + 0x58, 0xb8, 0xed, 0xf5, 0x47, 0x71, 0x60, 0x7c, 0x98, 0x02, 0x46, 0xa2, 0x0e, 0xcf, 0x87, 0x75, + 0x38, 0x02, 0x33, 0x60, 0x74, 0x28, 0x2c, 0x2b, 0x47, 0xc4, 0x18, 0x61, 0xa8, 0x32, 0xdb, 0xef, + 0x51, 0x26, 0xab, 0x9b, 0x7a, 0x41, 0xa4, 0x9d, 0x09, 0x18, 0x5a, 0x81, 0x8a, 0xdd, 0xeb, 0xf9, + 0xb4, 0x67, 0x33, 0xda, 0x1e, 0xd7, 0x8b, 0xe2, 0x30, 0x1d, 0x84, 0xdf, 0x82, 0xc5, 0x50, 0x58, + 0x4a, 0xa5, 0x4f, 0x41, 0xf1, 0x5d, 0x01, 0x99, 0xd2, 0x17, 0x93, 0xa8, 0xca, 0x8d, 0x85, 0x68, + 0xc9, 0x3e, 0x7b, 0x78, 0x67, 0x7c, 0x03, 0x0a, 0x12, 0x1d, 0x9d, 0xd1, 0x6b, 0x14, 0xd9, 0xa4, + 0xe1, 0x73, 0x55, 0x70, 0x60, 0x28, 0x48, 0x42, 0x4a, 0xf1, 0xc2, 0x36, 0x24, 0x84, 0xa8, 0x5f, + 0xfc, 0x1f, 0x03, 0x4e, 0xac, 0x53, 0x46, 0x3b, 0x8c, 0x76, 0xaf, 0x3a, 0xb4, 0xdf, 0xfd, 0x5a, + 0xcb, 0xe7, 0xa8, 0x09, 0x96, 0xd3, 0x9a, 0x60, 0xdc, 0xef, 0xf4, 0x1d, 0x97, 0x6e, 0x68, 0x5d, + 0x94, 0x18, 0xc0, 0x3d, 0xc4, 0x0e, 0xbf, 0xb8, 0x5c, 0x96, 0x1f, 0x36, 0x34, 0x48, 0xa4, 0xe1, + 0x42, 0xac, 0x61, 0xfc, 0x23, 0x03, 0x4e, 0xa6, 0xb9, 0x56, 0x4a, 0x6a, 0x41, 0x41, 0x6c, 0x9e, + 0xd2, 0x7f, 0x4d, 0xec, 0x20, 0x0a, 0x0d, 0x5d, 0x4a, 0x9c, 0x2f, 0x3e, 0x88, 0xb4, 0xeb, 0x07, + 0x13, 0xab, 0x16, 0x43, 0xb5, 0x12, 0x5f, 0xc3, 0xc5, 0xbf, 0xe2, 0x85, 0xb0, 0x4e, 0x53, 0xe8, + 0x9b, 0xdb, 0x97, 0xf2, 0xbd, 0x72, 0x82, 0xbe, 0x01, 0x26, 0x1b, 0x0f, 0x95, 0xcb, 0x6d, 0x9f, + 0xf8, 0x7c, 0x62, 0x1d, 0x4f, 0x6c, 0xdb, 0x1a, 0x0f, 0x29, 0x11, 0x28, 0xdc, 0x2c, 0x3b, 0xb6, + 0xdf, 0x75, 0x5c, 0xbb, 0xef, 0x30, 0x29, 0x46, 0x93, 0xe8, 0x20, 0xd1, 0x89, 0xd8, 0xa3, 0xac, + 0x23, 0x93, 0xea, 0xaa, 0xea, 0x44, 0x08, 0x48, 0xa2, 0x13, 0x21, 0x20, 0xf8, 0xd7, 0x9a, 0x79, + 0x48, 0xcb, 0x3f, 0xa2, 0x79, 0x18, 0x47, 0x36, 0x0f, 0xe3, 0x3e, 0xe6, 0x81, 0xbf, 0x17, 0xeb, + 0x32, 0xbc, 0xa2, 0xd2, 0xe5, 0x8b, 0xb0, 0xd8, 0x4d, 0xac, 0xcc, 0xd6, 0xa9, 0xec, 0xb2, 0xa6, + 0xd0, 0xf1, 0xb5, 0x58, 0x41, 0x02, 0x32, 0x43, 0x41, 0x29, 0xa9, 0x67, 0x0f, 0x49, 0xfd, 0x89, + 0xc7, 0xa0, 0x1c, 0x7d, 0x8b, 0x42, 0x15, 0x28, 0x5e, 0x7d, 0x8d, 0xbc, 0x79, 0x85, 0xac, 0x2f, + 0x65, 0x50, 0x15, 0x4a, 0xed, 0x2b, 0x6b, 0xaf, 0x88, 0x99, 0x71, 0xf1, 0x83, 0x42, 0x18, 0xc0, + 0x7d, 0xf4, 0x6d, 0xc8, 0xcb, 0xa8, 0x7c, 0x32, 0xbe, 0xae, 0xfe, 0xc9, 0xa7, 0x71, 0xea, 0x10, + 0x5c, 0xf2, 0x8d, 0x33, 0x4f, 0x19, 0xe8, 0x26, 0x54, 0x04, 0x50, 0x35, 0x68, 0xcf, 0xa4, 0xfb, + 0xa4, 0x09, 0x4a, 0x8f, 0xcc, 0x58, 0xd5, 0xe8, 0x5d, 0x86, 0xbc, 0x14, 0xc1, 0xc9, 0x54, 0xf2, + 0x34, 0xe5, 0x36, 0x89, 0x96, 0x35, 0xce, 0xa0, 0xe7, 0xc0, 0xdc, 0xb2, 0x9d, 0x3e, 0xd2, 0x72, + 0x37, 0xad, 0xaf, 0xda, 0x38, 0x99, 0x06, 0x6b, 0xc7, 0xbe, 0x10, 0xb5, 0x87, 0x4f, 0xa5, 0x7b, + 0x54, 0xe1, 0xf6, 0xfa, 0xe1, 0x85, 0xe8, 0xe4, 0xd7, 0x64, 0x13, 0x33, 0xec, 0x94, 0xa0, 0x47, + 0x92, 0x47, 0xa5, 0x1a, 0x2b, 0x8d, 0xe6, 0xac, 0xe5, 0x88, 0xe0, 0x06, 0x54, 0xb4, 0x2e, 0x85, + 0x2e, 0xd6, 0xc3, 0x2d, 0x16, 0x5d, 0xac, 0x53, 0x5a, 0x1b, 0x38, 0x83, 0xae, 0x41, 0x89, 0x67, + 0xbc, 0xe2, 0x6b, 0xc6, 0xe9, 0x74, 0x62, 0xab, 0x25, 0x34, 0x8d, 0x33, 0xd3, 0x17, 0x23, 0x42, + 0xdf, 0x85, 0xf2, 0x35, 0xca, 0x54, 0x54, 0x38, 0x95, 0x0e, 0x2b, 0x53, 0x24, 0x95, 0x0c, 0x4d, + 0x38, 0x83, 0xde, 0x12, 0xc9, 0x77, 0xd2, 0x29, 0x22, 0x6b, 0x86, 0xf3, 0x8b, 0xee, 0xb5, 0x32, + 0x1b, 0x21, 0xa2, 0xfc, 0x66, 0x82, 0xb2, 0x8a, 0x9f, 0xd6, 0x8c, 0x27, 0x18, 0x51, 0xb6, 0xee, + 0xf3, 0x3f, 0x05, 0x38, 0x73, 0xf1, 0xed, 0xf0, 0xb3, 0xfa, 0xba, 0xcd, 0x6c, 0xf4, 0x1a, 0x2c, + 0x0a, 0x59, 0x46, 0xdf, 0xdd, 0x13, 0x36, 0x7f, 0xe8, 0x23, 0x7f, 0xc2, 0xe6, 0x0f, 0x7f, 0xec, + 0xc7, 0x99, 0xf6, 0xdb, 0x1f, 0xdd, 0x6b, 0x66, 0x3e, 0xbe, 0xd7, 0xcc, 0x7c, 0x76, 0xaf, 0x69, + 0xfc, 0x70, 0xbf, 0x69, 0xfc, 0x6e, 0xbf, 0x69, 0x7c, 0xb8, 0xdf, 0x34, 0x3e, 0xda, 0x6f, 0x1a, + 0xff, 0xda, 0x6f, 0x1a, 0xff, 0xde, 0x6f, 0x66, 0x3e, 0xdb, 0x6f, 0x1a, 0xef, 0x7f, 0xda, 0xcc, + 0x7c, 0xf4, 0x69, 0x33, 0xf3, 0xf1, 0xa7, 0xcd, 0xcc, 0xf7, 0x1f, 0xbf, 0x7f, 0xa1, 0x29, 0x1d, + 0x5d, 0x41, 0xfc, 0x3c, 0xfd, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xfa, 0x1a, 0x95, 0xfc, + 0x21, 0x00, 0x00, } func (x Direction) String() string { diff --git a/pkg/logproto/logproto.proto b/pkg/logproto/logproto.proto index 487eea41dce0..830fbfe627ab 100644 --- a/pkg/logproto/logproto.proto +++ b/pkg/logproto/logproto.proto @@ -452,7 +452,7 @@ message DetectedFieldsRequest { message DetectedFieldsResponse { repeated DetectedField fields = 1; - uint32 fieldLimit = 2; + uint32 fieldLimit = 2 [(gogoproto.jsontag) = "fieldLimit,omitempty"]; } // TODO: make the detected field include the serialized sketch @@ -461,7 +461,7 @@ message DetectedField { string label = 1; string type = 2 [(gogoproto.casttype) = "DetectedFieldType"]; uint64 cardinality = 3; - bytes sketch = 4 [(gogoproto.jsontag) = "-"]; //serialized hyperloglog sketch + bytes sketch = 4 [(gogoproto.jsontag) = "sketch,omitempty"]; } message DetectedLabelsRequest { diff --git a/pkg/loki/modules.go b/pkg/loki/modules.go index 843fd5054fb8..04b816b96fed 100644 --- a/pkg/loki/modules.go +++ b/pkg/loki/modules.go @@ -1087,6 +1087,7 @@ func (t *Loki) initQueryFrontend() (_ services.Service, err error) { t.Server.HTTP.Path("/loki/api/v1/series").Methods("GET", "POST").Handler(frontendHandler) t.Server.HTTP.Path("/loki/api/v1/patterns").Methods("GET", "POST").Handler(frontendHandler) t.Server.HTTP.Path("/loki/api/v1/detected_labels").Methods("GET", "POST").Handler(frontendHandler) + t.Server.HTTP.Path("/loki/api/v1/detected_fields").Methods("GET", "POST").Handler(frontendHandler) t.Server.HTTP.Path("/loki/api/v1/index/stats").Methods("GET", "POST").Handler(frontendHandler) t.Server.HTTP.Path("/loki/api/v1/index/shards").Methods("GET", "POST").Handler(frontendHandler) t.Server.HTTP.Path("/loki/api/v1/index/volume").Methods("GET", "POST").Handler(frontendHandler) @@ -1104,12 +1105,6 @@ func (t *Loki) initQueryFrontend() (_ services.Service, err error) { t.Server.HTTP.Path("/api/prom/tail").Methods("GET", "POST").Handler(defaultHandler) } - // We don't marshal the hyperloglog sketch in the detected fields response to JSON, so this endpoint - // only works correctly in V2 with protobuf encoding enabled. - if frontendV2 != nil && frontendV2.IsProtobufEncoded() { - t.Server.HTTP.Path("/loki/api/v1/detected_fields").Methods("GET", "POST").Handler(frontendHandler) - } - if t.frontend == nil { return services.NewIdleService(nil, func(_ error) error { if t.stopper != nil { diff --git a/pkg/querier/querier.go b/pkg/querier/querier.go index df75af917292..b2e61b1bdb68 100644 --- a/pkg/querier/querier.go +++ b/pkg/querier/querier.go @@ -1018,7 +1018,7 @@ func (q *SingleTenantQuerier) DetectedFields(ctx context.Context, req *logproto. // TODO(twhitney): converting from a step to a duration should be abstracted and reused, // doing this in a few places now. - streams, err := streamsForFieldDetection(iters, req.LineLimit, time.Duration(req.Step)) + streams, err := streamsForFieldDetection(iters, req.LineLimit) if err != nil { return nil, err } @@ -1186,11 +1186,11 @@ func parseLine(line string) map[string][]string { return result } -// readStreams reads the streams from the iterator and returns them sorted. +// streamsForFieldDetection reads the streams from the iterator and returns them sorted. // If categorizeLabels is true, the stream labels contains just the stream labels and entries inside each stream have their // structuredMetadata and parsed fields populated with structured metadata labels plus the parsed labels respectively. // Otherwise, the stream labels are the whole series labels including the stream labels, structured metadata labels and parsed labels. -func streamsForFieldDetection(i iter.EntryIterator, size uint32, interval time.Duration) (logqlmodel.Streams, error) { +func streamsForFieldDetection(i iter.EntryIterator, size uint32) (logqlmodel.Streams, error) { streams := map[string]*logproto.Stream{} respSize := uint32(0) // lastEntry should be a really old time so that the first comparison is always true, we use a negative @@ -1199,14 +1199,12 @@ func streamsForFieldDetection(i iter.EntryIterator, size uint32, interval time.D for respSize < size && i.Next() { streamLabels, entry := i.Labels(), i.Entry() - // Always going backward - shouldOutput := entry.Timestamp.Equal(lastEntry.Add(-interval)) || - entry.Timestamp.Before(lastEntry.Add(-interval)) + // Always going backward as the direction for field detection is hard-coded to BACKWARD + shouldOutput := entry.Timestamp.Equal(lastEntry) || entry.Timestamp.Before(lastEntry) - // If step == 0 output every line. // If lastEntry.Unix < 0 this is the first pass through the loop and we should output the line. // Then check to see if the entry is equal to, or past a forward step - if interval == 0 || lastEntry.Unix() < 0 || shouldOutput { + if lastEntry.Unix() < 0 || shouldOutput { stream, ok := streams[streamLabels] if !ok { stream = &logproto.Stream{ diff --git a/pkg/querier/queryrange/codec.go b/pkg/querier/queryrange/codec.go index 09997156128e..874313d49826 100644 --- a/pkg/querier/queryrange/codec.go +++ b/pkg/querier/queryrange/codec.go @@ -1610,7 +1610,7 @@ func (Codec) MergeResponse(responses ...queryrangebase.Response) (queryrangebase return &DetectedFieldsResponse{ Response: &logproto.DetectedFieldsResponse{ Fields: mergedFields, - FieldLimit: fieldLimit, + FieldLimit: 0, }, Headers: headers, }, nil diff --git a/pkg/querier/queryrange/roundtrip.go b/pkg/querier/queryrange/roundtrip.go index 228f20a51405..e5b9db82cd27 100644 --- a/pkg/querier/queryrange/roundtrip.go +++ b/pkg/querier/queryrange/roundtrip.go @@ -11,6 +11,7 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" "github.com/grafana/dskit/httpgrpc" + "github.com/grafana/dskit/tenant" "github.com/grafana/dskit/user" "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" @@ -21,12 +22,14 @@ import ( logqllog "github.com/grafana/loki/v3/pkg/logql/log" "github.com/grafana/loki/v3/pkg/logql/syntax" "github.com/grafana/loki/v3/pkg/logqlmodel/stats" + "github.com/grafana/loki/v3/pkg/querier/queryrange/queryrangebase" base "github.com/grafana/loki/v3/pkg/querier/queryrange/queryrangebase" "github.com/grafana/loki/v3/pkg/storage/chunk/cache" "github.com/grafana/loki/v3/pkg/storage/config" "github.com/grafana/loki/v3/pkg/util" "github.com/grafana/loki/v3/pkg/util/constants" logutil "github.com/grafana/loki/v3/pkg/util/log" + "github.com/grafana/loki/v3/pkg/util/validation" ) const ( @@ -1132,12 +1135,14 @@ func NewDetectedFieldsTripperware( return base.MiddlewareFunc(func(next base.Handler) base.Handler { statsHandler := indexStatsTripperware.Wrap(next) + splitter := newDefaultSplitter(limits, iqo) + queryRangeMiddleware := []base.Middleware{ StatsCollectorMiddleware(), NewLimitsMiddleware(limits), NewQuerySizeLimiterMiddleware(schema.Configs, engineOpts, log, limits, statsHandler), base.InstrumentMiddleware("split_by_interval", metrics.InstrumentMiddlewareMetrics), - SplitByIntervalMiddleware(schema.Configs, limits, merger, newDefaultSplitter(limits, iqo), metrics.SplitByMetrics), + SplitByIntervalMiddleware(schema.Configs, limits, merger, splitter, metrics.SplitByMetrics), } // The sharding middleware takes care of enforcing this limit for both shardable and non-shardable queries. @@ -1153,6 +1158,62 @@ func NewDetectedFieldsTripperware( ) } - return NewLimitedRoundTripper(next, limits, schema.Configs, queryRangeMiddleware...) + limitedRT := NewLimitedRoundTripper(next, limits, schema.Configs, queryRangeMiddleware...) + return NewSketchRemovingHandler(limitedRT, limits, splitter) }), nil } + +// NewSketchRemovingHandler returns a handler that removes sketches from detected fields responses before +// returning them to the user. We only need sketches internally for calculating cardinality for split queries. +// We're already doing this sanitization in the merge code, so this handler catches non-split queries +// to make sure their sketches are also removed. +func NewSketchRemovingHandler(next queryrangebase.Handler, limits Limits, splitter splitter) queryrangebase.Handler { + return queryrangebase.HandlerFunc( + func(ctx context.Context, req queryrangebase.Request) (queryrangebase.Response, error) { + res, err := next.Do(ctx, req) + if err != nil { + return nil, err + } + + resp, ok := res.(*DetectedFieldsResponse) + if !ok { + return res, nil + } + + tenantIDs, err := tenant.TenantIDs(ctx) + if err != nil { + return resp, nil + } + + interval := validation.SmallestPositiveNonZeroDurationPerTenant( + tenantIDs, + limits.QuerySplitDuration, + ) + + // sketeches get cleaned up in the merge code, so we only need catch the cases + // where no splitting happened + if interval == 0 { + return removeSketches(resp), nil + } + + intervals, err := splitter.split(time.Now().UTC(), tenantIDs, req, interval) + if err != nil || len(intervals) < 2 { + return removeSketches(resp), nil + } + + // must have been splits, so sketches are already removed + return resp, nil + }, + ) +} + +// removeSketches removes sketches and field limit from a detected fields response. +// this is only needed for queries that were not split. +func removeSketches(resp *DetectedFieldsResponse) *DetectedFieldsResponse { + for i := range resp.Response.Fields { + resp.Response.Fields[i].Sketch = nil + } + + resp.Response.FieldLimit = 0 + return resp +} diff --git a/pkg/storage/detected/fields.go b/pkg/storage/detected/fields.go index b9e3c714d1ec..7ced040b37d2 100644 --- a/pkg/storage/detected/fields.go +++ b/pkg/storage/detected/fields.go @@ -73,18 +73,11 @@ func MergeFields( result := make([]*logproto.DetectedField, 0, fieldLimit) for _, field := range mergedFields { - // TODO(twhitney): what's the performance cost of marshalling here? We technically don't need to marshal in the merge - // but it's nice to keep the response consistent through middlewares in case we need the sketch somewhere else, - // need to benchmark this to find out. - sketch, err := field.Sketch.MarshalBinary() - if err != nil { - return nil, err - } detectedField := &logproto.DetectedField{ Label: field.Label, Type: field.Type, Cardinality: field.Sketch.Estimate(), - Sketch: sketch, + Sketch: nil, } result = append(result, detectedField) } diff --git a/production/helm/loki/CHANGELOG.md b/production/helm/loki/CHANGELOG.md index ad796a850c3b..d109756fdc74 100644 --- a/production/helm/loki/CHANGELOG.md +++ b/production/helm/loki/CHANGELOG.md @@ -13,6 +13,26 @@ Entries should include a reference to the pull request that introduced the chang [//]: # ( : do not remove this line. This locator is used by the CI pipeline to automatically create a changelog entry for each new Loki release. Add other chart versions and respective changelog entries bellow this line.) +## 6.3.3 + +- [ENHANCEMENT] make the singlebinary set 0 the replicas number of backend, write,read. + +## 6.3.2 + +- [BUGFIX] Missing password for Loki-Canary when loki.auth_enabled is true + +## 6.3.1 + +- [BUGFIX] Fixed Typo in Ingester templates for zoneAwareReplication + +## 6.3.0 + +- [CHANGE] Changed version of Grafana Enterprise Logs to v3.0.0 + +## 6.2.5 + +- [BUGFIX] Add missing toleration blocks to bloom components. + ## 6.2.4 - [ENHANCEMENT] Activate the volume endpoint by default. diff --git a/production/helm/loki/Chart.yaml b/production/helm/loki/Chart.yaml index e8b160550bc9..176e87af7d8b 100644 --- a/production/helm/loki/Chart.yaml +++ b/production/helm/loki/Chart.yaml @@ -3,7 +3,7 @@ name: loki description: Helm chart for Grafana Loki in simple, scalable mode type: application appVersion: 3.0.0 -version: 6.2.4 +version: 6.3.3 home: https://grafana.github.io/helm-charts sources: - https://github.com/grafana/loki diff --git a/production/helm/loki/README.md b/production/helm/loki/README.md index c892d1b4f364..b9ce79499a61 100644 --- a/production/helm/loki/README.md +++ b/production/helm/loki/README.md @@ -1,6 +1,6 @@ # loki -![Version: 6.2.4](https://img.shields.io/badge/Version-6.2.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 3.0.0](https://img.shields.io/badge/AppVersion-3.0.0-informational?style=flat-square) +![Version: 6.3.3](https://img.shields.io/badge/Version-6.3.3-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 3.0.0](https://img.shields.io/badge/AppVersion-3.0.0-informational?style=flat-square) Helm chart for Grafana Loki in simple, scalable mode diff --git a/production/helm/loki/src/helm-test/Dockerfile b/production/helm/loki/src/helm-test/Dockerfile index cf4420a2a68d..48ff7e8a6a27 100644 --- a/production/helm/loki/src/helm-test/Dockerfile +++ b/production/helm/loki/src/helm-test/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.3 as build +FROM golang:1.22.2 as build # build via Makefile target helm-test-image in root # Makefile. Building from this directory will not be diff --git a/production/helm/loki/templates/backend/statefulset-backend.yaml b/production/helm/loki/templates/backend/statefulset-backend.yaml index 1b7ead3ae1ad..3deb4aa6b6c8 100644 --- a/production/helm/loki/templates/backend/statefulset-backend.yaml +++ b/production/helm/loki/templates/backend/statefulset-backend.yaml @@ -19,8 +19,12 @@ metadata: {{- end }} {{- end }} spec: -{{- if not .Values.backend.autoscaling.enabled }} - replicas: {{ .Values.backend.replicas }} +{{- if not .Values.write.autoscaling.enabled }} + {{- if eq .Values.deploymentMode "SingleBinary" }} + replicas: 0 + {{- else }} + replicas: {{ .Values.write.replicas }} + {{- end }} {{- end }} podManagementPolicy: {{ .Values.backend.podManagementPolicy }} updateStrategy: diff --git a/production/helm/loki/templates/bloom-compactor/statefulset-bloom-compactor.yaml b/production/helm/loki/templates/bloom-compactor/statefulset-bloom-compactor.yaml index fbece8f2953e..424fa4bb65d7 100644 --- a/production/helm/loki/templates/bloom-compactor/statefulset-bloom-compactor.yaml +++ b/production/helm/loki/templates/bloom-compactor/statefulset-bloom-compactor.yaml @@ -131,6 +131,10 @@ spec: nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- with .Values.bloomCompactor.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} volumes: - name: temp emptyDir: {} diff --git a/production/helm/loki/templates/bloom-gateway/statefulset-bloom-gateway.yaml b/production/helm/loki/templates/bloom-gateway/statefulset-bloom-gateway.yaml index 353b0203fe79..e2ceefbeafb5 100644 --- a/production/helm/loki/templates/bloom-gateway/statefulset-bloom-gateway.yaml +++ b/production/helm/loki/templates/bloom-gateway/statefulset-bloom-gateway.yaml @@ -131,6 +131,10 @@ spec: nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- with .Values.bloomGateway.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} volumes: - name: temp emptyDir: {} diff --git a/production/helm/loki/templates/ingester/statefulset-ingester-zone-b.yaml b/production/helm/loki/templates/ingester/statefulset-ingester-zone-b.yaml index a0c7b85f8a14..3af81ae6477e 100644 --- a/production/helm/loki/templates/ingester/statefulset-ingester-zone-b.yaml +++ b/production/helm/loki/templates/ingester/statefulset-ingester-zone-b.yaml @@ -168,10 +168,10 @@ spec: values: - ingester-zone-b topologyKey: kubernetes.io/hostname - {{- with .Values.ingester.zoneAwareReplication.zoneA.extraAffinity }} + {{- with .Values.ingester.zoneAwareReplication.zoneB.extraAffinity }} {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.ingester.zoneAwareReplication.zoneA.nodeSelector }} + {{- with .Values.ingester.zoneAwareReplication.zoneB.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} diff --git a/production/helm/loki/templates/ingester/statefulset-ingester-zone-c.yaml b/production/helm/loki/templates/ingester/statefulset-ingester-zone-c.yaml index cc65f49b244c..30393fa4d2ca 100644 --- a/production/helm/loki/templates/ingester/statefulset-ingester-zone-c.yaml +++ b/production/helm/loki/templates/ingester/statefulset-ingester-zone-c.yaml @@ -168,10 +168,10 @@ spec: values: - ingester-zone-c topologyKey: kubernetes.io/hostname - {{- with .Values.ingester.zoneAwareReplication.zoneA.extraAffinity }} + {{- with .Values.ingester.zoneAwareReplication.zoneC.extraAffinity }} {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.ingester.zoneAwareReplication.zoneA.nodeSelector }} + {{- with .Values.ingester.zoneAwareReplication.zoneC.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} diff --git a/production/helm/loki/templates/loki-canary/daemonset.yaml b/production/helm/loki/templates/loki-canary/daemonset.yaml index e9998dcef67f..dc5c6296891c 100644 --- a/production/helm/loki/templates/loki-canary/daemonset.yaml +++ b/production/helm/loki/templates/loki-canary/daemonset.yaml @@ -51,6 +51,7 @@ spec: {{- else if $.Values.loki.auth_enabled }} - -user={{ $.Values.monitoring.selfMonitoring.tenant.name }} - -tenant-id={{ $.Values.monitoring.selfMonitoring.tenant.name }} + - -pass={{ $.Values.monitoring.selfMonitoring.tenant.password }} {{- end }} {{- if .push }} - -push=true diff --git a/production/helm/loki/templates/read/statefulset-read.yaml b/production/helm/loki/templates/read/statefulset-read.yaml index 46d163442cc9..29d79c7d0c78 100644 --- a/production/helm/loki/templates/read/statefulset-read.yaml +++ b/production/helm/loki/templates/read/statefulset-read.yaml @@ -19,8 +19,12 @@ metadata: {{- end }} {{- end }} spec: -{{- if not .Values.read.autoscaling.enabled }} - replicas: {{ .Values.read.replicas }} +{{- if not .Values.write.autoscaling.enabled }} + {{- if eq .Values.deploymentMode "SingleBinary" }} + replicas: 0 + {{- else }} + replicas: {{ .Values.write.replicas }} + {{- end }} {{- end }} podManagementPolicy: {{ .Values.read.podManagementPolicy }} updateStrategy: diff --git a/production/helm/loki/templates/write/statefulset-write.yaml b/production/helm/loki/templates/write/statefulset-write.yaml index 0c89cde090ab..54c936958b55 100644 --- a/production/helm/loki/templates/write/statefulset-write.yaml +++ b/production/helm/loki/templates/write/statefulset-write.yaml @@ -20,7 +20,11 @@ metadata: {{- end }} spec: {{- if not .Values.write.autoscaling.enabled }} + {{- if eq .Values.deploymentMode "SingleBinary" }} + replicas: 0 + {{- else }} replicas: {{ .Values.write.replicas }} + {{- end }} {{- end }} podManagementPolicy: {{ .Values.write.podManagementPolicy }} updateStrategy: diff --git a/production/helm/loki/values.yaml b/production/helm/loki/values.yaml index d9561ef72f84..855e75c551fd 100644 --- a/production/helm/loki/values.yaml +++ b/production/helm/loki/values.yaml @@ -18,7 +18,6 @@ fullnameOverride: null clusterLabelOverride: null # -- Image pull secrets for Docker images imagePullSecrets: [] - # -- Deployment mode lets you specify how to deploy Loki. # There are 3 options: # - SingleBinary: Loki is deployed as a single binary, useful for small installs typically without HA, up to a few tens of GB/day. @@ -29,7 +28,6 @@ imagePullSecrets: [] # - SimpleScalable<->Distributed: Migrate from SimpleScalable to Distributed (or vice versa) # Note: SimpleScalable and Distributed REQUIRE the use of object storage. deploymentMode: SimpleScalable - ###################################################################################################################### # # Base Loki Configs including kubernetes configurations and configurations for Loki itself, @@ -111,12 +109,10 @@ loki: # In order to move sensitive information (such as credentials) from the ConfigMap/Secret to a more secure location (e.g. vault), it is possible to use [environment variables in the configuration](https://grafana.com/docs/loki/latest/configuration/#use-environment-variables-in-the-configuration). # Such environment variables can be then stored in a separate Secret and injected via the global.extraEnvFrom value. For details about environment injection from a Secret please see [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/#use-case-as-container-environment-variables). configStorageType: ConfigMap - # -- The name of the object which Loki will mount as a volume containing the config. # If the configStorageType is Secret, this will be the name of the Secret, if it is ConfigMap, this will be the name of the ConfigMap. # The value will be passed through tpl. configObjectName: '{{ include "loki.name" . }}' - # -- The name of the Secret or ConfigMap that will be created by this chart. # If empty, no configmap or secret will be created. # The value will be passed through tpl. @@ -442,7 +438,6 @@ loki: # -- Enable tracing tracing: enabled: false - ###################################################################################################################### # # Enterprise Loki Configs @@ -454,7 +449,7 @@ enterprise: # Enable enterprise features, license must be provided enabled: false # Default verion of GEL to deploy - version: v1.8.6 + version: v3.0.0 # -- Optional name of the GEL cluster, otherwise will use .Release.Name # The cluster name must match what is in your GEL license cluster_name: null @@ -596,7 +591,6 @@ kubectlImage: digest: null # -- Docker image pull policy pullPolicy: IfNotPresent - ###################################################################################################################### # # Chart Testing @@ -685,13 +679,11 @@ lokiCanary: type: RollingUpdate rollingUpdate: maxUnavailable: 1 - ###################################################################################################################### # # Service Accounts and Kubernetes RBAC # ###################################################################################################################### - serviceAccount: # -- Specifies whether a ServiceAccount should be created create: true @@ -720,13 +712,11 @@ rbac: # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default' # -- Whether to install RBAC in the namespace only or cluster-wide. Useful if you want to watch ConfigMap globally. namespaced: false - ###################################################################################################################### # # Network Policy configuration # ###################################################################################################################### - networkPolicy: # -- Specifies whether Network Policies should be created enabled: false @@ -776,7 +766,6 @@ networkPolicy: egressKubeApiserver: # -- Enable additional cilium egress rules to kube-apiserver for backend. enabled: false - ###################################################################################################################### # # Global memberlist configuration @@ -787,7 +776,6 @@ networkPolicy: memberlist: service: publishNotReadyAddresses: false - ###################################################################################################################### # # adminAPI configuration, enterprise only. @@ -857,6 +845,7 @@ adminApi: # -- Grace period to allow the admin-api to shutdown before it is killed terminationGracePeriodSeconds: 60 + ###################################################################################################################### # # Gateway and Ingress @@ -1025,9 +1014,11 @@ gateway: htpasswd: >- {{ if .Values.loki.tenants }} + {{- range $t := .Values.loki.tenants }} {{ htpasswd (required "All tenants must have a 'name' set" $t.name) (required "All tenants must have a 'password' set" $t.password) }} + {{- end }} {{ else }} {{ htpasswd (required "'gateway.basicAuth.username' is required" .Values.gateway.basicAuth.username) (required "'gateway.basicAuth.password' is required" .Values.gateway.basicAuth.password) }} {{ end }} # -- Existing basic auth secret to use. Must contain '.htpasswd' @@ -1068,7 +1059,6 @@ gateway: # @default -- See values.yaml file: | {{- include "loki.nginxFile" . | indent 2 -}} - # -- If running enterprise and using the default enterprise gateway, configs go here. enterpriseGateway: # -- Define the amount of instances @@ -1134,7 +1124,6 @@ enterpriseGateway: tolerations: [] # -- Grace period to allow the gateway to shutdown before it is killed terminationGracePeriodSeconds: 60 - # -- Ingress configuration Use either this ingress or the gateway, but not both at once. # If you enable this, make sure to disable the gateway. # You'll need to supply authn configuration for your ingress controller. @@ -1291,7 +1280,6 @@ singleBinary: storageClass: null # -- Selector for persistent disk selector: null - ###################################################################################################################### # # Simple Scalable Deployment (SSD) Mode @@ -1419,7 +1407,6 @@ write: storageClass: null # -- Selector for persistent disk selector: null - # -- Configuration for the read pod(s) read: # -- Number of replicas for the read @@ -1527,7 +1514,6 @@ read: storageClass: null # -- Selector for persistent disk selector: null - # -- Configuration for the backend pod(s) backend: # -- Number of replicas for the backend @@ -1636,7 +1622,6 @@ backend: storageClass: null # -- Selector for persistent disk selector: null - ###################################################################################################################### # # Microservices Mode @@ -1765,8 +1750,8 @@ ingester: # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null - # - name: wal - # size: 150Gi + # - name: wal + # size: 150Gi # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain @@ -1821,7 +1806,6 @@ ingester: excludeDefaultZone: false readPath: false writePath: false - # -- Configuration for the distributor distributor: # -- Number of replicas for the distributor @@ -1908,11 +1892,10 @@ distributor: nodeSelector: {} # -- Tolerations for distributor pods tolerations: [] - # -- Adds the appProtocol field to the distributor service. This allows distributor to work with istio protocol selection. + # -- Adds the appProtocol field to the distributor service. This allows distributor to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" - # -- Configuration for the querier querier: # -- Number of replicas for the querier @@ -2029,7 +2012,6 @@ querier: appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" - # -- Configuration for the query-frontend queryFrontend: # -- Number of replicas for the query-frontend @@ -2118,7 +2100,6 @@ queryFrontend: appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" - # -- Configuration for the query-scheduler queryScheduler: # -- Number of replicas for the query-scheduler. @@ -2179,7 +2160,6 @@ queryScheduler: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" appProtocol: grpc: "" - # -- Configuration for the index-gateway indexGateway: # -- Number of replicas for the index-gateway @@ -2261,7 +2241,6 @@ indexGateway: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" appProtocol: grpc: "" - # -- Configuration for the compactor compactor: # -- Number of replicas for the compactor @@ -2350,13 +2329,12 @@ compactor: # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null - # - name: wal - # size: 150Gi + # - name: wal + # size: 150Gi # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain - serviceAccount: create: false # -- The name of the ServiceAccount to use for the compactor. @@ -2369,7 +2347,6 @@ compactor: annotations: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true - # -- Configuration for the bloom gateway bloomGateway: # -- Number of replicas for the bloom gateway @@ -2458,13 +2435,12 @@ bloomGateway: # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null - # - name: wal - # size: 150Gi + # - name: wal + # size: 150Gi # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain - serviceAccount: create: false # -- The name of the ServiceAccount to use for the bloom gateway. @@ -2477,7 +2453,6 @@ bloomGateway: annotations: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true - # -- Configuration for the bloom compactor bloomCompactor: # -- Number of replicas for the bloom compactor @@ -2566,13 +2541,12 @@ bloomCompactor: # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null - # - name: wal - # size: 150Gi + # - name: wal + # size: 150Gi # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain - serviceAccount: create: false # -- The name of the ServiceAccount to use for the bloom compactor. @@ -2585,7 +2559,6 @@ bloomCompactor: annotations: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true - # -- Configuration for the pattern ingester patternIngester: # -- Number of replicas for the pattern ingester @@ -2674,13 +2647,12 @@ patternIngester: # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null - # - name: wal - # size: 150Gi + # - name: wal + # size: 150Gi # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain - serviceAccount: create: false # -- The name of the ServiceAccount to use for the pattern ingester. @@ -2693,7 +2665,6 @@ patternIngester: annotations: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true - # -- Configuration for the ruler ruler: # -- The ruler component is optional and can be disabled if desired. @@ -2775,71 +2746,70 @@ ruler: grpc: "" # -- Directories containing rules files directories: {} - # tenant_foo: - # rules1.txt: | - # groups: - # - name: should_fire - # rules: - # - alert: HighPercentageError - # expr: | - # sum(rate({app="foo", env="production"} |= "error" [5m])) by (job) - # / - # sum(rate({app="foo", env="production"}[5m])) by (job) - # > 0.05 - # for: 10m - # labels: - # severity: warning - # annotations: - # summary: High error rate - # - name: credentials_leak - # rules: - # - alert: http-credentials-leaked - # annotations: - # message: "{{ $labels.job }} is leaking http basic auth credentials." - # expr: 'sum by (cluster, job, pod) (count_over_time({namespace="prod"} |~ "http(s?)://(\\w+):(\\w+)@" [5m]) > 0)' - # for: 10m - # labels: - # severity: critical - # rules2.txt: | - # groups: - # - name: example - # rules: - # - alert: HighThroughputLogStreams - # expr: sum by(container) (rate({job=~"loki-dev/.*"}[1m])) > 1000 - # for: 2m - # tenant_bar: - # rules1.txt: | - # groups: - # - name: should_fire - # rules: - # - alert: HighPercentageError - # expr: | - # sum(rate({app="foo", env="production"} |= "error" [5m])) by (job) - # / - # sum(rate({app="foo", env="production"}[5m])) by (job) - # > 0.05 - # for: 10m - # labels: - # severity: warning - # annotations: - # summary: High error rate - # - name: credentials_leak - # rules: - # - alert: http-credentials-leaked - # annotations: - # message: "{{ $labels.job }} is leaking http basic auth credentials." - # expr: 'sum by (cluster, job, pod) (count_over_time({namespace="prod"} |~ "http(s?)://(\\w+):(\\w+)@" [5m]) > 0)' - # for: 10m - # labels: - # severity: critical - # rules2.txt: | - # groups: - # - name: example - # rules: - # - alert: HighThroughputLogStreams - # expr: sum by(container) (rate({job=~"loki-dev/.*"}[1m])) > 1000 - # for: 2m - + # tenant_foo: + # rules1.txt: | + # groups: + # - name: should_fire + # rules: + # - alert: HighPercentageError + # expr: | + # sum(rate({app="foo", env="production"} |= "error" [5m])) by (job) + # / + # sum(rate({app="foo", env="production"}[5m])) by (job) + # > 0.05 + # for: 10m + # labels: + # severity: warning + # annotations: + # summary: High error rate + # - name: credentials_leak + # rules: + # - alert: http-credentials-leaked + # annotations: + # message: "{{ $labels.job }} is leaking http basic auth credentials." + # expr: 'sum by (cluster, job, pod) (count_over_time({namespace="prod"} |~ "http(s?)://(\\w+):(\\w+)@" [5m]) > 0)' + # for: 10m + # labels: + # severity: critical + # rules2.txt: | + # groups: + # - name: example + # rules: + # - alert: HighThroughputLogStreams + # expr: sum by(container) (rate({job=~"loki-dev/.*"}[1m])) > 1000 + # for: 2m + # tenant_bar: + # rules1.txt: | + # groups: + # - name: should_fire + # rules: + # - alert: HighPercentageError + # expr: | + # sum(rate({app="foo", env="production"} |= "error" [5m])) by (job) + # / + # sum(rate({app="foo", env="production"}[5m])) by (job) + # > 0.05 + # for: 10m + # labels: + # severity: warning + # annotations: + # summary: High error rate + # - name: credentials_leak + # rules: + # - alert: http-credentials-leaked + # annotations: + # message: "{{ $labels.job }} is leaking http basic auth credentials." + # expr: 'sum by (cluster, job, pod) (count_over_time({namespace="prod"} |~ "http(s?)://(\\w+):(\\w+)@" [5m]) > 0)' + # for: 10m + # labels: + # severity: critical + # rules2.txt: | + # groups: + # - name: example + # rules: + # - alert: HighThroughputLogStreams + # expr: sum by(container) (rate({job=~"loki-dev/.*"}[1m])) > 1000 + # for: 2m memcached: image: # -- Memcached Docker image repository @@ -2858,7 +2828,6 @@ memcached: capabilities: drop: [ALL] allowPrivilegeEscalation: false - memcachedExporter: # -- Whether memcached metrics should be exported enabled: true @@ -2885,7 +2854,6 @@ memcachedExporter: # memcached.tls.insecure-skip-verify: false # memcached.tls.server-name: memcached extraArgs: {} - resultsCache: # -- Specifies whether memcached based results-cache should be enabled enabled: true @@ -2970,7 +2938,6 @@ resultsCache: service: annotations: {} labels: {} - chunksCache: # -- Specifies whether memcached based chunks-cache should be enabled enabled: true @@ -3059,7 +3026,6 @@ chunksCache: service: annotations: {} labels: {} - ###################################################################################################################### # # Subchart configurations @@ -3068,7 +3034,6 @@ chunksCache: # -- Setting for the Grafana Rollout Operator https://github.com/grafana/helm-charts/tree/main/charts/rollout-operator rollout_operator: enabled: false - # -- podSecurityContext is the pod security context for the rollout operator. # When installing on OpenShift, override podSecurityContext settings with # @@ -3084,14 +3049,12 @@ rollout_operator: runAsUser: 10001 seccompProfile: type: RuntimeDefault - # Set the container security context securityContext: readOnlyRootFilesystem: true capabilities: drop: [ALL] allowPrivilegeEscalation: false - # -- Configuration for the minio subchart minio: enabled: false @@ -3199,7 +3162,6 @@ sidecar: watchClientTimeout: 60 # -- Log level of the sidecar container. logLevel: INFO - ############################################## WARNING ############################################################### # # DEPRECATED VALUES @@ -3299,6 +3261,8 @@ monitoring: tenant: # -- Name of the tenant name: "self-monitoring" + # -- Password of the gateway for Basic auth + password: null # -- Namespace to create additional tenant token secret in. Useful if your Grafana instance # is in a separate namespace. Token will still be created in the canary namespace. secretNamespace: "{{ .Release.Namespace }}" @@ -3347,7 +3311,6 @@ monitoring: labels: {} # -- Additional clients for remote write clients: null - # -- DEPRECATED Configuration for the table-manager. The table-manager is only necessary when using a deprecated # index type such as Cassandra, Bigtable, or DynamoDB, it has not been necessary since loki introduced self- # contained index types like 'boltdb-shipper' and 'tsdb'. This will be removed in a future helm chart. diff --git a/production/loki-mixin-compiled-ssd/dashboards/loki-logs.json b/production/loki-mixin-compiled-ssd/dashboards/loki-logs.json index 27fc922838ef..32b8e52ad011 100644 --- a/production/loki-mixin-compiled-ssd/dashboards/loki-logs.json +++ b/production/loki-mixin-compiled-ssd/dashboards/loki-logs.json @@ -801,7 +801,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$deployment.*\", pod=~\"$pod\", container=~\"$container\" } |logfmt| level=\"$level\" |= \"$filter\" | __error__=\"\" [$__rate_interval])) by (level)", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$deployment.*\", pod=~\"$pod\", container=~\"$container\" } |logfmt| level=\"$level\" |= \"$filter\" | __error__=\"\" [$__auto])) by (level)", "intervalFactor": 3, "legendFormat": "{{level}}", "refId": "A" diff --git a/production/loki-mixin-compiled-ssd/dashboards/loki-operational.json b/production/loki-mixin-compiled-ssd/dashboards/loki-operational.json index fbaf16610f64..9914c29aada4 100644 --- a/production/loki-mixin-compiled-ssd/dashboards/loki-operational.json +++ b/production/loki-mixin-compiled-ssd/dashboards/loki-operational.json @@ -1997,7 +1997,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/(loki|enterprise-logs)-write\"} | logfmt | level=\"error\"[$__rate_interval]))", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/(loki|enterprise-logs)-write\"} | logfmt | level=\"error\"[$__auto]))", "refId": "A" } ], @@ -3224,7 +3224,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/(loki|enterprise-logs)-read\"} | logfmt | level=\"error\"[$__rate_interval]))", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/(loki|enterprise-logs)-read\"} | logfmt | level=\"error\"[$__auto]))", "refId": "A" } ], diff --git a/production/loki-mixin-compiled/dashboards/loki-logs.json b/production/loki-mixin-compiled/dashboards/loki-logs.json index 27fc922838ef..32b8e52ad011 100644 --- a/production/loki-mixin-compiled/dashboards/loki-logs.json +++ b/production/loki-mixin-compiled/dashboards/loki-logs.json @@ -801,7 +801,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$deployment.*\", pod=~\"$pod\", container=~\"$container\" } |logfmt| level=\"$level\" |= \"$filter\" | __error__=\"\" [$__rate_interval])) by (level)", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$deployment.*\", pod=~\"$pod\", container=~\"$container\" } |logfmt| level=\"$level\" |= \"$filter\" | __error__=\"\" [$__auto])) by (level)", "intervalFactor": 3, "legendFormat": "{{level}}", "refId": "A" diff --git a/production/loki-mixin-compiled/dashboards/loki-operational.json b/production/loki-mixin-compiled/dashboards/loki-operational.json index 394b720be16b..d677775d52ef 100644 --- a/production/loki-mixin-compiled/dashboards/loki-operational.json +++ b/production/loki-mixin-compiled/dashboards/loki-operational.json @@ -2094,7 +2094,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/distributor\"} | logfmt | level=\"error\"[$__rate_interval]))", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/distributor\"} | logfmt | level=\"error\"[$__auto]))", "refId": "A" } ], @@ -2787,7 +2787,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/ingester.*\"} | logfmt | level=\"error\"[$__rate_interval]))", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/ingester.*\"} | logfmt | level=\"error\"[$__auto]))", "refId": "A" } ], @@ -3732,7 +3732,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/querier\"} | logfmt | level=\"error\"[$__rate_interval]))", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=~\"($namespace)/querier\"} | logfmt | level=\"error\"[$__auto]))", "refId": "A" } ], diff --git a/production/loki-mixin/alerts.libsonnet b/production/loki-mixin/alerts.libsonnet index 089ed7439da3..5bff18e72c6e 100644 --- a/production/loki-mixin/alerts.libsonnet +++ b/production/loki-mixin/alerts.libsonnet @@ -57,17 +57,17 @@ { alert: 'LokiTooManyCompactorsRunning', expr: ||| - sum(loki_boltdb_shipper_compactor_running) by (namespace, cluster) > 1 - |||, + sum(loki_boltdb_shipper_compactor_running) by (namespace, %s) > 1 + ||| % $._config.per_cluster_label, 'for': '5m', labels: { severity: 'warning', }, annotations: { summary: 'Loki deployment is running more than one compactor.', - description: ||| + description: std.strReplace(||| {{ $labels.cluster }} {{ $labels.namespace }} has had {{ printf "%.0f" $value }} compactors running for more than 5m. Only one compactor should run at a time. - |||, + |||, 'cluster', $._config.per_cluster_label), }, }, ], diff --git a/production/loki-mixin/dashboards/dashboard-loki-logs.json b/production/loki-mixin/dashboards/dashboard-loki-logs.json index 6999a5389f9d..72b8565e3c70 100644 --- a/production/loki-mixin/dashboards/dashboard-loki-logs.json +++ b/production/loki-mixin/dashboards/dashboard-loki-logs.json @@ -803,7 +803,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$deployment.*\", pod=~\"$pod\", container=~\"$container\" } |logfmt| level=\"$level\" |= \"$filter\" | __error__=\"\" [$__rate_interval])) by (level)", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$deployment.*\", pod=~\"$pod\", container=~\"$container\" } |logfmt| level=\"$level\" |= \"$filter\" | __error__=\"\" [$__auto])) by (level)", "intervalFactor": 3, "legendFormat": "{{level}}", "refId": "A" diff --git a/production/loki-mixin/dashboards/dashboard-loki-operational.json b/production/loki-mixin/dashboards/dashboard-loki-operational.json index 674e9ae21de5..3f215c2e9083 100644 --- a/production/loki-mixin/dashboards/dashboard-loki-operational.json +++ b/production/loki-mixin/dashboards/dashboard-loki-operational.json @@ -2077,7 +2077,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=\"$namespace/distributor\"} | logfmt | level=\"error\"[$__rate_interval]))", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=\"$namespace/distributor\"} | logfmt | level=\"error\"[$__auto]))", "refId": "A" } ], @@ -2761,7 +2761,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=\"$namespace/ingester\"} | logfmt | level=\"error\"[$__rate_interval]))", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=\"$namespace/ingester\"} | logfmt | level=\"error\"[$__auto]))", "refId": "A" } ], @@ -3692,7 +3692,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=\"$namespace/querier\"} | logfmt | level=\"error\"[$__rate_interval]))", + "expr": "sum(rate({cluster=\"$cluster\", namespace=\"$namespace\", job=\"$namespace/querier\"} | logfmt | level=\"error\"[$__auto]))", "refId": "A" } ], diff --git a/production/loki-mixin/dashboards/loki-canary-dashboard.libsonnet b/production/loki-mixin/dashboards/loki-canary-dashboard.libsonnet index 6539a34d77e4..94e07deb236b 100644 --- a/production/loki-mixin/dashboards/loki-canary-dashboard.libsonnet +++ b/production/loki-mixin/dashboards/loki-canary-dashboard.libsonnet @@ -24,8 +24,8 @@ local grafana = import 'grafonnet/grafana.libsonnet'; // This logic is inherited from mimir-mixin. dashboard.dashboard('Canary') // We can't make use of simplified template selectors from the loki dashboard utils until we port the cortex dashboard utils panel/grid functionality. - .addTemplate('cluster', 'loki_build_info', 'cluster') - .addTemplate('namespace', 'loki_build_info{cluster=~"$cluster"}', 'namespace') + .addTemplate('cluster', 'loki_build_info', $._config.per_cluster_label) + .addTemplate('namespace', 'loki_build_info{' + $._config.per_cluster_label + '=~"$cluster"}', 'namespace') + { // This dashboard uses the new grid system in order to place panels (using gridPos). // Because of this we can't use the mixin's addRow() and addPanel(). @@ -33,7 +33,7 @@ local grafana = import 'grafonnet/grafana.libsonnet'; rows: null, // ugly hack, copy pasta the tag/link // code from the loki-mixin - tags: ['loki'], + tags: $._config.tags, links: [ { asDropdown: true, @@ -49,60 +49,60 @@ local grafana = import 'grafonnet/grafana.libsonnet'; panels: [ // grid row 1 dashboard.panel('Canary Entries Total') + - dashboard.newStatPanel('sum(count(loki_canary_entries_total{cluster=~"$cluster",namespace=~"$namespace"}))', unit='short') + + dashboard.newStatPanel('sum(count(loki_canary_entries_total{' + $._config.per_cluster_label + '=~"$cluster", namespace=~"$namespace"}))', unit='short') + { gridPos: { h: 4, w: 3, x: 0, y: 0 } }, dashboard.panel('Canary Logs Total') + - dashboard.newStatPanel('sum(increase(loki_canary_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + + dashboard.newStatPanel('sum(increase(loki_canary_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + { gridPos: { h: 4, w: 3, x: 3, y: 0 } }, dashboard.panel('Missing') + - dashboard.newStatPanel('sum(increase(loki_canary_missing_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + + dashboard.newStatPanel('sum(increase(loki_canary_missing_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + { gridPos: { h: 4, w: 3, x: 6, y: 0 } }, dashboard.panel('Spotcheck Missing') + - dashboard.newStatPanel('sum(increase(loki_canary_spot_check_missing_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + + dashboard.newStatPanel('sum(increase(loki_canary_spot_check_missing_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + { gridPos: { h: 4, w: 3, x: 9, y: 0 } }, // grid row 2 dashboard.panel('Spotcheck Total') + - dashboard.newStatPanel('sum(increase(loki_canary_spot_check_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + + dashboard.newStatPanel('sum(increase(loki_canary_spot_check_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + { gridPos: { h: 4, w: 3, x: 0, y: 4 } }, dashboard.panel('Metric Test Error %') + - dashboard.newStatPanel('((sum(loki_canary_metric_test_expected{cluster=~"$cluster",namespace=~"$namespace"}) - sum(loki_canary_metric_test_actual{cluster=~"$cluster",namespace=~"$namespace"}))/(sum(loki_canary_metric_test_actual{cluster=~"$cluster",namespace=~"$namespace"}))) * 100') + + dashboard.newStatPanel('((sum(loki_canary_metric_test_expected{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}) - sum(loki_canary_metric_test_actual{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}))/(sum(loki_canary_metric_test_actual{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}))) * 100') + { gridPos: { h: 4, w: 3, x: 3, y: 4 } }, dashboard.panel('Missing %') + - dashboard.newStatPanel('(sum(increase(loki_canary_missing_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))/sum(increase(loki_canary_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range])))*100') + + dashboard.newStatPanel('(sum(increase(loki_canary_missing_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))/sum(increase(loki_canary_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range])))*100') + { gridPos: { h: 4, w: 3, x: 6, y: 4 } }, dashboard.panel('Spotcheck Missing %') + - dashboard.newStatPanel('(sum(increase(loki_canary_spot_check_missing_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))/sum(increase(loki_canary_spot_check_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))) * 100') + + dashboard.newStatPanel('(sum(increase(loki_canary_spot_check_missing_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))/sum(increase(loki_canary_spot_check_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))) * 100') + { gridPos: { h: 4, w: 3, x: 9, y: 4 } }, // grid row 3 dashboard.panel('Metric Test Expected') + - dashboard.newStatPanel('sum(loki_canary_metric_test_expected{cluster=~"$cluster",namespace=~"$namespace"})', unit='short') + + dashboard.newStatPanel('sum(loki_canary_metric_test_expected{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"})', unit='short') + { gridPos: { h: 4, w: 3, x: 0, y: 8 } }, dashboard.panel('Metric Test Actual') + - dashboard.newStatPanel('sum(loki_canary_metric_test_actual{cluster=~"$cluster",namespace=~"$namespace"})', unit='short') + + dashboard.newStatPanel('sum(loki_canary_metric_test_actual{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"})', unit='short') + { gridPos: { h: 4, w: 3, x: 3, y: 8 } }, dashboard.panel('Websocket Missing') + - dashboard.newStatPanel('sum(increase(loki_canary_websocket_missing_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + + dashboard.newStatPanel('sum(increase(loki_canary_websocket_missing_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))', unit='short') + { gridPos: { h: 4, w: 3, x: 6, y: 8 } }, dashboard.panel('Websocket Missing %') + - dashboard.newStatPanel('(sum(increase(loki_canary_websocket_missing_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range]))/sum(increase(loki_canary_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__range])))*100') + + dashboard.newStatPanel('(sum(increase(loki_canary_websocket_missing_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range]))/sum(increase(loki_canary_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__range])))*100') + { gridPos: { h: 4, w: 3, x: 9, y: 8 } }, // end of grid dashboard.panel('Log Write to read Latency Percentiles') + dashboard.queryPanel([ - 'histogram_quantile(0.95, sum(rate(loki_canary_response_latency_seconds_bucket{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le))', - 'histogram_quantile(0.50, sum(rate(loki_canary_response_latency_seconds_bucket{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le))', + 'histogram_quantile(0.95, sum(rate(loki_canary_response_latency_seconds_bucket{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le))', + 'histogram_quantile(0.50, sum(rate(loki_canary_response_latency_seconds_bucket{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le))', ], ['p95', 'p50']) + { gridPos: { h: 6, w: 12, x: 12, y: 0 } }, @@ -115,7 +115,7 @@ local grafana = import 'grafonnet/grafana.libsonnet'; ).addTargets( [ grafana.prometheus.target( - 'sum(rate(loki_canary_response_latency_seconds_bucket{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le)', + 'sum(rate(loki_canary_response_latency_seconds_bucket{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le)', legendFormat='{{le}}', format='heatmap', ), @@ -125,24 +125,24 @@ local grafana = import 'grafonnet/grafana.libsonnet'; dashboard.panel('Spot Check Query') + dashboard.queryPanel([ - 'histogram_quantile(0.99, sum(rate(loki_canary_spot_check_request_duration_seconds_bucket{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le))', - 'histogram_quantile(0.50, sum(rate(loki_canary_spot_check_request_duration_seconds_bucket{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le))', + 'histogram_quantile(0.99, sum(rate(loki_canary_spot_check_request_duration_seconds_bucket{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le))', + 'histogram_quantile(0.50, sum(rate(loki_canary_spot_check_request_duration_seconds_bucket{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) by (le))', ], ['p99', 'p95']) + { gridPos: { h: 6, w: 12, x: 0, y: 14 } }, dashboard.panel('Metric Test Query') + dashboard.queryPanel([ - 'histogram_quantile(0.99, sum(rate(loki_canary_metric_test_request_duration_seconds_bucket{cluster=~"$cluster",namespace=~"$namespace"}[15m])) by (le))', - 'histogram_quantile(0.50, sum(rate(loki_canary_metric_test_request_duration_seconds_bucket{cluster=~"$cluster",namespace=~"$namespace"}[15m])) by (le))', + 'histogram_quantile(0.99, sum(rate(loki_canary_metric_test_request_duration_seconds_bucket{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[15m])) by (le))', + 'histogram_quantile(0.50, sum(rate(loki_canary_metric_test_request_duration_seconds_bucket{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[15m])) by (le))', ], ['p99', 'p95'],) + { gridPos: { h: 6, w: 12, x: 12, y: 14 } }, dashboard.panel('Spot Check Missing %') + - dashboard.queryPanel('topk(20, (sum by (cluster, pod) (increase(loki_canary_spot_check_missing_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval]))/sum by (cluster, pod) (increase(loki_canary_spot_check_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) * 100)) > 0', '') + + dashboard.queryPanel('topk(20, (sum by (' + $._config.per_cluster_label + ', pod) (increase(loki_canary_spot_check_missing_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval]))/sum by (' + $._config.per_cluster_label + ', pod) (increase(loki_canary_spot_check_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval])) * 100)) > 0', '') + { gridPos: { h: 6, w: 12, x: 0, y: 20 } }, g.panel('Missing logs') + - g.queryPanel('topk(20,(sum by (cluster, pod)(increase(loki_canary_missing_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval]))/sum by (cluster, pod)(increase(loki_canary_entries_total{cluster=~"$cluster",namespace=~"$namespace"}[$__rate_interval])))*100) > 0', 'Missing {{ cluster }} {{ pod }}') + + g.queryPanel('topk(20,(sum by (' + $._config.per_cluster_label + ', pod)(increase(loki_canary_missing_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval]))/sum by (' + $._config.per_cluster_label + ', pod)(increase(loki_canary_entries_total{' + $._config.per_cluster_label + '=~"$cluster",namespace=~"$namespace"}[$__rate_interval])))*100) > 0', 'Missing {{ ' + $._config.per_cluster_label + ' }} {{ pod }}') + { gridPos: { h: 6, w: 12, x: 12, y: 20 } }, ], diff --git a/production/loki-mixin/dashboards/loki-logs.libsonnet b/production/loki-mixin/dashboards/loki-logs.libsonnet index 9fd6eee58950..b28d74e94366 100644 --- a/production/loki-mixin/dashboards/loki-logs.libsonnet +++ b/production/loki-mixin/dashboards/loki-logs.libsonnet @@ -48,7 +48,6 @@ local template = import 'grafonnet/template.libsonnet'; local cfg = self, showMultiCluster:: true, - clusterLabel:: $._config.per_cluster_label, } + lokiLogs + $.dashboard('Loki / Logs', uid='logs') @@ -61,8 +60,9 @@ local template = import 'grafonnet/template.libsonnet'; p { targets: [ e { - expr: if dashboards['loki-logs.json'].showMultiCluster then super.expr - else std.strReplace(super.expr, $._config.per_cluster_label + '="$cluster", ', ''), + expr: if dashboards['loki-logs.json'].showMultiCluster + then std.strReplace(super.expr, 'cluster="$cluster"', $._config.per_cluster_label + '="$cluster"') + else std.strReplace(super.expr, 'cluster="$cluster", ', ''), } for e in p.targets ], diff --git a/production/loki-mixin/dashboards/loki-operational.libsonnet b/production/loki-mixin/dashboards/loki-operational.libsonnet index e8f5d9824874..e20d7dc2d562 100644 --- a/production/loki-mixin/dashboards/loki-operational.libsonnet +++ b/production/loki-mixin/dashboards/loki-operational.libsonnet @@ -11,7 +11,6 @@ local utils = import 'mixin-utils/utils.libsonnet'; showAnnotations:: true, showLinks:: true, showMultiCluster:: true, - clusterLabel:: $._config.per_cluster_label, hiddenRows:: [ 'Cassandra', @@ -62,7 +61,22 @@ local utils = import 'mixin-utils/utils.libsonnet'; local replaceClusterMatchers(expr) = if dashboards['loki-operational.json'].showMultiCluster - then expr + // Replace the recording rules cluster label with the per-cluster label + then std.strReplace( + // Replace the cluster label for equality matchers with the per-cluster label + std.strReplace( + // Replace the cluster label for regex matchers with the per-cluster label + std.strReplace( + expr, + 'cluster=~"$cluster"', + $._config.per_cluster_label + '=~"$cluster"' + ), + 'cluster="$cluster"', + $._config.per_cluster_label + '="$cluster"' + ), + 'cluster_', + $._config.per_cluster_label + '_' + ) else std.strReplace( std.strReplace( @@ -143,7 +157,7 @@ local utils = import 'mixin-utils/utils.libsonnet'; local replaceAllMatchers(expr) = - replaceMatchers(replaceClusterMatchers(expr)), + replaceMatchers(expr), local selectDatasource(ds) = if ds == null || ds == '' then ds @@ -179,7 +193,7 @@ local utils = import 'mixin-utils/utils.libsonnet'; datasource: selectDatasource(super.datasource), targets: if std.objectHas(p, 'targets') then [ e { - expr: removeInternalComponents(p.title, e.expr), + expr: removeInternalComponents(p.title, replaceClusterMatchers(e.expr)), } for e in p.targets ] else [], @@ -188,7 +202,7 @@ local utils = import 'mixin-utils/utils.libsonnet'; datasource: selectDatasource(super.datasource), targets: if std.objectHas(sp, 'targets') then [ e { - expr: removeInternalComponents(p.title, e.expr), + expr: removeInternalComponents(p.title, replaceClusterMatchers(e.expr)), } for e in sp.targets ] else [], @@ -197,7 +211,7 @@ local utils = import 'mixin-utils/utils.libsonnet'; datasource: selectDatasource(super.datasource), targets: if std.objectHas(ssp, 'targets') then [ e { - expr: removeInternalComponents(p.title, e.expr), + expr: removeInternalComponents(p.title, replaceClusterMatchers(e.expr)), } for e in ssp.targets ] else [], diff --git a/production/loki-mixin/dashboards/loki-reads.libsonnet b/production/loki-mixin/dashboards/loki-reads.libsonnet index 4dea689b1890..9b82ee0820e4 100644 --- a/production/loki-mixin/dashboards/loki-reads.libsonnet +++ b/production/loki-mixin/dashboards/loki-reads.libsonnet @@ -31,10 +31,9 @@ local utils = import 'mixin-utils/utils.libsonnet'; local cfg = self, showMultiCluster:: true, - clusterLabel:: $._config.per_cluster_label, clusterMatchers:: if cfg.showMultiCluster then - [utils.selector.re(cfg.clusterLabel, '$cluster')] + [utils.selector.re($._config.per_cluster_label, '$cluster')] else [], diff --git a/production/loki-mixin/dashboards/loki-writes.libsonnet b/production/loki-mixin/dashboards/loki-writes.libsonnet index bedb9ca10825..8227cc383492 100644 --- a/production/loki-mixin/dashboards/loki-writes.libsonnet +++ b/production/loki-mixin/dashboards/loki-writes.libsonnet @@ -9,10 +9,9 @@ local utils = import 'mixin-utils/utils.libsonnet'; local cfg = self, showMultiCluster:: true, - clusterLabel:: $._config.per_cluster_label, clusterMatchers:: if cfg.showMultiCluster then - [utils.selector.re(cfg.clusterLabel, '$cluster')] + [utils.selector.re($._config.per_cluster_label, '$cluster')] else [], diff --git a/production/loki-mixin/dashboards/recording-rules.libsonnet b/production/loki-mixin/dashboards/recording-rules.libsonnet index 2d943807c648..46618da952dc 100644 --- a/production/loki-mixin/dashboards/recording-rules.libsonnet +++ b/production/loki-mixin/dashboards/recording-rules.libsonnet @@ -7,7 +7,7 @@ local template = import 'grafonnet/template.libsonnet'; template.new( 'tenant', '$datasource', - 'query_result(sum by (id) (grafanacloud_logs_instance_info) and sum(label_replace(loki_tenant:active_streams{cluster="$cluster",namespace="$namespace"},"id","$1","tenant","(.*)")) by(id))', + 'query_result(sum by (id) (grafanacloud_logs_instance_info) and sum(label_replace(loki_tenant:active_streams{' + $._config.per_cluster_label + '="$cluster",namespace="$namespace"},"id","$1","tenant","(.*)")) by(id))', regex='/"([^"]+)"/', sort=1, includeAll=true, diff --git a/tools/dev/loki-tsdb-storage-s3/dev.dockerfile b/tools/dev/loki-tsdb-storage-s3/dev.dockerfile index e1d11efb2c5a..98531c69145b 100644 --- a/tools/dev/loki-tsdb-storage-s3/dev.dockerfile +++ b/tools/dev/loki-tsdb-storage-s3/dev.dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 +FROM golang:1.22.2 ENV CGO_ENABLED=0 RUN go install github.com/go-delve/delve/cmd/dlv@v1.22.1 diff --git a/tools/lambda-promtail/Dockerfile b/tools/lambda-promtail/Dockerfile index 42f17c0a96c8..4cb51bcbe84d 100644 --- a/tools/lambda-promtail/Dockerfile +++ b/tools/lambda-promtail/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9-alpine AS build-image +FROM golang:1.22.2-alpine AS build-image COPY tools/lambda-promtail /src/lambda-promtail WORKDIR /src/lambda-promtail diff --git a/tools/lambda-promtail/template-eventbridge.yaml b/tools/lambda-promtail/template-eventbridge.yaml index a6c2789d2c3a..4b08ba037b0e 100644 --- a/tools/lambda-promtail/template-eventbridge.yaml +++ b/tools/lambda-promtail/template-eventbridge.yaml @@ -88,7 +88,7 @@ Resources: - Effect: Allow Action: - s3:GetObject - Resource: arn:aws:s3:::thepalbi-lambda-lb-access-logs/* + Resource: !Sub 'arn:aws:s3:::${EventSourceS3Bucket}/*' RoleName: iam_for_lambda LambdaPromtailFunction: Type: AWS::Lambda::Function diff --git a/tools/tsdb/bloom-tester/Dockerfile b/tools/tsdb/bloom-tester/Dockerfile index 136ef1e8cc33..3db7db012e43 100644 --- a/tools/tsdb/bloom-tester/Dockerfile +++ b/tools/tsdb/bloom-tester/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.9 as build +FROM golang:1.22.2-bookworm as build ENV BUILD_IN_CONTAINER=false COPY . /src/bloom-tester