github.com/grafana/pyroscope@v1.18.0/pkg/segmentwriter/client/distributor/placement/adaptiveplacement/config.go (about) 1 package adaptiveplacement 2 3 import ( 4 "flag" 5 "time" 6 ) 7 8 const flagPrefix = "adaptive-placement." 9 10 type Limits interface { 11 PlacementLimits(tenant string) PlacementLimits 12 } 13 14 // PlacementLimits defines the limits for adaptive sharding. 15 // These parameters are tenant-specific. 16 type PlacementLimits struct { 17 TenantShards uint64 `yaml:"adaptive_placement_tenant_shards" json:"adaptive_placement_tenant_shards" doc:"hidden"` 18 DefaultDatasetShards uint64 `yaml:"adaptive_placement_default_dataset_shards" json:"adaptive_placement_default_dataset_shards" doc:"hidden"` 19 LoadBalancing LoadBalancing `yaml:"adaptive_placement_load_balancing" json:"adaptive_placement_load_balancing" doc:"hidden"` 20 MinDatasetShards uint64 `yaml:"adaptive_placement_min_dataset_shards" json:"adaptive_placement_min_dataset_shards" doc:"hidden"` 21 MaxDatasetShards uint64 `yaml:"adaptive_placement_max_dataset_shards" json:"adaptive_placement_max_dataset_shards" doc:"hidden"` 22 UnitSizeBytes uint64 `yaml:"adaptive_placement_unit_size_bytes" json:"adaptive_placement_unit_size_bytes" doc:"hidden"` 23 BurstWindow time.Duration `yaml:"adaptive_placement_burst_window" json:"adaptive_placement_burst_window" doc:"hidden"` 24 DecayWindow time.Duration `yaml:"adaptive_placement_decay_window" json:"adaptive_placement_decay_window" doc:"hidden"` 25 } 26 27 func (o *PlacementLimits) RegisterFlags(f *flag.FlagSet) { 28 o.RegisterFlagsWithPrefix(flagPrefix, f) 29 } 30 31 func (o *PlacementLimits) RegisterFlagsWithPrefix(prefix string, f *flag.FlagSet) { 32 o.LoadBalancing = DynamicLoadBalancing 33 f.Var(&o.LoadBalancing, prefix+"load-balancing", "Load balancing strategy; "+validOptionsString+".") 34 f.Uint64Var(&o.TenantShards, prefix+"tenant-shards", 0, "Number of shards per tenant. If 0, the limit is not applied.") 35 f.Uint64Var(&o.DefaultDatasetShards, prefix+"default-dataset-shards", 1, "Default number of shards per dataset.") 36 f.Uint64Var(&o.MinDatasetShards, prefix+"min-dataset-shards", 1, "Minimum number of shards per dataset.") 37 f.Uint64Var(&o.MaxDatasetShards, prefix+"max-dataset-shards", 1<<10, "Maximum number of shards per dataset.") 38 f.Uint64Var(&o.UnitSizeBytes, prefix+"unit-size-bytes", 128<<10, "Shards are allocated based on the utilisation of units per second. The option specifies the unit size in bytes.") 39 f.DurationVar(&o.BurstWindow, prefix+"burst-window", 17*time.Minute, "Duration of the burst window. During this time, scale-outs are more aggressive.") 40 f.DurationVar(&o.DecayWindow, prefix+"decay-window", 19*time.Minute, "Duration of the decay window. During this time, scale-ins are delayed.") 41 } 42 43 type Config struct { 44 PlacementUpdateInterval time.Duration `yaml:"placement_rules_update_interval" json:"placement_rules_update_interval"` 45 PlacementRetentionPeriod time.Duration `yaml:"placement_rules_retention_period" json:"placement_rules_retention_period"` 46 StatsConfidencePeriod time.Duration `yaml:"stats_confidence_period" json:"stats_confidence_period"` 47 StatsAggregationWindow time.Duration `yaml:"stats_aggregation_window" json:"stats_aggregation_window"` 48 StatsRetentionPeriod time.Duration `yaml:"stats_retention_period" json:"stats_retention_period"` 49 ExportShardLimitMetrics bool `yaml:"export_shard_limit_metrics" json:"export_shard_limit_metrics"` 50 ExportShardUsageMetrics bool `yaml:"export_shard_usage_metrics" json:"export_shard_usage_metrics"` 51 ExportShardUsageBreakdownMetrics bool `yaml:"export_shard_usage_breakdown_metrics" json:"export_shard_usage_breakdown_metrics"` 52 } 53 54 func DefaultConfig() Config { 55 var c Config 56 var f flag.FlagSet 57 c.RegisterFlags(&f) 58 return c 59 } 60 61 func (c *Config) RegisterFlags(f *flag.FlagSet) { 62 c.RegisterFlagsWithPrefix(flagPrefix, f) 63 } 64 65 func (c *Config) RegisterFlagsWithPrefix(prefix string, f *flag.FlagSet) { 66 f.DurationVar(&c.PlacementUpdateInterval, prefix+"placement-rules-update-interval", 15*time.Second, "Interval between updates to placement rules.") 67 f.DurationVar(&c.PlacementRetentionPeriod, prefix+"placement-rules-retention-period", 15*time.Minute, "Retention period for inactive placement rules.") 68 f.DurationVar(&c.StatsConfidencePeriod, prefix+"stats-confidence-period", 0, "Confidence period for stats. During this period, placement rules are not updated. If 0, placement rules may be applied using incomplete stats.") 69 f.DurationVar(&c.StatsAggregationWindow, prefix+"stats-aggregation-window", 3*time.Minute, "Time window for aggregating shard stats.") 70 f.DurationVar(&c.StatsRetentionPeriod, prefix+"stats-retention-period", 15*time.Minute, "Retention period for stats that are no longer updated.") 71 f.BoolVar(&c.ExportShardLimitMetrics, prefix+"export-shard-limit-metrics", true, "If enabled, shard limit metrics are exported as Prometheus metrics.") 72 f.BoolVar(&c.ExportShardUsageMetrics, prefix+"export-shard-usage-metrics", false, "If enabled, shard utilization metrics are exported as Prometheus metrics.") 73 f.BoolVar(&c.ExportShardUsageBreakdownMetrics, prefix+"export-shard-usage-breakdown-metrics", false, "If enabled, shard utilization breakdown metrics, including shard ownership, are exported as Prometheus metrics.") 74 }