Statuses and commands¶
An Alert Group is always in one of four statuses, and only a few things move it from one to another. Some are Commands that a person gives, from the web UI, the API, a button in a messenger, or a Text command in a Thread. The others are transitions that Muster makes on its own, always with a reason you can read.
The four statuses¶
| Status | Meaning |
|---|---|
| Firing | The Alert Group has a live problem and nobody has taken it. |
| Acknowledged | A person has taken it and is handling it. That person is its Owner. |
| Snoozed | It is set aside until a chosen time, or with no end. Muster stays quiet about it meanwhile. |
| Resolved | It is closed, by a person or by Muster because its Alerts are gone. |
New Alerts that join an open Alert Group change its status only through a rise to Urgent, and edits of a Route never change a status. Only the transitions below do.
stateDiagram-v2
state "Resolved by the system" as ResolvedBySystem
state "Resolved by a user" as ResolvedByUser
[*] --> Firing : created
Firing --> Acknowledged : Acknowledge
Snoozed --> Acknowledged : Acknowledge
Acknowledged --> Acknowledged : Takeover
Acknowledged --> Firing : Unacknowledge
Acknowledged --> Firing : auto-unacknowledge (system)
Acknowledged --> Firing : rise to Urgent (system)
Firing --> Snoozed : Snooze
Acknowledged --> Snoozed : Snooze
Snoozed --> Snoozed : Snooze with a new end
Snoozed --> Firing : Unsnooze
Snoozed --> Firing : Snooze ends (system)
Snoozed --> Firing : rise to Urgent (system)
Firing --> ResolvedByUser : Resolve
Acknowledged --> ResolvedByUser : Resolve
Snoozed --> ResolvedByUser : Resolve
Firing --> ResolvedBySystem : all Alerts resolved (system)
Acknowledged --> ResolvedBySystem : all Alerts resolved (system)
Snoozed --> ResolvedBySystem : all Alerts resolved (system)
ResolvedBySystem --> Firing : Reopen (system)
ResolvedBySystem --> Acknowledged : Reopen (system)
ResolvedBySystem --> Snoozed : Reopen (system)
ResolvedByUser --> Firing : Unresolve
ResolvedBySystem --> [*] : Reopen window ends
ResolvedByUser --> [*] : Grace period ends
Resolved appears twice because the two ways back differ. After the system resolved an Alert Group, it reopens by itself if the problem returns within the Reopen window. After a person resolved it, nothing reopens it; the person can Unresolve it, or Muster starts a new Alert Group if the Alerts still fire after the Grace period. See Reopening.
The ack timeout runs only while an Alert Group is Firing, and an Alert Group is Unclaimed after its last notice. See Ack timeouts, Reminders and auto-unacknowledge.
Transitions Muster makes on its own¶
Each carries its reason, which you see on the Alert Group page, in its Timeline and, in a messenger, in the Root message or a Thread reply.
- Open → Resolved
-
reason you see: the reason of the last Alert
The last Alert resolved: Alertmanager sent
resolved, or the Alert went Gone or Stale, or its Integration was deleted. This also ends a Snooze. - Resolved by the system → previous status
-
reason you see: the Reopen, with the Reopen count
An Alert with the same Route and Group key values fires within the Reopen window.
- Snoozed → Firing
-
reason you see: the Snooze ended
The Snooze ends while Alerts still fire. It has no Owner, and the message lists what accumulated.
- Snoozed or Acknowledged → Firing
-
reason you see: the rise to Urgent
A rise in Severity level makes the Alert Group Urgent. It ends a Snooze, unless the Snooze was set while the Alert Group was already Urgent, and removes an acknowledgement when the Route has
route.urgent_rise_removes_ackon (the default). - Acknowledged → Firing
-
reason you see: "No answer to the last two Reminders"
The Route's auto-unacknowledge removes the acknowledgement of an Owner who stopped answering.
- Acknowledged → Firing
-
reason you see: "The owner was disabled" or "The owner was deleted"
The Owner was disabled or deleted.
Commands¶
| Command | Allowed from | Effect |
|---|---|---|
| Acknowledge | Firing, Snoozed | The caller becomes the Owner. It ends a Snooze. By the current Owner it changes nothing. By another user it is a Takeover. |
| Unacknowledge | Acknowledged | The Alert Group is Firing again, without an Owner, and the ack timeout starts over. Any user who may acknowledge can do it, not only the Owner. |
| Resolve | Firing, Acknowledged, Snoozed | The Alert Group is Resolved by the person. A Note can come with it. |
| Unresolve | Resolved by a person | The Alert Group is Firing again without an Owner. Web UI and API only. |
| Snooze | Firing, Acknowledged, Snoozed | The Alert Group is Snoozed until a time in the future, until a Snooze preset, or with no end. A Snooze with a new end changes the end. |
| Unsnooze | Snoozed | The Alert Group is Firing again without an Owner, and the ack timeout starts over. |
| Add Note | any | A Note appears in the Timeline with its author. Web UI and API only. |
| Still on it | Acknowledged, while a Reminder waits | The Owner answers the Reminder. See below. |
Details:
- Takeover. Acknowledging an Alert Group that somebody else owns moves it to you, without asking. The previous Owner is Mentioned in a Loud Thread reply, and your Reminders start from zero. The web UI says "Take over from {Owner}" on the button.
- Snooze. The web UI and the API accept any future time, a Snooze preset, or no end. The API
makes you say which: a request names exactly one of
until,no_endandpreset. A Snooze with no end asks you to confirm "This Alert Group stays snoozed until someone unsnoozes it". Messengers offer the Route's Snooze durations as separate buttons or a menu (route.snooze_durations: 1 hour, 4 hours and 24 hours on an On-call Route, 1 day, 3 days and 7 days on an Informational Route), and after them the two Snooze presets; see In messengers. - Unresolve is refused when the system resolved the Alert Group ("it reopens by itself when an alert returns"), when its Route was deleted, when a newer open Alert Group with the same key exists, and when all its Alerts have already resolved.
- Notes are up to 4,000 characters (
alert_group.note_max_length). - Bulk commands. In the list, select up to 100 Alert Groups (
alert_group.bulk_max) and run Acknowledge, Resolve, Snooze or Unsnooze on all of them. Each goes through the rules on its own and the result lists the outcome per Alert Group. One refusal never stops the others. A bulk Acknowledge skips an Alert Group that another user owns ("skipped: owned by {Owner}"), so it never takes over by accident. - Refusals carry a stable code and a message, such as "already resolved", "not acknowledged" or "not permitted". The
API answers
409for a precondition and403for a permission. - Commands on one Alert Group are serialized. Two people acknowledging at the same moment leave the later one as Owner and one Takeover in the Timeline.
Every command is a Quiet event except the Takeover. See Loud and Quiet.
Snooze presets¶
A Snooze preset ends a Snooze at the start of the working day instead of after a duration. Muster turns it into an end when the command runs:
- Until tomorrow 09:00
- API value:
tomorrow· ends at: the next start of the working day - Until Monday 09:00
- API value:
week_start· ends at: the next start of the working day on the first day of the week
"Next" is strictly after now. With the working day starting at 09:00:
- At 02:00, "Until tomorrow 09:00" ends at 09:00 the same day. The night belongs to the day before it, so "tomorrow" is the morning about to come, seven hours away.
- At 08:59 it ends one minute later: the preset means "until the working day starts".
- At 09:00 sharp, and at any later time of the day, it ends at 09:00 the next day.
- There is no working-week calendar, so on Friday evening "Until tomorrow 09:00" ends on Saturday at 09:00. For a
weekend, use
week_start, which ends on Monday at 09:00. - The start is the time on the clock on the day of the end. A start that the clocks skip moves forward by the change: 02:30 on the night the clocks jump from 02:00 to 03:00 is 03:30. A start that the clocks show twice, when they go back, is the first of the two.
The end is stored as a time. A later change of the settings or of a time zone never moves a Snooze already set, and the Snooze ends like any other: if Alerts still fire, the Alert Group is Firing again without an Owner, with a Loud message.
Time zone. The preset counts in the time zone that the request names in time_zone. Without one, it counts in the
profile time zone of the user who snoozes, also through a Personal access token, and otherwise in the Organization's
time zone (organization.time_zone). A Service account has no profile, so it always gets the Organization's. A press on
a button in a messenger and a Text command carry no time zone, so they count in the profile time zone of the linked user
who pressed or wrote, and otherwise in the Organization's.
Settings. Two Organization settings define the presets, as the fields workday_start and week_start of the
organization in the API:
organization.workday_start-
default:
09:00The start of the working day,
HH:MMon the 24-hour clock. organization.week_start-
default:
mondayThe first day of the week,
mondaytosunday.
API. A Snooze takes preset, tomorrow or week_start, as a third choice beside until and no_end, with an
optional time_zone:
{"preset": "tomorrow", "time_zone": "Europe/Berlin"}
A time_zone without preset is refused with 422 unsupported, and a time zone Muster does not know with 422
invalid_format. A bulk Snooze with a preset computes the end once, so every Alert Group gets the same end.
GET /api/v1/snooze-presets, with an optional time_zone, answers the end that each preset would set now and the time
zone it used; it needs the Permission to snooze and changes nothing. The Audit log entry of a preset Snooze names the
preset and the time zone beside the end. See the API reference.
In the web UI¶
The Snooze dialog of an Alert Group offers both presets after the Route's Snooze durations and before "Until" and "No end", also on a Route without durations; the bulk Snooze of the list, which has no durations, offers them first. Under each preset the dialog shows the end it would set now, such as "Ends Oct 20, 2026, 09:00": Muster computes it when the dialog opens, on its own clock and in your time zone (the one of your profile, else your browser's), and the dialog sends that time zone with the preset. Admins set the start of the working day and the first day of the week on Organization → General. In the profile, a hint under the time zone says that presets pressed in messengers end in that time zone, and in the Organization's while the profile follows the browser.
In messengers¶
On a Route with Snooze durations, the Root message of a firing or an acknowledged Alert Group offers both presets as
two more Snooze buttons after the durations: "Until tomorrow 09:00" and "Until Monday 09:00", or «До завтра 09:00» and
«До понедельника 09:00» on a Route in Russian. The time is organization.workday_start and the day
organization.week_start, so with the week starting on Sunday the second button reads "Until Sunday 09:00". A snoozed
Alert Group offers no Snooze button, and a Route without Snooze durations offers no preset either, because an empty
route.snooze_durations means no Snooze from messengers. Telegram shows the presets on a row of their own under the
durations, and a bridge with a limit on buttons drops them first; see
Bridge.
The labels are part of the message. After a change of organization.workday_start or organization.week_start, each
Root message shows the new labels at its next update, and a press on a button shown before the change already ends at
the new start of the working day: the preset is computed when the command runs. On a bridge without buttons, the presets
are Text commands.
Who may¶
A Responder or an Admin may acknowledge, resolve, snooze and add Notes. A Viewer may read and may not act: the command is refused. A Service account may run the commands its Role allows, except Acknowledge and Still on it, because an Owner is always a User. A Personal access token acts as its User, with at most that User's Permissions. Every command is recorded in the Audit log with its actor and the Transport.
Where a command comes from¶
The Transport is the way a command reaches Muster. It is recorded with the command, and Muster applies the same rules to all of them.
- Web UI
- how: buttons on the Alert Group page and in the list, with dialogs for Snooze and Resolve · notes: everything above, including bulk commands, Notes and Unresolve
- API
- how:
POSTto/api/v1/alert-groups/{id}/acknowledgeand its siblings, with a session or a token · notes: the same; see the API reference - Mattermost
- how: a button on the message · notes: Acknowledge, Unacknowledge, Resolve, Snooze, Unsnooze, Still on it
- Telegram
- how: an inline button on the message · notes: the same
- Bridge
- how: a button on the message, if the bridge declares
buttons; or a Text command in the Thread, if it declaresthread_messages· notes: the same system- how: Muster itself · notes: the automatic transitions above, shown in the Timeline
Messengers never offer Unresolve or Notes, and never a Snooze with no end. A person who presses a button in a messenger must have linked their messenger account to their Muster user; see Link your messenger accounts. A press from an unlinked account changes nothing, and the person is told privately how to link it.
What each button does¶
The buttons of a Root message depend on the status of its Alert Group:
| Status | Buttons |
|---|---|
| Firing | Ack, Resolve, Snooze |
| Acknowledged | Unack, Resolve, Snooze |
| Snoozed | Ack, Unsnooze, Resolve |
| Resolved | none; a link "Open in Muster" |
- Ack takes the Alert Group: you become its Owner, the Reminders start, and the message shows who has it. If somebody else has it, Ack takes it over from them.
- Unack gives it back. The Alert Group becomes Firing again with no Owner, and the ack timeout starts over.
- Resolve closes the Alert Group by hand. If Alerts still fire, the message shows "⚠ N alerts still firing in Alertmanager", and after the Grace period the Alerts that still fire start a new Alert Group.
- Snooze sets it aside. It offers the Route's Snooze durations, such as 1 hour, 4 hours and 24 hours, one choice for each, then the two Snooze presets "Until tomorrow 09:00" and "Until Monday 09:00", which end at the next start of the working day, or at its start on the first day of the week, in your profile time zone, or else the Organization's. When the time is up and Alerts still fire, the Alert Group comes back Firing and a Loud message says so.
- Unsnooze ends the Snooze early. The Alert Group becomes Firing again.
- On a Reminder, Still on it tells Muster you are still handling the Alert Group, and Unack gives it up.
- A Storm summary and an ack timeout notice carry only links to Muster. A test message carries the buttons of its status, but pressing them changes nothing: you get "This is a test message; nothing was changed".
A press edits the Root message to show the result. A press that Muster refuses, such as a Resolve by a Viewer, is answered privately to the person who pressed, and nothing changes.
Text commands¶
Some messengers have no buttons, or a bridge does not offer them. A Text command is a Command written as a reply in a
Thread. Only a Bridge Destination takes them, and only when the bridge declares thread_messages. A Root message
that is not resolved then ends with a line such as "Reply in the Thread: ack · resolve · snooze 1h".
A reply is a Text command when its whole text, trimmed, in any case and with an optional leading /, is one of:
| Text command | Same in Russian | Command |
|---|---|---|
ack |
взял |
Acknowledge |
unack |
отпускаю |
Unacknowledge |
resolve |
решено |
Resolve |
snooze <duration> |
отложить <duration> |
Snooze |
unsnooze |
вернуть |
Unsnooze |
still on it |
ещё работаю (also еще работаю) |
Still on it |
The <duration> is one of the Route's Snooze durations, written in minutes, hours or days: 30m, 4h or 1d, and
30м, 4ч or 1д in Russian. It can also name a Snooze preset: tomorrow (завтра) for the next
start of the working day, or the first day of the week (organization.week_start), such as monday (понедельник),
for the start of the working day on that day. So snooze tomorrow, /Snooze Tomorrow and отложить понедельник (with
the week starting on Monday) all work. A day is written as it stands alone: понедельник, вторник, среда,
четверг, пятница, суббота, воскресенье. Every word works whatever the Route's language is. The writer needs an
Account link, and the same permissions as for a button.
Muster answers a Text command in the Thread, for example "Done: Acknowledged #42", or with the reason it refused. A
duration that is not one of the Route's, or a day other than the first day of the week, is answered with what the Route
offers: "Snooze for one of: 1h, 4h, 24h, tomorrow, monday". The sentence and the durations are in the writer's profile
language, and the two preset words in the Route's language. A Route without Snooze durations takes no preset either, and
answers "This Alert Group's Route has no Snooze durations; nothing was changed." Any other text is ignored and never
answered, so people can talk in the Thread. The Thread of an older Root message works too: a Text command there acts
on the Alert Group like any other, also when the message is past its
edit window. A Text command older than an hour (bridge.event_max_age) is
dropped. If the bridge forwards only the messages that mention its bot, the line says "mentioning the bot", and the
command must mention it. See Write a bridge for how a bridge reports a Thread
message.
Ack timeouts, Reminders and auto-unacknowledge¶
Three timers make sure nobody forgets: one for an Alert Group nobody has taken, one for an Alert Group somebody took and then went quiet, and an optional one that takes the Alert Group back. They are Route settings; the On-call profile turns the first two on and the Informational profile turns everything off.
Ack timeout¶
The ack timeout runs while an Alert Group is Firing. It starts at the Alert Group's first Publication in a Destination, and starts over each time it becomes Firing again. Acknowledge, Snooze and Resolve stop it.
When nobody acknowledges, Muster sends up to three notices, at doubling intervals from the Route's first interval
(route.ack_timeout, 15 minutes on an On-call Route). With 15 minutes they come at 15, 45 and 105 minutes after the start.
Each is a Loud Thread reply that Mentions whom the Destination's ack_timeout setting says. After the last notice the
Alert Group is Unclaimed: its message shows "⚠ Nobody has taken this", and the Alert Group list has an Unclaimed
filter, column and badge. Unclaimed ends when the Alert Group stops being Firing.
An Alert Group that has not been published, as when its Route has no Destination or only Broken ones, has no ack timeout until its first Publication.
Reminders¶
When somebody acknowledges, Muster reminds the Owner while the Alert Group stays open (route.reminders, on an On-call
Route). The first Reminder comes 4 hours after the acknowledgement, and each next interval doubles up to 24 hours: at 4,
12, 28 and 52 hours, then every 24 hours. Each is a Loud Thread reply that Mentions the Owner, with the buttons Still
on it and Unack.
- Still on it is recorded in the Timeline and does not change the interval. The Owner can also answer from the Alert Group page or the API.
- A Takeover starts the Reminders over for the new Owner. A Reopen into acknowledged continues them. A snoozed Alert Group gets none. There are no quiet hours.
- An Owner who is disabled or deleted loses the acknowledgement: the Alert Group becomes Firing without an Owner, and the ack timeout starts over.
- After Muster was down, the overdue notices of one Alert Group collapse into one Loud Thread reply that says how many were missed.
- Buttons on Reminders are signed like the others, but are not updated after a key rotation. Once the old key is removed, a press is answered "This button has expired; use the buttons on the Alert Group's message".
Auto-unacknowledge¶
If an Owner goes home and says nothing, the Alert Group would stay acknowledged forever. Auto-unacknowledge
(route.auto_unacknowledge, off by default) takes it back. The Owner answers a Reminder by pressing Still on it, by
running any command on the Alert Group or by adding a Note before the next Reminder is due. When the Owner has answered
neither of the last two Reminders (timers.auto_unacknowledge_after), the next Reminder is not sent. Instead Muster
unacknowledges the Alert Group with the reason "No answer to the last two Reminders". It becomes Firing without an Owner,
a Loud Thread reply gives the reason and Mentions the Owner, and the ack timeout starts over.
For example, Carol acknowledges at 10:00 and goes home. She answers neither the Reminder at 14:00 nor the one at 22:00. At 14:00 the next day, instead of a third Reminder, Muster unacknowledges the Alert Group and Mentions Carol, and the ack timeout notices begin again.
The Alert Group page shows the next scheduled notice or Reminder.