mirror of
https://gitee.com/rainbond/Rainbond.git
synced 2024-12-03 12:18:09 +08:00
257 lines
10 KiB
Go
257 lines
10 KiB
Go
// Copyright (C) 2014-2018 Goodrain Co., Ltd.
|
|
// RAINBOND, Application Management Platform
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version. For any non-GPL usage of Rainbond,
|
|
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
|
|
// must be obtained first.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
package prometheus
|
|
|
|
import (
|
|
"github.com/prometheus/common/model"
|
|
"net/url"
|
|
"regexp"
|
|
"time"
|
|
)
|
|
|
|
// Config is the top-level configuration for Prometheus's config files.
|
|
type Config struct {
|
|
GlobalConfig GlobalConfig `yaml:"global"`
|
|
AlertingConfig AlertingConfig `yaml:"alerting,omitempty"`
|
|
RuleFiles []string `yaml:"rule_files,omitempty"`
|
|
ScrapeConfigs []*ScrapeConfig `yaml:"scrape_configs,omitempty"`
|
|
|
|
RemoteWriteConfigs []*RemoteWriteConfig `yaml:"remote_write,omitempty"`
|
|
RemoteReadConfigs []*RemoteReadConfig `yaml:"remote_read,omitempty"`
|
|
|
|
// original is the input from which the config was parsed.
|
|
original string
|
|
}
|
|
|
|
// GlobalConfig configures values that are used across other configuration
|
|
// objects.
|
|
type GlobalConfig struct {
|
|
// How frequently to scrape targets by default.
|
|
ScrapeInterval model.Duration `yaml:"scrape_interval,omitempty"`
|
|
// The default timeout when scraping targets.
|
|
ScrapeTimeout model.Duration `yaml:"scrape_timeout,omitempty"`
|
|
// How frequently to evaluate rules by default.
|
|
EvaluationInterval model.Duration `yaml:"evaluation_interval,omitempty"`
|
|
// The labels to add to any timeseries that this Prometheus instance scrapes.
|
|
ExternalLabels model.LabelSet `yaml:"external_labels,omitempty"`
|
|
}
|
|
|
|
// AlertingConfig configures alerting and alertmanager related configs.
|
|
type AlertingConfig struct {
|
|
AlertRelabelConfigs []*RelabelConfig `yaml:"alert_relabel_configs,omitempty"`
|
|
AlertmanagerConfigs []*AlertmanagerConfig `yaml:"alertmanagers,omitempty"`
|
|
}
|
|
|
|
// AlertmanagerConfig configures how Alertmanagers can be discovered and communicated with.
|
|
type AlertmanagerConfig struct {
|
|
// We cannot do proper Go type embedding below as the parser will then parse
|
|
// values arbitrarily into the overflow maps of further-down types.
|
|
|
|
ServiceDiscoveryConfig ServiceDiscoveryConfig `yaml:",inline"`
|
|
HTTPClientConfig HTTPClientConfig `yaml:",inline"`
|
|
|
|
// The URL scheme to use when talking to Alertmanagers.
|
|
Scheme string `yaml:"scheme,omitempty"`
|
|
// Path prefix to add in front of the push endpoint path.
|
|
PathPrefix string `yaml:"path_prefix,omitempty"`
|
|
// The timeout used when sending alerts.
|
|
Timeout time.Duration `yaml:"timeout,omitempty"`
|
|
|
|
// List of Alertmanager relabel configurations.
|
|
RelabelConfigs []*RelabelConfig `yaml:"relabel_configs,omitempty"`
|
|
}
|
|
|
|
// RemoteWriteConfig is the configuration for writing to remote storage.
|
|
type RemoteWriteConfig struct {
|
|
URL *URL `yaml:"url"`
|
|
RemoteTimeout model.Duration `yaml:"remote_timeout,omitempty"`
|
|
WriteRelabelConfigs []*RelabelConfig `yaml:"write_relabel_configs,omitempty"`
|
|
|
|
// We cannot do proper Go type embedding below as the parser will then parse
|
|
// values arbitrarily into the overflow maps of further-down types.
|
|
HTTPClientConfig HTTPClientConfig `yaml:",inline"`
|
|
QueueConfig QueueConfig `yaml:"queue_config,omitempty"`
|
|
}
|
|
|
|
// RemoteReadConfig is the configuration for reading from remote storage.
|
|
type RemoteReadConfig struct {
|
|
URL *URL `yaml:"url"`
|
|
RemoteTimeout model.Duration `yaml:"remote_timeout,omitempty"`
|
|
ReadRecent bool `yaml:"read_recent,omitempty"`
|
|
// We cannot do proper Go type embedding below as the parser will then parse
|
|
// values arbitrarily into the overflow maps of further-down types.
|
|
HTTPClientConfig HTTPClientConfig `yaml:",inline"`
|
|
|
|
// RequiredMatchers is an optional list of equality matchers which have to
|
|
// be present in a selector to query the remote read endpoint.
|
|
RequiredMatchers model.LabelSet `yaml:"required_matchers,omitempty"`
|
|
}
|
|
|
|
// QueueConfig is the configuration for the queue used to write to remote
|
|
// storage.
|
|
type QueueConfig struct {
|
|
// Number of samples to buffer per shard before we start dropping them.
|
|
Capacity int `yaml:"capacity,omitempty"`
|
|
|
|
// Max number of shards, i.e. amount of concurrency.
|
|
MaxShards int `yaml:"max_shards,omitempty"`
|
|
|
|
// Maximum number of samples per send.
|
|
MaxSamplesPerSend int `yaml:"max_samples_per_send,omitempty"`
|
|
|
|
// Maximum time sample will wait in buffer.
|
|
BatchSendDeadline time.Duration `yaml:"batch_send_deadline,omitempty"`
|
|
|
|
// Max number of times to retry a batch on recoverable errors.
|
|
MaxRetries int `yaml:"max_retries,omitempty"`
|
|
|
|
// On recoverable errors, backoff exponentially.
|
|
MinBackoff time.Duration `yaml:"min_backoff,omitempty"`
|
|
MaxBackoff time.Duration `yaml:"max_backoff,omitempty"`
|
|
}
|
|
|
|
// ScrapeConfig configures a scraping unit for Prometheus.
|
|
type ScrapeConfig struct {
|
|
// The job name to which the job label is set by default.
|
|
JobName string `yaml:"job_name"`
|
|
// Indicator whether the scraped metrics should remain unmodified.
|
|
HonorLabels bool `yaml:"honor_labels,omitempty"`
|
|
// A set of query parameters with which the target is scraped.
|
|
Params url.Values `yaml:"params,omitempty"`
|
|
// How frequently to scrape the targets of this scrape config.
|
|
ScrapeInterval model.Duration `yaml:"scrape_interval,omitempty"`
|
|
// The timeout for scraping targets of this config.
|
|
ScrapeTimeout model.Duration `yaml:"scrape_timeout,omitempty"`
|
|
// The HTTP resource path on which to fetch metrics from targets.
|
|
MetricsPath string `yaml:"metrics_path,omitempty"`
|
|
// The URL scheme with which to fetch metrics from targets.
|
|
Scheme string `yaml:"scheme,omitempty"`
|
|
// More than this many samples post metric-relabelling will cause the scrape to fail.
|
|
SampleLimit uint `yaml:"sample_limit,omitempty"`
|
|
|
|
// We cannot do proper Go type embedding below as the parser will then parse
|
|
// values arbitrarily into the overflow maps of further-down types.
|
|
|
|
ServiceDiscoveryConfig ServiceDiscoveryConfig `yaml:",inline"`
|
|
HTTPClientConfig HTTPClientConfig `yaml:",inline"`
|
|
|
|
// List of target relabel configurations.
|
|
RelabelConfigs []*RelabelConfig `yaml:"relabel_configs,omitempty"`
|
|
// List of metric relabel configurations.
|
|
MetricRelabelConfigs []*RelabelConfig `yaml:"metric_relabel_configs,omitempty"`
|
|
}
|
|
|
|
// RelabelConfig is the configuration for relabeling of target label sets.
|
|
type RelabelConfig struct {
|
|
// A list of labels from which values are taken and concatenated
|
|
// with the configured separator in order.
|
|
SourceLabels model.LabelNames `yaml:"source_labels,flow,omitempty"`
|
|
// 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,omitempty"`
|
|
// Modulus to take of the hash of concatenated values from the source labels.
|
|
Modulus uint64 `yaml:"modulus,omitempty"`
|
|
// TargetLabel is the label to which the resulting string is written in a replacement.
|
|
// Regexp interpolation is allowed for the replace action.
|
|
TargetLabel string `yaml:"target_label,omitempty"`
|
|
// Replacement is the regex replacement pattern to be used.
|
|
Replacement string `yaml:"replacement,omitempty"`
|
|
// Action is the action to be performed for the relabeling.
|
|
Action RelabelAction `yaml:"action,omitempty"`
|
|
}
|
|
|
|
// ServiceDiscoveryConfig configures lists of different service discovery mechanisms.
|
|
type ServiceDiscoveryConfig struct {
|
|
// List of labeled target groups for this job.
|
|
StaticConfigs []*Group `yaml:"static_configs,omitempty"`
|
|
}
|
|
|
|
type Group struct {
|
|
// Targets is a list of targets identified by a label set. Each target is
|
|
// uniquely identifiable in the group by its address label.
|
|
Targets []string `yaml:"targets,flow"`
|
|
// Labels is a set of labels that is common across all targets in the group.
|
|
Labels model.LabelSet `yaml:"labels,omitempty"`
|
|
|
|
// Source is an identifier that describes a group of targets.
|
|
Source string `yaml:"source,omitempty"`
|
|
}
|
|
|
|
// Regexp encapsulates a regexp.Regexp and makes it YAML marshallable.
|
|
type Regexp struct {
|
|
*regexp.Regexp
|
|
original string
|
|
}
|
|
|
|
// RelabelAction is the action to be performed on relabeling.
|
|
type RelabelAction string
|
|
|
|
// HTTPClientConfig configures an HTTP client.
|
|
type HTTPClientConfig struct {
|
|
// The HTTP basic authentication credentials for the targets.
|
|
BasicAuth *BasicAuth `yaml:"basic_auth,omitempty"`
|
|
// The bearer token for the targets.
|
|
BearerToken Secret `yaml:"bearer_token,omitempty"`
|
|
// The bearer token file for the targets.
|
|
BearerTokenFile string `yaml:"bearer_token_file,omitempty"`
|
|
// HTTP proxy server to use to connect to the targets.
|
|
ProxyURL URL `yaml:"proxy_url,omitempty"`
|
|
// TLSConfig to use to connect to the targets.
|
|
TLSConfig TLSConfig `yaml:"tls_config,omitempty"`
|
|
|
|
// Catches all undefined fields and must be empty after parsing.
|
|
XXX map[string]interface{} `yaml:",inline"`
|
|
}
|
|
|
|
// BasicAuth contains basic HTTP authentication credentials.
|
|
type BasicAuth struct {
|
|
Username string `yaml:"username"`
|
|
Password Secret `yaml:"password,omitempty"`
|
|
PasswordFile string `yaml:"password_file,omitempty"`
|
|
|
|
// Catches all undefined fields and must be empty after parsing.
|
|
XXX map[string]interface{} `yaml:",inline"`
|
|
}
|
|
|
|
// URL is a custom URL type that allows validation at configuration load time.
|
|
type URL struct {
|
|
*url.URL
|
|
}
|
|
|
|
// Secret special type for storing secrets.
|
|
type Secret string
|
|
|
|
// TLSConfig configures the options for TLS connections.
|
|
type TLSConfig struct {
|
|
// The CA cert to use for the targets.
|
|
CAFile string `yaml:"ca_file,omitempty"`
|
|
// The client cert file for the targets.
|
|
CertFile string `yaml:"cert_file,omitempty"`
|
|
// The client key file for the targets.
|
|
KeyFile string `yaml:"key_file,omitempty"`
|
|
// Used to verify the hostname for the targets.
|
|
ServerName string `yaml:"server_name,omitempty"`
|
|
// Disable target certificate validation.
|
|
InsecureSkipVerify bool `yaml:"insecure_skip_verify"`
|
|
|
|
// Catches all undefined fields and must be empty after parsing.
|
|
XXX map[string]interface{} `yaml:",inline"`
|
|
}
|