Skip to content

Commit 73bb740

Browse files
johnlesliebraydonk
authored andcommitted
[receiver/hostmetrics] Add skeleton for new hostmetrics scraper: nfsscraper (open-telemetry#40050)
nfsscraper will provide metrics for the OS NFS client and server. #### Link to tracking issue [https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/39978](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/39978) nfsscraper is not initialized from hostmetricsreceiver in this skeleton PR. I did need to include a single metric in metadata.yaml so mdatagen would create the required files for tests to pass. --------- Co-authored-by: Braydon Kains <[email protected]>
1 parent b753cd3 commit 73bb740

26 files changed

+782
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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: hostmetricsreceiver
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Skeleton nfsscraper -- adds Linux nfs and nfsd metrics from /proc
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: [39978]
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+
20+
# If your change doesn't affect end users or the exported elements of any package,
21+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
22+
# Optional: The change log or logs in which this entry should be included.
23+
# e.g. '[user]' or '[user, api]'
24+
# Include 'user' if the change is relevant to end users.
25+
# Include 'api' if there is a change to a library API.
26+
# Default: '[user]'
27+
change_logs: [user, api]

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ receiver/hostmetricsreceiver/internal/scraper/filesystemscraper/ @open-telemetry
255255
receiver/hostmetricsreceiver/internal/scraper/loadscraper/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk
256256
receiver/hostmetricsreceiver/internal/scraper/memoryscraper/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk
257257
receiver/hostmetricsreceiver/internal/scraper/networkscraper/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk
258+
receiver/hostmetricsreceiver/internal/scraper/nfsscraper/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk
258259
receiver/hostmetricsreceiver/internal/scraper/pagingscraper/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk
259260
receiver/hostmetricsreceiver/internal/scraper/processesscraper/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk
260261
receiver/hostmetricsreceiver/internal/scraper/processscraper/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk

.github/ISSUE_TEMPLATE/bug_report.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ body:
260260
- receiver/hostmetrics/internal/scraper/loadscraper
261261
- receiver/hostmetrics/internal/scraper/memoryscraper
262262
- receiver/hostmetrics/internal/scraper/networkscraper
263+
- receiver/hostmetrics/internal/scraper/nfsscraper
263264
- receiver/hostmetrics/internal/scraper/pagingscraper
264265
- receiver/hostmetrics/internal/scraper/processesscraper
265266
- receiver/hostmetrics/internal/scraper/processscraper

.github/ISSUE_TEMPLATE/feature_request.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ body:
254254
- receiver/hostmetrics/internal/scraper/loadscraper
255255
- receiver/hostmetrics/internal/scraper/memoryscraper
256256
- receiver/hostmetrics/internal/scraper/networkscraper
257+
- receiver/hostmetrics/internal/scraper/nfsscraper
257258
- receiver/hostmetrics/internal/scraper/pagingscraper
258259
- receiver/hostmetrics/internal/scraper/processesscraper
259260
- receiver/hostmetrics/internal/scraper/processscraper

.github/ISSUE_TEMPLATE/other.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ body:
254254
- receiver/hostmetrics/internal/scraper/loadscraper
255255
- receiver/hostmetrics/internal/scraper/memoryscraper
256256
- receiver/hostmetrics/internal/scraper/networkscraper
257+
- receiver/hostmetrics/internal/scraper/nfsscraper
257258
- receiver/hostmetrics/internal/scraper/pagingscraper
258259
- receiver/hostmetrics/internal/scraper/processesscraper
259260
- receiver/hostmetrics/internal/scraper/processscraper

.github/ISSUE_TEMPLATE/unmaintained.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ body:
259259
- receiver/hostmetrics/internal/scraper/loadscraper
260260
- receiver/hostmetrics/internal/scraper/memoryscraper
261261
- receiver/hostmetrics/internal/scraper/networkscraper
262+
- receiver/hostmetrics/internal/scraper/nfsscraper
262263
- receiver/hostmetrics/internal/scraper/pagingscraper
263264
- receiver/hostmetrics/internal/scraper/processesscraper
264265
- receiver/hostmetrics/internal/scraper/processscraper

.github/component_labels.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ receiver/hostmetricsreceiver/internal/scraper/filesystemscraper receiver/hostmet
235235
receiver/hostmetricsreceiver/internal/scraper/loadscraper receiver/hostmetrics/internal/scraper/loadscraper
236236
receiver/hostmetricsreceiver/internal/scraper/memoryscraper receiver/hostmetrics/internal/scraper/memory
237237
receiver/hostmetricsreceiver/internal/scraper/networkscraper receiver/hostmetrics/internal/scraper/network
238+
receiver/hostmetricsreceiver/internal/scraper/nfsscraper receiver/hostmetrics/internal/scraper/nfsscraper
238239
receiver/hostmetricsreceiver/internal/scraper/pagingscraper receiver/hostmetrics/internal/scraper/paging
239240
receiver/hostmetricsreceiver/internal/scraper/processesscraper receiver/hostmetrics/internal/scraper/processes
240241
receiver/hostmetricsreceiver/internal/scraper/processscraper receiver/hostmetrics/internal/scraper/process
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package nfsscraper // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/nfsscraper"
5+
6+
import (
7+
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/nfsscraper/internal/metadata"
8+
)
9+
10+
// Config relating to NFS Metric Scraper.
11+
type Config struct {
12+
// MetricsBuilderConfig allows to customize scraped metrics/attributes representation.
13+
metadata.MetricsBuilderConfig `mapstructure:",squash"`
14+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
//go:generate mdatagen metadata.yaml
5+
6+
package nfsscraper // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/nfsscraper"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[comment]: <> (Code generated by mdatagen. DO NOT EDIT.)
2+
3+
# nfs
4+
5+
## Default Metrics
6+
7+
The following metrics are emitted by default. Each of them can be disabled by applying the following configuration:
8+
9+
```yaml
10+
metrics:
11+
<metric_name>:
12+
enabled: false
13+
```
14+
15+
### system.nfs.net.count
16+
17+
Reports the count of kernel NFS client network requests handled
18+
19+
| Unit | Metric Type | Value Type |
20+
| ---- | ----------- | ---------- |
21+
| {request} | Gauge | Int |
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package nfsscraper // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/nfsscraper"
5+
6+
import (
7+
"context"
8+
"errors"
9+
"runtime"
10+
11+
"go.opentelemetry.io/collector/component"
12+
"go.opentelemetry.io/collector/scraper"
13+
14+
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/nfsscraper/internal/metadata"
15+
)
16+
17+
var (
18+
supportedOS = runtime.GOOS == "linux"
19+
errUnsupportedOS = errors.New("the nfs scraper is only available on Linux")
20+
)
21+
22+
// NewFactory for NFS scraper.
23+
func NewFactory() scraper.Factory {
24+
return scraper.NewFactory(metadata.Type, createDefaultConfig, scraper.WithMetrics(createMetricsScraper, metadata.MetricsStability))
25+
}
26+
27+
// createDefaultConfig creates the default configuration for the Scraper.
28+
func createDefaultConfig() component.Config {
29+
return &Config{
30+
MetricsBuilderConfig: metadata.DefaultMetricsBuilderConfig(),
31+
}
32+
}
33+
34+
// createMetricsScraper creates a resource scraper based on provided config.
35+
func createMetricsScraper(
36+
ctx context.Context,
37+
settings scraper.Settings,
38+
cfg component.Config,
39+
) (scraper.Metrics, error) {
40+
if !supportedOS {
41+
return nil, errUnsupportedOS
42+
}
43+
44+
nfsScraper := newNfsScraper(ctx, settings, cfg.(*Config))
45+
46+
return scraper.NewMetrics(
47+
nfsScraper.scrape,
48+
scraper.WithStart(nfsScraper.start),
49+
)
50+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package nfsscraper
5+
6+
import (
7+
"context"
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
"go.opentelemetry.io/collector/scraper/scrapertest"
12+
13+
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/nfsscraper/internal/metadata"
14+
)
15+
16+
func TestNfsScraper(t *testing.T) {
17+
factory := NewFactory()
18+
cfg := &Config{}
19+
20+
scraper, err := factory.CreateMetrics(context.Background(), scrapertest.NewNopSettings(metadata.Type), cfg)
21+
22+
if supportedOS {
23+
assert.NoError(t, err)
24+
assert.NotNil(t, scraper)
25+
} else {
26+
assert.ErrorIs(t, err, errUnsupportedOS)
27+
assert.Nil(t, scraper)
28+
}
29+
}

receiver/hostmetricsreceiver/internal/scraper/nfsscraper/generated_component_test.go

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

receiver/hostmetricsreceiver/internal/scraper/nfsscraper/generated_package_test.go

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

receiver/hostmetricsreceiver/internal/scraper/nfsscraper/internal/metadata/generated_config.go

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

receiver/hostmetricsreceiver/internal/scraper/nfsscraper/internal/metadata/generated_config_test.go

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

0 commit comments

Comments
 (0)