Skip to content

Commit b648cd5

Browse files
authored
Handle Azure SQL Managed Instance AO secondary lag (#23558)
1 parent 3c4e189 commit b648cd5

3 files changed

Lines changed: 39 additions & 1 deletion

File tree

sqlserver/changelog.d/23558.fixed

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Report Always On secondary lag metrics on Azure SQL Managed Instance when ProductMajorVersion reports 12.

sqlserver/datadog_checks/sqlserver/database_metrics/ao_metrics.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from typing import List
66

7+
from datadog_checks.sqlserver.const import ENGINE_EDITION_AZURE_MANAGED_INSTANCE
78
from datadog_checks.sqlserver.utils import is_azure_database
89

910
from .base import SqlserverDatabaseMetricsBase
@@ -89,6 +90,10 @@ def __repr__(self) -> str:
8990
f"include_ao_metrics={self.include_ao_metrics})"
9091
)
9192

93+
def _supports_secondary_lag_seconds(self) -> bool:
94+
# Managed Instance supports this DMV column while reporting a non-boxed ProductMajorVersion.
95+
return self.major_version >= 13 or self.engine_edition == ENGINE_EDITION_AZURE_MANAGED_INSTANCE
96+
9297
def __get_query_ao_availability_groups(self) -> dict:
9398
"""
9499
Construct the sys.availability_groups QueryExecutor configuration based on the SQL Server major version
@@ -168,7 +173,7 @@ def __get_query_ao_availability_groups(self) -> dict:
168173
}
169174

170175
# Include metrics based on version
171-
if self.major_version >= 13:
176+
if self._supports_secondary_lag_seconds():
172177
column_definitions_metrics["DRS.secondary_lag_seconds"] = {
173178
"name": "ao.secondary_lag_seconds",
174179
"type": "gauge",

sqlserver/tests/test_database_metrics.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
from datadog_checks.sqlserver import SQLServer
1313
from datadog_checks.sqlserver.const import (
14+
ENGINE_EDITION_AZURE_MANAGED_INSTANCE,
15+
ENGINE_EDITION_SQL_DATABASE,
1416
STATIC_INFO_ENGINE_EDITION,
1517
STATIC_INFO_MAJOR_VERSION,
1618
STATIC_INFO_SERVERNAME,
@@ -308,6 +310,36 @@ def test_sqlserver_availability_replicas_query_uses_parameterized_queries(init_c
308310
assert q['params'] == (ag_with_quotes, db_with_quotes)
309311

310312

313+
@pytest.mark.parametrize(
314+
'engine_edition, major_version, expected',
315+
[
316+
(ENGINE_EDITION_AZURE_MANAGED_INSTANCE, 12, True),
317+
(ENGINE_EDITION_SQL_DATABASE, 12, False),
318+
(SQLSERVER_ENGINE_EDITION, 12, False),
319+
(SQLSERVER_ENGINE_EDITION, 13, True),
320+
],
321+
)
322+
def test_sqlserver_ao_metrics_secondary_lag_support(
323+
init_config, instance_docker_metrics, engine_edition, major_version, expected
324+
):
325+
instance_docker_metrics['database_metrics'] = {
326+
'ao_metrics': {'enabled': True},
327+
}
328+
sqlserver_check = SQLServer(CHECK_NAME, init_config, [instance_docker_metrics])
329+
ao_metrics = SqlserverAoMetrics(
330+
config=sqlserver_check._config,
331+
new_query_executor=sqlserver_check._new_query_executor,
332+
server_static_info={
333+
STATIC_INFO_ENGINE_EDITION: engine_edition,
334+
STATIC_INFO_MAJOR_VERSION: major_version,
335+
},
336+
execute_query_handler=mock.MagicMock(),
337+
)
338+
339+
assert ("DRS.secondary_lag_seconds" in ao_metrics.queries[0]['query']) is expected
340+
assert ("sqlserver.ao.secondary_lag_seconds" in ao_metrics.metric_names()[0]) is expected
341+
342+
311343
@pytest.mark.integration
312344
@pytest.mark.usefixtures('dd_environment')
313345
@pytest.mark.parametrize('include_ao_metrics', [True, False])

0 commit comments

Comments
 (0)