diff --git a/packages/manager/.changeset/pr-12013-changed-1744375580329.md b/packages/manager/.changeset/pr-12013-changed-1744375580329.md
new file mode 100644
index 00000000000..729179bd895
--- /dev/null
+++ b/packages/manager/.changeset/pr-12013-changed-1744375580329.md
@@ -0,0 +1,5 @@
+---
+'@linode/manager': Added
+---
+
+Dedicated `Alerts` tab on Linode details page ([#12013](https://github.com/linode/manager/pull/12013))
diff --git a/packages/manager/cypress/e2e/core/linodes/smoke-delete-linode.spec.ts b/packages/manager/cypress/e2e/core/linodes/smoke-delete-linode.spec.ts
index 61ecc709e97..a957e3e62bd 100644
--- a/packages/manager/cypress/e2e/core/linodes/smoke-delete-linode.spec.ts
+++ b/packages/manager/cypress/e2e/core/linodes/smoke-delete-linode.spec.ts
@@ -129,7 +129,6 @@ describe('delete linode', () => {
// Check elements in setting tab
cy.findByText('Linode Label').should('be.visible');
cy.findByText('Reset Root Password').should('be.visible');
- cy.findByText('Notification Thresholds').should('be.visible');
cy.findByText('Shutdown Watchdog').should('be.visible');
cy.findByText('Delete Linode').should('be.visible');
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeAlerts/LinodeAlerts.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeAlerts/LinodeAlerts.tsx
new file mode 100644
index 00000000000..58f4985fe3e
--- /dev/null
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeAlerts/LinodeAlerts.tsx
@@ -0,0 +1,20 @@
+import { useGrants } from '@linode/queries';
+import * as React from 'react';
+import { useParams } from 'react-router-dom';
+
+import { LinodeSettingsAlertsPanel } from '../LinodeSettings/LinodeSettingsAlertsPanel';
+
+const LinodeAlerts = () => {
+ const { linodeId } = useParams<{ linodeId: string }>();
+ const id = Number(linodeId);
+ const { data: grants } = useGrants();
+
+ const isReadOnly =
+ grants !== undefined &&
+ grants?.linode.find((grant) => grant.id === id)?.permissions ===
+ 'read_only';
+
+ return ;
+};
+
+export default LinodeAlerts;
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettings.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettings.tsx
index 5f9c7d5ef76..a14b3508453 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettings.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettings.tsx
@@ -1,9 +1,7 @@
+import { useGrants } from '@linode/queries';
import * as React from 'react';
import { useParams } from 'react-router-dom';
-import { useGrants } from '@linode/queries';
-
-import { LinodeSettingsAlertsPanel } from './LinodeSettingsAlertsPanel';
import { LinodeSettingsDeletePanel } from './LinodeSettingsDeletePanel';
import { LinodeSettingsLabelPanel } from './LinodeSettingsLabelPanel';
import { LinodeSettingsPasswordPanel } from './LinodeSettingsPasswordPanel';
@@ -24,7 +22,6 @@ const LinodeSettings = () => {
<>
-
>
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsAlertsPanel.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsAlertsPanel.tsx
index 2272d726b55..593fc9a81ce 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsAlertsPanel.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsAlertsPanel.tsx
@@ -76,8 +76,7 @@ export const LinodeSettingsAlertsPanel = (props: Props) => {
const alertSections = [
{
- copy:
- 'Average CPU usage over 2 hours exceeding this value triggers this alert.',
+ copy: 'Average CPU usage over 2 hours exceeding this value triggers this alert.',
endAdornment: '%',
error: hasErrorFor('alerts.cpu'),
hidden: isBareMetalInstance,
@@ -103,8 +102,7 @@ export const LinodeSettingsAlertsPanel = (props: Props) => {
value: formik.values.cpu,
},
{
- copy:
- 'Average Disk I/O ops/sec over 2 hours exceeding this value triggers this alert.',
+ copy: 'Average Disk I/O ops/sec over 2 hours exceeding this value triggers this alert.',
endAdornment: 'IOPS',
error: hasErrorFor('alerts.io'),
hidden: isBareMetalInstance,
@@ -225,7 +223,7 @@ export const LinodeSettingsAlertsPanel = (props: Props) => {
{generalError && {generalError}}
{alertSections.map((p, idx) => (
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailNavigation.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailNavigation.tsx
index 7375ecf1947..e772218809c 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailNavigation.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailNavigation.tsx
@@ -33,6 +33,7 @@ const LinodeBackup = React.lazy(() => import('./LinodeBackup/LinodeBackups'));
const LinodeActivity = React.lazy(
() => import('./LinodeActivity/LinodeActivity')
);
+const LinodeAlerts = React.lazy(() => import('./LinodeAlerts/LinodeAlerts'));
const LinodeSettings = React.lazy(
() => import('./LinodeSettings/LinodeSettings')
);
@@ -80,6 +81,10 @@ const LinodesDetailNavigation = () => {
routeName: `${url}/activity`,
title: 'Activity Feed',
},
+ {
+ routeName: `${url}/alerts`,
+ title: 'Alerts',
+ },
{
routeName: `${url}/settings`,
title: 'Settings',
@@ -165,6 +170,9 @@ const LinodesDetailNavigation = () => {
+
+
+