Skip to content

Expeto xCore Alerts⚓︎


This page is the reference for the default Prometheus alerts that monitor the Expeto xCore — site connectivity, provisioning synchronization, telecom signalling, and the site database. Each entry shows the alert's severity, how long its condition must hold before it fires, the exact PromQL trigger expression, and what to check when it fires.

Before using this page, read How to read these alerts for severity levels and the conventions shared by all alert expressions, and How alerts work for how alerts are defined and how tiers escalate. The metrics used in these expressions are described in xCore Metrics.

Alert Severity Fires after
xCoreAgentOutOfContact Critical 5m
ExpetoNetworkFunctionDown Critical 3m
xCoreDBNotSyncing Critical 2m
AgentJmsMessagesDelayed Critical 4m
HssSubscriberMismatch Warning 2m
HssSubscriberMissing Warning 2m
HssSubscriberExtra Warning 2m
MmePrivateRadioMissing Warning 2m
MmePrivateRadioMismatch Warning 2m
MmePrivateRadiosExtra Warning 2m
HssKeysetMissing Critical 2m
HssKeysetMismatch Critical 2m
HssKeysetExtra Critical 2m
DiameterConnectionDown Critical 2m
M3UAConnectionDown Critical 31m
SmppConnectionDown Critical 2m
PrivateRadioConnectionDown Critical 1m
Low3gMapAuthRequests Info 5m
Low4gS6aAuthRequests Info 5m
MariadbDown Critical 1m
MariadbTooManyConnections Warning 2m
MariadbTooManyOpenFiles Warning 2m
MariadbTooManyOpenInnodbFiles Warning 2m
MariadbHighPreparedStatementsUtilization Warning 2m
MariadbHighThreadsRunning Warning 2m
MariadbSlowQueries Warning 2m
MariadbInnodbLogWaits Warning Immediately
MariadbClusterOutOfSync Critical 1m
MariadbInstanceOutOfSync Critical 1m
xCoreCrashRestart Info 2m
ProbeFailure Critical 1m
ProbeSuccessLow Warning Immediately

xCore connectivity⚓︎

These alerts cover the link between each site's Expeto Agent and xControl. They are the first alerts to look at when a site appears to be offline.

xCoreAgentOutOfContact⚓︎

Severity Fires after
Critical 5m

Escalation: if the condition persists, xCoreAgentOutOfContactTier2 after 1h and xCoreAgentOutOfContactTier3 after 4h — see alert tiers.

Trigger condition

up{job="site",site_state!~"decommissioned|maintenance|poc",tier=~"1|"} == 0 or up{job="xAgent",site_state!~"decommissioned|maintenance|poc",tier=~"1|"} == 0

The Expeto Agent at the affected site has stopped reporting metrics. The agent may be down, or it may have lost its network connection to xControl. This is the primary "site out of contact" alert.

What to check: Confirm whether the site is reachable at all (VPN/IPsec tunnel, WAN link), then whether the agent process and its containers are running on the site host. If the agent is up but unreachable, investigate the network path between the site and xControl.

ExpetoNetworkFunctionDown⚓︎

Severity Fires after
Critical 3m

Trigger condition

xcore_nf_node_up{status="unhealthy", site_state!~"decommissioned|maintenance"} == 0

The site's agent cannot communicate with one of the network functions it manages (the function and its address are reported in the alert's labels). The function may be down or in a bad state.

What to check: Look at the health and logs of the named network function, and verify it is reachable from the agent host. Restore or restart the function if it has failed.

xCoreDBNotSyncing⚓︎

Severity Fires after
Critical 2m

Trigger condition

xcore_db_sync_delta_seconds{site_state!~"decommissioned|maintenance"} > 75

The site's local database has not synchronized with xControl for more than 75 seconds. Provisioning changes made in xControl are not reaching the site.

What to check: Verify the agent's connection to xControl and look for a message backlog (see JMSQueueNotDraining). If connectivity is healthy, check the agent logs for database errors at the reported path.

AgentJmsMessagesDelayed⚓︎

Severity Fires after
Critical 4m

Trigger condition

avg by (customer, site) (xcore_jms_delay_time{site_state!~"decommissioned|maintenance", quantile="0.95"} / 1000) > 150

The site's agent is not processing messages from xControl fast enough: the 95th-percentile message delay exceeds 150 seconds. Provisioning changes are applied late.

What to check: Check the agent host for resource exhaustion (CPU, memory, disk I/O) and the quality of the site's network link. A large provisioning burst can also cause a temporary backlog that clears on its own.

xCore synchronization⚓︎

These alerts compare the intended state held by xControl with what is actually provisioned in the site's network functions. A mismatch means an object exists but its data differs, missing means an expected object is absent, and extra means an object exists that xControl does not expect. All three point to the same follow-up: inspect the affected site's synchronization status in xControl and re-synchronize.

HssSubscriberMismatch⚓︎

Severity Fires after
Warning 2m

Trigger condition

xcore_sync_mismatch{site_state!~"decommissioned|maintenance",component="hss"} > 0

The site's HSS holds subscribers whose provisioned data does not match what xControl expects. Affected Mobile Assets may behave inconsistently.

What to check: Open the site's synchronization view in xControl to identify the affected subscribers and trigger a re-sync. If the mismatch recurs, look for an external system writing to the HSS directly.

HssSubscriberMissing⚓︎

Severity Fires after
Warning 2m

Trigger condition

xcore_sync_missing{site_state!~"decommissioned|maintenance",component="hss"} > 0

Subscribers that should be provisioned in the site's HSS are absent. The affected Mobile Assets cannot attach to the network at this site.

What to check: Re-synchronize the site from xControl. If subscribers stay missing, check the agent logs for provisioning errors on the reported instance.

HssSubscriberExtra⚓︎

Severity Fires after
Warning 2m

Trigger condition

xcore_sync_extra{site_state!~"decommissioned|maintenance",component="hss"} > 0

The site's HSS holds subscribers that xControl does not expect — typically left over from deletions that did not propagate, or from provisioning outside of xControl.

What to check: Review the extra entries in the site's synchronization view and remove them via a re-sync. Investigate how they were created if the alert recurs.

MmePrivateRadioMissing⚓︎

Severity Fires after
Warning 2m

Trigger condition

xcore_sync_missing{site_state!~"decommissioned|maintenance",component="privateradio"} > 0

One or more private radios that should be configured in the site's MME are absent.

What to check: Re-synchronize the site from xControl and confirm the radios reappear. The alert fires on a single missing radio once the condition has held for two minutes, so it clears on its own when a re-sync completes; if it persists, the radio is not being provisioned.

MmePrivateRadioMismatch⚓︎

Severity Fires after
Warning 2m

Trigger condition

xcore_sync_mismatch{site_state!~"decommissioned|maintenance",component="privateradio"} > 0

The site's MME has private radios whose configuration does not match what xControl expects.

What to check: Identify the affected radios in the site's synchronization view and re-sync. Check for local configuration changes made outside of xControl.

MmePrivateRadiosExtra⚓︎

Severity Fires after
Warning 2m

Trigger condition

xcore_sync_extra{site_state!~"decommissioned|maintenance",component="privateradio"} > 0

The site's MME has private radios configured that xControl does not expect.

What to check: Review and remove the unexpected radios via a re-sync from xControl.

HssKeysetMissing⚓︎

Severity Fires after
Critical 2m

Trigger condition

xcore_sync_missing{site_state!~"decommissioned|maintenance",component="site"} > 0

Authentication keysets that should be provisioned at the site are absent. Mobile Assets relying on those keysets cannot authenticate, which is why this is critical rather than a warning.

What to check: Re-synchronize the site from xControl immediately and confirm the keysets are restored. Check agent logs for provisioning errors if they stay missing.

HssKeysetMismatch⚓︎

Severity Fires after
Critical 2m

Trigger condition

xcore_sync_mismatch{site_state!~"decommissioned|maintenance",component="site"} > 0

Keysets at the site do not match the values xControl expects. Authentication for the affected Mobile Assets can fail.

What to check: Re-synchronize the site from xControl and verify the mismatch count returns to zero.

HssKeysetExtra⚓︎

Severity Fires after
Critical 2m

Trigger condition

xcore_sync_extra{site_state!~"decommissioned|maintenance",component="site"} > 0

The site holds keysets that xControl does not expect.

What to check: Review the unexpected keysets and remove them via a re-sync; investigate their origin, since unexpected credentials are a security concern.

DiameterConnectionDown⚓︎

Severity Fires after
Critical 2m

Trigger condition

((xcore_hss_link_total{site_state!~"decommissioned|maintenance", type="diameter", status="opened"} - on (customerId, siteId, instance, nfnode, nfnodeip, type) xcore_hss_link_count{site_state!~"decommissioned|maintenance"}) != 0) or ((xcore_hss_link_total{site_state!~"decommissioned|maintenance", type="diameter", status="opened"} unless on (customerId, siteId, instance, nfnode, nfnodeip, type) xcore_hss_link_count{site_state!~"decommissioned|maintenance"}) > 0)

The number of open Diameter links to a peer differs from the expected link count — one or more Diameter connections (4G/5G signalling, e.g. S6a) are down.

What to check: Check the reachability and status of the Diameter peer named in the alert labels, and the SCTP/TCP transport between the site and that peer. Signalling to and from the affected peer is impaired while the link is down.

M3UAConnectionDown⚓︎

Severity Fires after
Critical 31m

Trigger condition

((xcore_hss_link_total{site_state!~"decommissioned|maintenance", type="map", status="opened"} - on (customerId, siteId, instance, nfnode, nfnodeip, type) xcore_hss_link_count{site_state!~"decommissioned|maintenance"}) != 0) or ((xcore_hss_link_total{site_state!~"decommissioned|maintenance", type="map", status="opened"} unless on (customerId, siteId, instance, nfnode, nfnodeip, type) xcore_hss_link_count{site_state!~"decommissioned|maintenance"}) > 0)

The number of open M3UA links (3G MAP signalling over SS7) differs from the expected count — a 3G signalling connection is down. The long 31-minute hold time tolerates routine link flaps before alerting.

What to check: Check the M3UA/SCTP association to the peer named in the alert labels and the health of the SS7 signalling path. 3G authentication and mobility for the affected peer are impaired while the link is down.

SmppConnectionDown⚓︎

Severity Fires after
Critical 2m

Trigger condition

((xcore_hss_link_total{site_state!~"decommissioned|maintenance", type="smpp", status="opened"} - on (customerId, siteId, instance, nfnode, nfnodeip, type) xcore_hss_link_count{site_state!~"decommissioned|maintenance"}) != 0) or ((xcore_hss_link_total{site_state!~"decommissioned|maintenance", type="smpp", status="opened"} unless on (customerId, siteId, instance, nfnode, nfnodeip, type) xcore_hss_link_count{site_state!~"decommissioned|maintenance"}) > 0)

The number of open SMPP links differs from the expected count — an SMS signalling connection is down. SMS delivery through the affected peer is interrupted.

What to check: Check the SMPP peer named in the alert labels and the transport between the site and that peer.

PrivateRadioConnectionDown⚓︎

Severity Fires after
Critical 1m

Trigger condition

abs( max by (customer, customerId, site, siteId, site_state) (xcore_sync_correct{component="privateradio",site_state!~"decommissioned|maintenance|poc"}) + max by (customer, customerId, site, siteId, site_state) (xcore_sync_missing{component="privateradio",site_state!~"decommissioned|maintenance|poc"}) - max by (customer, customerId, site, siteId, site_state) (xcore_privateradio_count{site_state!~"decommissioned|maintenance|poc"}) ) > 0

The number of private radios actually connected at the site differs from the number that should be connected.

What to check: Compare the site's expected radio inventory in xControl against what is connected, then check the disconnected radios' power and transport links.

xCore telecom signalling⚓︎

These are traffic-pattern alerts: they fire when a site that normally carries signalling traffic (more than 1000 requests over the past day) suddenly goes quiet. They are informational — silence may be a real upstream problem or an expected lull.

Low3gMapAuthRequests⚓︎

Severity Fires after
Info 5m

Trigger condition

(increase(xcore_hss_map_messages_total{message="send_authentication_info",type="request",site_state!~"decommissioned|maintenance"}[1d]) > 1000 and increase(xcore_hss_map_messages_total{message="send_authentication_info",type="request",site_state!~"decommissioned|maintenance"}[15m]) == 0)

A site that normally handles 3G MAP authentication traffic has received none in the last 15 minutes.

What to check: Confirm whether the silence is expected (maintenance, traffic moved elsewhere). If not, check the 3G signalling path — see M3UAConnectionDown — and the upstream network feeding the site.

Low4gS6aAuthRequests⚓︎

Severity Fires after
Info 5m

Trigger condition

(increase(xcore_hss_s6_messages_total{message=~"authentication_information",type=~"request",site_state!~"decommissioned|maintenance"}[1d]) > 1000 and increase(xcore_hss_s6_messages_total{message=~"authentication_information",type=~"request",site_state!~"decommissioned|maintenance"}[15m]) == 0)

A site that normally handles 4G S6a authentication traffic has received none in the last 15 minutes.

What to check: Confirm whether the silence is expected. If not, check the Diameter signalling path — see DiameterConnectionDown — and the upstream 4G core.

Database health⚓︎

These alerts monitor the MariaDB databases used by xCore sites, via the metrics of the mariadb scrape job (see Monitored Endpoints).

MariadbDown⚓︎

Severity Fires after
Critical 1m

Trigger condition

mysql_up{site_state!~"decommissioned|maintenance"} != 1

A MariaDB instance is down or unreachable by its metrics exporter.

What to check: Check whether the database process/container is running on the reported instance and review its logs for the cause of the failure (crash, out of disk, restart loop).

MariadbTooManyConnections⚓︎

Severity Fires after
Warning 2m

Trigger condition

max_over_time(mysql_global_status_threads_connected{site_state!~"decommissioned|maintenance"}[1m]) / mysql_global_variables_max_connections{site_state!~"decommissioned|maintenance"} * 100 > 80

The instance is using more than 80% of its configured max_connections. If the limit is reached, new connections are refused and dependent services fail.

What to check: Identify which clients hold the connections (SHOW PROCESSLIST) and look for connection leaks. Raise max_connections only if the demand is legitimate.

MariadbTooManyOpenFiles⚓︎

Severity Fires after
Warning 2m

Trigger condition

(mysql_global_status_open_files{site_state!~"decommissioned|maintenance"} / mysql_global_variables_open_files_limit{site_state!~"decommissioned|maintenance"} * 100) > 2

The instance's open file count is above the expected share of its open_files_limit. The 2% threshold is deliberately low to act as an early warning of unusual file usage.

What to check: Compare the open file count against the instance's normal baseline. If it is climbing, look for table growth, missing cleanup, or a lowered open_files_limit.

MariadbTooManyOpenInnodbFiles⚓︎

Severity Fires after
Warning 2m

Trigger condition

(mysql_global_status_innodb_num_open_files{site_state!~"decommissioned|maintenance"} / mysql_global_variables_open_files_limit{site_state!~"decommissioned|maintenance"} * 100) > 2

Same early-warning check as MariadbTooManyOpenFiles, but for files opened by the InnoDB storage engine specifically.

What to check: As for MariadbTooManyOpenFiles; additionally check for a large number of InnoDB tablespaces.

MariadbHighPreparedStatementsUtilization⚓︎

Severity Fires after
Warning 2m

Trigger condition

max_over_time(mysql_global_status_prepared_stmt_count{site_state!~"decommissioned|maintenance"}[1m]) / mysql_global_variables_max_prepared_stmt_count{site_state!~"decommissioned|maintenance"} * 100 > 80

The instance is using more than 80% of max_prepared_stmt_count. Hitting the limit causes application errors on statement preparation; a steadily climbing count usually indicates a statement leak in a client.

What to check: Identify the client application holding prepared statements and restart or fix it. Raise the limit only for legitimate sustained demand.

MariadbHighThreadsRunning⚓︎

Severity Fires after
Warning 2m

Trigger condition

max_over_time(mysql_global_status_threads_running{site_state!~"decommissioned|maintenance"}[1m]) / mysql_global_variables_max_connections{site_state!~"decommissioned|maintenance"} * 100 > 60

An unusually high share of connections are actively executing at once. This usually means queries are running slowly and piling up rather than completing.

What to check: Look at the currently running queries (SHOW PROCESSLIST) for long-running or blocked statements, and at host CPU and disk I/O. Often accompanies MariadbSlowQueries.

MariadbSlowQueries⚓︎

Severity Fires after
Warning 2m

Trigger condition

increase(mysql_global_status_slow_queries{site_state!~"decommissioned|maintenance"}[1m]) > 40

The instance is logging more than 40 slow queries per minute.

What to check: Review the slow query log to identify the offending statements, then check for missing indexes, lock contention, or resource pressure on the host.

MariadbInnodbLogWaits⚓︎

Severity Fires after
Warning Immediately

Trigger condition

rate(mysql_global_status_innodb_log_waits{site_state!~"decommissioned|maintenance"}[15m]) > 10

Writes are waiting for InnoDB redo-log space at a sustained rate — the log is being written faster than it can be flushed.

What to check: Check disk write latency on the host (see DiskIOUnhealthy); if the disk is healthy, the InnoDB log buffer/file size may be too small for the write load.

MariadbClusterOutOfSync⚓︎

Severity Fires after
Critical 1m

Trigger condition

abs(count by(customer,site) (sum by (customer,site,statefulset) (kube_statefulset_status_replicas{site_state!~"decommissioned|maintenance",job="k8s",statefulset=~".+-mariadb-galera"})) - on(customer, site) count by (customer,site) (count by(customer, site, wsrep_cluster_state_uuid) (mysql_galera_status_info{site_state!~"decommissioned|maintenance",job="mariadb-galera"}))) > 0

The MariaDB Galera cluster at a site has partitioned: its members no longer agree on a single cluster state. Writes may diverge between partitions.

What to check: Inspect the Galera status (wsrep_cluster_status, wsrep_cluster_size) on each member and the network between them. Follow the standard Galera recovery procedure to rejoin or bootstrap members — do not restart members blindly.

MariadbInstanceOutOfSync⚓︎

Severity Fires after
Critical 1m

Trigger condition

label_replace(mysql_galera_status_info{site_state!~"decommissioned|maintenance"}, "__uuid__", "$1", "wsrep_cluster_state_uuid", "(.*)") != on (customer,site,instance,__uuid__) label_replace(mysql_galera_status_info{site_state!~"decommissioned|maintenance"}, "__uuid__", "$1", "wsrep_local_state_uuid", "(.*)")

A single Galera member's local state no longer matches the cluster state — the instance has fallen out of sync while the rest of the cluster is healthy.

What to check: Check the desynchronized member's Galera logs and let it complete a state transfer (IST/SST) to rejoin. If it cannot rejoin, remove and re-add it to the cluster.

Experimental alerts⚓︎

These alerts are under evaluation. They are enabled by default, but their thresholds and severities are still being tuned against real deployments, and any of them may change or be withdrawn in a future release. Treat them as signals worth investigating rather than as settled operational policy — and tell Expeto support if one proves noisy in your environment.

xCoreCrashRestart⚓︎

Severity Fires after
Info 2m

Trigger condition

resets(xcore_uptime_minutes{site_state!~"decommissioned|maintenance"}[5m]) > 0

The site's uptime counter went backwards, which means the xCore restarted. The alert cannot tell a planned restart from a crash, which is why it is informational: during a maintenance window it is expected, and outside one it is not.

What to check: Establish whether the restart was planned. If it was not, look at the logs from before the restart for the cause, and check whether the process was killed for exceeding a memory limit. A site that restarts repeatedly will show this alert clearing and re-firing.

ProbeFailure⚓︎

Severity Fires after
Critical 1m

Trigger condition

probe_success == 0

A synthetic probe failed: the blackbox exporter could not reach the target it was asked to check. Unlike a scrape failure, this alert reports on a service the platform depends on rather than on a metrics endpoint, so it fires even when every Expeto component is healthy.

What to check: The failing target is in the alert's instance label. Verify the target is reachable from the site — by name as well as by address, since probe failures are often DNS — and confirm any firewall or proxy on the path still permits the check.

ProbeSuccessLow⚓︎

Severity Fires after
Warning Immediately

Trigger condition

avg_over_time((probe_success >bool 0)[5m:1m]) * 100 < 85

A synthetic probe is succeeding less than 85 percent of the time over five minutes. The target is reachable but unreliable, which ProbeFailure does not catch because the probe keeps recovering between checks.

What to check: The same path as for ProbeFailure, but look for intermittent causes rather than an outage: packet loss on the link, an overloaded target, or one unhealthy member behind a load balancer.