Skip to content

Commit f8c4e71

Browse files
authored
[receiver/sqlserver] Add new resource pool disk operations metric (#39985)
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue. Ex. Adding a feature - Explain what this achieves.--> #### Description The new metric `sqlserver.resource_pool.disk.operations` is a rate of operations/second on the resource pool. Metric naming feedback is welcome. <!-- Issue number (e.g. #1234) or full URL to issue, if applicable. --> #### Link to tracking issue Part of #39977 <!--Describe what testing was performed and which tests were added.--> #### Testing Updated existing tests and testdata
1 parent 5b5f6a7 commit f8c4e71

15 files changed

+508
-233
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: enhancement
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: receiver/sqlserver
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Add new metric for disk IO rate on a resource pool
11+
12+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
13+
issues: [39977]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext: |
19+
The new metric `sqlserver.resource_pool.disk.operations` is disabled by default.
20+
21+
# If your change doesn't affect end users or the exported elements of any package,
22+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
23+
# Optional: The change log or logs in which this entry should be included.
24+
# e.g. '[user]' or '[user, api]'
25+
# Include 'user' if the change is relevant to end users.
26+
# Include 'api' if there is a change to a library API.
27+
# Default: '[user]'
28+
change_logs: []

receiver/sqlserverreceiver/documentation.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,22 @@ Throughput rate of replica data.
431431
| ---- | ----------- | ------ |
432432
| replica.direction | The direction of flow of bytes for replica. | Str: ``transmit``, ``receive`` |
433433
434+
### sqlserver.resource_pool.disk.operations
435+
436+
The rate of operations issued.
437+
438+
This metric is only available when the receiver is configured to directly connect to SQL Server.
439+
440+
| Unit | Metric Type | Value Type |
441+
| ---- | ----------- | ---------- |
442+
| {operations}/s | Gauge | Double |
443+
444+
#### Attributes
445+
446+
| Name | Description | Values |
447+
| ---- | ----------- | ------ |
448+
| direction | The direction of flow of bytes or operations. | Str: ``read``, ``write`` |
449+
434450
### sqlserver.resource_pool.disk.throttled.read.rate
435451
436452
The number of read operations that were throttled in the last second

receiver/sqlserverreceiver/factory.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ func isPerfCounterQueryEnabled(metrics *metadata.MetricsConfig) bool {
278278
metrics.SqlserverProcessesBlocked.Enabled ||
279279
metrics.SqlserverReplicaDataRate.Enabled ||
280280
metrics.SqlserverResourcePoolDiskThrottledReadRate.Enabled ||
281+
metrics.SqlserverResourcePoolDiskOperations.Enabled ||
281282
metrics.SqlserverResourcePoolDiskThrottledWriteRate.Enabled ||
282283
metrics.SqlserverTableCount.Enabled ||
283284
metrics.SqlserverTransactionDelay.Enabled ||

receiver/sqlserverreceiver/factory_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ func TestSetupQueries(t *testing.T) {
264264

265265
metricsMetadata, ok := metadata["metrics"].(map[string]any)
266266
require.True(t, ok)
267-
require.Len(t, metricsMetadata, 45,
267+
require.Len(t, metricsMetadata, 46,
268268
"Every time metrics are added or removed, the function `setupQueries` must "+
269269
"be modified to properly account for the change. Please update `setupQueries` and then, "+
270270
"and only then, update the expected metric count here.")

receiver/sqlserverreceiver/internal/metadata/generated_config.go

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

receiver/sqlserverreceiver/internal/metadata/generated_config_test.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

receiver/sqlserverreceiver/internal/metadata/generated_metrics.go

Lines changed: 63 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

receiver/sqlserverreceiver/internal/metadata/generated_metrics_test.go

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

receiver/sqlserverreceiver/internal/metadata/testdata/config.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ all_set:
6363
enabled: true
6464
sqlserver.replica.data.rate:
6565
enabled: true
66+
sqlserver.resource_pool.disk.operations:
67+
enabled: true
6668
sqlserver.resource_pool.disk.throttled.read.rate:
6769
enabled: true
6870
sqlserver.resource_pool.disk.throttled.write.rate:
@@ -166,6 +168,8 @@ none_set:
166168
enabled: false
167169
sqlserver.replica.data.rate:
168170
enabled: false
171+
sqlserver.resource_pool.disk.operations:
172+
enabled: false
169173
sqlserver.resource_pool.disk.throttled.read.rate:
170174
enabled: false
171175
sqlserver.resource_pool.disk.throttled.write.rate:

receiver/sqlserverreceiver/metadata.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,14 @@ metrics:
244244
input_type: string
245245
attributes: [ physical_filename, logical_filename, file_type, direction ]
246246
extended_documentation: This metric is only available when the receiver is configured to directly connect to SQL Server.
247+
sqlserver.resource_pool.disk.operations:
248+
enabled: false
249+
description: The rate of operations issued.
250+
unit: "{operations}/s"
251+
gauge:
252+
value_type: double
253+
attributes: [ direction ]
254+
extended_documentation: This metric is only available when the receiver is configured to directly connect to SQL Server.
247255
sqlserver.resource_pool.disk.throttled.read.rate:
248256
enabled: false
249257
description: The number of read operations that were throttled in the last second

receiver/sqlserverreceiver/scraper.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,9 @@ func (s *sqlServerScraperHelper) recordDatabasePerfCounterMetrics(ctx context.Co
210210
const bufferCacheHitRatio = "Buffer cache hit ratio"
211211
const bytesReceivedFromReplicaPerSec = "Bytes Received from Replica/sec"
212212
const bytesSentForReplicaPerSec = "Bytes Sent to Replica/sec"
213+
const diskReadIOSec = "Disk Read IO/sec"
213214
const diskReadIOThrottled = "Disk Read IO Throttled/sec"
215+
const diskWriteIOSec = "Disk Write IO/sec"
214216
const diskWriteIOThrottled = "Disk Write IO Throttled/sec"
215217
const executionErrors = "Execution Errors"
216218
const freeListStalls = "Free list stalls/sec"
@@ -300,8 +302,24 @@ func (s *sqlServerScraperHelper) recordDatabasePerfCounterMetrics(ctx context.Co
300302
} else {
301303
s.mb.RecordSqlserverReplicaDataRateDataPoint(now, val.(float64), metadata.AttributeReplicaDirectionTransmit)
302304
}
305+
case diskReadIOSec:
306+
val, err := retrieveFloat(row, valueKey)
307+
if err != nil {
308+
err = fmt.Errorf("failed to parse valueKey for row %d: %w in %s", i, err, diskReadIOSec)
309+
errs = append(errs, err)
310+
} else {
311+
s.mb.RecordSqlserverResourcePoolDiskOperationsDataPoint(now, val.(float64), metadata.AttributeDirectionRead)
312+
}
303313
case diskReadIOThrottled:
304314
errs = append(errs, s.mb.RecordSqlserverResourcePoolDiskThrottledReadRateDataPoint(now, row[valueKey]))
315+
case diskWriteIOSec:
316+
val, err := retrieveFloat(row, valueKey)
317+
if err != nil {
318+
err = fmt.Errorf("failed to parse valueKey for row %d: %w in %s", i, err, diskWriteIOSec)
319+
errs = append(errs, err)
320+
} else {
321+
s.mb.RecordSqlserverResourcePoolDiskOperationsDataPoint(now, val.(float64), metadata.AttributeDirectionWrite)
322+
}
305323
case diskWriteIOThrottled:
306324
errs = append(errs, s.mb.RecordSqlserverResourcePoolDiskThrottledWriteRateDataPoint(now, row[valueKey]))
307325
case executionErrors:

receiver/sqlserverreceiver/scraper_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ func configureAllScraperMetrics(cfg *Config, enabled bool) {
4444

4545
cfg.Metrics.SqlserverProcessesBlocked.Enabled = enabled
4646

47+
cfg.Metrics.SqlserverResourcePoolDiskOperations.Enabled = enabled
4748
cfg.Metrics.SqlserverResourcePoolDiskThrottledReadRate.Enabled = enabled
4849
cfg.Metrics.SqlserverResourcePoolDiskThrottledWriteRate.Enabled = enabled
4950

0 commit comments

Comments
 (0)