Skip to content

Commit

Permalink
add otelcol.receiver.file_stats component
Browse files Browse the repository at this point in the history
Add an otelcol.receiver.file_stats component which wraps around the
upstream filestatsreceiver component from the -contrib distribution.

Closes #238.
  • Loading branch information
rfratto committed May 9, 2024
1 parent ead12a0 commit 5b842a9
Show file tree
Hide file tree
Showing 8 changed files with 647 additions and 7 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ v1.1.0-rc.0
- (_Public preview_) Add support for setting GOMEMLIMIT based on cgroup setting. (@mattdurham)

- (_Public preview_) Introduce BoringCrypto Docker images.
The BoringCrypto image is tagged with the `-boringcrypto` suffix and
The BoringCrypto image is tagged with the `-boringcrypto` suffix and
is only available on AMD64 and ARM64 Linux containers.
(@rfratto, @mattdurham)

Expand All @@ -28,6 +28,9 @@ v1.1.0-rc.0

- `otelcol.exporter.loadbalancing`: Add a new `aws_cloud_map` resolver. (@ptodev)

- Introduce a `otelcol.receiver.file_stats` component from the upstream
OpenTelemetry `filestatsreceiver` component. (@rfratto)

### Enhancements

- Update `prometheus.exporter.kafka` with the following functionalities (@wildum):
Expand Down
269 changes: 269 additions & 0 deletions docs/sources/reference/components/otelcol.receiver.file_stats.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,269 @@
---
canonical: https://grafana.com/docs/alloy/latest/reference/components/otelcol.receiver.file_stats/
title: otelcol.receiver.file_stats
description: Learn about otelcol.receiver.file_stats
---

# otelcol.receiver.file_stats

`otelcol.receiver.file_stats` collects metrics from files specified with a glob pattern.

{{< admonition type="note" >}}
`otelcol.receiver.file_stats` is a wrapper over the upstream OpenTelemetry Collector `filestats` receiver from the `otelcol-contrib` distribution.
Bug reports or feature requests will be redirected to the upstream repository, if necessary.
{{< /admonition >}}

Multiple `otelcol.receiver.file_stats` components can be specified by giving them different labels.

## Usage

```alloy
otelcol.receiver.file_stats "LABEL" {
include = "GLOB_PATTERN"
output {
metrics = [...]
}
}
```

## Arguments

`otelcol.receiver.file_stats` supports the following arguments:

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`include` | `string` | Glob path for files to collect stats from. | | yes
`collection_interval` | `duration` | How often to collect file information. | `"1m"` | no
`initial_delay` | `duration` | Initial time to wait before collecting file information. | `"1s"` | no
`timeout` | `duration` | Timeout for collecting file information; `0s` means no timeout. | `"0s"` | no

`include` is a glob pattern that specifies which files and folders to collect
stats from. A `*` character matches files in a directory, while `**` includes
matches files. For example, `/var/log/**/*.log` matches all `.log` files in
`/var/log` and its subdirectories.

## Blocks

The following blocks are supported inside the definition of `otelcol.receiver.file_stats`:

Hierarchy | Block | Description | Required
--------- | ----- | ----------- | --------
metrics | [metrics][] | Configures which metrics will be sent to downstream components. | no
metrics > file.atime | [file.atime][] | Configures the `file.atime` metric. | no
metrics > file.count | [file.count][] | Configures the `file.count` metric. | no
metrics > file.ctime | [file.ctime][] | Configures the `file.ctime` metric. | no
metrics > file.mtime | [file.mtime][] | Configures the `file.mtime` metric. | no
metrics > file.size | [file.size][] | Configures the `file.size` metric. | no
resource_attributes | [resource_attributes][] | Configures resource attributes for metrics sent to downstream components. | no
resource_attributes > file.name | [file.name][] | Configures the `file.name` resource attribute. | no
resource_attributes > file.name > metrics_include | [metrics_include][] | Metrics to include the `file.name` resource attribute in. | no
resource_attributes > file.name > metrics_exclude | [metrics_exclude][] | Metrics to exclude the `file.name` resource attribute from. | no
resource_attributes > file.path | [file.path][] | Configures the `file.path` resource attribute. | no
resource_attributes > file.path > metrics_include | [metrics_include][] | Metrics to include the `file.path` resource attribute in. | no
resource_attributes > file.path > metrics_exclude | [metrics_exclude][] | Metrics to exclude the `file.path` resource attribute from. | no
debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no
output | [output][] | Configures where to send received telemetry data. | yes

[metrics]: #metrics-block
[file.atime]: #fileatime-block
[file.count]: #filecount-block
[file.ctime]: #filectime-block
[file.mtime]: #filemtime-block
[file.size]: #filesize-block
[resource_attributes]: #resource_attributes-block
[file.name]: #filename-block
[metrics_include]: #metrics_include-block
[metrics_exclude]: #metrics_exclude-block
[file.path]: #filepath-block
[debug_metrics]: #debug_metrics-block
[output]: #output-block

### metrics block

The `metrics` block configures the set of metrics that will be sent to downstream components.
It accepts no arguments, but contains other blocks for individual metrics:

* The [file.atime][] block
* The [file.count][] block
* The [file.ctime][] block
* The [file.mtime][] block
* The [file.size][] block

Refer to the documentation of individual metric blocks for whether that metric is enabled by default.

[file.atime]: #fileatime-block
[file.count]: #filecount-block
[file.ctime]: #filectime-block
[file.mtime]: #filemtime-block
[file.size]: #filesize-block

### file.atime block

The `file.atime` block configures the `file.atime` metric.
`file.atime` tracks the elapsed time since the last access of the file or folder in Unix seconds since the epoch.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`enabled` | `boolean` | Whether to collect the `file.atime` metric. | `false` | no

### file.count block

The `file.count` block configures the `file.count` metric.
`file.count` tracks the number of files and folders in the specified glob pattern.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`enabled` | `boolean` | Whether to collect the `file.count` metric. | `false` | no

### file.ctime block

The `file.ctime` block configures the `file.ctime` metric.
`file.ctime` tracks the elapsed time since the last change of the file or folder in Unix seconds since the epoch.
Changes include permissions, ownership, and timestamps.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`enabled` | `boolean` | Whether to collect the `file.ctime` metric. | `false` | no

### file.mtime block

The `file.mtime` block configures the `file.mtime` metric.
`file.mtime` tracks the elapsed time since the last modification of the file or folder in Unix seconds since the epoch.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`enabled` | `boolean` | Whether to collect the `file.mtime` metric. | `true` | no

### file.size block

The `file.size` block configures the `file.size` metric.
`file.size` tracks the size of the file or folder in bytes.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`enabled` | `boolean` | Whether to collect the `file.size` metric. | `true` | no

### resource_attributes block

The `resource_attributes` block configures resource attributes for metrics sent to downstream components.
It accepts no arguments, but contains other blocks for configuring individual resource attributes:

* The [file.name][] block
* The [file.path][] block

Refer to the documentation of individual resource attribute blocks for whether that resource attribute is enabled by default.

[file.name]: #filename-block
[file.path]: #filepath-block

### file.name block

The `file.name` block configures the `file.name` resource attribute.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`enabled` | `boolean` | Whether to include the `file.name` resource attribute. | `true` | no

When `enabled` is true, the `file.name` attribute is included in all metrics.

The children blocks `metrics_include` and `metrics_exclude` can be used to further filter which metrics are given the `file.name` attribute.
If a given metric matches all the `metrics_include` blocks and none of the `metrics_exclude` blocks, the `file.name` attribute is added.

### metrics_include block

The `metrics_include` block configures a filter for matching metrics.
The `metrics_include` block may be specified multiple times.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`strict` | `string` | The exact name of the metric to include. | | yes*
`regexp` | `string` | A regular expression for the metrics to include. | | yes*

Exactly one of `strict` or `regexp` must be specified.

### metrics_exclude block

The `metrics_exclude` block configures a filter for excluding metrics.
The `metrics_exclude` block may be specified multiple times.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`strict` | `string` | The exact name of the metric to exclude. | | yes*
`regexp` | `string` | A regular expression for the metrics to exclude. | | yes*

Exactly one of `strict` or `regexp` must be specified.

### file.path block

The `file.path` block configures the `file.path` resource attribute.

Name | Type | Description | Default | Required
---- | ---- | ----------- | ------- | --------
`enabled` | `boolean` | Whether to include the `file.path` resource attribute. | `false` | no

When `enabled` is true, the `file.path` attribute is included in all metrics.
The children blocks `metrics_include` and `metrics_exclude` can be used to further filter which metrics are given the `file.path` attribute.
If a given metric matches all the `metrics_include` blocks and none of the `metrics_exclude` blocks, the `file.path` attribute is added.

### debug_metrics block

{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="<ALLOY_VERSION>" >}}

### output block

{{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="<ALLOY_VERSION>" >}}

## Exported fields

`otelcol.receiver.file_stats` does not export any fields.

## Component health

`otelcol.receiver.file_stats` is only reported as unhealthy if given an invalid configuration.

## Debug information

`otelcol.receiver.file_stats` does not expose any component-specific debug information.

## Example

This example forwards file stats of files with the `.log` extension in `/var/log` through a batch processor before finally sending it to an OTLP-capable endpoint:

```alloy
otelcol.receiver.file_stats "default" {
include = "/var/log/**/*.log"
output {
metrics = [otelcol.processor.batch.default.input]
}
}
otelcol.processor.batch "default" {
output {
metrics = [otelcol.exporter.otlp.default.input]
}
}
otelcol.exporter.otlp "default" {
client {
endpoint = env("OTLP_ENDPOINT")
}
}
```

<!-- START GENERATED COMPATIBLE COMPONENTS -->

## Compatible components

`otelcol.receiver.file_stats` can accept arguments from the following components:

- Components that export [OpenTelemetry `otelcol.Consumer`](../../compatibility/#opentelemetry-otelcolconsumer-exporters)


{{< admonition type="note" >}}
Connecting some components may not be sensible or components may require further configuration to make the connection work correctly.
Refer to the linked documentation for more details.
{{< /admonition >}}

<!-- END GENERATED COMPATIBLE COMPONENTS -->
12 changes: 6 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,19 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1
github.com/Azure/go-autorest/autorest v0.11.29
github.com/IBM/sarama v1.43.1
github.com/KimMachineGun/automemlimit v0.6.0
github.com/Lusitaniae/apache_exporter v0.11.1-0.20220518131644-f9522724dab4
github.com/Masterminds/sprig/v3 v3.2.3
github.com/PuerkitoBio/rehttp v1.3.0
github.com/Shopify/sarama v1.38.1
github.com/alecthomas/kingpin/v2 v2.4.0
github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9
github.com/aws/aws-sdk-go v1.51.22 // indirect
github.com/aws/aws-sdk-go-v2 v1.26.1
github.com/aws/aws-sdk-go-v2/config v1.27.11
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1
github.com/aws/aws-sdk-go-v2/service/s3 v1.49.0
github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5
github.com/blang/semver/v4 v4.0.0
github.com/bmatcuk/doublestar v1.3.4
github.com/boynux/squid-exporter v1.10.5-0.20230618153315-c1fae094e18e
Expand Down Expand Up @@ -60,6 +63,7 @@ require (
github.com/grafana/go-gelf/v2 v2.0.1
github.com/grafana/jfr-parser/pprof v0.0.0-20240126072739-986e71dc0361
github.com/grafana/jsonparser v0.0.0-20240209175146-098958973a2d
github.com/grafana/kafka_exporter v0.0.0-20240409084445-5e3488ad9f9a
github.com/grafana/loki v1.6.2-0.20240221085104-f9d188620153 // k190 branch
github.com/grafana/loki/pkg/push v0.0.0-20231212100434-384e5c2dc872 // k180 branch
github.com/grafana/pyroscope-go/godeltaprof v0.1.7
Expand Down Expand Up @@ -254,12 +258,7 @@ require (
sigs.k8s.io/yaml v1.4.0
)

require (
github.com/KimMachineGun/automemlimit v0.6.0
github.com/Shopify/sarama v1.38.1
github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5
github.com/grafana/kafka_exporter v0.0.0-20240409084445-5e3488ad9f9a
)
require github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.99.0

require (
cloud.google.com/go v0.112.0 // indirect
Expand Down Expand Up @@ -340,6 +339,7 @@ require (
github.com/axiomhq/hyperloglog v0.0.0-20240124082744-24bca3a5b39b // indirect
github.com/beevik/ntp v1.3.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect
github.com/caarlos0/env/v9 v9.0.0 // indirect
github.com/cenkalti/backoff/v3 v3.0.0 // indirect
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,8 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0=
github.com/bmatcuk/doublestar v1.3.4/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE=
github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/boynux/squid-exporter v1.10.5-0.20230618153315-c1fae094e18e h1:C1vYe728vM2FpXaICJuDRt5zgGyRdMmUGYnVfM7WcLY=
Expand Down Expand Up @@ -1785,6 +1787,8 @@ github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsampling
github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.99.0/go.mod h1:VcylhFRTIFy5rFvHhRMg+DKwRW9kp7sbr+e2CiRC4+Y=
github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.99.0 h1:GRUah2g+YM2hLr0hewf+z5Fk2VsaakuxTGFUqvFw7/Y=
github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.99.0/go.mod h1:rGhH1L2ThE4CscUNS3nhZ8yUQCrnBqoa1Pz8ccj8lRY=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.99.0 h1:Qz9pQ+jDK+b3uPjze4AfNyzLNHGSskEosj2BV0Ao+xE=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.99.0/go.mod h1:yu04DIzkhgRo8diVu8iyE+mywIM3NjnlVbVoq5IdIC0=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.99.0 h1:ZFLADkTCZxJUSMl5CLRZoCU0LovlfDXTzOlPiCbnbeg=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.99.0/go.mod h1:5ZSvDckeb+JO3xKaoyv2nbdNXHyFsg8copo4x+giIf4=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.99.0 h1:632+Gox9DXLIrFK4sCICCA7nRZ0rTFeEou1a6egf1TQ=
Expand Down
1 change: 1 addition & 0 deletions internal/component/all/all.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ import (
_ "github.com/grafana/alloy/internal/component/otelcol/processor/span" // Import otelcol.processor.span
_ "github.com/grafana/alloy/internal/component/otelcol/processor/tail_sampling" // Import otelcol.processor.tail_sampling
_ "github.com/grafana/alloy/internal/component/otelcol/processor/transform" // Import otelcol.processor.transform
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/file_stats" // Import otelcol.receiver.file_stats
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/jaeger" // Import otelcol.receiver.jaeger
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/kafka" // Import otelcol.receiver.kafka
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/loki" // Import otelcol.receiver.loki
Expand Down
Loading

0 comments on commit 5b842a9

Please sign in to comment.