diff --git a/cmd/observability-proxy/main.go b/cmd/observability-proxy/main.go index 3cba0bf5f..84cec030c 100644 --- a/cmd/observability-proxy/main.go +++ b/cmd/observability-proxy/main.go @@ -96,8 +96,12 @@ func parseFlags(args []string) (options, error) { return o, errors.New("--cluster-domain must not be empty") case o.logs.DefaultRange <= 0 || o.logs.MaxRange < o.logs.DefaultRange: return o, errors.New("--logs-default-range must be positive and not above --logs-max-range") - case o.logs.MaxBuckets <= 0: - return o, errors.New("--logs-max-buckets must be positive") + // Below three buckets, or a range under three seconds, the step cap + // that keeps vlselect's step alignment inside the range cannot hold. + case o.logs.MaxBuckets < 3: + return o, errors.New("--logs-max-buckets must be at least 3") + case o.logs.MaxRange < 3*time.Second: + return o, errors.New("--logs-max-range must be at least 3s") case o.logs.DefaultLimit <= 0 || o.logs.MaxLimit < o.logs.DefaultLimit: return o, errors.New("--logs-default-limit must be positive and not above --logs-max-limit") case o.logs.MaxTailResume < 0: diff --git a/cmd/observability-proxy/main_test.go b/cmd/observability-proxy/main_test.go index 866ff95d2..924c06f28 100644 --- a/cmd/observability-proxy/main_test.go +++ b/cmd/observability-proxy/main_test.go @@ -49,7 +49,9 @@ func TestParseFlagsInvalid(t *testing.T) { {"--root-tenant="}, {"--cluster-domain="}, {"--logs-default-range=48h", "--logs-max-range=24h"}, - {"--logs-max-buckets=0"}, + {"--logs-max-buckets=2"}, + {"--logs-max-range=2s", "--logs-default-range=1s"}, + {"--shutdown-timeout=-1s"}, {"--logs-default-limit=0"}, {"--logs-default-limit=100", "--logs-max-limit=10"}, {"--logs-max-tail-resume=-1m"},