diff --git a/app/vminsert/main.go b/app/vminsert/main.go index 62ff780017..23e9e27df0 100644 --- a/app/vminsert/main.go +++ b/app/vminsert/main.go @@ -13,6 +13,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/app/vminsert/opentsdbhttp" "github.com/VictoriaMetrics/VictoriaMetrics/app/vminsert/prometheus" "github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/storage" "github.com/VictoriaMetrics/metrics" ) @@ -21,10 +22,13 @@ var ( opentsdbListenAddr = flag.String("opentsdbListenAddr", "", "TCP and UDP address to listen for OpentTSDB put messages. Usually :4242 must be set. Doesn't work if empty") opentsdbHTTPListenAddr = flag.String("opentsdbHTTPListenAddr", "", "TCP address to listen for OpentTSDB HTTP put requests. Usually :4242 must be set. Doesn't work if empty") maxInsertRequestSize = flag.Int("maxInsertRequestSize", 32*1024*1024, "The maximum size of a single insert request in bytes") + maxLabelsPerTimeseries = flag.Int("maxLabelsPerTimeseries", 30, "The maximum number of labels accepted per time series. Superflouos labels are dropped") ) // Init initializes vminsert. func Init() { + storage.SetMaxLabelsPerTimeseries(*maxLabelsPerTimeseries) + concurrencylimiter.Init() if len(*graphiteListenAddr) > 0 { go graphite.Serve(*graphiteListenAddr) diff --git a/lib/storage/metric_name.go b/lib/storage/metric_name.go index 4c9975923d..08a4a755fb 100644 --- a/lib/storage/metric_name.go +++ b/lib/storage/metric_name.go @@ -9,6 +9,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/encoding" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" "github.com/VictoriaMetrics/VictoriaMetrics/lib/prompb" ) @@ -392,9 +393,18 @@ const maxLabelNameLen = 256 const maxLabelValueLen = 16 * 1024 // The maximum number of labels per each timeseries. +var maxLabelsPerTimeseries = 30 + +// SetMaxLabelsPerTimeseries sets the limit on the number of labels +// per each time series. // -// Superflouos lables are dropped. -const maxLabelsPerTimeseries = 30 +// Superfouos labels are dropped. +func SetMaxLabelsPerTimeseries(maxLabels int) { + if maxLabels <= 0 { + logger.Panicf("BUG: maxLabels must be positive; got %d", maxLabels) + } + maxLabelsPerTimeseries = maxLabels +} // MarshalMetricNameRaw marshals labels to dst and returns the result. //