|
|
|
@ -455,9 +455,11 @@ const (
|
|
|
|
|
// Performs a regex replacement.
|
|
|
|
|
RelabelReplace RelabelAction = "replace" |
|
|
|
|
// Drops targets for which the input does not match the regex.
|
|
|
|
|
RelabelKeep = "keep" |
|
|
|
|
RelabelKeep RelabelAction = "keep" |
|
|
|
|
// Drops targets for which the input does match the regex.
|
|
|
|
|
RelabelDrop = "drop" |
|
|
|
|
RelabelDrop RelabelAction = "drop" |
|
|
|
|
// Sets a label to the modulus of a hash of labels.
|
|
|
|
|
RelabelHashMod RelabelAction = "hashmod" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// UnmarshalYAML implements the yaml.Unmarshaler interface.
|
|
|
|
@ -467,7 +469,7 @@ func (a *RelabelAction) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
switch act := RelabelAction(strings.ToLower(s)); act { |
|
|
|
|
case RelabelReplace, RelabelKeep, RelabelDrop: |
|
|
|
|
case RelabelReplace, RelabelKeep, RelabelDrop, RelabelHashMod: |
|
|
|
|
*a = act |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
@ -482,7 +484,9 @@ type RelabelConfig struct {
|
|
|
|
|
// Separator is the string between concatenated values from the source labels.
|
|
|
|
|
Separator string `yaml:"separator,omitempty"` |
|
|
|
|
// Regex against which the concatenation is matched.
|
|
|
|
|
Regex *Regexp `yaml:"regex"` |
|
|
|
|
Regex *Regexp `yaml:"regex",omitempty` |
|
|
|
|
// Modulus to take of the hash of concatenated values from the source labels.
|
|
|
|
|
Modulus uint64 `yaml:"modulus,omitempty"` |
|
|
|
|
// The label to which the resulting string is written in a replacement.
|
|
|
|
|
TargetLabel clientmodel.LabelName `yaml:"target_label,omitempty"` |
|
|
|
|
// Replacement is the regex replacement pattern to be used.
|
|
|
|
@ -501,9 +505,12 @@ func (c *RelabelConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|
|
|
|
if err := unmarshal((*plain)(c)); err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
if c.Regex == nil { |
|
|
|
|
if c.Regex == nil && c.Action != RelabelHashMod { |
|
|
|
|
return fmt.Errorf("relabel configuration requires a regular expression") |
|
|
|
|
} |
|
|
|
|
if c.Modulus == 0 && c.Action == RelabelHashMod { |
|
|
|
|
return fmt.Errorf("relabel configuration for hashmod requires non-zero modulus") |
|
|
|
|
} |
|
|
|
|
return checkOverflow(c.XXX, "relabel_config") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -527,8 +534,11 @@ func (re *Regexp) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// MarshalYAML implements the yaml.Marshaler interface.
|
|
|
|
|
func (re Regexp) MarshalYAML() (interface{}, error) { |
|
|
|
|
return re.String(), nil |
|
|
|
|
func (re *Regexp) MarshalYAML() (interface{}, error) { |
|
|
|
|
if re != nil { |
|
|
|
|
return re.String(), nil |
|
|
|
|
} |
|
|
|
|
return nil, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Duration encapsulates a time.Duration and makes it YAML marshallable.
|
|
|
|
|