Skip to content

Commit

Permalink
[O11y][MSSQL] Add optional mssql.query field to performance data st…
Browse files Browse the repository at this point in the history
…ream for debugging purposes (elastic#12212)

* Remove unnecessary processor in performance data stream

* add changelog entry

* added debug flag that can  preserve mssql.query field when enabled

* Update packages/microsoft_sqlserver/data_stream/performance/manifest.yml

Co-authored-by: Lalit Satapathy <69236064+lalit-satapathy@users.noreply.github.com>

* update tag name

* minor change in pipeline and system tests

* minor change in tag description

* address review comments

---------

Co-authored-by: Lalit Satapathy <69236064+lalit-satapathy@users.noreply.github.com>
  • Loading branch information
harnish-elastic and lalit-satapathy authored Jan 17, 2025
1 parent 767b182 commit 273355f
Show file tree
Hide file tree
Showing 12 changed files with 300 additions and 112 deletions.
5 changes: 5 additions & 0 deletions packages/microsoft_sqlserver/changelog.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# newer versions go on top
- version: "2.10.0"
changes:
- description: Add optional mssql.query field to `performance` data stream for debugging purposes.
type: enhancement
link: https://github.com/elastic/integrations/pull/12212
- version: "2.9.6"
changes:
- description: Update links to getting started docs
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fields:
tags:
- preserve_sql_queries
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
{
"events": [
{
"@timestamp": "2024-12-30T10:34:25.697Z",
"metricset": {
"name": "query",
"period": 10000
},
"ecs": {
"version": "8.11.0"
},
"host": {
"name": "localhost"
},
"agent": {
"version": "8.13.0",
"ephemeral_id": "70a3cef1-ba97-481f-95df-7c36355408c6",
"id": "90dfcb72-653c-4ce1-b473-98969e1f308c",
"name": "localhost",
"type": "metricbeat"
},
"service": {
"address": "localhost:32782",
"type": "sql"
},
"sql": {
"metrics": {
"page_splits_per_sec": 1192,
"transactions": 0,
"compilations_per_sec": 115026,
"buffer_checkpoint_pages_per_sec": 516,
"buffer_target_pages": 1196032,
"buffer_database_pages": 2940,
"logouts_per_sec": 71268,
"active_temp_tables": 0,
"lock_waits_per_sec": 2,
"batch_requests_per_sec": 455338,
"user_connections": 2,
"server_name": "f8ca37b1f01d",
"logins_per_sec": 71270,
"instance_name": "MSSQLSERVER",
"buffer_cache_hit_ratio": 74,
"connection_reset_per_sec": 274901,
"buffer_page_life_expectancy": 529720,
"re_compilations_per_sec": 400
},
"driver": "mssql",
"query": [
"SELECT @@servername AS server_name, @@servicename AS instance_name;",
"SELECT cntr_value As 'active_temp_tables' FROM sys.dm_os_performance_counters WHERE counter_name = 'Active Temp Tables' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'batch_requests_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Batch Requests/sec'",
"SELECT cntr_value As 'buffer_cache_hit_ratio' FROM sys.dm_os_performance_counters WHERE counter_name = 'Buffer cache hit ratio' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_checkpoint_pages_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Checkpoint pages/sec' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_database_pages' FROM sys.dm_os_performance_counters WHERE counter_name = 'Database pages' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_page_life_expectancy' FROM sys.dm_os_performance_counters WHERE counter_name = 'Page life expectancy' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_target_pages' FROM sys.dm_os_performance_counters WHERE counter_name = 'Target pages' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'compilations_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'SQL Compilations/sec'",
"SELECT cntr_value As 'connection_reset_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Connection Reset/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'lock_waits_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Lock Waits/sec' AND instance_name = '_Total'",
"SELECT cntr_value As 'logins_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Logins/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'logouts_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Logouts/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'page_splits_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Page splits/sec'",
"SELECT cntr_value As 're_compilations_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'SQL Re-Compilations/sec'",
"SELECT cntr_value As 'transactions' FROM sys.dm_os_performance_counters WHERE counter_name = 'Transactions' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'user_connections' FROM sys.dm_os_performance_counters WHERE counter_name= 'User Connections'",
"SELECT counter_name, cntr_value FROM sys.dm_os_performance_counters WHERE counter_name like 'Memory Grants Pend%'"
]
}
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{
"expected": [
{
"@timestamp": "2024-12-30T10:34:25.697Z",
"agent": {
"ephemeral_id": "70a3cef1-ba97-481f-95df-7c36355408c6",
"id": "90dfcb72-653c-4ce1-b473-98969e1f308c",
"name": "localhost",
"type": "metricbeat",
"version": "8.13.0"
},
"ecs": {
"version": "8.11.0"
},
"host": {
"name": "localhost"
},
"metricset": {
"name": "query",
"period": 10000
},
"mssql": {
"metrics": {
"active_temp_tables": 0,
"batch_requests_per_sec": 455338,
"buffer_cache_hit_ratio": 74,
"buffer_checkpoint_pages_per_sec": 516,
"buffer_database_pages": 2940,
"buffer_page_life_expectancy": 529720,
"buffer_target_pages": 1196032,
"compilations_per_sec": 115026,
"connection_reset_per_sec": 274901,
"instance_name": "MSSQLSERVER",
"lock_waits_per_sec": 2,
"logins_per_sec": 71270,
"logouts_per_sec": 71268,
"page_splits_per_sec": 1192,
"re_compilations_per_sec": 400,
"server_name": "f8ca37b1f01d",
"transactions": 0,
"user_connections": 2
},
"query": [
"SELECT @@servername AS server_name, @@servicename AS instance_name;",
"SELECT cntr_value As 'active_temp_tables' FROM sys.dm_os_performance_counters WHERE counter_name = 'Active Temp Tables' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'batch_requests_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Batch Requests/sec'",
"SELECT cntr_value As 'buffer_cache_hit_ratio' FROM sys.dm_os_performance_counters WHERE counter_name = 'Buffer cache hit ratio' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_checkpoint_pages_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Checkpoint pages/sec' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_database_pages' FROM sys.dm_os_performance_counters WHERE counter_name = 'Database pages' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_page_life_expectancy' FROM sys.dm_os_performance_counters WHERE counter_name = 'Page life expectancy' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_target_pages' FROM sys.dm_os_performance_counters WHERE counter_name = 'Target pages' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'compilations_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'SQL Compilations/sec'",
"SELECT cntr_value As 'connection_reset_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Connection Reset/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'lock_waits_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Lock Waits/sec' AND instance_name = '_Total'",
"SELECT cntr_value As 'logins_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Logins/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'logouts_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Logouts/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'page_splits_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Page splits/sec'",
"SELECT cntr_value As 're_compilations_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'SQL Re-Compilations/sec'",
"SELECT cntr_value As 'transactions' FROM sys.dm_os_performance_counters WHERE counter_name = 'Transactions' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'user_connections' FROM sys.dm_os_performance_counters WHERE counter_name= 'User Connections'",
"SELECT counter_name, cntr_value FROM sys.dm_os_performance_counters WHERE counter_name like 'Memory Grants Pend%'"
]
},
"service": {
"address": "localhost:32782",
"type": "sql"
},
"tags": [
"preserve_sql_queries"
]
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ vars:
- "{{Hostname}}"
username: sa
password: 1234_asdf
data_stream:
vars:
preserve_sql_queries: true
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,7 @@ sql_queries:
processors:
{{processors}}
{{/if}}
tags:
{{#if preserve_sql_queries}}
- preserve_sql_queries
{{/if}}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ processors:
field: sql.driver
ignore_missing: true
ignore_failure: true
- remove:
field: sql.query
ignore_missing: true
ignore_failure: true
- rename:
field: sql
target_field: mssql
ignore_missing: true
ignore_failure: true
- remove:
field: mssql.query
if: "ctx?.tags == null || !(ctx.tags.contains('preserve_sql_queries'))"
ignore_missing: true
ignore_failure: true
- foreach:
field: mssql.metrics
ignore_missing: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,6 @@
- name: memory_grants_pending
type: long
description: This is generated from the default pattern given for Dynamic Counter Name variable. This counter tells us how many processes are waiting for the memory to be assigned to them so they can get started.
- name: query
type: keyword
description: The SQL queries executed.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ streams:
show_user: true
default: 'Memory Grants Pend%'
description: Collect the values for dynamic counters based on the provided pattern from the performance table.
- name: preserve_sql_queries
required: true
show_user: false
title: Preserve SQL Queries
description: Preserves SQL queries for debugging purposes. This feature is available in Elastic stack version 8.18 and later.
type: bool
multi: false
default: false
- name: processors
type: yaml
title: Processors
Expand Down
116 changes: 62 additions & 54 deletions packages/microsoft_sqlserver/data_stream/performance/sample_event.json
Original file line number Diff line number Diff line change
@@ -1,67 +1,52 @@
{
"@timestamp": "2022-11-23T05:03:28.987Z",
"@timestamp": "2025-01-16T06:17:48.647Z",
"agent": {
"ephemeral_id": "70f5c0c1-37b1-486b-9806-8105b2cdcd20",
"id": "6d444a4a-2158-445e-8953-dc6eef720a34",
"name": "docker-fleet-agent",
"ephemeral_id": "de13136c-dc52-4b51-87c3-7fe7592f46dc",
"id": "c0b6b234-d11b-4387-ab3b-fa3084042073",
"name": "elastic-agent-74192",
"type": "metricbeat",
"version": "8.5.0"
},
"cloud": {
"account": {},
"instance": {
"id": "b30e45e6-7900-4900-8d67-e37cb13374bc",
"name": "obs-int-windows-dev"
},
"machine": {
"type": "Standard_D16ds_v5"
},
"provider": "azure",
"region": "CentralIndia",
"service": {
"name": "Virtual Machines"
}
"version": "8.18.0"
},
"data_stream": {
"dataset": "microsoft_sqlserver.performance",
"namespace": "ep",
"namespace": "93265",
"type": "metrics"
},
"ecs": {
"version": "8.11.0"
"version": "8.0.0"
},
"elastic_agent": {
"id": "6d444a4a-2158-445e-8953-dc6eef720a34",
"snapshot": false,
"version": "8.5.0"
"id": "c0b6b234-d11b-4387-ab3b-fa3084042073",
"snapshot": true,
"version": "8.18.0"
},
"event": {
"agent_id_status": "verified",
"dataset": "microsoft_sqlserver.performance",
"duration": 41134100,
"ingested": "2022-11-23T05:03:30Z",
"duration": 71801450,
"ingested": "2025-01-16T06:17:51Z",
"module": "sql"
},
"host": {
"architecture": "x86_64",
"containerized": false,
"hostname": "docker-fleet-agent",
"id": "66392b0697b84641af8006d87aeb89f1",
"containerized": true,
"hostname": "elastic-agent-74192",
"ip": [
"172.18.0.5"
"192.168.242.2",
"192.168.255.6"
],
"mac": [
"02-42-AC-12-00-05"
"02-42-C0-A8-F2-02",
"02-42-C0-A8-FF-06"
],
"name": "docker-fleet-agent",
"name": "elastic-agent-74192",
"os": {
"codename": "focal",
"family": "debian",
"kernel": "5.10.104-linuxkit",
"name": "Ubuntu",
"platform": "ubuntu",
"family": "",
"kernel": "3.10.0-1160.92.1.el7.x86_64",
"name": "Wolfi",
"platform": "wolfi",
"type": "linux",
"version": "20.04.5 LTS (Focal Fossa)"
"version": "20230201"
}
},
"metricset": {
Expand All @@ -71,28 +56,51 @@
"mssql": {
"metrics": {
"active_temp_tables": 0,
"batch_requests_per_sec": 54,
"buffer_cache_hit_ratio": 24,
"buffer_checkpoint_pages_per_sec": 105,
"buffer_database_pages": 2215,
"buffer_page_life_expectancy": 16,
"buffer_target_pages": 2408448,
"compilations_per_sec": 80,
"batch_requests_per_sec": 15,
"buffer_cache_hit_ratio": 995,
"buffer_checkpoint_pages_per_sec": 70,
"buffer_database_pages": 2208,
"buffer_page_life_expectancy": 19,
"buffer_target_pages": 1196032,
"compilations_per_sec": 67,
"connection_reset_per_sec": 13,
"instance_name": "MSSQLSERVER",
"lock_waits_per_sec": 4,
"logins_per_sec": 16,
"logouts_per_sec": 15,
"lock_waits_per_sec": 3,
"logins_per_sec": 3,
"logouts_per_sec": 2,
"memory_grants_pending": 0,
"page_splits_per_sec": 9,
"re_compilations_per_sec": 0,
"server_name": "d10aad520431",
"server_name": "ec6574eadb15",
"transactions": 0,
"user_connections": 1
}
},
"query": [
"SELECT @@servername AS server_name, @@servicename AS instance_name;",
"SELECT cntr_value As 'active_temp_tables' FROM sys.dm_os_performance_counters WHERE counter_name = 'Active Temp Tables' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'batch_requests_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Batch Requests/sec'",
"SELECT cntr_value As 'buffer_cache_hit_ratio' FROM sys.dm_os_performance_counters WHERE counter_name = 'Buffer cache hit ratio' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_checkpoint_pages_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Checkpoint pages/sec' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_database_pages' FROM sys.dm_os_performance_counters WHERE counter_name = 'Database pages' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_page_life_expectancy' FROM sys.dm_os_performance_counters WHERE counter_name = 'Page life expectancy' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'buffer_target_pages' FROM sys.dm_os_performance_counters WHERE counter_name = 'Target pages' AND object_name like '%Buffer Manager%'",
"SELECT cntr_value As 'compilations_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'SQL Compilations/sec'",
"SELECT cntr_value As 'connection_reset_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Connection Reset/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'lock_waits_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Lock Waits/sec' AND instance_name = '_Total'",
"SELECT cntr_value As 'logins_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Logins/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'logouts_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Logouts/sec' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'page_splits_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'Page splits/sec'",
"SELECT cntr_value As 're_compilations_per_sec' FROM sys.dm_os_performance_counters WHERE counter_name = 'SQL Re-Compilations/sec'",
"SELECT cntr_value As 'transactions' FROM sys.dm_os_performance_counters WHERE counter_name = 'Transactions' AND object_name like '%General Statistics%'",
"SELECT cntr_value As 'user_connections' FROM sys.dm_os_performance_counters WHERE counter_name= 'User Connections'",
"SELECT counter_name, cntr_value FROM sys.dm_os_performance_counters WHERE counter_name like 'Memory Grants Pend%'"
]
},
"service": {
"address": "elastic-package-service_microsoft_sqlserver_1",
"address": "svc-microsoft_sqlserver",
"type": "sql"
}
}
},
"tags": [
"preserve_sql_queries"
]
}
Loading

0 comments on commit 273355f

Please sign in to comment.