notify

package
v0.33.0 Latest Latest
Warning

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

Go to latest
Published: Jun 11, 2026 License: Apache-2.0 Imports: 38 Imported by: 279

Documentation

Overview

Copyright The Prometheus Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright The Prometheus Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright The Prometheus Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright The Prometheus Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright The Prometheus Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright The Prometheus Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Index

Constants

View Source
const (
	SuppressedReasonSilence            = "silence"
	SuppressedReasonInhibition         = "inhibition"
	SuppressedReasonMuteTimeInterval   = "mute_time_interval"
	SuppressedReasonActiveTimeInterval = "active_time_interval"
)
View Source
const MinTimeout = 10 * time.Second

MinTimeout is the minimum timeout that is set for the context of a call to a notification pipeline.

Variables

View Source
var UserAgentHeader = version.ComponentUserAgent("Alertmanager")

UserAgentHeader is the default User-Agent for notification requests.

Functions

func ActiveTimeIntervalNames added in v0.24.0

func ActiveTimeIntervalNames(ctx context.Context) ([]string, bool)

ActiveTimeIntervalNames extracts a slice of active time names from the context. If none exists, the second argument is false.

func AggrGroupID added in v0.33.0

func AggrGroupID(ctx context.Context) (string, bool)

AggrGroupID extracts an aggregation group UUID from the context.

func Drain added in v0.18.0

func Drain(r *http.Response)

Drain consumes and closes the response's body to make sure that the HTTP client can reuse existing connections.

func FiringAlerts added in v0.6.0

func FiringAlerts(ctx context.Context) ([]uint64, bool)

FiringAlerts extracts a slice of firing alerts from the context. Iff none exists, the second argument is false.

func FlushID added in v0.33.0

func FlushID(ctx context.Context) (uint64, bool)

FlushID extracts a flush identifier from the context.

func Get added in v0.24.0

func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error)

Get sends a GET request to the given URL.

func GetTemplateData added in v0.18.0

func GetTemplateData(ctx context.Context, tmpl *template.Template, alerts []*types.Alert, l *slog.Logger) *template.Data

GetTemplateData creates the template data from the context and the alerts.

func GroupKey

func GroupKey(ctx context.Context) (string, bool)

GroupKey extracts a group key from the context. Iff none exists, the second argument is false.

func GroupLabels

func GroupLabels(ctx context.Context) (model.LabelSet, bool)

GroupLabels extracts grouping label set from the context. Iff none exists, the second argument is false.

func GroupMatchers added in v0.33.0

func GroupMatchers(ctx context.Context) (labels.Matchers, bool)

GroupMatchers extracts the route's matchers from the context.

func MuteTimeIntervalNames added in v0.22.0

func MuteTimeIntervalNames(ctx context.Context) ([]string, bool)

MuteTimeIntervalNames extracts a slice of mute time names from the context. If and only if none exists, the second argument is false.

func MutedAlerts added in v0.33.0

func MutedAlerts(ctx context.Context) (map[uint64]struct{}, bool)

MutedAlerts extracts a set of muted alert hashes from the context.

func NewAlertGroupedEvent added in v0.33.0

func NewAlertGroupedEvent(groupInfo *eventrecorderpb.AlertGroupInfo, alert *types.Alert) *eventrecorderpb.EventData

func NewAlertResolvedEvent added in v0.33.0

func NewAlertResolvedEvent(groupInfo *eventrecorderpb.AlertGroupInfo, alert *types.Alert) *eventrecorderpb.EventData

func NewClientWithTracing added in v0.30.1

func NewClientWithTracing(cfg commoncfg.HTTPClientConfig, name string, httpOpts ...commoncfg.HTTPClientOption) (*http.Client, error)

NewClientWithTracing creates a new HTTP client with tracing included Clients are reused across requests, so tracing is configured once at creation rather than on each request.

func NewNotificationEvent added in v0.33.0

func NewNotificationEvent(ctx context.Context, alerts []*types.Alert, integration Integration) *eventrecorderpb.EventData

NewNotificationEvent constructs a NotificationEvent from the pipeline context after a successful notification delivery.

func NflogStore added in v0.31.0

func NflogStore(ctx context.Context) (*nflog.Store, bool)

NflogStore extracts the nflog.Store from the context. The returned NflogStore is a pointer to a mutable store which remains in the context.

func Now

func Now(ctx context.Context) (time.Time, bool)

Now extracts a now timestamp from the context. Iff none exists, the second argument is false.

func PostJSON added in v0.18.0

func PostJSON(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error)

PostJSON sends a POST request with JSON payload to the given URL.

func PostText added in v0.18.0

func PostText(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error)

PostText sends a POST request with text payload to the given URL.

func ReceiverName added in v0.5.0

func ReceiverName(ctx context.Context) (string, bool)

ReceiverName extracts a receiver name from the context. Iff none exists, the second argument is false.

func RedactURL added in v0.18.0

func RedactURL(err error) error

RedactURL removes the URL part from an error of *url.Error type.

func RepeatInterval

func RepeatInterval(ctx context.Context) (time.Duration, bool)

RepeatInterval extracts a repeat interval from the context. Iff none exists, the second argument is false.

func ResolvedAlerts added in v0.6.0

func ResolvedAlerts(ctx context.Context) ([]uint64, bool)

ResolvedAlerts extracts a slice of resolved alerts from the context. Iff none exists, the second argument is false.

func RouteID added in v0.28.0

func RouteID(ctx context.Context) (string, bool)

RouteID extracts a RouteID from the context. Iff none exists, the // second argument is false.

func TmplHTML added in v0.18.0

func TmplHTML(tmpl *template.Template, data *template.Data, err *error) func(string) string

TmplHTML is using monadic error handling in order to make string templating less verbose. Use with care as the final error checking is easily missed.

func TmplText added in v0.18.0

func TmplText(tmpl *template.Template, data *template.Data, err *error) func(string) string

TmplText is using monadic error handling in order to make string templating less verbose. Use with care as the final error checking is easily missed.

func TruncateInBytes added in v0.25.0

func TruncateInBytes(s string, n int) (string, bool)

TruncateInBytes truncates a string to fit the given size in Bytes.

func TruncateInRunes added in v0.25.0

func TruncateInRunes(s string, n int) (string, bool)

TruncateInRunes truncates a string to fit the given size in Runes.

func WithActiveTimeIntervals added in v0.24.0

func WithActiveTimeIntervals(ctx context.Context, at []string) context.Context

WithActiveTimeIntervals populates a context with a slice of active time names.

func WithAggrGroupID added in v0.33.0

func WithAggrGroupID(ctx context.Context, id string) context.Context

WithAggrGroupID populates a context with an aggregation group UUID.

func WithFiringAlerts added in v0.6.0

func WithFiringAlerts(ctx context.Context, alerts []uint64) context.Context

WithFiringAlerts populates a context with a slice of firing alerts.

func WithFlushID added in v0.33.0

func WithFlushID(ctx context.Context, id uint64) context.Context

WithFlushID populates a context with a flush identifier.

func WithGroupKey

func WithGroupKey(ctx context.Context, s string) context.Context

WithGroupKey populates a context with a group key.

func WithGroupLabels

func WithGroupLabels(ctx context.Context, lset model.LabelSet) context.Context

WithGroupLabels populates a context with grouping labels.

func WithGroupMatchers added in v0.33.0

func WithGroupMatchers(ctx context.Context, matchers labels.Matchers) context.Context

WithGroupMatchers populates a context with the route's matchers.

func WithMuteTimeIntervals added in v0.22.0

func WithMuteTimeIntervals(ctx context.Context, mt []string) context.Context

WithMuteTimeIntervals populates a context with a slice of mute time names.

func WithMutedAlerts added in v0.33.0

func WithMutedAlerts(ctx context.Context, alerts map[uint64]struct{}) context.Context

WithMutedAlerts populates a context with a set of muted alert hashes.

func WithNflogStore added in v0.31.0

func WithNflogStore(ctx context.Context, store *nflog.Store) context.Context

WithNflogStore populates a context with a reference to an nflog.Store.

func WithNotificationReason added in v0.32.0

func WithNotificationReason(ctx context.Context, reason NotifyReason) context.Context

WithNotificationReason populates a context with a NotifyReason.

func WithNow

func WithNow(ctx context.Context, t time.Time) context.Context

WithNow populates a context with a now timestamp.

func WithReceiverName added in v0.5.0

func WithReceiverName(ctx context.Context, rcv string) context.Context

WithReceiverName populates a context with a receiver name.

func WithRepeatInterval

func WithRepeatInterval(ctx context.Context, t time.Duration) context.Context

WithRepeatInterval populates a context with a repeat interval.

func WithResolvedAlerts added in v0.6.0

func WithResolvedAlerts(ctx context.Context, alerts []uint64) context.Context

WithResolvedAlerts populates a context with a slice of resolved alerts.

func WithRouteID added in v0.28.0

func WithRouteID(ctx context.Context, routeID string) context.Context

WithRouteID populates a context with the route ID.

Types

type ClusterGossipSettleStage added in v0.33.0

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

ClusterGossipSettleStage waits until the Gossip has settled to forward alerts.

func NewClusterGossipSettleStage added in v0.33.0

func NewClusterGossipSettleStage(p Peer) *ClusterGossipSettleStage

NewClusterGossipSettleStage returns a new ClusterGossipSettleStage.

func (*ClusterGossipSettleStage) Exec added in v0.33.0

type ClusterWaitStage added in v0.33.0

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

ClusterWaitStage waits for a certain amount of time before continuing or until the context is done.

func NewClusterWaitStage added in v0.33.0

func NewClusterWaitStage(wait func() time.Duration) *ClusterWaitStage

NewClusterWaitStage returns a new ClusterWaitStage.

func (*ClusterWaitStage) Exec added in v0.33.0

func (ws *ClusterWaitStage) Exec(ctx context.Context, _ *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements the Stage interface.

type DedupStage added in v0.5.0

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

DedupStage filters alerts. Filtering happens based on a notification log.

func NewDedupStage added in v0.5.0

func NewDedupStage(rs ResolvedSender, l NotificationLog, recv *nflogpb.Receiver) *DedupStage

NewDedupStage wraps a DedupStage that runs against the given notification log.

func (*DedupStage) Exec added in v0.5.0

func (n *DedupStage) Exec(ctx context.Context, _ *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements the Stage interface.

type ErrorWithReason added in v0.26.0

type ErrorWithReason struct {
	Err error

	Reason Reason
}

func NewErrorWithReason added in v0.26.0

func NewErrorWithReason(reason Reason, err error) *ErrorWithReason

func (*ErrorWithReason) Error added in v0.26.0

func (e *ErrorWithReason) Error() string

type FanoutStage added in v0.5.0

type FanoutStage []Stage

FanoutStage executes its stages concurrently.

func (FanoutStage) Exec added in v0.5.0

func (fs FanoutStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec attempts to execute all stages concurrently and discards the results. It returns its input alerts and an error if one or more stages fail.

type Integration added in v0.5.0

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

Integration wraps a notifier and its configuration to be uniquely identified by name and index from its origin in the configuration.

func NewIntegration added in v0.18.0

func NewIntegration(notifier Notifier, rs ResolvedSender, name string, idx int, receiverName string) Integration

NewIntegration returns a new integration.

func (*Integration) Index added in v0.18.0

func (i *Integration) Index() int

Index returns the index of the integration.

func (*Integration) Name added in v0.18.0

func (i *Integration) Name() string

Name returns the name of the integration.

func (*Integration) Notify added in v0.5.0

func (i *Integration) Notify(ctx context.Context, alerts ...*alert.Alert) (recoverable bool, err error)

Notify implements the Notifier interface.

func (*Integration) SendResolved added in v0.18.0

func (i *Integration) SendResolved() bool

SendResolved implements the ResolvedSender interface.

func (*Integration) String added in v0.21.0

func (i *Integration) String() string

String implements the Stringer interface.

type Key added in v0.18.0

type Key string

Key is a string that can be hashed.

func ExtractGroupKey added in v0.18.0

func ExtractGroupKey(ctx context.Context) (Key, error)

ExtractGroupKey gets the group key from the context.

func (Key) Hash added in v0.18.0

func (k Key) Hash() string

Hash returns the sha256 for a group key as integrations may have maximum length requirements on deduplication keys.

func (Key) String added in v0.18.0

func (k Key) String() string

type Metrics added in v0.22.0

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

func NewMetrics added in v0.22.0

func (*Metrics) InitializeFor added in v0.27.0

func (m *Metrics) InitializeFor(receiver map[string][]Integration)

type MultiStage added in v0.5.0

type MultiStage []Stage

A MultiStage executes a series of stages sequentially.

func (MultiStage) Exec added in v0.5.0

func (ms MultiStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements the Stage interface.

type MuteFunc added in v0.32.0

type MuteFunc func(ctx context.Context, lset model.LabelSet) bool

A MuteFunc is a function that implements the Muter interface.

func (MuteFunc) Mutes added in v0.32.0

func (f MuteFunc) Mutes(ctx context.Context, lset model.LabelSet) bool

Mutes implements the Muter interface.

type MuteStage added in v0.17.0

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

MuteStage filters alerts through a Muter.

func NewMuteStage added in v0.17.0

func NewMuteStage(m Muter, metrics *Metrics) *MuteStage

NewMuteStage return a new MuteStage.

func (*MuteStage) Exec added in v0.17.0

func (n *MuteStage) Exec(ctx context.Context, logger *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements the Stage interface.

type Muter added in v0.32.0

type Muter interface {
	Mutes(ctx context.Context, lset model.LabelSet) bool
}

A Muter determines whether a given label set is muted. Implementers that maintain an underlying AlertMarker are expected to update it during a call of Mutes.

type NotificationLog added in v0.15.0

type NotificationLog interface {
	Log(r *nflogpb.Receiver, gkey string, firingAlerts, resolvedAlerts []uint64, store *nflog.Store, expiry time.Duration) error
	Query(params ...nflog.QueryParam) ([]*nflogpb.Entry, error)
}

type Notifier

type Notifier interface {
	Notify(context.Context, ...*alert.Alert) (bool, error)
}

Notifier notifies about alerts under constraints of the given context. It returns an error if unsuccessful and a flag whether the error is recoverable. This information is useful for a retry logic.

type NotifyReason added in v0.32.0

type NotifyReason int
const (
	ReasonDoNotNotify NotifyReason = iota
	ReasonFirstNotification
	ReasonNewAlertsInGroup
	ReasonNewResolvedAlerts
	ReasonAllAlertsResolved
	ReasonRepeatIntervalElapsed
	ReasonUnknown
)

func NotificationReason added in v0.32.0

func NotificationReason(ctx context.Context) (NotifyReason, bool)

NotificationReason extracts a NotifyReason from the context.

func (NotifyReason) String added in v0.32.0

func (r NotifyReason) String() string

type Peer added in v0.22.0

type Peer interface {
	// WaitReady waits until the node silences and notifications have settled before attempting to send a notification.
	WaitReady(context.Context) error
}

Peer represents the cluster node from where we are the sending the notification.

type PipelineBuilder added in v0.19.0

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

func NewPipelineBuilder added in v0.19.0

func (*PipelineBuilder) New added in v0.19.0

func (pb *PipelineBuilder) New(
	receivers map[string][]Integration,
	wait func() time.Duration,
	inhibitor *inhibit.Inhibitor,
	silencer *silence.Silencer,
	intervener *timeinterval.Intervener,
	marker marker.GroupMarker,
	notificationLog NotificationLog,
	peer Peer,
) RoutingStage

New returns a map of receivers to Stages.

type Reason added in v0.26.0

type Reason int

Reason is the failure reason.

const (
	DefaultReason Reason = iota
	ClientErrorReason
	ServerErrorReason
	ContextCanceledReason
	ContextDeadlineExceededReason
)

func GetFailureReasonFromStatusCode added in v0.26.0

func GetFailureReasonFromStatusCode(statusCode int) Reason

GetFailureReasonFromStatusCode returns the reason for the failure based on the status code provided.

func (Reason) String added in v0.26.0

func (s Reason) String() string

type ResolvedSender added in v0.18.0

type ResolvedSender interface {
	SendResolved() bool
}

ResolvedSender returns true if resolved notifications should be sent.

type Retrier added in v0.19.0

type Retrier struct {
	// Function to return additional information in the error message.
	CustomDetailsFunc func(code int, body io.Reader) string
	// Additional HTTP status codes that should be retried.
	RetryCodes []int
}

Retrier knows when to retry an HTTP request to a receiver. 2xx status codes are successful, anything else is a failure and only 5xx status codes should be retried.

func (*Retrier) Check added in v0.19.0

func (r *Retrier) Check(statusCode int, body io.Reader) (bool, error)

Check returns a boolean indicating whether the request should be retried and an optional error if the request has failed. If body is not nil, it will be included in the error message.

type RetryStage added in v0.5.0

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

RetryStage notifies via passed integration with exponential backoff until it succeeds. It aborts if the context is canceled or timed out.

func NewRetryStage added in v0.5.0

func NewRetryStage(i Integration, groupName string, metrics *Metrics, recorder eventrecorder.Recorder) *RetryStage

NewRetryStage returns a new instance of a RetryStage.

func (RetryStage) Exec added in v0.5.0

func (r RetryStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

type RoutingStage added in v0.5.0

type RoutingStage map[string]Stage

RoutingStage executes the inner stages based on the receiver specified in the context.

func (RoutingStage) Exec added in v0.5.0

func (rs RoutingStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements the Stage interface.

type SetNotifiesStage added in v0.5.0

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

SetNotifiesStage sets the notification information about passed alerts. The passed alerts should have already been sent to the receivers.

func NewSetNotifiesStage added in v0.5.0

func NewSetNotifiesStage(l NotificationLog, recv *nflogpb.Receiver) *SetNotifiesStage

NewSetNotifiesStage returns a new instance of a SetNotifiesStage.

func (SetNotifiesStage) Exec added in v0.5.0

func (n SetNotifiesStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements the Stage interface.

type Stage added in v0.5.0

type Stage interface {
	Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)
}

A Stage processes alerts under the constraints of the given context.

type StageFunc added in v0.5.0

type StageFunc func(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

StageFunc wraps a function to represent a Stage.

func (StageFunc) Exec added in v0.5.0

func (f StageFunc) Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements Stage interface.

type TimeActiveStage added in v0.24.0

type TimeActiveStage timeStage

func NewTimeActiveStage added in v0.24.0

func NewTimeActiveStage(muter TimeMuter, marker marker.GroupMarker, metrics *Metrics) *TimeActiveStage

func (TimeActiveStage) Exec added in v0.24.0

func (tas TimeActiveStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements the stage interface for TimeActiveStage. TimeActiveStage is responsible for muting alerts whose route is not in an active time.

type TimeMuteStage added in v0.22.0

type TimeMuteStage timeStage

func NewTimeMuteStage added in v0.22.0

func NewTimeMuteStage(muter TimeMuter, marker marker.GroupMarker, metrics *Metrics) *TimeMuteStage

func (TimeMuteStage) Exec added in v0.22.0

func (tms TimeMuteStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*alert.Alert) (context.Context, []*alert.Alert, error)

Exec implements the stage interface for TimeMuteStage. TimeMuteStage is responsible for muting alerts whose route is not in an active time.

type TimeMuter added in v0.32.0

type TimeMuter interface {
	Mutes(timeIntervalNames []string, now time.Time) (bool, []string, error)
}

A TimeMuter determines if the time is muted by one or more active or mute time intervals. If the time is muted, it returns true and the names of the time intervals that muted it. Otherwise, it returns false and a nil slice.

Jump to

Keyboard shortcuts

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