diff --git a/conf/defaults.ini b/conf/defaults.ini
index 9c74b4c2197..91e7af25442 100644
--- a/conf/defaults.ini
+++ b/conf/defaults.ini
@@ -462,6 +462,9 @@ datasource_limit = 5000
# Check datasource documentations for enabling concurrency.
concurrent_query_count = 10
+# Default behavior for the "Manage alerts via Alerting UI" toggle when configuring a data source.
+# It only works if the data source's `jsonData.manageAlerts` prop does not contain a previously configured value.
+default_manage_alerts_ui_toggle = true
################################### SQL Data Sources #####################
[sql_datasources]
diff --git a/conf/sample.ini b/conf/sample.ini
index 705b06e2195..d1a06d9c331 100644
--- a/conf/sample.ini
+++ b/conf/sample.ini
@@ -466,6 +466,10 @@
# Check datasource documentations for enabling concurrency.
;concurrent_query_count = 10
+# Default behavior for the "Manage alerts via Alerting UI" toggle when configuring a data source.
+# It only works if the data source's `jsonData.manageAlerts` prop does not contain a previously configured value.
+;default_manage_alerts_ui_toggle = true
+
################################### SQL Data Sources #####################
[sql_datasources]
# Default maximum number of open connections maintained in the connection pool
diff --git a/docs/sources/datasources/prometheus/configure-prometheus-data-source.md b/docs/sources/datasources/prometheus/configure-prometheus-data-source.md
index 014487ae277..6c94d9c7d45 100644
--- a/docs/sources/datasources/prometheus/configure-prometheus-data-source.md
+++ b/docs/sources/datasources/prometheus/configure-prometheus-data-source.md
@@ -117,9 +117,15 @@ Following are additional configuration options.
- **Manage alerts via Alerting UI** - Toggle to enable `Alertmanager` integration for this data source.
+{{% admonition type="note" %}}
+
+The **Manage alerts via Alerting UI** toggle is enabled by default. You can change this behavior by setting the [default_manage_alerts_ui_toggle]({{< relref "../../setup-grafana/configure-grafana/#default_manage_alerts_ui_toggle" >}}) option in the Grafana configuration file.
+
+{{% /admonition %}}
+
### Interval behavior
-- **Scrape interval** - Set this to the typical scrape and evaluation interval configured in Prometheus. The default is `15s`.
+- **Scrape interval** - Set to the typical scrape and evaluation interval configured in Prometheus. The default is `15s`.
- **Query timeout** - The default is `60s`.
diff --git a/docs/sources/setup-grafana/configure-grafana/_index.md b/docs/sources/setup-grafana/configure-grafana/_index.md
index 238da2179f5..780fd4c7a98 100644
--- a/docs/sources/setup-grafana/configure-grafana/_index.md
+++ b/docs/sources/setup-grafana/configure-grafana/_index.md
@@ -782,6 +782,12 @@ On Linux, Grafana uses `/usr/share/grafana/public/dashboards/home.json` as the d
+## [datasources]
+
+### default_manage_alerts_ui_toggle
+
+Default behavior for the "Manage alerts via Alerting UI" toggle when configuring a data source. It only works if the data source's `jsonData.manageAlerts` prop does not contain a previously configured value.
+
## [sql_datasources]
### max_open_conns_default
diff --git a/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.test.tsx b/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.test.tsx
new file mode 100644
index 00000000000..8c3d94d4c99
--- /dev/null
+++ b/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.test.tsx
@@ -0,0 +1,48 @@
+import { render } from '@testing-library/react';
+
+import { config } from '@grafana/runtime';
+
+import { createDefaultConfigOptions } from '../test/__mocks__/datasource';
+
+import { AlertingSettingsOverhaul } from './AlertingSettingsOverhaul';
+
+describe(AlertingSettingsOverhaul.name, () => {
+ describe('Switch checked behavior', () => {
+ describe('when options.jsonData.manageAlerts is unset', () => {
+ it('uses the config default `true`', () => {
+ const options = createDefaultConfigOptions();
+ options.jsonData.manageAlerts = undefined;
+
+ config.defaultDatasourceManageAlertsUiToggle = true;
+
+ const { getByRole } = render( {}} options={options} />);
+
+ expect(getByRole('switch')).toBeChecked();
+ });
+
+ it('uses the config default `false`', () => {
+ const options = createDefaultConfigOptions();
+ options.jsonData.manageAlerts = undefined;
+
+ config.defaultDatasourceManageAlertsUiToggle = false;
+
+ const { getByRole } = render( {}} options={options} />);
+
+ expect(getByRole('switch')).not.toBeChecked();
+ });
+ });
+
+ describe('when options.jsonData.manageAlerts is set', () => {
+ it.each([true, false])('uses the manageAlerts value even when the config default is %s', (configDefault) => {
+ const options = createDefaultConfigOptions();
+ options.jsonData.manageAlerts = true;
+
+ config.defaultDatasourceManageAlertsUiToggle = configDefault;
+
+ const { getByRole } = render( {}} options={options} />);
+
+ expect(getByRole('switch')).toBeChecked();
+ });
+ });
+ });
+});
diff --git a/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.tsx b/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.tsx
index feea1322c69..bade01d047e 100644
--- a/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.tsx
+++ b/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.tsx
@@ -4,6 +4,7 @@ import { cx } from '@emotion/css';
import { DataSourceJsonData, DataSourcePluginOptionsEditorProps } from '@grafana/data';
import { selectors } from '@grafana/e2e-selectors';
import { ConfigSubSection } from '@grafana/experimental';
+import { config } from '@grafana/runtime';
import { InlineField, Switch, useTheme2 } from '@grafana/ui';
import { docsTip, overhaulStyles } from './ConfigEditor';
@@ -43,7 +44,7 @@ export function AlertingSettingsOverhaul({
className={styles.switchField}
>
onOptionsChange({
...options,
diff --git a/packages/grafana-runtime/src/config.ts b/packages/grafana-runtime/src/config.ts
index 95f175fcca5..0ebfab4e4fd 100644
--- a/packages/grafana-runtime/src/config.ts
+++ b/packages/grafana-runtime/src/config.ts
@@ -188,6 +188,7 @@ export class GrafanaBootConfig implements GrafanaConfig {
maxIdleConns: 100,
connMaxLifetime: 14400,
};
+ defaultDatasourceManageAlertsUiToggle = true;
tokenExpirationDayLimit: undefined;
enableFrontendSandboxForPlugins: string[] = [];
diff --git a/pkg/api/dtos/frontend_settings.go b/pkg/api/dtos/frontend_settings.go
index 37a71629fde..e33490bd41b 100644
--- a/pkg/api/dtos/frontend_settings.go
+++ b/pkg/api/dtos/frontend_settings.go
@@ -242,6 +242,8 @@ type FrontendSettingsDTO struct {
Azure FrontendSettingsAzureDTO `json:"azure"`
+ DefaultDatasourceManageAlertsUIToggle bool `json:"defaultDatasourceManageAlertsUiToggle"`
+
Caching FrontendSettingsCachingDTO `json:"caching"`
RecordedQueries FrontendSettingsRecordedQueriesDTO `json:"recordedQueries"`
Reporting FrontendSettingsReportingDTO `json:"reporting"`
diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go
index 61e29c977be..8f17ad1e85e 100644
--- a/pkg/api/frontendsettings.go
+++ b/pkg/api/frontendsettings.go
@@ -245,6 +245,8 @@ func (hs *HTTPServer) getFrontendSettings(c *contextmodel.ReqContext) (*dtos.Fro
ReportingStaticContext: hs.Cfg.ReportingStaticContext,
ExploreDefaultTimeOffset: hs.Cfg.ExploreDefaultTimeOffset,
+ DefaultDatasourceManageAlertsUIToggle: hs.Cfg.DefaultDatasourceManageAlertsUIToggle,
+
BuildInfo: dtos.FrontendSettingsBuildInfoDTO{
HideVersion: hideVersion,
Version: version,
diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go
index 41ea9973030..bd58f2424d6 100644
--- a/pkg/setting/setting.go
+++ b/pkg/setting/setting.go
@@ -330,6 +330,9 @@ type Cfg struct {
DataSourceLimit int
// Number of queries to be executed concurrently. Only for the datasource supports concurrency.
ConcurrentQueryCount int
+ // Default behavior for the "Manage alerts via Alerting UI" toggle when configuring a data source.
+ // It only works if the data source's `jsonData.manageAlerts` prop does not contain a previously configured value.
+ DefaultDatasourceManageAlertsUIToggle bool
// IP range access control
IPRangeACEnabled bool
@@ -1914,6 +1917,7 @@ func (cfg *Cfg) readDataSourcesSettings() {
datasources := cfg.Raw.Section("datasources")
cfg.DataSourceLimit = datasources.Key("datasource_limit").MustInt(5000)
cfg.ConcurrentQueryCount = datasources.Key("concurrent_query_count").MustInt(10)
+ cfg.DefaultDatasourceManageAlertsUIToggle = datasources.Key("default_manage_alerts_ui_toggle").MustBool(true)
}
func (cfg *Cfg) readDataSourceSecuritySettings() {