**What this PR does / why we need it**:
Introduce the new experimental `enforced_labels` limit.
By default it is empty but when configured, it configures Loki to only accept push requests which streams have all enforced labels.
f.Var(&l.BlockIngestionUntil,"limits.block-ingestion-until","Block ingestion until the configured date. The time should be in RFC3339 format.")
f.IntVar(&l.BlockIngestionStatusCode,"limits.block-ingestion-status-code",defaultBlockedIngestionStatusCode,"HTTP status code to return when ingestion is blocked. If 200, the ingestion will be blocked without returning an error to the client. By Default, a custom status code (260) is returned to the client along with an error message.")
f.Var((*dskit_flagext.StringSlice)(&l.EnforcedLabels),"validation.enforced-labels","List of labels that must be present in the stream. If any of the labels are missing, the stream will be discarded. This flag configures it globally for all tenants. Experimental.")
f.IntVar(&l.IngestionPartitionsTenantShardSize,"limits.ingestion-partition-tenant-shard-size",0,"The number of partitions a tenant's data should be sharded to when using kafka ingestion. Tenants are sharded across partitions using shuffle-sharding. 0 disables shuffle sharding and tenant is sharded across all partitions.")
@ -1111,6 +1113,10 @@ func (o *Overrides) BlockIngestionStatusCode(userID string) int {
StructuredMetadataTooManyErrorMsg="stream '%s' has too many structured metadata labels: '%d', limit: '%d'. Please see `limits_config.max_structured_metadata_entries_count` or contact your Loki administrator to increase it."
BlockedIngestion="blocked_ingestion"
BlockedIngestionErrorMsg="ingestion blocked for user %s until '%s' with status code '%d'"
MissingEnforcedLabels="missing_enforced_labels"
MissingEnforcedLabelsErrorMsg="missing required labels %s for user %s"