code: func (c *GlobalConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
  	// Create a clean global config as the previous one was already populated
  	// by the default due to the YAML parser behavior for empty blocks.
  	gc := &GlobalConfig{}
  	type plain GlobalConfig
  	if err := unmarshal((*plain)(gc)); err != nil {
  		return err
  	}
  
  	for _, l := range gc.ExternalLabels {
  		if !model.LabelName(l.Name).IsValid() {
  			return errors.Errorf("%q is not a valid label name", l.Name)
  		}
  		if !model.LabelValue(l.Value).IsValid() {
  			return errors.Errorf("%q is not a valid label value", l.Value)
  		}
  	}
  
  	// First set the correct scrape interval, then check that the timeout
  	// (inferred or explicit) is not greater than that.
  	if gc.ScrapeInterval == 0 {
  		gc.ScrapeInterval = DefaultGlobalConfig.ScrapeInterval
  	}
  	if gc.ScrapeTimeout > gc.ScrapeInterval {
  		return errors.New("global scrape timeout greater than scrape interval")
  	}
  	if gc.ScrapeTimeout == 0 {
  		if DefaultGlobalConfig.ScrapeTimeout > gc.ScrapeInterval {
  			gc.ScrapeTimeout = gc.ScrapeInterval
  		} else {
  			gc.ScrapeTimeout = DefaultGlobalConfig.ScrapeTimeout
  		}
  	}
  	if gc.EvaluationInterval == 0 {
  		gc.EvaluationInterval = DefaultGlobalConfig.EvaluationInterval
  	}
  	*c = *gc
  	return nil
  }
docs: // UnmarshalYAML implements the yaml.Unmarshaler interface.