in pkg/config/config.go [163:214]
func validate(config *Config) error {
for i := range config.MetricServers {
server := config.MetricServers[i]
if server.Rename != nil {
if len(server.Rename.Matches) == 0 || len(server.Rename.As) == 0 {
return fmt.Errorf("%s: rename directive must contain both \"matches\" and \"as\" fields", server.Name)
}
}
if server.ServerType == "" {
return fmt.Errorf("%s: server type is not set", server.Name)
}
switch server.ServerType {
case "custom":
if !server.ClientConfig.IsDefined() {
return fmt.Errorf("%s: HTTP client configuration is not defined in upstream custom metric server", server.Name)
}
if len(server.MetricSets) > 0 {
return fmt.Errorf("%s: metricSets is not allowed in upstream custom metric server", server.Name)
}
case "elasticsearch":
if len(server.MetricSets) == 0 {
return fmt.Errorf("%s: no metricSets defined", server.Name)
}
if !server.ClientConfig.IsDefined() {
return fmt.Errorf("%s: Elasticsearch requires clientConfig to be set", server.Name)
}
// Compile the regular expressions
for i := range server.MetricSets {
if len(server.MetricSets[i].Fields) == 0 {
// User did not provide a field pattern, we assume the user wants all numeric fields in this index to be available.
server.MetricSets[i].Fields = append(server.MetricSets[i].Fields, defaultFieldSet)
}
metricSet := server.MetricSets[i]
for j := range metricSet.Fields {
field := metricSet.Fields[j]
metricSet.Fields[j].compiledPatterns = make([]regexp.Regexp, len(field.Patterns))
for k, pattern := range field.Patterns {
compiledPattern, err := regexp.Compile(pattern)
if err != nil {
return fmt.Errorf("%s: error while compiling regular expression %s: %v", server.Name, pattern, err)
}
metricSet.Fields[j].compiledPatterns[k] = *compiledPattern
}
}
}
default:
return fmt.Errorf("%s: unknown metric server type: %s", server.Name, server.ServerType)
}
}
return nil
}