Work through a test incident
Test alert-driven incident creation, team notifications, handoff, and resolution without ingesting data.
Work through a test incident
This exercise follows a simulated checkout latency problem from its first alert to resolution. You will create a team, trigger an incident, check its email notification, record an investigation, hand off ownership, and close the incident. You will also test the required notes for resolution and reopening.
Allow about 20 minutes. The query uses a small inline table, so you do not need to ingest data or change a running service. The exercise creates real incident records and sends real email to the people you select.
Before you start
Use a test account with a working query service, alert evaluator, and messenger service. Stay in that account throughout the exercise.
You need:
- Account admin access, or both
Logship.Alert.EditorandLogship.Incident.Manager. These let you create the alert, manage the test group, and update the incident. Global admins can also perform these steps. - At least one user who belongs to the account and can receive Logship email. Use your own user for a solo exercise.
- Outbound email configured for the deployment or account. If it is not already working, ask an administrator to set the email endpoint, username, password, and from address. See System Settings: Email defaults and Account Settings: Email overrides.
Logship.Application.FrontendUrlset to the frontend's absolute URL, such ashttps://app.example.com. A global admin sets this under Administration → System Settings. See Frontend URL for incident links.
If you want to test a handoff between two people, add both to the account and give the second person incident editor access. Both need access to their email inboxes.
1. Create the response team
- Open Groups in your account and select Create Group.
- Set Group name to
Incident tutorial respondersand Description toTest group for the incident tutorial. - Select Create Group to save it.
- Under Members, use Add member to select yourself, then select Add Member. Add the second responder too if you are working with one.
- Reload the page.
Check: The group still exists and lists each person you added. Everyone in this group will receive email while the group owns the incident. Group membership does not grant incident permissions; those are assigned separately.
For membership and permission details, see Group Management.
2. Check the test query
Open the account's query page and run:
datatable (service: string, latencyMs: int64)
[
"checkout-tutorial", 1500
]
| where latencyMs > 1000Check: The result contains exactly one row:
| service | latencyMs |
|---|---|
| checkout-tutorial | 1500 |
The row represents a service whose latency exceeds 1,000 ms. Later, you will change 1500 to 200 to simulate recovery. The where clause supplies the alert condition: a healthy service produces no rows.
See datatable for the inline table syntax.
3. Turn the query into an incident alert
Open Alerts, select Create Alert, and turn Enabled off while you fill in the form.
Set these values:
| Field | Value |
|---|---|
| Alert Name | Incident tutorial - checkout latency |
| Query Editor | The query from step 2 |
| Delivery action → Action | Create an incident |
| Incident Description Editor | Tutorial drill. Checkout latency is {latencyMs} ms for {service}. No customer impact. |
| Incident Configuration → Severity | SEV3 |
| Incident Configuration → Assignee Type | Group |
| Incident Configuration → Assign Incident To Group | Incident tutorial responders |
| Details → Interval | 00:01:00 |
| Details → Unique fields | Select service only; leave latencyMs unchecked |
Expand Incident Configuration if its fields are hidden. The alert form calls the group selection an assignee, but it sets the incident's owner. A group-owned incident can have a separate individual assignee; this exercise uses group ownership first and a user owner at handoff.
The unique field keeps repeated results for checkout-tutorial tied to the same incident. Latency is deliberately excluded so a different latency value does not identify a different problem.
Select Save. Reopen the saved alert from Alerts and check its query, delivery action, group, interval, and unique field. Turn Enabled on and save again.
Check: You see Alert saved, and the alert is enabled. Refresh Incidents over the next two minutes. You should find one incident titled Incident tutorial - checkout latency.
If it has not appeared after two minutes, use the troubleshooting table below before continuing. A one-minute interval is the requested evaluation cadence, not a delivery deadline.
4. Verify creation and delivery
Open the incident and copy its page URL. Keep this URL for the rest of the exercise.
Check all of the following:
- Status is
OPENand severity isSEV3. - Owner is
Incident tutorial responders. - Description contains
1500andcheckout-tutorial, with no unexpanded{latencyMs}or{service}placeholders. - History contains an alert-triggered creation event,
ALERT_TRIGGERED_INCIDENT. - Each test group member receives an Incident created email. Its incident ID matches this incident, and View incident opens the page you just copied.
Now leave the alert enabled for two more evaluation intervals. Refresh the incident list and open the saved URL again.
Check: There is still one incident for this alert and service, with the same ID. Repeat evaluations should not produce another incident-created email. Do not expect a new history event for every evaluation; duplicate processing can be suppressed.
5. Record the investigation
On the incident page, select IN PROGRESS under Status and confirm with Save Status Change.
Under Comments, enter the following and select Post Comment:
Tutorial drill: investigating checkout latency. The sample reports 1500 ms; no live service has been changed.Reload the incident page.
Check: Status remains IN_PROGRESS, the comment is present, and history includes the status change and a COMMENT_ADDED event. Group members receive the comment email, including its text.
6. Hand off ownership
Add a handoff comment:
Tutorial handoff: the next owner will simulate recovery, verify the result, and resolve this incident.Under Owner, select Reassign. Choose the second responder, or yourself for a solo exercise. Select Reassign, then confirm with Reassign Owner.
Check: The owner is now the selected user, the incident URL and ID are unchanged, and history records the ownership change. The new owner receives an update email. If you are working with a second responder, have them open the saved incident URL and perform the remaining incident actions.
Subsequent notifications go to the current owner and any individual assignee. Former group members do not continue receiving email solely because they belonged to the previous owner group. See Ownership and assignment and Notifications.
7. Simulate recovery and mitigate
Edit the same alert. Replace its query with:
datatable (service: string, latencyMs: int64)
[
"checkout-tutorial", 200
]
| where latencyMs > 1000Save the alert. Run this query on the query page too.
Check: The query returns zero rows. After allowing two evaluation intervals, reload the incident. It should still be IN_PROGRESS with Automatically resolve incidents when the alert clears left off (the default). Enabling that option would resolve the incident after a successful evaluation no longer matches this service.
Return to the alert, turn Enabled off, and save. Keep it disabled for the rest of the exercise.
On the incident, add this comment:
Tutorial recovery check: sample latency is now 200 ms and the alert query returns no rows. The test alert is disabled.Select MITIGATED and confirm with Save Status Change.
Check: The incident is MITIGATED, retains its user owner, and has the recovery comment and status change in its history.
8. Resolve, then test reopening
Select RESOLVED. Leave the resolution note blank at first.
Check: Save Status Change is disabled until you enter a resolution note.
Enter:
Tutorial complete: sample latency reduced from 1500 ms to 200 ms. The query returns no rows and the test alert is disabled.Confirm the status change, then reload the page.
Check: Status is RESOLVED, the resolution note is saved, history includes INCIDENT_RESOLVED, and the current owner receives a resolution email.
To check the reopen path, select OPEN. Leave the reopen reason blank first; the confirmation must remain disabled. Then enter:
Tutorial only: reopening to verify the required reason and notification.Confirm the change.
Check: The same incident is now OPEN, history includes INCIDENT_REOPENED, and its owner receives a reopened email. The alert remains disabled; reopening an incident does not enable its alert.
Resolve it once more, using Tutorial finished; reopen check passed and the test alert remains disabled. as the resolution note.
For the full transition matrix, see State transition rules.
Finish and record the result
Keep the resolved incident as the exercise record. Confirm that the test alert is disabled and that the incident has these results:
| Check | Expected result |
|---|---|
| Creation | One alert-created incident, initially OPEN and SEV3 |
| Repeat alert | Same incident ID; no second incident-created email |
| Delivery | Creation email reaches group members; its link opens the incident |
| Investigation | Comment and IN_PROGRESS change survive a reload |
| Handoff | User becomes owner without changing the incident ID |
| Recovery | Query returns no rows; incident stays open until a responder changes it |
| Resolution | Blank note is blocked; supplied note is saved |
| Reopening | Blank reason is blocked; supplied reason reopens the same incident |
| Final state | Incident RESOLVED; test alert disabled |
For a shared test report, record the incident URL, test date, and any failed checks. Treat missing email or history as a failed check even if the incident itself saved successfully.
You can delete the test group once it owns no incidents. This exercise transfers ownership to a user before closure, so the group should be unused. Resolving an incident alone does not release its group owner. See Group deletion rules.
To repeat the exercise, restore the original failing query and re-enable the same alert. The resolved incident stays resolved; a matching evaluation creates a new incident for the service. While that new incident is unresolved, subsequent matching evaluations reuse it.
If a check fails
| Symptom | What to check |
|---|---|
| Save is disabled in the alert editor | Enter an alert name, select service as a unique field, and select a group for Create an incident. Wait for the query parser to show the output columns. |
| The group or user is missing from a selector | Confirm you are in the correct account. The group must exist there, and users must belong to it. Reload the editor after creating the group. |
| No incident appears | Confirm the alert is enabled and saved, run its query manually, and check the alert list for evaluation errors. If evaluations are not running, check the evaluator, query, and messenger services. The evaluator waits for the query and messenger services to be ready. |
| More than one incident appears | Check that you edited the same alert and selected only service as its unique field. A new alert or a different unique-field value identifies a separate incident. |
| The incident exists but email is missing | Check group membership, recipient email addresses, spam folders, and system/account email settings. Ask an operator to check messenger availability and logs for Skipping incident notification or assignment notification publishing failed. Saving an incident does not guarantee email delivery. |
| Email arrives without a working incident link | Check that Logship.Application.FrontendUrl is the externally reachable, absolute frontend URL. Sign in with a user who can read incidents in this account. |
| A queued email never arrives | Check Logship.Communication.Email.Drop.Unsent.After in Account Settings. Queued mail older than that limit is dropped. |
| An action is unavailable or returns a permission error | Check the signed-in user's account permissions. Group membership alone is insufficient. See Incident permissions and Group permissions. |
| A saved change is missing from history | Reload once, then ask an operator to check for history event write failed. Incident saves can succeed when a separate history write fails. |