in cmd/collector/config/config.go [511:633]
func (c *Config) Validate() error {
if c.Exporters != nil {
if err := c.Exporters.Validate(); err != nil {
return err
}
}
tlsCertEmpty := c.TLSCertFile == ""
tlsKeyEmpty := c.TLSKeyFile == ""
if tlsCertEmpty != tlsKeyEmpty {
return errors.New("tls-cert-file and tls-key-file must both be set or both be empty")
}
for _, v := range c.LiftLabels {
if v.Name == "" {
return errors.New("lift-labels.name must be set")
}
if v.ColumnName != "" {
if !validColumnName.MatchString(v.ColumnName) {
return fmt.Errorf("lift-labels.column-name `%s` contains invalid characters", v.ColumnName)
}
}
}
for _, v := range c.LiftResources {
if v.Name == "" {
return errors.New("lift-resources.name must be set")
}
if v.ColumnName != "" {
if !validColumnName.MatchString(v.ColumnName) {
return fmt.Errorf("lift-resources.column-name `%s` contains invalid characters", v.ColumnName)
}
}
}
existingPaths := make(map[string]struct{})
for _, v := range c.PrometheusRemoteWrite {
if err := v.Validate(); err != nil {
return err
}
if _, ok := existingPaths[v.Path]; ok {
return fmt.Errorf("prometheus-remote-write.path %s is already defined", v.Path)
}
existingPaths[v.Path] = struct{}{}
for _, exporterName := range v.Exporters {
if !HasMetricsExporter(exporterName, c.Exporters) {
return fmt.Errorf("prometheus-remote-write.exporters %q not found", exporterName)
}
}
}
if c.OtelLog != nil {
if err := c.OtelLog.Validate(); err != nil {
return err
}
for _, exporterName := range c.OtelLog.Exporters {
if !HasLogsExporter(exporterName, c.Exporters) {
return fmt.Errorf("otel-log.exporters %q not found", exporterName)
}
}
}
tailScrapingFromKube := false
for i, v := range c.HostLog {
if err := v.Validate(); err != nil {
return err
}
if !v.DisableKubeDiscovery {
if tailScrapingFromKube {
return fmt.Errorf("host-log[%d].disable-kube-discovery not set for more than one HostLog configuration", i)
}
tailScrapingFromKube = true
}
for _, exporterName := range v.Exporters {
if !HasLogsExporter(exporterName, c.Exporters) {
return fmt.Errorf("host-log[%d].exporters %q not found", i, exporterName)
}
}
}
for i, v := range c.OtelMetric {
if err := v.Validate(); err != nil {
return err
}
if v.Path != "" {
if _, ok := existingPaths[v.Path]; ok {
return fmt.Errorf("otel-metric[%d].path %s is already defined", i, v.Path)
}
existingPaths[v.Path] = struct{}{}
}
for _, exporterName := range v.Exporters {
if !HasMetricsExporter(exporterName, c.Exporters) {
return fmt.Errorf("otel-metric[%d].exporters %q not found", i, exporterName)
}
}
}
if c.PrometheusScrape != nil {
if err := c.PrometheusScrape.Validate(); err != nil {
return err
}
for _, exporterName := range c.PrometheusScrape.Exporters {
if !HasMetricsExporter(exporterName, c.Exporters) {
return fmt.Errorf("prometheus-scrape.exporters %q not found", exporterName)
}
}
}
if c.WALFlushIntervalMilliSeconds == 0 {
c.WALFlushIntervalMilliSeconds = DefaultConfig.WALFlushIntervalMilliSeconds
} else if c.WALFlushIntervalMilliSeconds < 0 {
return errors.New("wal-flush-interval must be greater than 0")
}
return nil
}