Skip to content

Commit 1e01172

Browse files
authored
Logging improvements (#4113)
* ref(webhook): return error if unable to parse group key Addresses feedback from another PR #4089 (comment) Signed-off-by: TJ Hoplock <[email protected]> * fix(silence): log errors at ERROR level instead of INFO Signed-off-by: TJ Hoplock <[email protected]> * chore(notify): make logging more consistent, converge on `group_key` This changes the majority of our `Notify()` implementations to set up a new logger with the group key attached under the key name `group_key`, and then to use that logger in all subsequent calls to the logger, including passing it through to further functions that accept loggers via params. A few of the notify implementations are more complicated; they either extract the key later in their `Notify()` implementation or within sub methods, or even conditionally like with sns. I left those mostly as is for now, as they seem to be more snow-flake-y. Signed-off-by: TJ Hoplock <[email protected]> --------- Signed-off-by: TJ Hoplock <[email protected]>
1 parent 29d491e commit 1e01172

File tree

15 files changed

+72
-55
lines changed

15 files changed

+72
-55
lines changed

notify/discord/discord.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,11 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
9595
return false, err
9696
}
9797

98-
n.logger.Debug("extracted group key", "key", key)
98+
logger := n.logger.With("group_key", key)
99+
logger.Debug("extracted group key")
99100

100101
alerts := types.Alerts(as...)
101-
data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger)
102+
data := notify.GetTemplateData(ctx, n.tmpl, as, logger)
102103
tmpl := notify.TmplText(n.tmpl, data, &err)
103104
if err != nil {
104105
return false, err
@@ -109,22 +110,22 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
109110
return false, err
110111
}
111112
if truncated {
112-
n.logger.Warn("Truncated title", "key", key, "max_runes", maxTitleLenRunes)
113+
logger.Warn("Truncated title", "max_runes", maxTitleLenRunes)
113114
}
114115
description, truncated := notify.TruncateInRunes(tmpl(n.conf.Message), maxDescriptionLenRunes)
115116
if err != nil {
116117
return false, err
117118
}
118119
if truncated {
119-
n.logger.Warn("Truncated message", "key", key, "max_runes", maxDescriptionLenRunes)
120+
logger.Warn("Truncated message", "max_runes", maxDescriptionLenRunes)
120121
}
121122

122123
content, truncated := notify.TruncateInRunes(tmpl(n.conf.Content), maxContentLenRunes)
123124
if err != nil {
124125
return false, err
125126
}
126127
if truncated {
127-
n.logger.Warn("Truncated message", "key", key, "max_runes", maxContentLenRunes)
128+
logger.Warn("Truncated message", "max_runes", maxContentLenRunes)
128129
}
129130

130131
color := colorGrey
@@ -160,7 +161,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
160161
if _, err := netUrl.Parse(n.conf.AvatarURL); err == nil {
161162
w.AvatarURL = n.conf.AvatarURL
162163
} else {
163-
n.logger.Warn("Bad avatar url", "key", key)
164+
logger.Warn("Bad avatar url", "key", key)
164165
}
165166
}
166167

notify/jira/jira.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
7272
}
7373

7474
logger := n.logger.With("group_key", key.String())
75+
logger.Debug("extracted group key")
7576

7677
var (
7778
alerts = types.Alerts(as...)

notify/msteams/msteams.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,10 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
8585
return false, err
8686
}
8787

88-
n.logger.Debug("extracted group key", "key", key)
88+
logger := n.logger.With("group_key", key)
89+
logger.Debug("extracted group key")
8990

90-
data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger)
91+
data := notify.GetTemplateData(ctx, n.tmpl, as, logger)
9192
tmpl := notify.TmplText(n.tmpl, data, &err)
9293
if err != nil {
9394
return false, err

notify/msteamsv2/msteamsv2.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,10 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
109109
return false, err
110110
}
111111

112-
n.logger.Debug("extracted group key", "key", key)
112+
logger := n.logger.With("group_key", key)
113+
logger.Debug("extracted group key")
113114

114-
data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger)
115+
data := notify.GetTemplateData(ctx, n.tmpl, as, logger)
115116
tmpl := notify.TmplText(n.tmpl, data, &err)
116117
if err != nil {
117118
return false, err

notify/opsgenie/opsgenie.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,10 @@ func (n *Notifier) createRequests(ctx context.Context, as ...*types.Alert) ([]*h
132132
if err != nil {
133133
return nil, false, err
134134
}
135-
data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger)
135+
logger := n.logger.With("group_key", key)
136+
logger.Debug("extracted group key")
136137

137-
n.logger.Debug("extracted group key", "key", key)
138+
data := notify.GetTemplateData(ctx, n.tmpl, as, logger)
138139

139140
tmpl := notify.TmplText(n.tmpl, data, &err)
140141

@@ -174,7 +175,7 @@ func (n *Notifier) createRequests(ctx context.Context, as ...*types.Alert) ([]*h
174175
default:
175176
message, truncated := notify.TruncateInRunes(tmpl(n.conf.Message), maxMessageLenRunes)
176177
if truncated {
177-
n.logger.Warn("Truncated message", "alert", key, "max_runes", maxMessageLenRunes)
178+
logger.Warn("Truncated message", "alert", key, "max_runes", maxMessageLenRunes)
178179
}
179180

180181
createEndpointURL := n.conf.APIURL.Copy()

notify/pagerduty/pagerduty.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,17 +308,18 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
308308
if err != nil {
309309
return false, err
310310
}
311+
logger := n.logger.With("group_key", key)
311312

312313
var (
313314
alerts = types.Alerts(as...)
314-
data = notify.GetTemplateData(ctx, n.tmpl, as, n.logger)
315+
data = notify.GetTemplateData(ctx, n.tmpl, as, logger)
315316
eventType = pagerDutyEventTrigger
316317
)
317318
if alerts.Status() == model.AlertResolved {
318319
eventType = pagerDutyEventResolve
319320
}
320321

321-
n.logger.Debug("extracted group key", "key", key, "eventType", eventType)
322+
logger.Debug("extracted group key", "eventType", eventType)
322323

323324
details := make(map[string]string, len(n.conf.Details))
324325
for k, v := range n.conf.Details {

notify/pushover/pushover.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
7272
if !ok {
7373
return false, fmt.Errorf("group key missing")
7474
}
75-
data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger)
75+
logger := n.logger.With("group_key", key)
76+
logger.Debug("extracted group key")
7677

77-
// @tjhop: should this use `group` for the keyval like most other notify implementations?
78-
n.logger.Debug("extracted group key", "incident", key)
78+
data := notify.GetTemplateData(ctx, n.tmpl, as, logger)
7979

8080
var (
8181
err error
@@ -113,7 +113,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
113113

114114
title, truncated := notify.TruncateInRunes(tmpl(n.conf.Title), maxTitleLenRunes)
115115
if truncated {
116-
n.logger.Warn("Truncated title", "incident", key, "max_runes", maxTitleLenRunes)
116+
logger.Warn("Truncated title", "incident", key, "max_runes", maxTitleLenRunes)
117117
}
118118
parameters.Add("title", title)
119119

@@ -130,7 +130,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
130130

131131
message, truncated = notify.TruncateInRunes(message, maxMessageLenRunes)
132132
if truncated {
133-
n.logger.Warn("Truncated message", "incident", key, "max_runes", maxMessageLenRunes)
133+
logger.Warn("Truncated message", "incident", key, "max_runes", maxMessageLenRunes)
134134
}
135135
message = strings.TrimSpace(message)
136136
if message == "" {
@@ -141,7 +141,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
141141

142142
supplementaryURL, truncated := notify.TruncateInRunes(tmpl(n.conf.URL), maxURLLenRunes)
143143
if truncated {
144-
n.logger.Warn("Truncated URL", "incident", key, "max_runes", maxURLLenRunes)
144+
logger.Warn("Truncated URL", "incident", key, "max_runes", maxURLLenRunes)
145145
}
146146
parameters.Add("url", supplementaryURL)
147147
parameters.Add("url_title", tmpl(n.conf.URLTitle))
@@ -167,7 +167,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
167167
}
168168
u.RawQuery = parameters.Encode()
169169
// Don't log the URL as it contains secret data (see #1825).
170-
n.logger.Debug("Sending message", "incident", key)
170+
logger.Debug("Sending message", "incident", key)
171171
resp, err := notify.PostText(ctx, n.client, u.String(), nil)
172172
if err != nil {
173173
return true, notify.RedactURL(err)

notify/rocketchat/rocketchat.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,14 @@ func getToken(c *config.RocketchatConfig) (string, error) {
140140
func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) {
141141
var err error
142142

143-
data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger)
143+
key, err := notify.ExtractGroupKey(ctx)
144+
if err != nil {
145+
return false, err
146+
}
147+
logger := n.logger.With("group_key", key)
148+
logger.Debug("extracted group key")
149+
150+
data := notify.GetTemplateData(ctx, n.tmpl, as, logger)
144151
tmplText := notify.TmplText(n.tmpl, data, &err)
145152
if err != nil {
146153
return false, err
@@ -152,11 +159,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
152159

153160
title, truncated := notify.TruncateInRunes(title, maxTitleLenRunes)
154161
if truncated {
155-
key, err := notify.ExtractGroupKey(ctx)
156-
if err != nil {
157-
return false, err
158-
}
159-
n.logger.Warn("Truncated title", "key", key, "max_runes", maxTitleLenRunes)
162+
logger.Warn("Truncated title", "max_runes", maxTitleLenRunes)
160163
}
161164
att := &Attachment{
162165
Title: title,

notify/slack/slack.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,16 @@ type attachment struct {
9393
// Notify implements the Notifier interface.
9494
func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) {
9595
var err error
96+
97+
key, err := notify.ExtractGroupKey(ctx)
98+
if err != nil {
99+
return false, err
100+
}
101+
logger := n.logger.With("group_key", key)
102+
logger.Debug("extracted group key")
103+
96104
var (
97-
data = notify.GetTemplateData(ctx, n.tmpl, as, n.logger)
105+
data = notify.GetTemplateData(ctx, n.tmpl, as, logger)
98106
tmplText = notify.TmplText(n.tmpl, data, &err)
99107
)
100108
var markdownIn []string
@@ -107,11 +115,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
107115

108116
title, truncated := notify.TruncateInRunes(tmplText(n.conf.Title), maxTitleLenRunes)
109117
if truncated {
110-
key, err := notify.ExtractGroupKey(ctx)
111-
if err != nil {
112-
return false, err
113-
}
114-
n.logger.Warn("Truncated title", "key", key, "max_runes", maxTitleLenRunes)
118+
logger.Warn("Truncated title", "max_runes", maxTitleLenRunes)
115119
}
116120
att := &attachment{
117121
Title: title,

notify/telegram/telegram.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,27 +64,30 @@ func New(conf *config.TelegramConfig, t *template.Template, l *slog.Logger, http
6464
}
6565

6666
func (n *Notifier) Notify(ctx context.Context, alert ...*types.Alert) (bool, error) {
67+
key, ok := notify.GroupKey(ctx)
68+
if !ok {
69+
return false, fmt.Errorf("group key missing")
70+
}
71+
72+
logger := n.logger.With("group_key", key)
73+
logger.Debug("extracted group key")
74+
6775
var (
6876
err error
69-
data = notify.GetTemplateData(ctx, n.tmpl, alert, n.logger)
77+
data = notify.GetTemplateData(ctx, n.tmpl, alert, logger)
7078
tmpl = notify.TmplText(n.tmpl, data, &err)
7179
)
7280

7381
if n.conf.ParseMode == "HTML" {
7482
tmpl = notify.TmplHTML(n.tmpl, data, &err)
7583
}
7684

77-
key, ok := notify.GroupKey(ctx)
78-
if !ok {
79-
return false, fmt.Errorf("group key missing")
80-
}
81-
8285
messageText, truncated := notify.TruncateInRunes(tmpl(n.conf.Message), maxMessageLenRunes)
8386
if err != nil {
8487
return false, err
8588
}
8689
if truncated {
87-
n.logger.Warn("Truncated message", "alert", key, "max_runes", maxMessageLenRunes)
90+
logger.Warn("Truncated message", "max_runes", maxMessageLenRunes)
8891
}
8992

9093
n.client.Token, err = n.getBotToken()
@@ -101,7 +104,7 @@ func (n *Notifier) Notify(ctx context.Context, alert ...*types.Alert) (bool, err
101104
if err != nil {
102105
return true, err
103106
}
104-
n.logger.Debug("Telegram message successfully published", "message_id", message.ID, "chat_id", message.Chat.ID)
107+
logger.Debug("Telegram message successfully published", "message_id", message.ID, "chat_id", message.Chat.ID)
105108

106109
return false, nil
107110
}

0 commit comments

Comments
 (0)