User guide
Monitoring and Alerting
Looking for what it does rather than how to use it? Read the Monitoring and Alerting overview .
Applies to the MSP and organization portals.
What it is
Monitoring and alerting connects Solidlio to the systems that already watch your infrastructure — Zabbix and ConnectWise Automate — and turns what they see into work: alerts attached to the right client and the right device, and tickets raised only when your rules say so.
It does not replace your monitoring server. Zabbix keeps deciding what a problem is; Solidlio decides who owns it, whether it becomes a ticket, and when it stops.
Concepts
| Concept | What it is |
|---|---|
| Integration | The connection to one Zabbix server or one Automate server, with its credentials |
| Alert | One problem imported from a monitoring source, owned by exactly one organization |
| Host | A machine as the monitoring system sees it — a Zabbix host id or an Automate computer id |
| Monitoring link | The mapping from one host to one Solidlio asset, one row per source |
| Alert policy | The per-organization rules that decide whether an alert becomes a ticket |
| Maintenance window | A planned outage window; alerts on its assets are recorded but suppressed |
Alert ownership
An alert belongs to one organization. That organization is decided by the host that raised it, not by whose integration polled it. One Zabbix server can front fifty client companies; the group mappings on the integration and the monitoring links on each asset are what place each problem with the right customer.
An alert that cannot be placed — an unmapped host, or a problem with no host at all — goes to the MSP’s own organization for triage. It is never assigned to an arbitrary customer.
Alert identity
An alert is identified by (organization, source, external id). This matters because a Zabbix event id and an Automate alert id are only unique inside one monitoring server. Two customers running their own Zabbix will both eventually emit event 12345; they are two different alerts and Solidlio stores them as two different rows.
Alert states
| State | Meaning | Set by |
|---|---|---|
ACTIVE | Open in the monitoring system | Import |
ACKNOWLEDGED | Someone has picked it up | Acknowledge (also written back to source) |
RESOLVED | Cleared, by hand or because the source no longer reports it | Resolve, or the sync sweep |
SUPPRESSED | Raised inside a maintenance window that asked for suppression | Import |
IGNORED | Muted by the tenant: “stop telling me about this one” | Ignore (Solidlio-side only, never mirrored) |
The lifecycle is one-directional: ACTIVE → ACKNOWLEDGED → RESOLVED. Both hops are available from the alert detail page and from the MSP alert list. A suppressed alert is recorded so the history is honest, but never raises a ticket.
IGNORED sits outside that lifecycle. It is user-driven and sticky — the alert sync will not flip an ignored alert back to ACTIVE — and it is deliberately NOT written back to Zabbix or Automate, because ignoring is a decision about what this tenant wants to see, not a claim that the underlying problem is handled. Ignored alerts are excluded from the default list and from every headline count; ask for them by name (?status=IGNORED, or the Ignored filter) to see them, and Stop Ignoring returns an alert to whichever state its own timestamps say it was in.
Severity
Solidlio uses the Zabbix severity ladder end to end: INFO, WARNING, HIGH, CRITICAL, DISASTER. There is no LOW or MEDIUM — a UI offering them would be offering something the API rejects.
Severity maps to ticket priority when an alert raises a ticket:
| Alert severity | Ticket priority |
|---|---|
INFO | LOW |
WARNING | MEDIUM |
HIGH | HIGH |
CRITICAL | URGENT |
DISASTER | CRITICAL |
Roles and permissions
Every monitoring mutation floors at organization administrator. The hierarchy is platform administrator > MSP administrator > MSP technician > organization administrator > power user > CUSTOMER`, so MSP technicians clear the floor and organization power users do not.
| Action | platform administrator | MSP administrator | MSP technician | organization administrator | power user | CUSTOMER |
|---|---|---|---|---|---|---|
| View alerts and stats | ● | ● | ● | ● | ● | ● |
| View one asset’s monitoring status | ● | ● | ● | ● | ● | ● |
| View the monitoring config / host list | ● | ● | ● | ● | — | — |
| Acknowledge / resolve / ignore an alert | ● | ● | ● | ● | — | — |
| Create a ticket from an alert | ● | ● | ● | ● | — | — |
| Edit the alert policy | ● | ● | ● | ● | — | — |
| Trigger a sync | ● | ● | ● | ● | — | — |
| Link / unlink / mute a monitored host | ● | ● | ● | ● | — | — |
The two reads that stay open to everyone are the ones that describe the caller’s own machines — “your file server is down” is exactly what an end customer should be able to see, and it is what the customer portal renders.
Power users see monitoring in their navigation and can read the alerts; the action buttons are hidden from them rather than shown and refused. On the asset detail’s Monitoring tab the per-machine switches degrade to plain “On”/“Off” text for the same reason.
What each portal sees
| Portal | Alert scope |
|---|---|
| MSP | The MSP’s own organizations and every managed client’s |
| Organization | Its own organization only |
| Customer | Its own organization only |
An MSP can narrow to one client with ?organizationId=. An id outside the visible set is refused with 403, never silently ignored.
Walkthroughs
Connect Zabbix
- Go to Integrations → Zabbix (
/msp/integrations/zabbixor/org/integrations/zabbix). - Solidlio detects the server version on connect and caches it.
- Save. The connection is tested before it is stored.
- Open the Hosts tab to confirm Solidlio can see your inventory.
- Under Group mappings, map each Zabbix host group to the client organization that owns it. Without at least one mapping, alert sync logs “No group mappings configured” and imports nothing.
- Under Sync, enable host sync and alert sync and set their intervals. Alert sync defaults to every 5 minutes, host sync to every 60.
Solidlio speaks Zabbix 6.0 through 7.x. It sends an Authorization: Bearer header on 6.4 and later, and falls back to the legacy body property on older servers — the auth body property was removed entirely in 7.2.
Connect ConnectWise Automate
- Go to Integrations → ConnectWise Automate.
- Enter the server URL, your Automate username and password, and a two-factor passcode if your instance requires one. The Partner ClientId comes from Solidlio’s server configuration; you do not supply it.
- Save. Solidlio exchanges the credentials for an AccessToken and stores the connection encrypted.
- Run Discover to pull the client companies and groups from Automate, then map each one to a Solidlio organization.
- Under Sync settings, choose what to sync (computers, software, services, drives, patches, groups) and at what cadence.
Automate alert ingestion runs on the interval set as Alert sync interval in Settings → Monitoring, default 5 minutes.
Set the alert policy
Settings → Monitoring (/msp/settings/monitoring or /org/settings/monitoring).
On the MSP portal, pick the client you are configuring from the selector at the top; “My organization” configures the MSP’s own.
| Setting | Effect |
|---|---|
| Create tickets from alerts | Off by default. Nothing is ticketed until you switch this on. |
| Severity floor | Only alerts at or above this severity raise a ticket. Default HIGH. |
| Merge repeat alerts | A repeat of the same problem on the same machine attaches to the ticket already open for it. |
| Resolve the ticket when the alert clears | Moves the linked ticket to Resolved. Tickets already Resolved or Closed are untouched. |
| Suppress during maintenance | Alerts on an asset inside an active maintenance window are stored SUPPRESSED and never ticketed. |
| Alert sync interval | 1–1440 minutes. Drives scheduled Automate alert ingestion. |
Press Save policy. Press Sync now to pull immediately rather than waiting for the next scheduled run.
Link a host to an asset
Alerts name a device only if the host that raised them is linked to a Solidlio asset. Host sync does this automatically; you do it by hand when a machine was created in Solidlio first, or when the matcher declined to guess.
- Settings → Monitoring → Monitored hosts.
- Find the host. If it already resolves to an asset, the asset name is shown with an Unlink button.
- Otherwise pick an asset from the selector and press Link.
The automatic matcher tries, in order: an existing integration mapping, an existing monitoring row for the same external id, serial number, MAC address, then hostname. It only ever matches inside one organization, and it abandons a strategy that finds more than one candidate rather than guessing — a duplicate asset a human can merge is less damaging than two machines merged into one. Placeholder serials (Default string, To be filled by O.E.M., and fifteen others) are ignored.
Work an alert
- Monitoring shows the current picture; Monitoring → Alerts is the full list. On the MSP portal each row names the client that raised it, and you can filter by client, severity and status.
- Open an alert. The detail page shows the message, the asset, the linked ticket, and who acknowledged it.
- Acknowledge — records who and when, and acknowledges the problem in Zabbix or Automate as well.
- Create Ticket — raises a ticket under the alert’s organization (not yours, if you are the MSP), tagged
auto-generated,monitoringand the source name, with the asset attached. An alert can carry only one ticket; a second attempt is refused. - Resolve — closes it in Solidlio and in the source system.
Mute a noisy machine
A machine that is known-bad and already being dealt with should stop generating tickets without losing its monitoring link — unlinking it only lasts until the next host sync.
Open the asset (/msp/assets/{id} or /org/assets/{id}), go to Monitoring, and turn off Alerting on the row for the source you want quiet. The same tab shows, per source: the live status, what the last sync recorded, when it last checked, and how many alerts are currently active.
- Alerting off — the machine’s alerts are still recorded and still visible; they simply stop raising tickets.
- Monitoring off — additionally stops live status polling (the row reports “Monitoring off” rather than probing) and excludes the machine from maintenance-window suppression sync.
Both switches floor at organization administrator, so a technician or power user sees the state as plain text rather than an operable control.
Suppress alerts for a planned outage
- Create a maintenance window under Changes → Maintenance (
/msp/changes/maintenanceor/org/changes/maintenance) with Suppress alerts on, and add the affected assets. - When the window activates, Solidlio pushes a matching maintenance period into Zabbix (with data collection off) and acknowledges the open Automate alerts on those computers.
- Independently, any alert imported for one of those assets while the window is open is stored
SUPPRESSEDand raises no ticket. This is the part that covers ConnectWise Automate, which has no maintenance-window API of its own.
Configuration reference
Alert policy (MonitoringConfig)
| Field | Default | Unset behaviour |
|---|---|---|
autoCreateTickets | false | No tickets are raised from alerts |
minSeverityForTicket | HIGH | HIGH, CRITICAL and DISASTER qualify |
suppressDuringMaintenance | true | Maintenance suppression applies |
deduplicateAlerts | true | Repeats merge onto the open ticket |
autoResolveTickets | false | Tickets stay open after their alert clears |
syncIntervalMinutes | 5 | Automate alert ingestion every 5 minutes |
Per-machine switches (AssetMonitoring)
| Field | Default | Effect when false |
|---|---|---|
monitoringEnabled | true | No live status poll; excluded from maintenance-window sync |
alertsEnabled | true | Alerts still recorded, but never raise a ticket |
Where connections live
Solidlio holds monitoring settings in two places, and they answer different questions:
- Connections live on the Integration Hub (
Integration+ZabbixConfig). This is what the Zabbix and Automate pages write. - Alert policy lives on
MonitoringConfig, edited at Settings → Monitoring.
Plan tiers
Monitoring carries no plan gate. No tier unlocks or restricts Zabbix, ConnectWise Automate, alert ingestion, alert-to-ticket rules, host linking or maintenance suppression. Reads and writes are governed by role and tenancy only.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Monitoring not configured from GET /hosts | Neither an Integration Hub connection nor a MonitoringConfig row exists for the target organization | Connect Zabbix or Automate in the Integration Hub |
Sync log says No group mappings configured for Zabbix integration | Alert sync has nothing to route problems to | Map at least one Zabbix host group to an organization |
Failed to decrypt Zabbix credentials. The encryption key may have changed | The stored credential blob cannot be read | Disconnect and reconnect the Zabbix integration |
Zabbix API token missing from stored configuration. Please reconnect. | The integration was stored without a token | Reconnect |
Zabbix base URL not configured. Please reconnect. | Neither ZabbixConfig.baseUrl nor the stored config carries a URL | Reconnect |
URL, partner Client ID, username, and password are required | An Automate connection test was sent without the username/password pair | Automate has no client-secret grant — supply real credentials |
Cannot build Automate client: AUTOMATE_PARTNER_CLIENT_ID is not configured | The server-side Partner ClientId is unset | Set AUTOMATE_PARTNER_CLIENT_ID in the environment |
Automate integration has incomplete credentials | The stored config is missing url, username or password | Reconnect |
Alert already has a linked ticket (ticketId: …) | Create-ticket was called twice for one alert | Open the existing ticket |
Organization not accessible (403) | ?organizationId= named an organization outside the caller’s visible set | Drill into a client the account actually services |
Alert not found (404) for an alert you can see elsewhere | The alert belongs to an organization outside the caller’s scope; detail routes fail closed | Use the MSP portal, or the owning organization’s portal |
| Alerts arrive but no tickets | autoCreateTickets is off, the severity is below the floor, the asset is muted, or a maintenance window is open | Check Settings → Monitoring and the machine’s alertsEnabled |
| Tickets stop when a maintenance window is open | Working as configured — those alerts are stored SUPPRESSED | Turn off Suppress during maintenance, or narrow the window’s assets |
| Alerts show “Unknown” instead of a device name | The host is not linked to an asset | Link it under Settings → Monitoring → Monitored hosts |
| A machine appears twice in assets | Two integrations imported it and the matcher declined to guess (ambiguous serial, MAC or hostname) | Merge the assets, then re-link |
Limits and known behaviour
- Alert lists are capped at 100 rows per request (default 50). The monitoring dashboard requests 50 and the alerts list 100, and both filter in the browser — beyond 100 alerts, use the
source,status,severityandorganizationIdfilters to narrow the query rather than scrolling. IGNOREDis unused. The status exists in the model and renders a badge, but nothing writes it.- Ticket auto-creation is off by default, including for organizations that connect through the Integration Hub and never open the settings page.
- ConnectWise Automate has no maintenance-window API. Solidlio acknowledges the open alerts on the affected computers when a window activates, and suppresses newly imported alerts tenant-side. It cannot stop Automate from generating them.
- Automate maintenance is not “un-done”. Clearing the window is a no-op; alerts fired after it ends flow normally.
- Maintenance suppression needs a linked asset. An alert from a host with no monitoring link cannot be matched to a maintenance window.
- Deduplication is per problem, per machine. It matches on organization, source, alert title and asset. Two different checks on the same box are two tickets, by design.
- Auto-resolve never re-opens. A ticket already
RESOLVEDorCLOSEDis left alone when its alert clears again. - Zabbix
problem.getreturns no host details. Solidlio reads host identity from the event’s own fields; a Zabbix problem with no host is attributed to the MSP’s own organization. - Live device actions are Automate-only. Reboot, shutdown and script execution exist for ConnectWise Automate; Zabbix hosts can only be enabled or disabled.
- There is no bulk acknowledge. Alerts are acknowledged one at a time.
- Nothing arrives faster than the configured sync interval.