ruler

package
v1.17.0-rc.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2024 License: Apache-2.0 Imports: 85 Imported by: 17

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNoNamespace signals that no namespace was specified in the request
	ErrNoNamespace = errors.New("a namespace must be provided in the request")
	// ErrNoGroupName signals a group name url parameter was not found
	ErrNoGroupName = errors.New("a matching group name must be provided in the request")
	// ErrNoRuleGroups signals the rule group requested does not exist
	ErrNoRuleGroups = errors.New("no rule groups found")
	// ErrBadRuleGroup is returned when the provided rule group can not be unmarshalled
	ErrBadRuleGroup = errors.New("unable to decoded rule group")
)
View Source
var (
	ErrInvalidLengthRuler = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowRuler   = fmt.Errorf("proto: integer overflow")
)
View Source
var ListRuleRingOp = ring.NewOp([]ring.InstanceState{ring.ACTIVE, ring.LEAVING}, func(s ring.InstanceState) bool {

	return s != ring.ACTIVE
})

ListRuleRingOp is the operation used for getting rule groups from rulers.

View Source
var RingOp = ring.NewOp([]ring.InstanceState{ring.ACTIVE}, func(s ring.InstanceState) bool {

	return s != ring.ACTIVE
})

RingOp is the operation used for distributing rule groups between rulers.

Functions

func EngineQueryFunc added in v1.10.0

func EngineQueryFunc(engine promql.QueryEngine, q storage.Queryable, overrides RulesLimits, userID string, lookbackDelta time.Duration) rules.QueryFunc

EngineQueryFunc returns a new engine query function by passing an altered timestamp. Modified from Prometheus rules.EngineQueryFunc https://github.com/prometheus/prometheus/blob/v2.39.1/rules/manager.go#L189.

func GetReplicationSetForListRule added in v1.17.0

func GetReplicationSetForListRule(r ring.ReadRing, cfg *RingConfig) (ring.ReplicationSet, map[string]struct{}, error)

GetReplicationSetForListRule is similar to ring.GetReplicationSetForOperation but does NOT require quorum. Because it does not require quorum it returns healthy instance in the AZ with failed instances unlike GetReplicationSetForOperation. This is important for ruler because healthy instances in the AZ with failed instance could be evaluating some rule groups.

func MetricsQueryFunc added in v1.10.0

func MetricsQueryFunc(qf rules.QueryFunc, queries, failedQueries prometheus.Counter) rules.QueryFunc

func NewRuleStore added in v1.8.0

NewRuleStore returns a rule store backend client based on the provided cfg.

func RecordAndReportRuleQueryMetrics added in v1.11.0

func RecordAndReportRuleQueryMetrics(qf rules.QueryFunc, queryTime prometheus.Counter, logger log.Logger) rules.QueryFunc

func RegisterRulerServer added in v0.7.0

func RegisterRulerServer(s *grpc.Server, srv RulerServer)

func SendAlerts added in v1.3.0

func SendAlerts(n sender, externalURL string) promRules.NotifyFunc

SendAlerts implements a rules.NotifyFunc for a Notifier. It filters any non-firing alerts from the input.

Copied from Prometheus's main.go.

func WrapQueryableErrors added in v1.11.0

func WrapQueryableErrors(err error) error

Types

type API

type API struct {
	// contains filtered or unexported fields
}

API is used to handle HTTP requests for the ruler service

func NewAPI

func NewAPI(r *Ruler, s rulestore.RuleStore, logger log.Logger) *API

NewAPI returns a new API struct with the provided ruler and rule store

func (*API) CreateRuleGroup added in v1.5.0

func (a *API) CreateRuleGroup(w http.ResponseWriter, req *http.Request)

func (*API) DeleteNamespace added in v1.5.0

func (a *API) DeleteNamespace(w http.ResponseWriter, req *http.Request)

func (*API) DeleteRuleGroup added in v1.5.0

func (a *API) DeleteRuleGroup(w http.ResponseWriter, req *http.Request)

func (*API) GetRuleGroup added in v1.5.0

func (a *API) GetRuleGroup(w http.ResponseWriter, req *http.Request)

func (*API) ListRules added in v1.5.0

func (a *API) ListRules(w http.ResponseWriter, req *http.Request)

func (*API) PrometheusAlerts added in v1.5.0

func (a *API) PrometheusAlerts(w http.ResponseWriter, req *http.Request)

func (*API) PrometheusRules added in v1.5.0

func (a *API) PrometheusRules(w http.ResponseWriter, req *http.Request)

type Alert added in v0.7.0

type Alert struct {
	Labels          labels.Labels `json:"labels"`
	Annotations     labels.Labels `json:"annotations"`
	State           string        `json:"state"`
	ActiveAt        *time.Time    `json:"activeAt"`
	KeepFiringSince *time.Time    `json:"keepFiringSince,omitempty"`
	Value           string        `json:"value"`
}

Alert has info for an alert.

type AlertDiscovery added in v0.7.0

type AlertDiscovery struct {
	Alerts []*Alert `json:"alerts"`
}

AlertDiscovery has info for all active alerts.

type AlertStateDesc added in v1.0.0

type AlertStateDesc struct {
	State           string                                                      `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"`
	Labels          []github_com_cortexproject_cortex_pkg_cortexpb.LabelAdapter `protobuf:"bytes,2,rep,name=labels,proto3,customtype=github.com/cortexproject/cortex/pkg/cortexpb.LabelAdapter" json:"labels"`
	Annotations     []github_com_cortexproject_cortex_pkg_cortexpb.LabelAdapter `` /* 134-byte string literal not displayed */
	Value           float64                                                     `protobuf:"fixed64,4,opt,name=value,proto3" json:"value,omitempty"`
	ActiveAt        time.Time                                                   `protobuf:"bytes,5,opt,name=active_at,json=activeAt,proto3,stdtime" json:"active_at"`
	FiredAt         time.Time                                                   `protobuf:"bytes,6,opt,name=fired_at,json=firedAt,proto3,stdtime" json:"fired_at"`
	ResolvedAt      time.Time                                                   `protobuf:"bytes,7,opt,name=resolved_at,json=resolvedAt,proto3,stdtime" json:"resolved_at"`
	LastSentAt      time.Time                                                   `protobuf:"bytes,8,opt,name=last_sent_at,json=lastSentAt,proto3,stdtime" json:"last_sent_at"`
	ValidUntil      time.Time                                                   `protobuf:"bytes,9,opt,name=valid_until,json=validUntil,proto3,stdtime" json:"valid_until"`
	KeepFiringSince time.Time                                                   `protobuf:"bytes,10,opt,name=keep_firing_since,json=keepFiringSince,proto3,stdtime" json:"keep_firing_since"`
}

func (*AlertStateDesc) Descriptor added in v1.0.0

func (*AlertStateDesc) Descriptor() ([]byte, []int)

func (*AlertStateDesc) Equal added in v1.0.0

func (this *AlertStateDesc) Equal(that interface{}) bool

func (*AlertStateDesc) GetActiveAt added in v1.0.0

func (m *AlertStateDesc) GetActiveAt() time.Time

func (*AlertStateDesc) GetFiredAt added in v1.0.0

func (m *AlertStateDesc) GetFiredAt() time.Time

func (*AlertStateDesc) GetKeepFiringSince added in v1.17.0

func (m *AlertStateDesc) GetKeepFiringSince() time.Time

func (*AlertStateDesc) GetLastSentAt added in v1.0.0

func (m *AlertStateDesc) GetLastSentAt() time.Time

func (*AlertStateDesc) GetResolvedAt added in v1.0.0

func (m *AlertStateDesc) GetResolvedAt() time.Time

func (*AlertStateDesc) GetState added in v1.0.0

func (m *AlertStateDesc) GetState() string

func (*AlertStateDesc) GetValidUntil added in v1.0.0

func (m *AlertStateDesc) GetValidUntil() time.Time

func (*AlertStateDesc) GetValue added in v1.0.0

func (m *AlertStateDesc) GetValue() float64

func (*AlertStateDesc) GoString added in v1.0.0

func (this *AlertStateDesc) GoString() string

func (*AlertStateDesc) Marshal added in v1.0.0

func (m *AlertStateDesc) Marshal() (dAtA []byte, err error)

func (*AlertStateDesc) MarshalTo added in v1.0.0

func (m *AlertStateDesc) MarshalTo(dAtA []byte) (int, error)

func (*AlertStateDesc) MarshalToSizedBuffer added in v1.0.0

func (m *AlertStateDesc) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*AlertStateDesc) ProtoMessage added in v1.0.0

func (*AlertStateDesc) ProtoMessage()

func (*AlertStateDesc) Reset added in v1.0.0

func (m *AlertStateDesc) Reset()

func (*AlertStateDesc) Size added in v1.0.0

func (m *AlertStateDesc) Size() (n int)

func (*AlertStateDesc) String added in v1.0.0

func (this *AlertStateDesc) String() string

func (*AlertStateDesc) Unmarshal added in v1.0.0

func (m *AlertStateDesc) Unmarshal(dAtA []byte) error

func (*AlertStateDesc) XXX_DiscardUnknown added in v1.0.0

func (m *AlertStateDesc) XXX_DiscardUnknown()

func (*AlertStateDesc) XXX_Marshal added in v1.0.0

func (m *AlertStateDesc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*AlertStateDesc) XXX_Merge added in v1.0.0

func (m *AlertStateDesc) XXX_Merge(src proto.Message)

func (*AlertStateDesc) XXX_Size added in v1.0.0

func (m *AlertStateDesc) XXX_Size() int

func (*AlertStateDesc) XXX_Unmarshal added in v1.0.0

func (m *AlertStateDesc) XXX_Unmarshal(b []byte) error

type ClientsPool added in v1.11.0

type ClientsPool interface {
	services.Service
	// GetClientFor returns the ruler client for the given address.
	GetClientFor(addr string) (RulerClient, error)
}

ClientsPool is the interface used to get the client from the pool for a specified address.

type Config

type Config struct {
	// This is used for template expansion in alerts; must be a valid URL.
	ExternalURL flagext.URLValue `yaml:"external_url"`
	// Labels to add to all alerts
	ExternalLabels labels.Labels `yaml:"external_labels,omitempty" doc:"nocli|description=Labels to add to all alerts."`
	// GRPC Client configuration.
	ClientTLSConfig grpcclient.Config `yaml:"ruler_client"`
	// How frequently to evaluate rules by default.
	EvaluationInterval time.Duration `yaml:"evaluation_interval"`
	// How frequently to poll for updated rules.
	PollInterval time.Duration `yaml:"poll_interval"`
	// Path to store rule files for prom manager.
	RulePath string `yaml:"rule_path"`

	// URL of the Alertmanager to send notifications to.
	// If you are configuring the ruler to send to a Cortex Alertmanager,
	// ensure this includes any path set in the Alertmanager external URL.
	AlertmanagerURL string `yaml:"alertmanager_url"`
	// Whether to use DNS SRV records to discover Alertmanager.
	AlertmanagerDiscovery bool `yaml:"enable_alertmanager_discovery"`
	// How long to wait between refreshing the list of Alertmanager based on DNS service discovery.
	AlertmanagerRefreshInterval time.Duration `yaml:"alertmanager_refresh_interval"`
	// Capacity of the queue for notifications to be sent to the Alertmanager.
	NotificationQueueCapacity int `yaml:"notification_queue_capacity"`
	// HTTP timeout duration when sending notifications to the Alertmanager.
	NotificationTimeout time.Duration `yaml:"notification_timeout"`
	// Client configs for interacting with the Alertmanager
	Notifier NotifierConfig `yaml:"alertmanager_client"`

	// Max time to tolerate outage for restoring "for" state of alert.
	OutageTolerance time.Duration `yaml:"for_outage_tolerance"`
	// Minimum duration between alert and restored "for" state. This is maintained only for alerts with configured "for" time greater than grace period.
	ForGracePeriod time.Duration `yaml:"for_grace_period"`
	// Minimum amount of time to wait before resending an alert to Alertmanager.
	ResendDelay time.Duration `yaml:"resend_delay"`

	ConcurrentEvalsEnabled bool  `yaml:"concurrent_evals_enabled"`
	MaxConcurrentEvals     int64 `yaml:"max_concurrent_evals"`

	// Enable sharding rule groups.
	EnableSharding   bool          `yaml:"enable_sharding"`
	ShardingStrategy string        `yaml:"sharding_strategy"`
	SearchPendingFor time.Duration `yaml:"search_pending_for"`
	Ring             RingConfig    `yaml:"ring"`
	FlushCheckPeriod time.Duration `yaml:"flush_period"`

	EnableAPI           bool `yaml:"enable_api"`
	APIDeduplicateRules bool `yaml:"api_deduplicate_rules"`

	EnabledTenants  flagext.StringSliceCSV `yaml:"enabled_tenants"`
	DisabledTenants flagext.StringSliceCSV `yaml:"disabled_tenants"`

	RingCheckPeriod time.Duration `yaml:"-"`

	// Field will be populated during runtime.
	LookbackDelta time.Duration `yaml:"-"`

	EnableQueryStats      bool `yaml:"query_stats_enabled"`
	DisableRuleGroupLabel bool `yaml:"disable_rule_group_label"`
}

Config is the configuration for the recording rules server.

func (*Config) RegisterFlags

func (cfg *Config) RegisterFlags(f *flag.FlagSet)

RegisterFlags adds the flags required to config this to the given FlagSet

func (*Config) RulesBackupEnabled added in v1.17.0

func (cfg *Config) RulesBackupEnabled() bool

func (*Config) Validate added in v1.1.0

func (cfg *Config) Validate(limits validation.Limits, log log.Logger) error

Validate config and returns error on failure

type DefaultMultiTenantManager added in v1.4.0

type DefaultMultiTenantManager struct {
	// contains filtered or unexported fields
}

func NewDefaultMultiTenantManager added in v1.4.0

func NewDefaultMultiTenantManager(cfg Config, managerFactory ManagerFactory, evalMetrics *RuleEvalMetrics, reg prometheus.Registerer, logger log.Logger) (*DefaultMultiTenantManager, error)

func (*DefaultMultiTenantManager) BackUpRuleGroups added in v1.17.0

func (r *DefaultMultiTenantManager) BackUpRuleGroups(ctx context.Context, ruleGroups map[string]rulespb.RuleGroupList)

func (*DefaultMultiTenantManager) GetBackupRules added in v1.17.0

func (r *DefaultMultiTenantManager) GetBackupRules(userID string) rulespb.RuleGroupList

func (*DefaultMultiTenantManager) GetRules added in v1.4.0

func (r *DefaultMultiTenantManager) GetRules(userID string) []*promRules.Group

func (*DefaultMultiTenantManager) Stop added in v1.4.0

func (r *DefaultMultiTenantManager) Stop()

func (*DefaultMultiTenantManager) SyncRuleGroups added in v1.4.0

func (r *DefaultMultiTenantManager) SyncRuleGroups(ctx context.Context, ruleGroups map[string]rulespb.RuleGroupList)

func (*DefaultMultiTenantManager) ValidateRuleGroup added in v1.4.0

func (*DefaultMultiTenantManager) ValidateRuleGroup(g rulefmt.RuleGroup) []error

type DisabledRuleGroupErr added in v1.16.0

type DisabledRuleGroupErr struct {
	Message string
}

func (*DisabledRuleGroupErr) Error added in v1.16.0

func (e *DisabledRuleGroupErr) Error() string

type GroupStateDesc added in v1.0.0

type GroupStateDesc struct {
	Group               *rulespb.RuleGroupDesc `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
	ActiveRules         []*RuleStateDesc       `protobuf:"bytes,2,rep,name=active_rules,json=activeRules,proto3" json:"active_rules,omitempty"`
	EvaluationTimestamp time.Time              `protobuf:"bytes,3,opt,name=evaluationTimestamp,proto3,stdtime" json:"evaluationTimestamp"`
	EvaluationDuration  time.Duration          `protobuf:"bytes,4,opt,name=evaluationDuration,proto3,stdduration" json:"evaluationDuration"`
}

GroupStateDesc is a proto representation of a cortex rule group

func (*GroupStateDesc) Descriptor added in v1.0.0

func (*GroupStateDesc) Descriptor() ([]byte, []int)

func (*GroupStateDesc) Equal added in v1.0.0

func (this *GroupStateDesc) Equal(that interface{}) bool

func (*GroupStateDesc) GetActiveRules added in v1.0.0

func (m *GroupStateDesc) GetActiveRules() []*RuleStateDesc

func (*GroupStateDesc) GetEvaluationDuration added in v1.0.0

func (m *GroupStateDesc) GetEvaluationDuration() time.Duration

func (*GroupStateDesc) GetEvaluationTimestamp added in v1.0.0

func (m *GroupStateDesc) GetEvaluationTimestamp() time.Time

func (*GroupStateDesc) GetGroup added in v1.0.0

func (m *GroupStateDesc) GetGroup() *rulespb.RuleGroupDesc

func (*GroupStateDesc) GoString added in v1.0.0

func (this *GroupStateDesc) GoString() string

func (*GroupStateDesc) Marshal added in v1.0.0

func (m *GroupStateDesc) Marshal() (dAtA []byte, err error)

func (*GroupStateDesc) MarshalTo added in v1.0.0

func (m *GroupStateDesc) MarshalTo(dAtA []byte) (int, error)

func (*GroupStateDesc) MarshalToSizedBuffer added in v1.0.0

func (m *GroupStateDesc) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*GroupStateDesc) ProtoMessage added in v1.0.0

func (*GroupStateDesc) ProtoMessage()

func (*GroupStateDesc) Reset added in v1.0.0

func (m *GroupStateDesc) Reset()

func (*GroupStateDesc) Size added in v1.0.0

func (m *GroupStateDesc) Size() (n int)

func (*GroupStateDesc) String added in v1.0.0

func (this *GroupStateDesc) String() string

func (*GroupStateDesc) Unmarshal added in v1.0.0

func (m *GroupStateDesc) Unmarshal(dAtA []byte) error

func (*GroupStateDesc) XXX_DiscardUnknown added in v1.0.0

func (m *GroupStateDesc) XXX_DiscardUnknown()

func (*GroupStateDesc) XXX_Marshal added in v1.0.0

func (m *GroupStateDesc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*GroupStateDesc) XXX_Merge added in v1.0.0

func (m *GroupStateDesc) XXX_Merge(src proto.Message)

func (*GroupStateDesc) XXX_Size added in v1.0.0

func (m *GroupStateDesc) XXX_Size() int

func (*GroupStateDesc) XXX_Unmarshal added in v1.0.0

func (m *GroupStateDesc) XXX_Unmarshal(b []byte) error

type ManagerFactory added in v1.3.0

type ManagerFactory func(ctx context.Context, userID string, notifier *notifier.Manager, logger log.Logger, reg prometheus.Registerer) RulesManager

ManagerFactory is a function that creates new RulesManager for given user and notifier.Manager.

func DefaultTenantManagerFactory added in v1.3.0

func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engine promql.QueryEngine, overrides RulesLimits, evalMetrics *RuleEvalMetrics, reg prometheus.Registerer) ManagerFactory

type ManagerMetrics added in v1.3.0

type ManagerMetrics struct {
	EvalDuration         *prometheus.Desc
	IterationDuration    *prometheus.Desc
	IterationsMissed     *prometheus.Desc
	IterationsScheduled  *prometheus.Desc
	EvalTotal            *prometheus.Desc
	EvalFailures         *prometheus.Desc
	GroupInterval        *prometheus.Desc
	GroupLastEvalTime    *prometheus.Desc
	GroupLastDuration    *prometheus.Desc
	GroupRules           *prometheus.Desc
	GroupLastEvalSamples *prometheus.Desc

	NotificationLatency       *prometheus.Desc
	NotificationErrors        *prometheus.Desc
	NotificationSent          *prometheus.Desc
	NotificationDropped       *prometheus.Desc
	NotificationQueueLength   *prometheus.Desc
	NotificationQueueCapacity *prometheus.Desc
	AlertmanagersDiscovered   *prometheus.Desc
	// contains filtered or unexported fields
}

ManagerMetrics aggregates metrics exported by the Prometheus rules package and returns them as Cortex metrics

func NewManagerMetrics added in v1.3.0

func NewManagerMetrics(disableRuleGroupLabel bool) *ManagerMetrics

NewManagerMetrics returns a ManagerMetrics struct

func (*ManagerMetrics) AddUserRegistry added in v1.3.0

func (m *ManagerMetrics) AddUserRegistry(user string, reg *prometheus.Registry)

AddUserRegistry adds a user-specific Prometheus registry.

func (*ManagerMetrics) Collect added in v1.3.0

func (m *ManagerMetrics) Collect(out chan<- prometheus.Metric)

Collect implements the Collector interface

func (*ManagerMetrics) Describe added in v1.3.0

func (m *ManagerMetrics) Describe(out chan<- *prometheus.Desc)

Describe implements the Collector interface

func (*ManagerMetrics) RemoveUserRegistry added in v1.6.0

func (m *ManagerMetrics) RemoveUserRegistry(user string)

RemoveUserRegistry removes user-specific Prometheus registry.

type MultiTenantManager added in v1.4.0

type MultiTenantManager interface {
	// SyncRuleGroups is used to sync the Manager with rules from the RuleStore.
	// If existing user is missing in the ruleGroups map, its ruler manager will be stopped.
	SyncRuleGroups(ctx context.Context, ruleGroups map[string]rulespb.RuleGroupList)
	// BackUpRuleGroups is used to store backups of rule groups owned by a different ruler instance.
	BackUpRuleGroups(ctx context.Context, ruleGroups map[string]rulespb.RuleGroupList)
	// GetRules fetches rules for a particular tenant (userID).
	GetRules(userID string) []*promRules.Group
	// GetBackupRules fetches rules for a particular tenant (userID) that the ruler stores for backup purposes
	GetBackupRules(userID string) rulespb.RuleGroupList
	// Stop stops all Manager components.
	Stop()
	// ValidateRuleGroup validates a rulegroup
	ValidateRuleGroup(rulefmt.RuleGroup) []error
}

MultiTenantManager is the interface of interaction with a Manager that is tenant aware.

type NotifierConfig added in v1.8.0

type NotifierConfig struct {
	TLS       tls.ClientConfig `yaml:",inline"`
	BasicAuth util.BasicAuth   `yaml:",inline"`
}

func (*NotifierConfig) RegisterFlags added in v1.8.0

func (cfg *NotifierConfig) RegisterFlags(f *flag.FlagSet)

type Pusher

type Pusher interface {
	Push(context.Context, *cortexpb.WriteRequest) (*cortexpb.WriteResponse, error)
}

Pusher is an ingester server that accepts pushes.

type PusherAppendable added in v1.3.0

type PusherAppendable struct {
	// contains filtered or unexported fields
}

PusherAppendable fulfills the storage.Appendable interface for prometheus manager

func NewPusherAppendable added in v1.10.0

func NewPusherAppendable(pusher Pusher, userID string, limits RulesLimits, totalWrites, failedWrites prometheus.Counter) *PusherAppendable

func (*PusherAppendable) Appender added in v1.3.0

func (t *PusherAppendable) Appender(ctx context.Context) storage.Appender

Appender returns a storage.Appender

type PusherAppender added in v1.10.0

type PusherAppender struct {
	// contains filtered or unexported fields
}

func (*PusherAppender) Append added in v1.10.0

func (*PusherAppender) AppendCTZeroSample added in v1.17.0

func (a *PusherAppender) AppendCTZeroSample(_ storage.SeriesRef, _ labels.Labels, _, _ int64) (storage.SeriesRef, error)

func (*PusherAppender) AppendExemplar added in v1.10.0

func (*PusherAppender) AppendHistogram added in v1.15.0

func (*PusherAppender) Commit added in v1.10.0

func (a *PusherAppender) Commit() error

func (*PusherAppender) Rollback added in v1.10.0

func (a *PusherAppender) Rollback() error

func (*PusherAppender) UpdateMetadata added in v1.14.0

type QueryableError added in v1.11.0

type QueryableError struct {
	// contains filtered or unexported fields
}

func (QueryableError) Error added in v1.11.0

func (q QueryableError) Error() string

func (QueryableError) Unwrap added in v1.11.0

func (q QueryableError) Unwrap() error

type RingConfig added in v0.6.0

type RingConfig struct {
	KVStore              kv.Config     `yaml:"kvstore"`
	HeartbeatPeriod      time.Duration `yaml:"heartbeat_period"`
	HeartbeatTimeout     time.Duration `yaml:"heartbeat_timeout"`
	ReplicationFactor    int           `yaml:"replication_factor"`
	ZoneAwarenessEnabled bool          `yaml:"zone_awareness_enabled"`

	// Instance details
	InstanceID             string   `yaml:"instance_id" doc:"hidden"`
	InstanceInterfaceNames []string `yaml:"instance_interface_names"`
	InstancePort           int      `yaml:"instance_port" doc:"hidden"`
	InstanceAddr           string   `yaml:"instance_addr" doc:"hidden"`
	InstanceZone           string   `yaml:"instance_availability_zone" doc:"hidden"`
	NumTokens              int      `yaml:"num_tokens"`

	FinalSleep time.Duration `yaml:"final_sleep"`

	// Injected internally
	ListenPort int `yaml:"-"`

	// Used for testing
	SkipUnregister bool `yaml:"-"`
}

RingConfig masks the ring lifecycler config which contains many options not really required by the rulers ring. This config is used to strip down the config to the minimum, and avoid confusion to the user.

func (*RingConfig) RegisterFlags added in v0.6.0

func (cfg *RingConfig) RegisterFlags(f *flag.FlagSet)

RegisterFlags adds the flags required to config this to the given FlagSet

func (*RingConfig) ToLifecyclerConfig added in v0.6.0

func (cfg *RingConfig) ToLifecyclerConfig(logger log.Logger) (ring.BasicLifecyclerConfig, error)

ToLifecyclerConfig returns a LifecyclerConfig based on the ruler ring config.

func (*RingConfig) ToRingConfig added in v1.2.0

func (cfg *RingConfig) ToRingConfig() ring.Config

type RuleDiscovery added in v0.7.0

type RuleDiscovery struct {
	RuleGroups []*RuleGroup `json:"groups"`
}

RuleDiscovery has info for all rules

type RuleEvalMetrics added in v1.17.0

type RuleEvalMetrics struct {
	TotalWritesVec    *prometheus.CounterVec
	FailedWritesVec   *prometheus.CounterVec
	TotalQueriesVec   *prometheus.CounterVec
	FailedQueriesVec  *prometheus.CounterVec
	RulerQuerySeconds *prometheus.CounterVec
}

func NewRuleEvalMetrics added in v1.17.0

func NewRuleEvalMetrics(cfg Config, reg prometheus.Registerer) *RuleEvalMetrics

type RuleGroup added in v0.7.0

type RuleGroup struct {
	Name string `json:"name"`
	File string `json:"file"`
	// In order to preserve rule ordering, while exposing type (alerting or recording)
	// specific properties, both alerting and recording rules are exposed in the
	// same array.
	Rules          []rule    `json:"rules"`
	Interval       float64   `json:"interval"`
	LastEvaluation time.Time `json:"lastEvaluation"`
	EvaluationTime float64   `json:"evaluationTime"`
	Limit          int64     `json:"limit"`
}

RuleGroup has info for rules which are part of a group

type RuleStateDesc added in v1.0.0

type RuleStateDesc struct {
	Rule                *rulespb.RuleDesc `protobuf:"bytes,1,opt,name=rule,proto3" json:"rule,omitempty"`
	State               string            `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"`
	Health              string            `protobuf:"bytes,3,opt,name=health,proto3" json:"health,omitempty"`
	LastError           string            `protobuf:"bytes,4,opt,name=lastError,proto3" json:"lastError,omitempty"`
	Alerts              []*AlertStateDesc `protobuf:"bytes,5,rep,name=alerts,proto3" json:"alerts,omitempty"`
	EvaluationTimestamp time.Time         `protobuf:"bytes,6,opt,name=evaluationTimestamp,proto3,stdtime" json:"evaluationTimestamp"`
	EvaluationDuration  time.Duration     `protobuf:"bytes,7,opt,name=evaluationDuration,proto3,stdduration" json:"evaluationDuration"`
}

RuleStateDesc is a proto representation of a Prometheus Rule

func (*RuleStateDesc) Descriptor added in v1.0.0

func (*RuleStateDesc) Descriptor() ([]byte, []int)

func (*RuleStateDesc) Equal added in v1.0.0

func (this *RuleStateDesc) Equal(that interface{}) bool

func (*RuleStateDesc) GetAlerts added in v1.0.0

func (m *RuleStateDesc) GetAlerts() []*AlertStateDesc

func (*RuleStateDesc) GetEvaluationDuration added in v1.0.0

func (m *RuleStateDesc) GetEvaluationDuration() time.Duration

func (*RuleStateDesc) GetEvaluationTimestamp added in v1.0.0

func (m *RuleStateDesc) GetEvaluationTimestamp() time.Time

func (*RuleStateDesc) GetHealth added in v1.0.0

func (m *RuleStateDesc) GetHealth() string

func (*RuleStateDesc) GetLastError added in v1.0.0

func (m *RuleStateDesc) GetLastError() string

func (*RuleStateDesc) GetRule added in v1.0.0

func (m *RuleStateDesc) GetRule() *rulespb.RuleDesc

func (*RuleStateDesc) GetState added in v1.0.0

func (m *RuleStateDesc) GetState() string

func (*RuleStateDesc) GoString added in v1.0.0

func (this *RuleStateDesc) GoString() string

func (*RuleStateDesc) Marshal added in v1.0.0

func (m *RuleStateDesc) Marshal() (dAtA []byte, err error)

func (*RuleStateDesc) MarshalTo added in v1.0.0

func (m *RuleStateDesc) MarshalTo(dAtA []byte) (int, error)

func (*RuleStateDesc) MarshalToSizedBuffer added in v1.0.0

func (m *RuleStateDesc) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*RuleStateDesc) ProtoMessage added in v1.0.0

func (*RuleStateDesc) ProtoMessage()

func (*RuleStateDesc) Reset added in v1.0.0

func (m *RuleStateDesc) Reset()

func (*RuleStateDesc) Size added in v1.0.0

func (m *RuleStateDesc) Size() (n int)

func (*RuleStateDesc) String added in v1.0.0

func (this *RuleStateDesc) String() string

func (*RuleStateDesc) Unmarshal added in v1.0.0

func (m *RuleStateDesc) Unmarshal(dAtA []byte) error

func (*RuleStateDesc) XXX_DiscardUnknown added in v1.0.0

func (m *RuleStateDesc) XXX_DiscardUnknown()

func (*RuleStateDesc) XXX_Marshal added in v1.0.0

func (m *RuleStateDesc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*RuleStateDesc) XXX_Merge added in v1.0.0

func (m *RuleStateDesc) XXX_Merge(src proto.Message)

func (*RuleStateDesc) XXX_Size added in v1.0.0

func (m *RuleStateDesc) XXX_Size() int

func (*RuleStateDesc) XXX_Unmarshal added in v1.0.0

func (m *RuleStateDesc) XXX_Unmarshal(b []byte) error

type Ruler

type Ruler struct {
	services.Service
	// contains filtered or unexported fields
}

Ruler evaluates rules.

+---------------------------------------------------------------+
|                                                               |
|                   Query       +-------------+                 |
|            +------------------>             |                 |
|            |                  |    Store    |                 |
|            | +----------------+             |                 |
|            | |     Rules      +-------------+                 |
|            | |                                                |
|            | |                                                |
|            | |                                                |
|       +----+-v----+   Filter  +------------+                  |
|       |           +----------->            |                  |
|       |   Ruler   |           |    Ring    |                  |
|       |           <-----------+            |                  |
|       +-------+---+   Rules   +------------+                  |
|               |                                               |
|               |                                               |
|               |                                               |
|               |    Load      +-----------------+              |
|               +-------------->                 |              |
|                              |     Manager     |              |
|                              |                 |              |
|                              +-----------------+              |
|                                                               |
+---------------------------------------------------------------+

func NewRuler

func NewRuler(cfg Config, manager MultiTenantManager, reg prometheus.Registerer, logger log.Logger, ruleStore rulestore.RuleStore, limits RulesLimits) (*Ruler, error)

NewRuler creates a new ruler from a distributor and chunk store.

func (*Ruler) AssertMaxRuleGroups added in v1.5.0

func (r *Ruler) AssertMaxRuleGroups(userID string, rg int) error

AssertMaxRuleGroups limit has not been reached compared to the current number of total rule groups in input and returns an error if so.

func (*Ruler) AssertMaxRulesPerRuleGroup added in v1.5.0

func (r *Ruler) AssertMaxRulesPerRuleGroup(userID string, rules int) error

AssertMaxRulesPerRuleGroup limit has not been reached compared to the current number of rules in a rule group in input and returns an error if so.

func (*Ruler) DeleteTenantConfiguration added in v1.8.0

func (r *Ruler) DeleteTenantConfiguration(w http.ResponseWriter, req *http.Request)

func (*Ruler) GetRules added in v0.7.0

func (r *Ruler) GetRules(ctx context.Context, rulesRequest RulesRequest) ([]*GroupStateDesc, error)

GetRules retrieves the running rules from this ruler and all running rulers in the ring if sharding is enabled

func (*Ruler) HasMaxRuleGroupsLimit added in v1.17.0

func (r *Ruler) HasMaxRuleGroupsLimit(userID string) bool

HasMaxRuleGroupsLimit check if RulerMaxRuleGroupsPerTenant limit is set for the userID.

func (*Ruler) ListAllRules added in v1.9.0

func (r *Ruler) ListAllRules(w http.ResponseWriter, req *http.Request)

func (*Ruler) OnRingInstanceHeartbeat added in v1.2.0

func (r *Ruler) OnRingInstanceHeartbeat(_ *ring.BasicLifecycler, _ *ring.Desc, _ *ring.InstanceDesc)

func (*Ruler) OnRingInstanceRegister added in v1.2.0

func (r *Ruler) OnRingInstanceRegister(lc *ring.BasicLifecycler, ringDesc ring.Desc, instanceExists bool, instanceID string, instanceDesc ring.InstanceDesc) (ring.InstanceState, ring.Tokens)

func (*Ruler) OnRingInstanceStopping added in v1.2.0

func (r *Ruler) OnRingInstanceStopping(_ *ring.BasicLifecycler)

func (*Ruler) OnRingInstanceTokens added in v1.2.0

func (r *Ruler) OnRingInstanceTokens(_ *ring.BasicLifecycler, _ ring.Tokens)

func (*Ruler) Rules added in v0.7.0

func (r *Ruler) Rules(ctx context.Context, in *RulesRequest) (*RulesResponse, error)

Rules implements the rules service

func (*Ruler) ServeHTTP

func (r *Ruler) ServeHTTP(w http.ResponseWriter, req *http.Request)

type RulerClient added in v0.7.0

type RulerClient interface {
	Rules(ctx context.Context, in *RulesRequest, opts ...grpc.CallOption) (*RulesResponse, error)
}

RulerClient is the client API for Ruler service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewRulerClient added in v0.7.0

func NewRulerClient(cc *grpc.ClientConn) RulerClient

type RulerServer added in v0.7.0

type RulerServer interface {
	Rules(context.Context, *RulesRequest) (*RulesResponse, error)
}

RulerServer is the server API for Ruler service.

type RulesLimits added in v1.4.0

type RulesLimits interface {
	EvaluationDelay(userID string) time.Duration
	MaxQueryLength(userID string) time.Duration
	RulerTenantShardSize(userID string) int
	RulerMaxRuleGroupsPerTenant(userID string) int
	RulerMaxRulesPerRuleGroup(userID string) int
	DisabledRuleGroups(userID string) validation.DisabledRuleGroups
}

RulesLimits defines limits used by Ruler.

type RulesManager added in v1.5.0

type RulesManager interface {
	// Starts rules manager. Blocks until Stop is called.
	Run()

	// Stops rules manager. (Unblocks Run.)
	Stop()

	// Updates rules manager state.
	Update(interval time.Duration, files []string, externalLabels labels.Labels, externalURL string, ruleGroupPostProcessFunc rules.GroupEvalIterationFunc) error

	// Returns current rules groups.
	RuleGroups() []*rules.Group
}

This interface mimics rules.Manager API. Interface is used to simplify tests.

type RulesRequest added in v0.7.0

type RulesRequest struct {
	RuleNames      []string `protobuf:"bytes,1,rep,name=ruleNames,proto3" json:"ruleNames,omitempty"`
	RuleGroupNames []string `protobuf:"bytes,2,rep,name=ruleGroupNames,proto3" json:"ruleGroupNames,omitempty"`
	Files          []string `protobuf:"bytes,3,rep,name=files,proto3" json:"files,omitempty"`
	Type           string   `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"`
}

func (*RulesRequest) Descriptor added in v0.7.0

func (*RulesRequest) Descriptor() ([]byte, []int)

func (*RulesRequest) Equal added in v0.7.0

func (this *RulesRequest) Equal(that interface{}) bool

func (*RulesRequest) GetFiles added in v1.16.0

func (m *RulesRequest) GetFiles() []string

func (*RulesRequest) GetRuleGroupNames added in v1.16.0

func (m *RulesRequest) GetRuleGroupNames() []string

func (*RulesRequest) GetRuleNames added in v1.16.0

func (m *RulesRequest) GetRuleNames() []string

func (*RulesRequest) GetType added in v1.16.0

func (m *RulesRequest) GetType() string

func (*RulesRequest) GoString added in v0.7.0

func (this *RulesRequest) GoString() string

func (*RulesRequest) Marshal added in v0.7.0

func (m *RulesRequest) Marshal() (dAtA []byte, err error)

func (*RulesRequest) MarshalTo added in v0.7.0

func (m *RulesRequest) MarshalTo(dAtA []byte) (int, error)

func (*RulesRequest) MarshalToSizedBuffer added in v0.7.0

func (m *RulesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*RulesRequest) ProtoMessage added in v0.7.0

func (*RulesRequest) ProtoMessage()

func (*RulesRequest) Reset added in v0.7.0

func (m *RulesRequest) Reset()

func (*RulesRequest) Size added in v0.7.0

func (m *RulesRequest) Size() (n int)

func (*RulesRequest) String added in v0.7.0

func (this *RulesRequest) String() string

func (*RulesRequest) Unmarshal added in v0.7.0

func (m *RulesRequest) Unmarshal(dAtA []byte) error

func (*RulesRequest) XXX_DiscardUnknown added in v0.7.0

func (m *RulesRequest) XXX_DiscardUnknown()

func (*RulesRequest) XXX_Marshal added in v0.7.0

func (m *RulesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*RulesRequest) XXX_Merge added in v0.7.0

func (m *RulesRequest) XXX_Merge(src proto.Message)

func (*RulesRequest) XXX_Size added in v0.7.0

func (m *RulesRequest) XXX_Size() int

func (*RulesRequest) XXX_Unmarshal added in v0.7.0

func (m *RulesRequest) XXX_Unmarshal(b []byte) error

type RulesResponse added in v0.7.0

type RulesResponse struct {
	Groups []*GroupStateDesc `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"`
}

func (*RulesResponse) Descriptor added in v0.7.0

func (*RulesResponse) Descriptor() ([]byte, []int)

func (*RulesResponse) Equal added in v0.7.0

func (this *RulesResponse) Equal(that interface{}) bool

func (*RulesResponse) GetGroups added in v0.7.0

func (m *RulesResponse) GetGroups() []*GroupStateDesc

func (*RulesResponse) GoString added in v0.7.0

func (this *RulesResponse) GoString() string

func (*RulesResponse) Marshal added in v0.7.0

func (m *RulesResponse) Marshal() (dAtA []byte, err error)

func (*RulesResponse) MarshalTo added in v0.7.0

func (m *RulesResponse) MarshalTo(dAtA []byte) (int, error)

func (*RulesResponse) MarshalToSizedBuffer added in v0.7.0

func (m *RulesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*RulesResponse) ProtoMessage added in v0.7.0

func (*RulesResponse) ProtoMessage()

func (*RulesResponse) Reset added in v0.7.0

func (m *RulesResponse) Reset()

func (*RulesResponse) Size added in v0.7.0

func (m *RulesResponse) Size() (n int)

func (*RulesResponse) String added in v0.7.0

func (this *RulesResponse) String() string

func (*RulesResponse) Unmarshal added in v0.7.0

func (m *RulesResponse) Unmarshal(dAtA []byte) error

func (*RulesResponse) XXX_DiscardUnknown added in v0.7.0

func (m *RulesResponse) XXX_DiscardUnknown()

func (*RulesResponse) XXX_Marshal added in v0.7.0

func (m *RulesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*RulesResponse) XXX_Merge added in v0.7.0

func (m *RulesResponse) XXX_Merge(src proto.Message)

func (*RulesResponse) XXX_Size added in v0.7.0

func (m *RulesResponse) XXX_Size() int

func (*RulesResponse) XXX_Unmarshal added in v0.7.0

func (m *RulesResponse) XXX_Unmarshal(b []byte) error

type UnimplementedRulerServer added in v0.7.0

type UnimplementedRulerServer struct {
}

UnimplementedRulerServer can be embedded to have forward compatible implementations.

func (*UnimplementedRulerServer) Rules added in v0.7.0

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL