Akamai offers a new platform to improve event alerts, with its Akamai Cloud Pulse (ACLP) service. While we transition to the new platform, you can select between it and our legacy alerting system when configuring your Linodes.
This document covers how to implement the different systems for your Linodes, using the Linode API.
ACLP alerts functionality is in limited availability. This includes which Akamai Cloud services it currently supports. Talk to your Akamai account team for more information.
ACLP vs. legacy event alerting
With the release of ACLP, we now offer two alerts formats for your Linode:
-
ACLP alerts format. ACLP lets you customize monitoring and alerting for your Akamai Cloud services. You can configure custom metrics to be monitored and apply user-generated alerts that will be executed when thresholds you set for those metrics are met. You can create custom notification channels to distribute the alerts, or use system-related alerts that are pre-defined by Akamai for common monitoring events.
-
Legacy alerts format. This applies to legacy alerts that are sent for specific, pre-defined events. When you create a new Linode, various new event alerts are automatically added to it, with default settings. You can later customize these settings by updating your Linode.
Put simply, ACLP lets you customize monitoring and alerts and apply this while creating your Linode, while the legacy alerts format automatically applies alerts for common events to your Linode, after you create it.
Add alerts to a new Linode
These workflows cover the creation of a new Linode, and adding alerts to it, for specific events.
You can only use one alerts format. If you use ACLP alerts format for a new Linode, you can't revert to the legacy alerts format. However, an existing Linode using the legacy alerts format can be updated to use the new ACLP alerts format.
With this new service, you can add alerts to your Linode while you're creating it. This is what we refer to as ACLP alerts format. You can add pre-defined system alerts or user alerts that you custom build.
Create a Linode with system alerts
system alertsThis workflow quickly covers how to add some pre-defined alerts to a new Linode while creating it.
-
Run the List alert definitions operation, filtering on a
typeofsystem. -
Review the available
systemalerts in the response, and store theidfor each one you want to include for your Linode. Ensure the selected alerts have astatusofenabled.{ "data": [ { "alert_channels": [ { "id": 10000, "label": "Read-Write Channel", "type": "email", "url": "/monitor/alert-channels/10000" } ], "class": "dedicated", "created": "2025-03-20 01:42:11", "created_by": "system", "description": "Alert for my PostgreSQL database", "entity_ids": [ "126905", "126906", "137435", "141496", "190003", "257625", "257626" ], "has_more_resources": false, "id": 10000, # Store value "label": "High Memory Usage Plan Dedicated", "rule_criteria": { "rules": [ { "aggregate_function": "avg", "dimension_filters": [ { "dimension_label": "node_type", "label": "Node Type", "operator": "eq", "value": "primary" } ], "label": "Memory Usage", "metric": "memory_usage", "operator": "eq", "threshold": 95, "unit": "percent" } ] }, "service_type": "dbaas", "severity": 2, "status": "enabled", # Verify status "trigger_conditions": { "criteria_condition": "ALL", "evaluation_period_seconds": 300, "polling_interval_seconds": 300, "trigger_occurrences": 3 }, "type": "system", "updated": "2025-03-20 01:42:11", "updated_by": "system" } ], "page": 1, "pages": 1, "results": 1 } -
Run the Create a Linode operation. Include the
alertsobject in the request and apply theidvalues for all of the alerts you stored, in thesystem_alertsarray:"alerts": { "system_alerts": [ 10000, 10001 ], "user_alerts": [] }, ... -
Build out the rest of the request using relevant settings for your Linode.
Create a Linode with user alerts
user alertsThis workflow briefly covers how to create a custom-built alert, and add it to a new Linode.
-
Run the Create an alert definition operation to create a new
useralert. -
Store the
idfrom the response as youralert_id.{ "alert_channels": [ { "id": 10001, "label": "High Memory Usage Plan Shared", "type": "alerts-definitions", "url": "/monitor/alerts-definitions/10001" } ], "class": "dedicated", "created": "2025-03-20T01:42:11", "created_by": "John Q. Linode", "description": "My alert for database memory over-usage.", "entity_ids": [ "126905", "126906" ], "has_more_resources": false, "id": 56789, # Store this -
Run the Get an alert operation and review the
statusfrom the response. Repeat until this is displayed asenabled.{ "alert_channels": [ { "id": 10001, "label": "High Memory Usage Plan Shared", "type": "alerts-definitions", "url": "/monitor/alerts-definitions/10001" } ], "class": "dedicated", "created": "2025-03-20T01:42:11", "created_by": "John Q. Linode", "description": "My alert for database memory over-usage.", "entity_ids": [ "126905", "126906" ], "has_more_resources": false, "id": 56789, "label": "Databases memory usage alert", "rule_criteria": { "rules": [ ... ] }, "service_type": "dbaas", "severity": 2, "status": "enabled", # Verify status "trigger_conditions": { "criteria_condition": "ALL", "evaluation_period_seconds": 300, "polling_interval_seconds": 300, "trigger_occurrences": 3 }, "type": "user", "updated": "2025-03-20T01:42:11", "updated_by": "John Q. Linode" } -
Run the Create a Linode operation. Include the
alertsobject in the request and apply your storedalert_idin theuser_alertsarray:"alerts": { "system_alerts": [], "user_alerts": [ 56789 ] }, ... -
Build out the rest of the request using relevant settings for your Linode.
To add event alerts to a Linode using the legacy alerts format, there are no additional steps. Alerts are added automatically, when you create the Linode.
-
Run the Create a Linode operation, configuring your Linode as necessary. Leave the
alertsobject out the request. -
Review the
alertsobject in the response to see the alerts that are automatically set for your new Linode. For example, this could look like this:"alerts": { "cpu": 180, "io": 10000, "network_in": 10, "network_out": 10, "transfer_quota": 80 "system_alerts": [], "user_alerts": [] },-
cpu. The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. Your Linode's total CPU capacity is represented as 100%, multiplied by its number of cores. For example, a two core Linode's CPU capacity is represented as 200%. If you want to be alerted at 90% of a two core Linode's CPU capacity, set the alert value to180. The default value is 90% multiplied by the number of cores.If the value is set to0(zero), the alert is disabled. -
io. The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to0(zero), this alert is disabled. -
network_in. The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to 0 (zero), the alert is disabled. -
network_out. The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to0(zero), the alert is disabled. -
transfer_quota. The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to0(zero), the alert is disabled. -
system_alertsanduser_alerts. These two alerts arrays apply to ACLP alerts and will be empty in the legacy format.
-
You can edit these clegacy alerts' settings by updating the Linode.
Disable alerts on a new Linode
You can disable all alerts on a new Linode—both legacy alerts and ACLP alerts formats:
-
Run the Create a Linode operation, and include the
alertsobject in the request. Include both thesystem_alertsanduser_alertsparameters as empty arrays:"alerts": { "system_alerts": [], "user_alerts": [] }, -
Configure the remaining fields as necessary and submit the the reques. The
alertsobject in the response should look like this:{ "alerts": { "cpu": 0, "io": 0, "network_in": 0, "network_out": 0, "system_alerts": [], "transfer_quota": 0, "user_alerts": [] },
Now, all alerts are disabled for the Linode.
Update alerts
These workflows cover updating an existing Linode, to manage alerts.
Update from legacy to ACLP alerts format
If your Linode is using the legacy format and you'd like to update it to ACLP format alerts, follow these steps:
-
Run the List Linodes operation and store the
idfor the target Linode as yourlinodeId. -
Run the List alert definitions operation and store the identifiers for new alerts you want to add. Get the
idfor each as well as itstype—eithersystemoruser. -
Run the Update a Linode operation, using the stored
linodeIdvalue. In the request:-
Include the
system_alertsanduser_alertsarrays in thealertsobject. Populate each with the applicable stored alert definition identifiers. -
Leave the legacy alerts format parameters out. Leave the
cpu,io,network_in,network_out, andtransfer_quotaparameters out of the request.
"alerts": { "system_alerts": [ 10000 ], "user_alerts": [ 56789, 56790 ] },This process assumes you've already created any
useralert definitions you may want to use. -
Update existing ACLP alerts
If you're using the new ACLP alerts format with your Linode, you can modify its setting as follows:
-
Run the List Linodes operation:
-
Store the
idfor the target Linode as yourlinodeId. -
Review the
alertsobject in the response. Store the alert definition identifiers from thesystem_alertsanduser_alertsarrays.
"alerts": { "cpu": 0, "io": 0, "network_in": 0, "network_out": 0, "transfer_quota": 0 "system_alerts": [ 10000, # Store value 10001 # Store value ], "user_alerts": [ 56789 # Store value ] }, -
-
Run the List alert definitions operation. Review the response:
-
Use the stored identifiers to review your existing alerts. The
idvalue for each alert definition is accompanied by all of the details for that alert. Determine if you want to keep that alert for your Linode. -
Store the identifiers for new alerts you want to add. Get the
idfor each as well as itstype—eithersystemoruser.
-
-
Run the Update a Linode operation, using the stored
linodeIdvalue. In the request:-
Include the
system_alertsanduser_alertsarrays in thealertsobject. Populate each with the applicable stored alert definition identifiers. -
Leave the legacy alerts format parameters out. Leave the
cpu,io,network_in,network_out, andtransfer_quotaparameters out of the request.
"alerts": { "system_alerts": [ 10000, # Kept from previous 10001 # Kept from previous ], "user_alerts": [ 56789, # Kept from previous 56790, # Newly added alert definition 56791 # Newly added alert definition ] },To keep existing ACLP alerts, you need to include them in the request. The API resets values that aren't included.
-
-
Configure the remaining parameters in the request as necessary.
Update existing legacy alerts
To update event alerts in a Linode that uses the legacy alerts format, follow these steps:
-
Run the List Linodes operation:
-
Store the
idfor the target Linode as yourlinodeId. -
Review the
alertsobject in the response to see the alerts that are currently set for the target Linode. For example, this could look like this:
"alerts": { "cpu": 180, "io": 10000, "network_in": 10, "network_out": 10, "transfer_quota": 80 "system_alerts": [], "user_alerts": [] }, -
-
Run the Update a Linode operation, using the stored
linodeIdvalue. Include thealertsobject with all parameters—setting new values for the parameters you want to update, and including existing values for the parameters you want to keep the same. Leave thesystem_alertsanduser_alertsarrays out of the request."alerts": { "cpu": 200, # Changed "io": 500, # Changed "network_in": 10, # Left the same "network_out": 10, # Left the same "transfer_quota": 100 # Changed },To keep existing values, you need to include them in the request. The API resets values that aren't included.
-
Configure the remaining parameters in the request as necessary.
Disable all alerts in an existing Linode
If you already have either format of alert applied in a Linode, and you want to fully disable alerting, you can by updating that Linode.
-
Run the List Linodes operation and store the
idfor the target Linode as yourlinodeId. -
Run the Update a Linode operation, using the stored
linodeIdvalue. Include both thesystem_alertsanduser_alertsparameters as empty arrays:"alerts": { "system_alerts": [], "user_alerts": [] }, -
Configure the remaining parameters in the request as necessary.
All alerts are now disabled for the target Linode. This includes both ACLP alert and format legacy alert format.
Clone a Linode and alerts
Cloning a Linode duplicates its configuration profiles, disks, and interfaces to a different Linode.
When you clone to a new Linode, the current alerts settings for the source Linode are not carried forward to the new instance. You can apply existing alerts settings for the new Linode, based on the alerts format.
If you intend to clone to an existing Linode, this does not apply. The alerts settings applied on the existing Linode where you're cloning to will still apply. (You can update alert settings on this existing Linode by updating it.)
You need to include any existing alerts from the source Linode in the request:
-
Run the List Linodes operation and store the
idfor the clone source as yourlinodeId. -
Run the Get a Linode operation, using the stored
linodeIdvalue and review the response:system_alertsanduser_alerts. Store the identifier values from these arrays as necessary.type. Store this as yourlinodeType.
{ "alerts": { "cpu": 0, "io": 0, "network_in": 0, "network_out": 0, "system_alerts": [ 10000, # Store value 10001 # Store value ], "transfer_quota": 0, "user_alerts": [ 56789 # Store value ] }, ... "type": "g6-standard-1", # Store value }, ... -
Optionally, run the List types operation. Review the
capabilities,disk,memory,gpus, andnetwork_outfor eachclass. You can clone to a new Linode that has at least the same resources as your storedlinodeType. If you select a largerclass, store it as yourlinodeType. -
Run the Clone a Linode operation. Include at least these fields in the request:
alerts. Apply the alerts identifier values you stored from the source, in the appropriate array.type. Set this to your storedlinodeType.
"alerts": { "system_alerts": [ 10000, 10001 ], "user_alerts": [ 56789 ] }, "type": "g6-standard-1", ... -
You can also add new alert definitions to the clone. Run the List alert definitions operation and store the
idvalues for the relevant definitions. Add them to thesystem_alertsanduser_alertsarrays, accordingly. -
Build out the rest of the request using relevant settings to clone the Linode.
You can't include the
linode_idfield in the request, to target an existing Linode. This process only applies when cloning to a new Linode.
When you clone a Linode that's using legacy alerts format, any current alerts settings are reset to the default values. To reuse custom settings, you need to reapply them after the clone.
If you're using the default settings with legacy alerts format on the source Linode, you can skip this process. Simply run the Clone a Linode operation and these same default legacy alert settings will be applied on the clone.Linode
-
Run the List Linodes operation and store the
idfor the clone source as yourlinodeId. -
Run the Get a Linode operation, using the stored
linodeIdvalue. Store the values for thecpu,io,network_in,network_out, andtransfer_quotasettings, as necessary.{ "alerts": { "cpu": 5, "io": 10, "network_in": 0, "network_out": 5, "transfer_quota": 15 } }, ... -
Run the Clone a Linode operation, build out the request using relevant settings to clone the Linode. With legacy alerts format, don't include the
alertsfield. -
Store the
idfor the clone, from the response as yourlinodeId. -
Run the Update a Linode operation, targeting your cloned Linode via its
linodeId. In the request, set the thealertsobject to use the values you stored in step 2. Ensure that thesystem_alertsanduser_alertsarrays are either empty, or left out of the request.{ "alerts": { "cpu": 5, "io": 10, "network_in": 0, "network_out": 5, "transfer_quota": 15 "system_alerts": [], "user_alerts": [] } }, ...You can't include the
linode_idfield in the request, to target an existing Linode. This process only applies when rebuilding to a new Linode.
Rebuild a Linode and alerts
Rebuilding a Linode deletes all of its configuration profiles and disks and deploys a new image to a different Linode.
When you rebuild to a new Linode, its alerts settings are deleted along with its configuration profiles and disks. You can re-apply the same alerts settings on the new, rebuilt Linode, based on the alerts format.
If you intend to rebuild to an existing Linode, this does not apply. The alerts settings applied on the existing Linode that's the target for the rebuild will still apply. (You can update alert settings on this existing Linode by updating it.)
You need to include any existing alerts from the source Linode in the request:
-
Run the List Linodes operation and store the
idfor the rebuild source as yourlinodeId. -
Run the Get a Linode operation, using the stored
linodeIdvalue and review the response:system_alertsanduser_alerts. Store the identifier values from these arrays as necessary.type. Store this as yourlinodeType.image. This is the current image type in use on the source.
{ "alerts": { "cpu": 0, "io": 0, "network_in": 0, "network_out": 0, "system_alerts": [ 10000, # Store value 10001 # Store value ], "transfer_quota": 0, "user_alerts": [ 56789 # Store value ] }, ... "image": "linode/debian10", # Review value "type": "g6-standard-1", # Store value }, ... -
Run the List images operation. Review the available image types and store the
idfor the desired one as yourimageId. -
Optionally, run the List types operation. Review the
capabilities,disk,memory,gpus, andnetwork_outfor eachclass. You can rebuild to a new Linode that has at least the same resources as your storedlinodeType. If you select a largerclass, store it as yourlinodeType. -
Run the Rebuild a Linode operation. Include at least these fields in the request:
alerts. Apply the alerts identifier values you stored from the source, in the appropriate array.type. Set this to your storedlinodeType.image: Set this to your storedimageId.
"alerts": { "system_alerts": [ 10000, 10001 ], "user_alerts": [ 56789 ] }, "type": "g6-standard-1", "image": "linode/debian11", ... -
You can also add new alert definitions to the clone. Run the List alert definitions operation and store the
idvalues for the relevant definitions. Add them to thesystem_alertsanduser_alertsarrays, accordingly. -
Build out the rest of the request using relevant settings to clone the Linode.
You can't include the
linode_idfield in the request, to target an existing Linode. This process only applies when rebuilding to a new Linode.
When you rebuild from a source Linode, all of its settings are deleted -- including any custom settings you may have applied for legacy alerts format. To reuse custom settings, you need to reapply them after the rebuild.
If you're using the default settings with legacy alerts format on the source Linode, you can skip this process. Simply run the Rebuild a Linode operation and these same default legacy alert settings will be applied on the rebuilt Linode.
-
Run the List Linodes operation and store the
idfor the rebuild source as yourlinodeId. -
Run the Get a Linode operation, using the stored
linodeIdvalue. Store the values for thecpu,io,network_in,network_out, andtransfer_quotasettings, as necessary.{ "alerts": { "cpu": 5, "io": 10, "network_in": 0, "network_out": 5, "transfer_quota": 15 } }, ... -
Run the Rebuild a Linode operation, build out the request using relevant settingsLinode. With legacy alerts format, don't include the
alertsfield. -
In the response, store the
idfor the new, rebuilt Linode as yourlinodeId. -
Run the Update a Linode operation, targeting your rebuilt Linode via its
linodeId. In the request, set the thealertsobject to use the values you stored in step 2. Ensure that thesystem_alertsanduser_alertsarrays are either empty, or left out of the request.{ "alerts": { "cpu": 5, "io": 10, "network_in": 0, "network_out": 5, "transfer_quota": 15 "system_alerts": [], "user_alerts": [] } }, ...
You can't include the
linode_idfield in the request, to target an existing Linode. This process only applies when rebuilding to a new Linode.
