diff --git a/CHANGELOG.md b/CHANGELOG.md index ac951e6495..7d3c6235e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ Main (unreleased) - Add `yaml_decode` to standard library. (@mattdurham, @djcode) +- Allow override debug metrics level for `otelcol.*` components. (@hainenber) + ### Bugfixes - Fix panic when component ID contains `/` in `otelcomponent.MustNewType(ID)`.(@qclaogui) diff --git a/docs/sources/reference/components/otelcol.auth.basic.md b/docs/sources/reference/components/otelcol.auth.basic.md index 6edddf109f..3c5e3e8380 100644 --- a/docs/sources/reference/components/otelcol.auth.basic.md +++ b/docs/sources/reference/components/otelcol.auth.basic.md @@ -36,6 +36,21 @@ Name | Type | Description | Def `username` | `string` | Username to use for basic authentication requests. | | yes `password` | `secret` | Password to use for basic authentication requests. | | yes +## Blocks + +The following blocks are supported inside the definition of +`otelcol.auth.basic`: + +Hierarchy | Block | Description | Required +----------|------------|--------------------------------------|--------- +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no + +[debug_metrics]: #debug_metrics-block + +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.auth.bearer.md b/docs/sources/reference/components/otelcol.auth.bearer.md index cbc5f82e0a..a6eb8703a6 100644 --- a/docs/sources/reference/components/otelcol.auth.bearer.md +++ b/docs/sources/reference/components/otelcol.auth.bearer.md @@ -38,6 +38,21 @@ Name | Type | Description | Default When sending the token, the value of `scheme` is prepended to the `token` value. The string is then sent out as either a header (in case of HTTP) or as metadata (in case of gRPC). +## Blocks + +The following blocks are supported inside the definition of +`otelcol.auth.bearer`: + +Hierarchy | Block | Description | Required +----------|------------|--------------------------------------|--------- +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no + +[debug_metrics]: #debug_metrics-block + +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.auth.headers.md b/docs/sources/reference/components/otelcol.auth.headers.md index 1da369da68..3858ac059a 100644 --- a/docs/sources/reference/components/otelcol.auth.headers.md +++ b/docs/sources/reference/components/otelcol.auth.headers.md @@ -40,8 +40,10 @@ The following blocks are supported inside the definition of Hierarchy | Block | Description | Required ----------|------------|--------------------------------------|--------- header | [header][] | Custom header to attach to requests. | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [header]: #header-block +[debug_metrics]: #debug_metrics-block ### header block @@ -72,6 +74,10 @@ For `from_context` to work, other components in the pipeline also need to be con Do this by adding the value that `from_context` needs to the `metadata_keys` of the batch processor. * `otelcol` receivers must be configured with `include_metadata` set to `true` so that metadata keys are available to the pipeline. +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.auth.oauth2.md b/docs/sources/reference/components/otelcol.auth.oauth2.md index 0980daec17..1582c342fa 100644 --- a/docs/sources/reference/components/otelcol.auth.oauth2.md +++ b/docs/sources/reference/components/otelcol.auth.oauth2.md @@ -60,8 +60,10 @@ The following blocks are supported inside the definition of Hierarchy | Block | Description | Required ----------|---------|------------------------------------|--------- tls | [tls][] | TLS settings for the token client. | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [tls]: #tls-block +[debug_metrics]: #debug_metrics-block ### tls block @@ -69,6 +71,10 @@ The `tls` block configures TLS settings used for connecting to the token client. {{< docs/shared lookup="reference/components/otelcol-tls-client-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.auth.sigv4.md b/docs/sources/reference/components/otelcol.auth.sigv4.md index cbdf669b4b..ec344623a0 100644 --- a/docs/sources/reference/components/otelcol.auth.sigv4.md +++ b/docs/sources/reference/components/otelcol.auth.sigv4.md @@ -60,8 +60,10 @@ The following blocks are supported inside the definition of Hierarchy | Block | Description | Required ------------|-----------------|------------------------------------|--------- assume_role | [assume_role][] | Configuration for assuming a role. | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [assume_role]: #assume_role-block +[debug_metrics]: #debug_metrics-block ### assume_role block @@ -77,6 +79,10 @@ If the `assume_role` block is specified in the config and `sts_region` is not se For cross region authentication, `region` and `sts_region` can be set different to different values. +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.connector.host_info.md b/docs/sources/reference/components/otelcol.connector.host_info.md index f57c9cb7eb..521c0b9b1b 100644 --- a/docs/sources/reference/components/otelcol.connector.host_info.md +++ b/docs/sources/reference/components/otelcol.connector.host_info.md @@ -35,13 +35,19 @@ The following blocks are supported inside the definition of | Hierarchy | Block | Description | Required | | --------- | ---------- | ------------------------------------------------- | -------- | | output | [output][] | Configures where to send received telemetry data. | yes | +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [output]: #output-block +[debug_metrics]: #debug_metrics-block ### output block {{< docs/shared lookup="reference/components/output-block-metrics.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.connector.servicegraph.md b/docs/sources/reference/components/otelcol.connector.servicegraph.md index 34380de346..b46fb4f134 100644 --- a/docs/sources/reference/components/otelcol.connector.servicegraph.md +++ b/docs/sources/reference/components/otelcol.connector.servicegraph.md @@ -118,9 +118,11 @@ Hierarchy | Block | Description | Required ----------|------------|-------------------------------------------|--------- store | [store][] | Configures the in-memory store for spans. | no output | [output][] | Configures where to send telemetry data. | yes +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [store]: #store-block [output]: #output-block +[debug_metrics]: #debug_metrics-block ### store block @@ -135,6 +137,10 @@ Name | Type | Description | Defau {{< docs/shared lookup="reference/components/output-block-metrics.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.connector.spanmetrics.md b/docs/sources/reference/components/otelcol.connector.spanmetrics.md index 7251344b66..24874ee28a 100644 --- a/docs/sources/reference/components/otelcol.connector.spanmetrics.md +++ b/docs/sources/reference/components/otelcol.connector.spanmetrics.md @@ -102,6 +102,7 @@ The following blocks are supported inside the definition of | histogram > explicit | [explicit][] | Configuration for a histogram with explicit buckets. | no | | histogram > exponential | [exponential][] | Configuration for a histogram with exponential buckets. | no | | output | [output][] | Configures where to send telemetry data. | yes | +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no It is necessary to specify either a "[exponential][]" or an "[explicit][]" block: @@ -115,6 +116,7 @@ It is necessary to specify either a "[exponential][]" or an "[explicit][]" block [exemplars]: #exemplars-block [events]: #events-block [output]: #output-block +[debug_metrics]: #debug_metrics-block ### dimension block @@ -212,6 +214,10 @@ The following attributes are supported: {{< docs/shared lookup="reference/components/output-block-metrics.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.exporter.loadbalancing.md b/docs/sources/reference/components/otelcol.exporter.loadbalancing.md index 843acb929d..55e7407c7a 100644 --- a/docs/sources/reference/components/otelcol.exporter.loadbalancing.md +++ b/docs/sources/reference/components/otelcol.exporter.loadbalancing.md @@ -84,7 +84,7 @@ protocol > otlp > client > tls | [tls][] | Configures TLS for th protocol > otlp > client > keepalive | [keepalive][] | Configures keepalive settings for the gRPC client. | no protocol > otlp > queue | [queue][] | Configures batching of data before sending. | no protocol > otlp > retry | [retry][] | Configures retry mechanism for failed requests. | no -debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no The `>` symbol indicates deeper levels of nesting. For example, `resolver > static` refers to a `static` block defined inside a `resolver` block. diff --git a/docs/sources/reference/components/otelcol.exporter.prometheus.md b/docs/sources/reference/components/otelcol.exporter.prometheus.md index 452e2d9c28..d7850e44b3 100644 --- a/docs/sources/reference/components/otelcol.exporter.prometheus.md +++ b/docs/sources/reference/components/otelcol.exporter.prometheus.md @@ -63,6 +63,21 @@ See [Creating Prometheus labels from OTLP resource attributes][] for an example. [Creating Prometheus labels from OTLP resource attributes]: #creating-prometheus-labels-from-otlp-resource-attributes {{< /admonition >}} +## Blocks + +The following blocks are supported inside the definition of +`otelcol.exporter.prometheus`: + +Hierarchy | Block | Description | Required +----------|------------|--------------------------------------|--------- +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no + +[debug_metrics]: #debug_metrics-block + +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.extension.jaeger_remote_sampling.md b/docs/sources/reference/components/otelcol.extension.jaeger_remote_sampling.md index 9bddb301b3..dcf285eeca 100644 --- a/docs/sources/reference/components/otelcol.extension.jaeger_remote_sampling.md +++ b/docs/sources/reference/components/otelcol.extension.jaeger_remote_sampling.md @@ -47,6 +47,7 @@ source | [source][] | Configures the source > remote | [remote][] | Configures the gRPC client used to retrieve the Jaeger remote sampling document. | no source > remote > tls | [tls_client][] | Configures TLS for the gRPC client. | no source > remote > keepalive | [keepalive][] | Configures keepalive settings for the gRPC client. | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no The `>` symbol indicates deeper levels of nesting. For example, `grpc > tls` refers to a `tls` block defined inside a `grpc` block. @@ -62,6 +63,7 @@ refers to a `tls` block defined inside a `grpc` block. [remote]: #remote-block [tls_client]: #tls-client-block [keepalive_client]: #keepalive-client-block +[debug_metrics]: #debug_metrics-block ### http block @@ -238,6 +240,10 @@ Name | Type | Description `ping_response_timeout` | `duration` | Time to wait before closing inactive connections if the server does not respond to a ping. | | no `ping_without_stream` | `boolean` | Send pings even if there is no active stream request. | | no +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Component health `otelcol.extension.jaeger_remote_sampling` is only reported as unhealthy if given an invalid diff --git a/docs/sources/reference/components/otelcol.processor.attributes.md b/docs/sources/reference/components/otelcol.processor.attributes.md index 4dda4f50f6..58502956e4 100644 --- a/docs/sources/reference/components/otelcol.processor.attributes.md +++ b/docs/sources/reference/components/otelcol.processor.attributes.md @@ -54,6 +54,7 @@ exclude > attribute | [attribute][] | A list of attributes to match agains exclude > resource | [resource][] | A list of items to match the resources against. | no exclude > library | [library][] | A list of items to match the implementation library against. | no exclude > log_severity | [log_severity][] | How to match against a log record's SeverityNumber, if defined. | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no The `>` symbol indicates deeper levels of nesting. For example, `include > attribute` refers to an `attribute` block defined inside an `include` block. @@ -69,6 +70,7 @@ If both an `include` block and an `exclude`block are specified, the `include` pr [resource]: #resource-block [library]: #library-block [log_severity]: #log_severity-block +[debug_metrics]: #debug_metrics-block ### action block @@ -205,6 +207,10 @@ For example, adding a `span_names` filter could cause the component to error if {{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.processor.batch.md b/docs/sources/reference/components/otelcol.processor.batch.md index 3885e41444..ba0dc2553c 100644 --- a/docs/sources/reference/components/otelcol.processor.batch.md +++ b/docs/sources/reference/components/otelcol.processor.batch.md @@ -98,13 +98,19 @@ The following blocks are supported inside the definition of Hierarchy | Block | Description | Required ----------|------------|---------------------------------------------------|--------- output | [output][] | Configures where to send received telemetry data. | yes +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [output]: #output-block +[debug_metrics]: #debug_metrics-block ### output block {{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.processor.filter.md b/docs/sources/reference/components/otelcol.processor.filter.md index 42aa1613a6..72809b0d21 100644 --- a/docs/sources/reference/components/otelcol.processor.filter.md +++ b/docs/sources/reference/components/otelcol.processor.filter.md @@ -89,11 +89,13 @@ traces | [traces][] | Statements which filter traces. | no metrics | [metrics][] | Statements which filter metrics. | no logs | [logs][] | Statements which filter logs. | no output | [output][] | Configures where to send received telemetry data. | yes +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [traces]: #traces-block [metrics]: #metrics-block [logs]: #logs-block [output]: #output-block +[debug_metrics]: #debug_metrics-block ### traces block @@ -160,6 +162,10 @@ Only one of the statements inside the list of statements has to be satisfied. {{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.processor.k8sattributes.md b/docs/sources/reference/components/otelcol.processor.k8sattributes.md index cfa05e3484..065a2716ee 100644 --- a/docs/sources/reference/components/otelcol.processor.k8sattributes.md +++ b/docs/sources/reference/components/otelcol.processor.k8sattributes.md @@ -72,6 +72,7 @@ pod_association | [pod_association][] | Rules to associate pod metadata pod_association > source | [source][] | Source information to identify a pod. | no exclude | [exclude][] | Exclude pods from being processed. | no exclude > pod | [pod][] | Pod information. | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no The `>` symbol indicates deeper levels of nesting. For example, `extract > annotation` @@ -88,6 +89,7 @@ refers to an `annotation` block defined inside an `extract` block. [source]: #source-block [exclude]: #exclude-block [pod]: #pod-block +[debug_metrics]: #debug_metrics-block ### extract block @@ -237,6 +239,10 @@ Name | Type | Description | Default | Required {{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.processor.memory_limiter.md b/docs/sources/reference/components/otelcol.processor.memory_limiter.md index 47e4e3094a..b6e7b63237 100644 --- a/docs/sources/reference/components/otelcol.processor.memory_limiter.md +++ b/docs/sources/reference/components/otelcol.processor.memory_limiter.md @@ -76,13 +76,19 @@ The following blocks are supported inside the definition of Hierarchy | Block | Description | Required ----------|------------|---------------------------------------------------|--------- output | [output][] | Configures where to send received telemetry data. | yes +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [output]: #output-block +[debug_metrics]: #debug_metrics-block ### output block {{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.processor.probabilistic_sampler.md b/docs/sources/reference/components/otelcol.processor.probabilistic_sampler.md index 1f52e2c6fc..b4e347ee85 100644 --- a/docs/sources/reference/components/otelcol.processor.probabilistic_sampler.md +++ b/docs/sources/reference/components/otelcol.processor.probabilistic_sampler.md @@ -60,6 +60,21 @@ Trace ID hashing samples based on hash values determined by trace IDs. The `probabilistic_sampler` supports sampling logs according to their trace ID, or by a specific log record attribute. +## Blocks + +The following blocks are supported inside the definition of +`otelcol.processor.probabilistic_sampler`: + +Hierarchy | Block | Description | Required +----------|------------|--------------------------------------|--------- +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no + +[debug_metrics]: #debug_metrics-block + +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.processor.resourcedetection.md b/docs/sources/reference/components/otelcol.processor.resourcedetection.md index 9b6cd1d17a..00f9ede0be 100644 --- a/docs/sources/reference/components/otelcol.processor.resourcedetection.md +++ b/docs/sources/reference/components/otelcol.processor.resourcedetection.md @@ -98,8 +98,10 @@ heroku | [heroku][] | system | [system][] | | no openshift | [openshift][] | | no kubernetes_node | [kubernetes_node][] | | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [output]: #output +[debug_metrics]: #debug_metrics-block [ec2]: #ec2 [ecs]: #ecs [eks]: #eks @@ -120,6 +122,10 @@ kubernetes_node | [kubernetes_node][] | {{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ### ec2 The `ec2` block reads resource information from the [EC2 instance metadata API][] using the [AWS SDK for Go][]. diff --git a/docs/sources/reference/components/otelcol.processor.span.md b/docs/sources/reference/components/otelcol.processor.span.md index 2e35d4d008..9869692150 100644 --- a/docs/sources/reference/components/otelcol.processor.span.md +++ b/docs/sources/reference/components/otelcol.processor.span.md @@ -51,6 +51,7 @@ exclude > regexp | [regexp][] | Regex cache settings. exclude > attribute | [attribute][] | A list of attributes to match against. | no exclude > resource | [resource][] | A list of items to match the resources against. | no exclude > library | [library][] | A list of items to match the implementation library against. | no +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no The `>` symbol indicates deeper levels of nesting. For example, `include > attribute` refers to an `attribute` block defined inside an `include` block. @@ -67,6 +68,7 @@ If both an `include` block and an `exclude`block are specified, the `include` pr [attribute]: #attribute-block [resource]: #resource-block [library]: #library-block +[debug_metrics]: #debug_metrics-block ### name block @@ -198,6 +200,10 @@ with a non-empty value for a valid configuration. {{< docs/shared lookup="reference/components/output-block-traces.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.processor.tail_sampling.md b/docs/sources/reference/components/otelcol.processor.tail_sampling.md index 707bdc8018..c440510497 100644 --- a/docs/sources/reference/components/otelcol.processor.tail_sampling.md +++ b/docs/sources/reference/components/otelcol.processor.tail_sampling.md @@ -99,6 +99,7 @@ policy > composite > composite_sub_policy > boolean_attribute | [boolean_attribu policy > composite > composite_sub_policy > ottl_condition | [ottl_condition] | The policy will sample based on a given boolean OTTL condition (span and span event). | no policy > composite > composite_sub_policy > trace_state | [trace_state] | The policy will sample based on TraceState value matches. | no output | [output] [] | Configures where to send received telemetry data. | yes +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [policy]: #policy-block [latency]: #latency-block @@ -117,6 +118,7 @@ output | [output] [] | Co [composite_sub_policy]: #composite_sub_policy-block [output]: #output-block [otelcol.exporter.otlp]: ../otelcol.exporter.otlp/ +[debug_metrics]: #debug_metrics-block ### policy block @@ -311,6 +313,10 @@ Name | Type | Description | Default | Required {{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/reference/components/otelcol.processor.transform.md b/docs/sources/reference/components/otelcol.processor.transform.md index e154557b02..c3a50b111c 100644 --- a/docs/sources/reference/components/otelcol.processor.transform.md +++ b/docs/sources/reference/components/otelcol.processor.transform.md @@ -118,11 +118,13 @@ trace_statements | [trace_statements][] | Statements which transform traces. | n metric_statements | [metric_statements][] | Statements which transform metrics. | no log_statements | [log_statements][] | Statements which transform logs. | no output | [output][] | Configures where to send received telemetry data. | yes +debug_metrics | [debug_metrics][] | Configures the metrics that this component generates to monitor its state. | no [trace_statements]: #trace_statements-block [metric_statements]: #metric_statements-block [log_statements]: #log_statements-block [output]: #output-block +[debug_metrics]: #debug_metrics-block [OTTL Context]: #ottl-context @@ -246,6 +248,10 @@ span using the `span` context, it is more efficient to use the `resource` contex {{< docs/shared lookup="reference/components/output-block.md" source="alloy" version="" >}} +### debug_metrics block + +{{< docs/shared lookup="reference/components/otelcol-debug-metrics-block.md" source="alloy" version="" >}} + ## Exported fields The following fields are exported and can be referenced by other components: diff --git a/docs/sources/shared/reference/components/otelcol-debug-metrics-block.md b/docs/sources/shared/reference/components/otelcol-debug-metrics-block.md index b5c03cd72e..71bdfe2cce 100644 --- a/docs/sources/shared/reference/components/otelcol-debug-metrics-block.md +++ b/docs/sources/shared/reference/components/otelcol-debug-metrics-block.md @@ -11,7 +11,15 @@ The following arguments are supported: Name | Type | Description | Default | Required -----------------------------------|-----------|------------------------------------------------------|---------|--------- `disable_high_cardinality_metrics` | `boolean` | Whether to disable certain high cardinality metrics. | `true` | no +`level` | `string` | Controls the level of detail for metrics emitted by the wrapped collector. | `"detailed"` | no `disable_high_cardinality_metrics` is the Grafana Alloy equivalent to the `telemetry.disableHighCardinalityMetrics` feature gate in the OpenTelemetry Collector. It removes attributes that could cause high cardinality metrics. For example, attributes with IP addresses and port numbers in metrics about HTTP and gRPC connections are removed. + +{{< admonition type="note" >}} +If configured, `disable_high_cardinality_metrics` only applies to `otelcol.exporter.*` and `otelcol.receiver.*` components. +{{< /admonition >}} + +`level` is the {{< param "PRODUCT_NAME" >}} equivalent to the `telemetry.metrics.level` feature gate in the OpenTelemetry Collector. +Possible values are `"none"`, `"basic"`, `"normal"` and `"detailed"`. \ No newline at end of file diff --git a/internal/component/otelcol/auth/auth.go b/internal/component/otelcol/auth/auth.go index a404962806..ea8ed56746 100644 --- a/internal/component/otelcol/auth/auth.go +++ b/internal/component/otelcol/auth/auth.go @@ -14,13 +14,13 @@ import ( "github.com/grafana/alloy/internal/build" "github.com/grafana/alloy/internal/component" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/lazycollector" "github.com/grafana/alloy/internal/component/otelcol/internal/scheduler" "github.com/grafana/alloy/internal/util/zapadapter" "github.com/grafana/alloy/syntax" "github.com/prometheus/client_golang/prometheus" otelcomponent "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" otelextension "go.opentelemetry.io/collector/extension" sdkprometheus "go.opentelemetry.io/otel/exporters/prometheus" "go.opentelemetry.io/otel/sdk/metric" @@ -42,6 +42,9 @@ type Arguments interface { // Exporters returns the set of exporters that are exposed to the configured // component. Exporters() map[otelcomponent.DataType]map[otelcomponent.ID]otelcomponent.Component + + // DebugMetricsConfig returns the configuration for debug metrics + DebugMetricsConfig() otelcolCfg.DebugMetricsArguments } // Exports is a common Exports type for Alloy components which expose @@ -137,13 +140,18 @@ func (a *Auth) Update(args component.Arguments) error { return err } + metricsLevel, err := rargs.DebugMetricsConfig().Level.Convert() + if err != nil { + return err + } + settings := otelextension.CreateSettings{ TelemetrySettings: otelcomponent.TelemetrySettings{ Logger: zapadapter.New(a.opts.Logger), TracerProvider: a.opts.Tracer, MeterProvider: metric.NewMeterProvider(metric.WithReader(promExporter)), - MetricsLevel: configtelemetry.LevelDetailed, + MetricsLevel: metricsLevel, ReportStatus: func(*otelcomponent.StatusEvent) {}, }, diff --git a/internal/component/otelcol/auth/auth_test.go b/internal/component/otelcol/auth/auth_test.go index 8659c31013..57f3a9858e 100644 --- a/internal/component/otelcol/auth/auth_test.go +++ b/internal/component/otelcol/auth/auth_test.go @@ -9,6 +9,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" "github.com/grafana/alloy/internal/component/otelcol/auth" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/util" "github.com/stretchr/testify/require" @@ -123,3 +124,9 @@ func TestNormalizeType(t *testing.T) { require.True(t, typeRegexp.MatchString(actual)) } } + +func (fe fakeAuthArgs) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + var dma otelcolCfg.DebugMetricsArguments + dma.SetToDefault() + return dma +} diff --git a/internal/component/otelcol/auth/basic/basic.go b/internal/component/otelcol/auth/basic/basic.go index ae2bc370dc..5bdcfb93c1 100644 --- a/internal/component/otelcol/auth/basic/basic.go +++ b/internal/component/otelcol/auth/basic/basic.go @@ -4,6 +4,7 @@ package basic import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol/auth" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax/alloytypes" "github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension" @@ -32,10 +33,18 @@ type Arguments struct { Username string `alloy:"username,attr"` Password alloytypes.Secret `alloy:"password,attr"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var _ auth.Arguments = Arguments{} +// SetToDefault implements syntax.Defaulter. +func (args *Arguments) SetToDefault() { + args.DebugMetrics.SetToDefault() +} + // Convert implements auth.Arguments. func (args Arguments) Convert() (otelcomponent.Config, error) { return &basicauthextension.Config{ @@ -55,3 +64,8 @@ func (args Arguments) Extensions() map[otelcomponent.ID]otelextension.Extension func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.ID]otelcomponent.Component { return nil } + +// DebugMetricsConfig implements auth.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/auth/bearer/bearer.go b/internal/component/otelcol/auth/bearer/bearer.go index bfdff7d8c7..e5c2d391cc 100644 --- a/internal/component/otelcol/auth/bearer/bearer.go +++ b/internal/component/otelcol/auth/bearer/bearer.go @@ -4,6 +4,7 @@ package bearer import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol/auth" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax/alloytypes" "github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension" @@ -31,6 +32,9 @@ type Arguments struct { // Do not include the "filename" attribute - users should use local.file instead. Scheme string `alloy:"scheme,attr,optional"` Token alloytypes.Secret `alloy:"token,attr"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var _ auth.Arguments = Arguments{} @@ -43,6 +47,7 @@ var DefaultArguments = Arguments{ // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { *args = DefaultArguments + args.DebugMetrics.SetToDefault() } // Convert implements auth.Arguments. @@ -62,3 +67,8 @@ func (args Arguments) Extensions() map[otelcomponent.ID]otelextension.Extension func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.ID]otelcomponent.Component { return nil } + +// DebugMetricsConfig implements auth.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/auth/headers/headers.go b/internal/component/otelcol/auth/headers/headers.go index 98273a5ce4..1d17a28d10 100644 --- a/internal/component/otelcol/auth/headers/headers.go +++ b/internal/component/otelcol/auth/headers/headers.go @@ -8,6 +8,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol/auth" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax" "github.com/grafana/alloy/syntax/alloytypes" @@ -33,10 +34,18 @@ func init() { // Arguments configures the otelcol.auth.headers component. type Arguments struct { Headers []Header `alloy:"header,block,optional"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var _ auth.Arguments = Arguments{} +// SetToDefault implements syntax.Defaulter. +func (args *Arguments) SetToDefault() { + args.DebugMetrics.SetToDefault() +} + // Convert implements auth.Arguments. func (args Arguments) Convert() (otelcomponent.Config, error) { var upstreamHeaders []headerssetterextension.HeaderConfig @@ -75,6 +84,11 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I return nil } +// DebugMetricsConfig implements auth.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} + type Action string const ( diff --git a/internal/component/otelcol/auth/oauth2/oauth2.go b/internal/component/otelcol/auth/oauth2/oauth2.go index 5b3288f3f6..11ae705759 100644 --- a/internal/component/otelcol/auth/oauth2/oauth2.go +++ b/internal/component/otelcol/auth/oauth2/oauth2.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" "github.com/grafana/alloy/internal/component/otelcol/auth" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax/alloytypes" "github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension" @@ -40,10 +41,17 @@ type Arguments struct { Scopes []string `alloy:"scopes,attr,optional"` TLSSetting otelcol.TLSClientArguments `alloy:"tls,block,optional"` Timeout time.Duration `alloy:"timeout,attr,optional"` + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var _ auth.Arguments = Arguments{} +// SetToDefault implements syntax.Defaulter. +func (args *Arguments) SetToDefault() { + args.DebugMetrics.SetToDefault() +} + // Convert implements auth.Arguments. func (args Arguments) Convert() (otelcomponent.Config, error) { return &oauth2clientauthextension.Config{ @@ -68,3 +76,8 @@ func (args Arguments) Extensions() map[otelcomponent.ID]otelextension.Extension func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.ID]otelcomponent.Component { return nil } + +// DebugMetricsConfig implements auth.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/auth/sigv4/sigv4.go b/internal/component/otelcol/auth/sigv4/sigv4.go index 9da5105410..09c7ad6797 100644 --- a/internal/component/otelcol/auth/sigv4/sigv4.go +++ b/internal/component/otelcol/auth/sigv4/sigv4.go @@ -3,6 +3,7 @@ package sigv4 import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol/auth" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/featuregate" "github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension" otelcomponent "go.opentelemetry.io/collector/component" @@ -28,12 +29,19 @@ type Arguments struct { Region string `alloy:"region,attr,optional"` Service string `alloy:"service,attr,optional"` AssumeRole AssumeRole `alloy:"assume_role,block,optional"` + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( _ auth.Arguments = Arguments{} ) +// SetToDefault implements syntax.Defaulter. +func (args *Arguments) SetToDefault() { + args.DebugMetrics.SetToDefault() +} + // Convert implements auth.Arguments. func (args Arguments) Convert() (otelcomponent.Config, error) { res := sigv4authextension.Config{ @@ -65,6 +73,11 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I return nil } +// DebugMetricsConfig implements auth.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} + // AssumeRole replicates sigv4authextension.Config.AssumeRole type AssumeRole struct { ARN string `alloy:"arn,attr,optional"` diff --git a/internal/component/otelcol/config/config_debug_metrics.go b/internal/component/otelcol/config/config_debug_metrics.go new file mode 100644 index 0000000000..bf7e1ffd02 --- /dev/null +++ b/internal/component/otelcol/config/config_debug_metrics.go @@ -0,0 +1,49 @@ +package otelcol + +import ( + "fmt" + + "go.opentelemetry.io/collector/config/configtelemetry" +) + +type Level string + +const ( + // LevelNone indicates that no telemetry data should be collected. + LevelNone = "none" + // LevelBasic is the recommended and covers the basics of the service telemetry. + LevelBasic = "basic" + // LevelNormal adds some other indicators on top of basic. + LevelNormal = "normal" + // LevelDetailed adds dimensions and views to the previous levels. + LevelDetailed = "detailed" +) + +func (l Level) Convert() (configtelemetry.Level, error) { + switch l { + case LevelNone: + return configtelemetry.LevelNone, nil + case LevelNormal: + return configtelemetry.LevelNormal, nil + case LevelBasic: + return configtelemetry.LevelBasic, nil + case LevelDetailed: + return configtelemetry.LevelDetailed, nil + default: + return configtelemetry.LevelBasic, fmt.Errorf("unrecognized debug metric level: %s", l) + } +} + +// DebugMetricsArguments configures internal metrics of the components +type DebugMetricsArguments struct { + DisableHighCardinalityMetrics bool `alloy:"disable_high_cardinality_metrics,attr,optional"` + Level Level `alloy:"level,attr,optional"` +} + +// SetToDefault implements syntax.Defaulter. +func (args *DebugMetricsArguments) SetToDefault() { + *args = DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + Level: LevelDetailed, + } +} diff --git a/internal/component/otelcol/config_debug_metrics.go b/internal/component/otelcol/config_debug_metrics.go deleted file mode 100644 index 1f6fa4db4b..0000000000 --- a/internal/component/otelcol/config_debug_metrics.go +++ /dev/null @@ -1,13 +0,0 @@ -package otelcol - -// DebugMetricsArguments configures internal metrics of the components -type DebugMetricsArguments struct { - DisableHighCardinalityMetrics bool `alloy:"disable_high_cardinality_metrics,attr,optional"` -} - -// SetToDefault implements syntax.Defaulter. -func (args *DebugMetricsArguments) SetToDefault() { - *args = DebugMetricsArguments{ - DisableHighCardinalityMetrics: true, - } -} diff --git a/internal/component/otelcol/connector/connector.go b/internal/component/otelcol/connector/connector.go index a7511f8b49..d6d623e997 100644 --- a/internal/component/otelcol/connector/connector.go +++ b/internal/component/otelcol/connector/connector.go @@ -10,6 +10,7 @@ import ( "github.com/grafana/alloy/internal/build" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/fanoutconsumer" "github.com/grafana/alloy/internal/component/otelcol/internal/lazycollector" "github.com/grafana/alloy/internal/component/otelcol/internal/lazyconsumer" @@ -17,7 +18,6 @@ import ( "github.com/grafana/alloy/internal/util/zapadapter" "github.com/prometheus/client_golang/prometheus" otelcomponent "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" otelconnector "go.opentelemetry.io/collector/connector" otelextension "go.opentelemetry.io/collector/extension" sdkprometheus "go.opentelemetry.io/otel/exporters/prometheus" @@ -57,6 +57,9 @@ type Arguments interface { NextConsumers() *otelcol.ConsumerArguments ConnectorType() int + + // DebugMetricsConfig returns the configuration for debug metrics + DebugMetricsConfig() otelcolCfg.DebugMetricsArguments } // Connector is an Alloy component shim which manages an OpenTelemetry @@ -144,13 +147,18 @@ func (p *Connector) Update(args component.Arguments) error { return err } + metricsLevel, err := pargs.DebugMetricsConfig().Level.Convert() + if err != nil { + return err + } + settings := otelconnector.CreateSettings{ TelemetrySettings: otelcomponent.TelemetrySettings{ Logger: zapadapter.New(p.opts.Logger), TracerProvider: p.opts.Tracer, MeterProvider: metric.NewMeterProvider(metric.WithReader(promExporter)), - MetricsLevel: configtelemetry.LevelDetailed, + MetricsLevel: metricsLevel, ReportStatus: func(*otelcomponent.StatusEvent) {}, }, diff --git a/internal/component/otelcol/connector/host_info/host_info.go b/internal/component/otelcol/connector/host_info/host_info.go index 739681f830..9952a6bbcd 100644 --- a/internal/component/otelcol/connector/host_info/host_info.go +++ b/internal/component/otelcol/connector/host_info/host_info.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/connector" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax" @@ -35,6 +36,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -49,6 +53,7 @@ func (args *Arguments) SetToDefault() { HostIdentifiers: []string{"host.id"}, MetricsFlushInterval: 60 * time.Second, } + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -91,3 +96,8 @@ func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { func (Arguments) ConnectorType() int { return connector.ConnectorTracesToMetrics } + +// DebugMetricsConfig implements connector.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/connector/servicegraph/servicegraph.go b/internal/component/otelcol/connector/servicegraph/servicegraph.go index 1607aed48e..f2cd3f9092 100644 --- a/internal/component/otelcol/connector/servicegraph/servicegraph.go +++ b/internal/component/otelcol/connector/servicegraph/servicegraph.go @@ -6,6 +6,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/connector" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax" @@ -63,6 +64,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } type StoreConfig struct { @@ -123,6 +127,7 @@ func (args *Arguments) SetToDefault() { // }, } args.Store.SetToDefault() + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -188,3 +193,8 @@ func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { func (Arguments) ConnectorType() int { return connector.ConnectorTracesToMetrics } + +// DebugMetricsConfig implements connector.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/connector/spanmetrics/spanmetrics.go b/internal/component/otelcol/connector/spanmetrics/spanmetrics.go index f3e4106e14..4f3927d3ae 100644 --- a/internal/component/otelcol/connector/spanmetrics/spanmetrics.go +++ b/internal/component/otelcol/connector/spanmetrics/spanmetrics.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/connector" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax" @@ -80,6 +81,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -105,6 +109,7 @@ var DefaultArguments = Arguments{ // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { *args = DefaultArguments + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -205,3 +210,8 @@ func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { func (Arguments) ConnectorType() int { return connector.ConnectorTracesToMetrics } + +// DebugMetricsConfig implements receiver.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/exporter/exporter.go b/internal/component/otelcol/exporter/exporter.go index 96eb1dab26..3b4692016e 100644 --- a/internal/component/otelcol/exporter/exporter.go +++ b/internal/component/otelcol/exporter/exporter.go @@ -10,6 +10,7 @@ import ( "github.com/grafana/alloy/internal/build" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/lazycollector" "github.com/grafana/alloy/internal/component/otelcol/internal/lazyconsumer" "github.com/grafana/alloy/internal/component/otelcol/internal/scheduler" @@ -17,7 +18,6 @@ import ( "github.com/grafana/alloy/internal/util/zapadapter" "github.com/prometheus/client_golang/prometheus" otelcomponent "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" otelexporter "go.opentelemetry.io/collector/exporter" otelextension "go.opentelemetry.io/collector/extension" sdkprometheus "go.opentelemetry.io/otel/exporters/prometheus" @@ -42,7 +42,7 @@ type Arguments interface { Exporters() map[otelcomponent.DataType]map[otelcomponent.ID]otelcomponent.Component // DebugMetricsConfig returns the configuration for debug metrics - DebugMetricsConfig() otelcol.DebugMetricsArguments + DebugMetricsConfig() otelcolCfg.DebugMetricsArguments } // TypeSignal is a bit field to indicate which telemetry signals the exporter supports. @@ -163,18 +163,25 @@ func (e *Exporter) Update(args component.Arguments) error { return err } + debugMetricsConfig := eargs.DebugMetricsConfig() + metricOpts := []metric.Option{metric.WithReader(promExporter)} - if eargs.DebugMetricsConfig().DisableHighCardinalityMetrics { + if debugMetricsConfig.DisableHighCardinalityMetrics { metricOpts = append(metricOpts, metric.WithView(views.DropHighCardinalityServerAttributes()...)) } + metricsLevel, err := debugMetricsConfig.Level.Convert() + if err != nil { + return err + } + settings := otelexporter.CreateSettings{ TelemetrySettings: otelcomponent.TelemetrySettings{ Logger: zapadapter.New(e.opts.Logger), TracerProvider: e.opts.Tracer, MeterProvider: metric.NewMeterProvider(metricOpts...), - MetricsLevel: configtelemetry.LevelDetailed, + MetricsLevel: metricsLevel, ReportStatus: func(*otelcomponent.StatusEvent) {}, }, diff --git a/internal/component/otelcol/exporter/exporter_test.go b/internal/component/otelcol/exporter/exporter_test.go index b3daf8b140..d2c2fcf983 100644 --- a/internal/component/otelcol/exporter/exporter_test.go +++ b/internal/component/otelcol/exporter/exporter_test.go @@ -8,6 +8,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/util" @@ -137,8 +138,8 @@ func (fa fakeExporterArgs) Exporters() map[otelcomponent.DataType]map[otelcompon return nil } -func (fe fakeExporterArgs) DebugMetricsConfig() otelcol.DebugMetricsArguments { - var dma otelcol.DebugMetricsArguments +func (fe fakeExporterArgs) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + var dma otelcolCfg.DebugMetricsArguments dma.SetToDefault() return dma } diff --git a/internal/component/otelcol/exporter/loadbalancing/loadbalancing.go b/internal/component/otelcol/exporter/loadbalancing/loadbalancing.go index a390e4035e..78947b07b3 100644 --- a/internal/component/otelcol/exporter/loadbalancing/loadbalancing.go +++ b/internal/component/otelcol/exporter/loadbalancing/loadbalancing.go @@ -10,6 +10,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" "github.com/grafana/alloy/internal/component/otelcol/auth" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax" @@ -47,7 +48,7 @@ type Arguments struct { RoutingKey string `alloy:"routing_key,attr,optional"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -310,7 +311,7 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/exporter/loadbalancing/loadbalancing_test.go b/internal/component/otelcol/exporter/loadbalancing/loadbalancing_test.go index 610af5cda4..166a3d8713 100644 --- a/internal/component/otelcol/exporter/loadbalancing/loadbalancing_test.go +++ b/internal/component/otelcol/exporter/loadbalancing/loadbalancing_test.go @@ -5,6 +5,7 @@ import ( "time" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter/loadbalancing" "github.com/grafana/alloy/syntax" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter" @@ -347,7 +348,7 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", @@ -363,8 +364,9 @@ func TestDebugMetricsConfig(t *testing.T) { } } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -384,8 +386,9 @@ func TestDebugMetricsConfig(t *testing.T) { disable_high_cardinality_metrics = false } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -405,8 +408,9 @@ func TestDebugMetricsConfig(t *testing.T) { disable_high_cardinality_metrics = true } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/component/otelcol/exporter/logging/logging.go b/internal/component/otelcol/exporter/logging/logging.go index 29e1d303c4..27f53c0270 100644 --- a/internal/component/otelcol/exporter/logging/logging.go +++ b/internal/component/otelcol/exporter/logging/logging.go @@ -4,6 +4,7 @@ package logging import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter" "github.com/grafana/alloy/internal/featuregate" otelcomponent "go.opentelemetry.io/collector/component" @@ -33,7 +34,7 @@ type Arguments struct { SamplingThereafter int `alloy:"sampling_thereafter,attr,optional"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var _ exporter.Arguments = Arguments{} @@ -68,6 +69,6 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/exporter/otlp/otlp.go b/internal/component/otelcol/exporter/otlp/otlp.go index 2fe17f139a..b7ff330b51 100644 --- a/internal/component/otelcol/exporter/otlp/otlp.go +++ b/internal/component/otelcol/exporter/otlp/otlp.go @@ -6,6 +6,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter" "github.com/grafana/alloy/internal/featuregate" otelcomponent "go.opentelemetry.io/collector/component" @@ -36,7 +37,7 @@ type Arguments struct { Retry otelcol.RetryArguments `alloy:"retry_on_failure,block,optional"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` Client GRPCClientArguments `alloy:"client,block"` } @@ -78,7 +79,7 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/exporter/otlp/otlp_test.go b/internal/component/otelcol/exporter/otlp/otlp_test.go index 31e2a753e8..929d433b37 100644 --- a/internal/component/otelcol/exporter/otlp/otlp_test.go +++ b/internal/component/otelcol/exporter/otlp/otlp_test.go @@ -8,6 +8,7 @@ import ( "time" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter/otlp" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/runtime/logging/level" @@ -148,7 +149,7 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", @@ -157,8 +158,9 @@ func TestDebugMetricsConfig(t *testing.T) { endpoint = "tempo-xxx.grafana.net/tempo:443" } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -171,8 +173,9 @@ func TestDebugMetricsConfig(t *testing.T) { disable_high_cardinality_metrics = false } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -185,8 +188,9 @@ func TestDebugMetricsConfig(t *testing.T) { disable_high_cardinality_metrics = true } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/component/otelcol/exporter/otlphttp/otlphttp.go b/internal/component/otelcol/exporter/otlphttp/otlphttp.go index 95b06681ad..9de669596b 100644 --- a/internal/component/otelcol/exporter/otlphttp/otlphttp.go +++ b/internal/component/otelcol/exporter/otlphttp/otlphttp.go @@ -8,6 +8,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter" "github.com/grafana/alloy/internal/featuregate" otelcomponent "go.opentelemetry.io/collector/component" @@ -36,7 +37,7 @@ type Arguments struct { Retry otelcol.RetryArguments `alloy:"retry_on_failure,block,optional"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` // The URLs to send metrics/logs/traces to. If omitted the exporter will // use Client.Endpoint by appending "/v1/metrics", "/v1/logs" or @@ -91,7 +92,7 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/exporter/otlphttp/otlphttp_test.go b/internal/component/otelcol/exporter/otlphttp/otlphttp_test.go index 45bb65cd9f..78ed69f983 100644 --- a/internal/component/otelcol/exporter/otlphttp/otlphttp_test.go +++ b/internal/component/otelcol/exporter/otlphttp/otlphttp_test.go @@ -9,6 +9,7 @@ import ( "time" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/exporter/otlphttp" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/runtime/logging/level" @@ -119,7 +120,7 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", @@ -128,8 +129,9 @@ func TestDebugMetricsConfig(t *testing.T) { endpoint = "http://tempo:4317" } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -142,8 +144,9 @@ func TestDebugMetricsConfig(t *testing.T) { disable_high_cardinality_metrics = false } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -156,8 +159,9 @@ func TestDebugMetricsConfig(t *testing.T) { disable_high_cardinality_metrics = true } `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/component/otelcol/extension/extension.go b/internal/component/otelcol/extension/extension.go index c18e1a3337..6e9f52a4ee 100644 --- a/internal/component/otelcol/extension/extension.go +++ b/internal/component/otelcol/extension/extension.go @@ -11,12 +11,12 @@ import ( "github.com/grafana/alloy/internal/build" "github.com/grafana/alloy/internal/component" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/lazycollector" "github.com/grafana/alloy/internal/component/otelcol/internal/scheduler" "github.com/grafana/alloy/internal/util/zapadapter" "github.com/prometheus/client_golang/prometheus" otelcomponent "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" otelextension "go.opentelemetry.io/collector/extension" sdkprometheus "go.opentelemetry.io/otel/exporters/prometheus" "go.opentelemetry.io/otel/sdk/metric" @@ -38,6 +38,9 @@ type Arguments interface { // Exporters returns the set of exporters that are exposed to the configured // component. Exporters() map[otelcomponent.DataType]map[otelcomponent.ID]otelcomponent.Component + + // DebugMetricsConfig returns the configuration for debug metrics + DebugMetricsConfig() otelcolCfg.DebugMetricsArguments } // Extension is an Alloy component shim which manages an OpenTelemetry @@ -111,13 +114,18 @@ func (e *Extension) Update(args component.Arguments) error { return err } + metricsLevel, err := rargs.DebugMetricsConfig().Level.Convert() + if err != nil { + return err + } + settings := otelextension.CreateSettings{ TelemetrySettings: otelcomponent.TelemetrySettings{ Logger: zapadapter.New(e.opts.Logger), TracerProvider: e.opts.Tracer, MeterProvider: metric.NewMeterProvider(metric.WithReader(promExporter)), - MetricsLevel: configtelemetry.LevelDetailed, + MetricsLevel: metricsLevel, ReportStatus: func(*otelcomponent.StatusEvent) {}, }, diff --git a/internal/component/otelcol/extension/extension_test.go b/internal/component/otelcol/extension/extension_test.go index 9fccec5c13..10723bfbd7 100644 --- a/internal/component/otelcol/extension/extension_test.go +++ b/internal/component/otelcol/extension/extension_test.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/extension" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/util" @@ -93,3 +94,9 @@ func (fa fakeExtensionArgs) Extensions() map[otelcomponent.ID]otelextension.Exte func (fa fakeExtensionArgs) Exporters() map[otelcomponent.DataType]map[otelcomponent.ID]otelcomponent.Component { return nil } + +func (fa fakeExtensionArgs) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + var dma otelcolCfg.DebugMetricsArguments + dma.SetToDefault() + return dma +} diff --git a/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go b/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go index 5a1ab274db..d4138cd7d2 100644 --- a/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go +++ b/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go @@ -6,6 +6,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/extension" "github.com/grafana/alloy/internal/component/otelcol/extension/jaeger_remote_sampling/internal/jaegerremotesampling" "github.com/grafana/alloy/internal/featuregate" @@ -43,6 +44,9 @@ type Arguments struct { HTTP *HTTPServerArguments `alloy:"http,block,optional"` Source ArgumentsSource `alloy:"source,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } type ArgumentsSource struct { @@ -56,6 +60,11 @@ var ( _ extension.Arguments = Arguments{} ) +// SetToDefault implements syntax.Defaulter. +func (args *Arguments) SetToDefault() { + args.DebugMetrics.SetToDefault() +} + // Convert implements extension.Arguments. func (args Arguments) Convert() (otelcomponent.Config, error) { return &jaegerremotesampling.Config{ @@ -80,6 +89,11 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I return nil } +// DebugMetricsConfig implements extension.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} + // Validate implements syntax.Validator. func (a *Arguments) Validate() error { if a.GRPC == nil && a.HTTP == nil { diff --git a/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling_test.go b/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling_test.go index d21d82b529..772acc3104 100644 --- a/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling_test.go +++ b/internal/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling_test.go @@ -11,6 +11,7 @@ import ( "time" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/extension/jaeger_remote_sampling" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/util" @@ -154,6 +155,10 @@ func TestUnmarshalUsesDefaults(t *testing.T) { expected: jaeger_remote_sampling.Arguments{ HTTP: &jaeger_remote_sampling.HTTPServerArguments{Endpoint: "0.0.0.0:5778"}, Source: jaeger_remote_sampling.ArgumentsSource{File: "remote.json"}, + DebugMetrics: otelcolCfg.DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, + }, }, }, // defaults grpc as expected @@ -167,6 +172,10 @@ func TestUnmarshalUsesDefaults(t *testing.T) { expected: jaeger_remote_sampling.Arguments{ GRPC: &jaeger_remote_sampling.GRPCServerArguments{Endpoint: "0.0.0.0:14250", Transport: "tcp"}, Source: jaeger_remote_sampling.ArgumentsSource{File: "remote.json"}, + DebugMetrics: otelcolCfg.DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, + }, }, }, // leaves specified values on http @@ -182,6 +191,10 @@ func TestUnmarshalUsesDefaults(t *testing.T) { expected: jaeger_remote_sampling.Arguments{ HTTP: &jaeger_remote_sampling.HTTPServerArguments{Endpoint: "blerg"}, Source: jaeger_remote_sampling.ArgumentsSource{File: "remote.json"}, + DebugMetrics: otelcolCfg.DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, + }, }, }, // leaves specified values on grpc @@ -198,6 +211,10 @@ func TestUnmarshalUsesDefaults(t *testing.T) { expected: jaeger_remote_sampling.Arguments{ GRPC: &jaeger_remote_sampling.GRPCServerArguments{Endpoint: "blerg", Transport: "blarg"}, Source: jaeger_remote_sampling.ArgumentsSource{File: "remote.json"}, + DebugMetrics: otelcolCfg.DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, + }, }, }, // tests source grpc defaults @@ -224,6 +241,10 @@ func TestUnmarshalUsesDefaults(t *testing.T) { BalancerName: otelcol.DefaultBalancerName, }, }, + DebugMetrics: otelcolCfg.DebugMetricsArguments{ + DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, + }, }, }, } diff --git a/internal/component/otelcol/processor/attributes/attributes.go b/internal/component/otelcol/processor/attributes/attributes.go index f789c14746..3e061ed4bf 100644 --- a/internal/component/otelcol/processor/attributes/attributes.go +++ b/internal/component/otelcol/processor/attributes/attributes.go @@ -6,6 +6,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" "github.com/mitchellh/mapstructure" @@ -39,12 +40,20 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( _ processor.Arguments = Arguments{} ) +// SetToDefault implements syntax.Defaulter. +func (args *Arguments) SetToDefault() { + args.DebugMetrics.SetToDefault() +} + // Convert implements processor.Arguments. func (args Arguments) Convert() (otelcomponent.Config, error) { input := make(map[string]interface{}) @@ -97,3 +106,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/processor/batch/batch.go b/internal/component/otelcol/processor/batch/batch.go index 5d80edb109..4ff900884a 100644 --- a/internal/component/otelcol/processor/batch/batch.go +++ b/internal/component/otelcol/processor/batch/batch.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" otelcomponent "go.opentelemetry.io/collector/component" @@ -38,6 +39,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -54,6 +58,7 @@ var DefaultArguments = Arguments{ // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { *args = DefaultArguments + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -89,3 +94,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/processor/filter/filter.go b/internal/component/otelcol/processor/filter/filter.go index 52b39c1b92..bce6fc6efb 100644 --- a/internal/component/otelcol/processor/filter/filter.go +++ b/internal/component/otelcol/processor/filter/filter.go @@ -3,6 +3,7 @@ package filter import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" "github.com/mitchellh/mapstructure" @@ -35,6 +36,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -49,6 +53,7 @@ var DefaultArguments = Arguments{ // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { *args = DefaultArguments + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -108,3 +113,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/processor/k8sattributes/k8sattributes.go b/internal/component/otelcol/processor/k8sattributes/k8sattributes.go index 0fac295b31..11c468922b 100644 --- a/internal/component/otelcol/processor/k8sattributes/k8sattributes.go +++ b/internal/component/otelcol/processor/k8sattributes/k8sattributes.go @@ -4,6 +4,7 @@ package k8sattributes import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" "github.com/mitchellh/mapstructure" @@ -41,6 +42,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } // SetToDefault implements syntax.Defaulter. @@ -53,6 +57,7 @@ func (args *Arguments) SetToDefault() { {Name: "jaeger-collector"}, }, } + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -117,3 +122,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/processor/memorylimiter/memorylimiter.go b/internal/component/otelcol/processor/memorylimiter/memorylimiter.go index ab4bf79166..ac739e30b3 100644 --- a/internal/component/otelcol/processor/memorylimiter/memorylimiter.go +++ b/internal/component/otelcol/processor/memorylimiter/memorylimiter.go @@ -8,6 +8,7 @@ import ( "github.com/alecthomas/units" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" otelcomponent "go.opentelemetry.io/collector/component" @@ -39,6 +40,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -57,6 +61,7 @@ var DefaultArguments = Arguments{ // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { *args = DefaultArguments + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -117,3 +122,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/processor/probabilistic_sampler/probabilistic_sampler.go b/internal/component/otelcol/processor/probabilistic_sampler/probabilistic_sampler.go index fc087ae7d6..efcc2e5a06 100644 --- a/internal/component/otelcol/processor/probabilistic_sampler/probabilistic_sampler.go +++ b/internal/component/otelcol/processor/probabilistic_sampler/probabilistic_sampler.go @@ -4,6 +4,7 @@ package probabilistic_sampler import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax" @@ -36,6 +37,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -52,6 +56,7 @@ var DefaultArguments = Arguments{ // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { *args = DefaultArguments + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -89,3 +94,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/processor/processor.go b/internal/component/otelcol/processor/processor.go index 414909d582..dfe1329f76 100644 --- a/internal/component/otelcol/processor/processor.go +++ b/internal/component/otelcol/processor/processor.go @@ -10,6 +10,7 @@ import ( "github.com/grafana/alloy/internal/build" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/fanoutconsumer" "github.com/grafana/alloy/internal/component/otelcol/internal/lazycollector" "github.com/grafana/alloy/internal/component/otelcol/internal/lazyconsumer" @@ -17,7 +18,6 @@ import ( "github.com/grafana/alloy/internal/util/zapadapter" "github.com/prometheus/client_golang/prometheus" otelcomponent "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" otelextension "go.opentelemetry.io/collector/extension" otelprocessor "go.opentelemetry.io/collector/processor" sdkprometheus "go.opentelemetry.io/otel/exporters/prometheus" @@ -43,6 +43,9 @@ type Arguments interface { // NextConsumers returns the set of consumers to send data to. NextConsumers() *otelcol.ConsumerArguments + + // DebugMetricsConfig returns the configuration for debug metrics + DebugMetricsConfig() otelcolCfg.DebugMetricsArguments } // Processor is an Alloy component shim which manages an OpenTelemetry @@ -130,13 +133,18 @@ func (p *Processor) Update(args component.Arguments) error { return err } + metricsLevel, err := pargs.DebugMetricsConfig().Level.Convert() + if err != nil { + return err + } + settings := otelprocessor.CreateSettings{ TelemetrySettings: otelcomponent.TelemetrySettings{ Logger: zapadapter.New(p.opts.Logger), TracerProvider: p.opts.Tracer, MeterProvider: metric.NewMeterProvider(metric.WithReader(promExporter)), - MetricsLevel: configtelemetry.LevelDetailed, + MetricsLevel: metricsLevel, ReportStatus: func(*otelcomponent.StatusEvent) {}, }, diff --git a/internal/component/otelcol/processor/processor_test.go b/internal/component/otelcol/processor/processor_test.go index 060e882d3c..457007126f 100644 --- a/internal/component/otelcol/processor/processor_test.go +++ b/internal/component/otelcol/processor/processor_test.go @@ -8,6 +8,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/fakeconsumer" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/runtime/componenttest" @@ -171,6 +172,12 @@ func (fa fakeProcessorArgs) NextConsumers() *otelcol.ConsumerArguments { return fa.Output } +func (fa fakeProcessorArgs) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + var dma otelcolCfg.DebugMetricsArguments + dma.SetToDefault() + return dma +} + type fakeProcessor struct { StartFunc func(ctx context.Context, host otelcomponent.Host) error ShutdownFunc func(ctx context.Context) error diff --git a/internal/component/otelcol/processor/resourcedetection/resourcedetection.go b/internal/component/otelcol/processor/resourcedetection/resourcedetection.go index b438acf491..06024aba9f 100644 --- a/internal/component/otelcol/processor/resourcedetection/resourcedetection.go +++ b/internal/component/otelcol/processor/resourcedetection/resourcedetection.go @@ -6,6 +6,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/component/otelcol/processor/resourcedetection/internal/aws/ec2" "github.com/grafana/alloy/internal/component/otelcol/processor/resourcedetection/internal/aws/ecs" @@ -69,6 +70,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } // DetectorConfig contains user-specified configurations unique to all individual detectors @@ -149,6 +153,7 @@ func (args *Arguments) SetToDefault() { Timeout: 5 * time.Second, } args.DetectorConfig.SetToDefault() + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -247,3 +252,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/processor/span/span.go b/internal/component/otelcol/processor/span/span.go index 90d9c580e0..b17ca4295a 100644 --- a/internal/component/otelcol/processor/span/span.go +++ b/internal/component/otelcol/processor/span/span.go @@ -6,6 +6,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" "github.com/mitchellh/mapstructure" @@ -41,12 +42,20 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( _ processor.Arguments = Arguments{} ) +// SetToDefault implements syntax.Defaulter. +func (args *Arguments) SetToDefault() { + args.DebugMetrics.SetToDefault() +} + // Validate implements syntax.Validator. func (args *Arguments) Validate() error { if args == nil { @@ -120,6 +129,11 @@ func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} + // Name specifies the attributes to use to re-name a span. type Name struct { // Specifies transformations of span name to and from attributes. diff --git a/internal/component/otelcol/processor/tail_sampling/tail_sampling.go b/internal/component/otelcol/processor/tail_sampling/tail_sampling.go index 7ef6e5f108..5b6be5bad3 100644 --- a/internal/component/otelcol/processor/tail_sampling/tail_sampling.go +++ b/internal/component/otelcol/processor/tail_sampling/tail_sampling.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" tsp "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor" @@ -36,6 +37,8 @@ type Arguments struct { ExpectedNewTracesPerSec uint64 `alloy:"expected_new_traces_per_sec,attr,optional"` // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -52,6 +55,7 @@ var DefaultArguments = Arguments{ // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { *args = DefaultArguments + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -96,3 +100,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/processor/transform/transform.go b/internal/component/otelcol/processor/transform/transform.go index dc8b80311c..326d2aeb80 100644 --- a/internal/component/otelcol/processor/transform/transform.go +++ b/internal/component/otelcol/processor/transform/transform.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/processor" "github.com/grafana/alloy/internal/featuregate" "github.com/mitchellh/mapstructure" @@ -70,6 +71,9 @@ type Arguments struct { // Output configures where to send processed data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` } var ( @@ -84,6 +88,7 @@ var DefaultArguments = Arguments{ // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { *args = DefaultArguments + args.DebugMetrics.SetToDefault() } // Validate implements syntax.Validator. @@ -171,3 +176,8 @@ func (args Arguments) Exporters() map[otelcomponent.DataType]map[otelcomponent.I func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { return args.Output } + +// DebugMetricsConfig implements processor.Arguments. +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + return args.DebugMetrics +} diff --git a/internal/component/otelcol/receiver/file_stats/types.go b/internal/component/otelcol/receiver/file_stats/types.go index 7d86a66c2c..5c69067b02 100644 --- a/internal/component/otelcol/receiver/file_stats/types.go +++ b/internal/component/otelcol/receiver/file_stats/types.go @@ -5,6 +5,7 @@ import ( "regexp" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/syntax" ) @@ -16,7 +17,7 @@ type Arguments struct { MetricsBuilder MetricsBuilderArguments `alloy:",squash"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` // Output configures where to send received data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` diff --git a/internal/component/otelcol/receiver/file_stats/types_convert.go b/internal/component/otelcol/receiver/file_stats/types_convert.go index 4f33cb1551..4534ec4580 100644 --- a/internal/component/otelcol/receiver/file_stats/types_convert.go +++ b/internal/component/otelcol/receiver/file_stats/types_convert.go @@ -4,6 +4,7 @@ package file_stats import ( "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver" "github.com/mitchellh/mapstructure" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver" @@ -46,7 +47,7 @@ func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/receiver/jaeger/jaeger.go b/internal/component/otelcol/receiver/jaeger/jaeger.go index 47f9f01906..834631fd24 100644 --- a/internal/component/otelcol/receiver/jaeger/jaeger.go +++ b/internal/component/otelcol/receiver/jaeger/jaeger.go @@ -7,6 +7,7 @@ import ( "github.com/alecthomas/units" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver" "github.com/grafana/alloy/internal/featuregate" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver" @@ -34,7 +35,7 @@ type Arguments struct { Protocols ProtocolsArguments `alloy:"protocols,block"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` // Output configures where to send received data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` @@ -221,6 +222,6 @@ func (args *ThriftBinary) Convert() *jaegerreceiver.ProtocolUDP { } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/receiver/jaeger/jaeger_test.go b/internal/component/otelcol/receiver/jaeger/jaeger_test.go index fb008409d0..504754518c 100644 --- a/internal/component/otelcol/receiver/jaeger/jaeger_test.go +++ b/internal/component/otelcol/receiver/jaeger/jaeger_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver/jaeger" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/util" @@ -136,7 +136,7 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", @@ -144,8 +144,9 @@ func TestDebugMetricsConfig(t *testing.T) { protocols { thrift_compact {} } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -157,8 +158,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -170,8 +172,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/component/otelcol/receiver/kafka/kafka.go b/internal/component/otelcol/receiver/kafka/kafka.go index ec16f00326..b6ff5917e8 100644 --- a/internal/component/otelcol/receiver/kafka/kafka.go +++ b/internal/component/otelcol/receiver/kafka/kafka.go @@ -8,6 +8,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax/alloytypes" @@ -50,7 +51,7 @@ type Arguments struct { HeaderExtraction HeaderExtraction `alloy:"header_extraction,block,optional"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` // Output configures where to send received data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` @@ -352,6 +353,6 @@ func (h HeaderExtraction) Convert() kafkareceiver.HeaderExtraction { } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/receiver/kafka/kafka_test.go b/internal/component/otelcol/receiver/kafka/kafka_test.go index 0558949345..e66ba21a70 100644 --- a/internal/component/otelcol/receiver/kafka/kafka_test.go +++ b/internal/component/otelcol/receiver/kafka/kafka_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/fakeconsumer" "github.com/grafana/alloy/internal/component/otelcol/receiver/kafka" "github.com/grafana/alloy/syntax" @@ -375,7 +375,7 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", @@ -384,8 +384,9 @@ func TestDebugMetricsConfig(t *testing.T) { protocol_version = "2.0.0" output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -398,8 +399,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -412,8 +414,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/component/otelcol/receiver/opencensus/opencensus.go b/internal/component/otelcol/receiver/opencensus/opencensus.go index 06e1b199d4..177735e440 100644 --- a/internal/component/otelcol/receiver/opencensus/opencensus.go +++ b/internal/component/otelcol/receiver/opencensus/opencensus.go @@ -5,6 +5,7 @@ import ( "github.com/alecthomas/units" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver" "github.com/grafana/alloy/internal/featuregate" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver" @@ -32,7 +33,7 @@ type Arguments struct { GRPC otelcol.GRPCServerArguments `alloy:",squash"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` // Output configures where to send received data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` @@ -78,6 +79,6 @@ func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/receiver/opencensus/opencensus_test.go b/internal/component/otelcol/receiver/opencensus/opencensus_test.go index e0cf268cd5..369bb8e4a1 100644 --- a/internal/component/otelcol/receiver/opencensus/opencensus_test.go +++ b/internal/component/otelcol/receiver/opencensus/opencensus_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver/opencensus" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/util" @@ -110,15 +110,16 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", alloyCfg: ` output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -129,8 +130,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -141,8 +143,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/component/otelcol/receiver/otlp/otlp.go b/internal/component/otelcol/receiver/otlp/otlp.go index 9278cf1c78..a95251c947 100644 --- a/internal/component/otelcol/receiver/otlp/otlp.go +++ b/internal/component/otelcol/receiver/otlp/otlp.go @@ -8,6 +8,7 @@ import ( "github.com/alecthomas/units" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver" "github.com/grafana/alloy/internal/featuregate" otelcomponent "go.opentelemetry.io/collector/component" @@ -34,7 +35,7 @@ type Arguments struct { HTTP *HTTPConfigArguments `alloy:"http,block,optional"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` // Output configures where to send received data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` @@ -156,6 +157,6 @@ func (args *HTTPConfigArguments) SetToDefault() { } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/receiver/otlp/otlp_test.go b/internal/component/otelcol/receiver/otlp/otlp_test.go index 6f3259cce2..d072ddfe12 100644 --- a/internal/component/otelcol/receiver/otlp/otlp_test.go +++ b/internal/component/otelcol/receiver/otlp/otlp_test.go @@ -9,6 +9,7 @@ import ( "time" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/fakeconsumer" "github.com/grafana/alloy/internal/component/otelcol/receiver/otlp" "github.com/grafana/alloy/internal/runtime/componenttest" @@ -178,7 +179,7 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", @@ -188,8 +189,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -203,8 +205,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -218,8 +221,9 @@ func TestDebugMetricsConfig(t *testing.T) { } output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/component/otelcol/receiver/prometheus/prometheus.go b/internal/component/otelcol/receiver/prometheus/prometheus.go index 89775aaa78..327ffde3a4 100644 --- a/internal/component/otelcol/receiver/prometheus/prometheus.go +++ b/internal/component/otelcol/receiver/prometheus/prometheus.go @@ -12,6 +12,7 @@ import ( "github.com/grafana/alloy/internal/build" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/fanoutconsumer" "github.com/grafana/alloy/internal/component/otelcol/receiver/prometheus/internal" "github.com/grafana/alloy/internal/featuregate" @@ -19,7 +20,6 @@ import ( "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/storage" otelcomponent "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" otelreceiver "go.opentelemetry.io/collector/receiver" metricNoop "go.opentelemetry.io/otel/metric/noop" traceNoop "go.opentelemetry.io/otel/trace/noop" @@ -42,6 +42,13 @@ func init() { type Arguments struct { // Output configures where to send received data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` + // DebugMetrics configures component internal metrics. Optional. + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` +} + +// SetToDefault implements syntax.Defaulter. +func (args *Arguments) SetToDefault() { + args.DebugMetrics.SetToDefault() } // Exports are the set of fields exposed by the otelcol.receiver.prometheus @@ -116,6 +123,11 @@ func (c *Component) Update(newConfig component.Arguments) error { gcInterval = 5 * time.Minute ) + metricsLevel, err := cfg.DebugMetrics.Level.Convert() + if err != nil { + return err + } + settings := otelreceiver.CreateSettings{ TelemetrySettings: otelcomponent.TelemetrySettings{ Logger: zapadapter.New(c.opts.Logger), @@ -123,7 +135,7 @@ func (c *Component) Update(newConfig component.Arguments) error { // TODO(tpaschalis): expose tracing and logging statistics. TracerProvider: traceNoop.NewTracerProvider(), MeterProvider: metricNoop.NewMeterProvider(), - MetricsLevel: configtelemetry.LevelDetailed, + MetricsLevel: metricsLevel, ReportStatus: func(*otelcomponent.StatusEvent) {}, }, diff --git a/internal/component/otelcol/receiver/receiver.go b/internal/component/otelcol/receiver/receiver.go index 72cd49ad28..9f7e9e1cba 100644 --- a/internal/component/otelcol/receiver/receiver.go +++ b/internal/component/otelcol/receiver/receiver.go @@ -10,6 +10,7 @@ import ( "github.com/grafana/alloy/internal/build" "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/fanoutconsumer" "github.com/grafana/alloy/internal/component/otelcol/internal/lazycollector" "github.com/grafana/alloy/internal/component/otelcol/internal/scheduler" @@ -17,7 +18,6 @@ import ( "github.com/grafana/alloy/internal/util/zapadapter" "github.com/prometheus/client_golang/prometheus" otelcomponent "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" "go.opentelemetry.io/collector/extension" otelreceiver "go.opentelemetry.io/collector/receiver" sdkprometheus "go.opentelemetry.io/otel/exporters/prometheus" @@ -45,7 +45,7 @@ type Arguments interface { NextConsumers() *otelcol.ConsumerArguments // DebugMetricsConfig returns the configuration for debug metrics - DebugMetricsConfig() otelcol.DebugMetricsArguments + DebugMetricsConfig() otelcolCfg.DebugMetricsArguments } // Receiver is an Alloy component shim which manages an OpenTelemetry Collector @@ -123,18 +123,24 @@ func (r *Receiver) Update(args component.Arguments) error { return err } + debugMetricsCfg := rargs.DebugMetricsConfig() metricOpts := []metric.Option{metric.WithReader(promExporter)} - if rargs.DebugMetricsConfig().DisableHighCardinalityMetrics { + if debugMetricsCfg.DisableHighCardinalityMetrics { metricOpts = append(metricOpts, metric.WithView(views.DropHighCardinalityServerAttributes()...)) } + metricsLevel, err := debugMetricsCfg.Level.Convert() + if err != nil { + return err + } + settings := otelreceiver.CreateSettings{ TelemetrySettings: otelcomponent.TelemetrySettings{ Logger: zapadapter.New(r.opts.Logger), TracerProvider: r.opts.Tracer, MeterProvider: metric.NewMeterProvider(metricOpts...), - MetricsLevel: configtelemetry.LevelDetailed, + MetricsLevel: metricsLevel, ReportStatus: func(*otelcomponent.StatusEvent) {}, }, diff --git a/internal/component/otelcol/receiver/receiver_test.go b/internal/component/otelcol/receiver/receiver_test.go index 866c90c1ab..6fc0b6b5fd 100644 --- a/internal/component/otelcol/receiver/receiver_test.go +++ b/internal/component/otelcol/receiver/receiver_test.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/internal/fakeconsumer" "github.com/grafana/alloy/internal/component/otelcol/receiver" "github.com/grafana/alloy/internal/runtime/componenttest" @@ -196,8 +197,8 @@ func (fa fakeReceiverArgs) NextConsumers() *otelcol.ConsumerArguments { return fa.Output } -func (fa fakeReceiverArgs) DebugMetricsConfig() otelcol.DebugMetricsArguments { - var args otelcol.DebugMetricsArguments +func (fa fakeReceiverArgs) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { + var args otelcolCfg.DebugMetricsArguments args.SetToDefault() return args } diff --git a/internal/component/otelcol/receiver/vcenter/vcenter.go b/internal/component/otelcol/receiver/vcenter/vcenter.go index 1bc689edca..3b0c1ed73e 100644 --- a/internal/component/otelcol/receiver/vcenter/vcenter.go +++ b/internal/component/otelcol/receiver/vcenter/vcenter.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver" "github.com/grafana/alloy/internal/featuregate" "github.com/grafana/alloy/syntax/alloytypes" @@ -267,7 +268,7 @@ type Arguments struct { TLS otelcol.TLSClientArguments `alloy:"tls,block,optional"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` // Output configures where to send received data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` @@ -333,6 +334,6 @@ func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/receiver/vcenter/vcenter_test.go b/internal/component/otelcol/receiver/vcenter/vcenter_test.go index e5c5de97df..e1009e09fa 100644 --- a/internal/component/otelcol/receiver/vcenter/vcenter_test.go +++ b/internal/component/otelcol/receiver/vcenter/vcenter_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver/vcenter" "github.com/grafana/alloy/syntax" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver" @@ -231,7 +231,7 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", @@ -242,8 +242,9 @@ func TestDebugMetricsConfig(t *testing.T) { output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -259,8 +260,9 @@ func TestDebugMetricsConfig(t *testing.T) { output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -276,8 +278,9 @@ func TestDebugMetricsConfig(t *testing.T) { output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/component/otelcol/receiver/zipkin/zipkin.go b/internal/component/otelcol/receiver/zipkin/zipkin.go index 36bbc2656c..717e73a15b 100644 --- a/internal/component/otelcol/receiver/zipkin/zipkin.go +++ b/internal/component/otelcol/receiver/zipkin/zipkin.go @@ -4,6 +4,7 @@ package zipkin import ( "github.com/grafana/alloy/internal/component" "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver" "github.com/grafana/alloy/internal/featuregate" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver" @@ -31,7 +32,7 @@ type Arguments struct { HTTPServer otelcol.HTTPServerArguments `alloy:",squash"` // DebugMetrics configures component internal metrics. Optional. - DebugMetrics otelcol.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` + DebugMetrics otelcolCfg.DebugMetricsArguments `alloy:"debug_metrics,block,optional"` // Output configures where to send received data. Required. Output *otelcol.ConsumerArguments `alloy:"output,block"` @@ -73,6 +74,6 @@ func (args Arguments) NextConsumers() *otelcol.ConsumerArguments { } // DebugMetricsConfig implements receiver.Arguments. -func (args Arguments) DebugMetricsConfig() otelcol.DebugMetricsArguments { +func (args Arguments) DebugMetricsConfig() otelcolCfg.DebugMetricsArguments { return args.DebugMetrics } diff --git a/internal/component/otelcol/receiver/zipkin/zipkin_test.go b/internal/component/otelcol/receiver/zipkin/zipkin_test.go index a831c194ea..c9c48101c4 100644 --- a/internal/component/otelcol/receiver/zipkin/zipkin_test.go +++ b/internal/component/otelcol/receiver/zipkin/zipkin_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/grafana/alloy/internal/component/otelcol" + otelcolCfg "github.com/grafana/alloy/internal/component/otelcol/config" "github.com/grafana/alloy/internal/component/otelcol/receiver/zipkin" "github.com/grafana/alloy/internal/runtime/componenttest" "github.com/grafana/alloy/internal/util" @@ -90,15 +90,16 @@ func TestDebugMetricsConfig(t *testing.T) { tests := []struct { testName string alloyCfg string - expected otelcol.DebugMetricsArguments + expected otelcolCfg.DebugMetricsArguments }{ { testName: "default", alloyCfg: ` output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -110,8 +111,9 @@ func TestDebugMetricsConfig(t *testing.T) { output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: false, + Level: otelcolCfg.LevelDetailed, }, }, { @@ -123,8 +125,9 @@ func TestDebugMetricsConfig(t *testing.T) { output {} `, - expected: otelcol.DebugMetricsArguments{ + expected: otelcolCfg.DebugMetricsArguments{ DisableHighCardinalityMetrics: true, + Level: otelcolCfg.LevelDetailed, }, }, } diff --git a/internal/converter/internal/otelcolconvert/converter_attributesprocessor.go b/internal/converter/internal/otelcolconvert/converter_attributesprocessor.go index 3509b394d9..8f4c85bafc 100644 --- a/internal/converter/internal/otelcolconvert/converter_attributesprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_attributesprocessor.go @@ -56,6 +56,7 @@ func toAttributesProcessor(state *State, id component.InstanceID, cfg *attribute Metrics: ToTokenizedConsumers(nextMetrics), Logs: ToTokenizedConsumers(nextLogs), Traces: ToTokenizedConsumers(nextTraces)}, + DebugMetrics: common.DefaultValue[attributes.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_basicauthextension.go b/internal/converter/internal/otelcolconvert/converter_basicauthextension.go index dc40981a75..39cf086df1 100644 --- a/internal/converter/internal/otelcolconvert/converter_basicauthextension.go +++ b/internal/converter/internal/otelcolconvert/converter_basicauthextension.go @@ -42,7 +42,8 @@ func (basicAuthConverterConverter) ConvertAndAppend(state *State, id component.I func toBasicAuthExtension(cfg *basicauthextension.Config) *basic.Arguments { return &basic.Arguments{ - Username: cfg.ClientAuth.Username, - Password: alloytypes.Secret(string(cfg.ClientAuth.Password)), + Username: cfg.ClientAuth.Username, + Password: alloytypes.Secret(string(cfg.ClientAuth.Password)), + DebugMetrics: common.DefaultValue[basic.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_batchprocessor.go b/internal/converter/internal/otelcolconvert/converter_batchprocessor.go index 7a1cc9c7d0..4abd05a960 100644 --- a/internal/converter/internal/otelcolconvert/converter_batchprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_batchprocessor.go @@ -60,5 +60,6 @@ func toBatchProcessor(state *State, id component.InstanceID, cfg *batchprocessor Logs: ToTokenizedConsumers(nextLogs), Traces: ToTokenizedConsumers(nextTraces), }, + DebugMetrics: common.DefaultValue[batch.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_bearertokenauthextension.go b/internal/converter/internal/otelcolconvert/converter_bearertokenauthextension.go index 2fe8c24a19..4b76b5fdea 100644 --- a/internal/converter/internal/otelcolconvert/converter_bearertokenauthextension.go +++ b/internal/converter/internal/otelcolconvert/converter_bearertokenauthextension.go @@ -61,8 +61,9 @@ func (bearerTokenAuthExtensionConverter) ConvertAndAppend(state *State, id compo func toBearerTokenAuthExtension(cfg *bearertokenauthextension.Config) *bearer.Arguments { return &bearer.Arguments{ - Scheme: cfg.Scheme, - Token: alloytypes.Secret(string(cfg.BearerToken)), + Scheme: cfg.Scheme, + Token: alloytypes.Secret(string(cfg.BearerToken)), + DebugMetrics: common.DefaultValue[bearer.Arguments]().DebugMetrics, } } @@ -78,6 +79,7 @@ func toBearerTokenAuthExtensionWithFilename(state *State, cfg *bearertokenauthex state.Body().AppendBlock(block) return &bearer.Arguments{ - Scheme: cfg.Scheme, + Scheme: cfg.Scheme, + DebugMetrics: common.DefaultValue[bearer.Arguments]().DebugMetrics, }, fmt.Sprintf("%s.content", StringifyBlock(block)) } diff --git a/internal/converter/internal/otelcolconvert/converter_filterprocessor.go b/internal/converter/internal/otelcolconvert/converter_filterprocessor.go index 65fb81f8ff..692792505b 100644 --- a/internal/converter/internal/otelcolconvert/converter_filterprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_filterprocessor.go @@ -67,5 +67,6 @@ func toFilterProcessor(state *State, id component.InstanceID, cfg *filterprocess Logs: ToTokenizedConsumers(nextLogs), Traces: ToTokenizedConsumers(nextTraces), }, + DebugMetrics: common.DefaultValue[filter.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_headerssetterextension.go b/internal/converter/internal/otelcolconvert/converter_headerssetterextension.go index a542a35419..ac4254a39b 100644 --- a/internal/converter/internal/otelcolconvert/converter_headerssetterextension.go +++ b/internal/converter/internal/otelcolconvert/converter_headerssetterextension.go @@ -60,6 +60,7 @@ func toHeadersSetterExtension(cfg *headerssetterextension.Config) *headers.Argum } return &headers.Arguments{ - Headers: res, + Headers: res, + DebugMetrics: common.DefaultValue[headers.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_jaegerremotesamplingextension.go b/internal/converter/internal/otelcolconvert/converter_jaegerremotesamplingextension.go index 74d233cf1a..633cb413fd 100644 --- a/internal/converter/internal/otelcolconvert/converter_jaegerremotesamplingextension.go +++ b/internal/converter/internal/otelcolconvert/converter_jaegerremotesamplingextension.go @@ -69,5 +69,6 @@ func toJaegerRemoteSamplingExtension(cfg *jaegerremotesampling.Config) *jaeger_r File: cfg.Source.File, ReloadInterval: cfg.Source.ReloadInterval, }, + DebugMetrics: common.DefaultValue[jaeger_remote_sampling.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_k8sattributesprocessor.go b/internal/converter/internal/otelcolconvert/converter_k8sattributesprocessor.go index ca7eef4331..daf9be50ea 100644 --- a/internal/converter/internal/otelcolconvert/converter_k8sattributesprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_k8sattributesprocessor.go @@ -71,6 +71,8 @@ func toK8SAttributesProcessor(state *State, id component.InstanceID, cfg *k8satt Logs: ToTokenizedConsumers(nextLogs), Traces: ToTokenizedConsumers(nextTraces), }, + + DebugMetrics: common.DefaultValue[k8sattributes.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_memorylimiterprocessor.go b/internal/converter/internal/otelcolconvert/converter_memorylimiterprocessor.go index 36293f99cb..8557c46c00 100644 --- a/internal/converter/internal/otelcolconvert/converter_memorylimiterprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_memorylimiterprocessor.go @@ -61,5 +61,6 @@ func toMemoryLimiterProcessor(state *State, id component.InstanceID, cfg *memory Logs: ToTokenizedConsumers(nextLogs), Traces: ToTokenizedConsumers(nextTraces), }, + DebugMetrics: common.DefaultValue[memorylimiter.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_oauth2clientauthextension.go b/internal/converter/internal/otelcolconvert/converter_oauth2clientauthextension.go index 6a7cd3a31e..0260a49d55 100644 --- a/internal/converter/internal/otelcolconvert/converter_oauth2clientauthextension.go +++ b/internal/converter/internal/otelcolconvert/converter_oauth2clientauthextension.go @@ -49,5 +49,6 @@ func toOAuth2ClientAuthExtension(cfg *oauth2clientauthextension.Config) *oauth2. Scopes: cfg.Scopes, TLSSetting: toTLSClientArguments(cfg.TLSSetting), Timeout: cfg.Timeout, + DebugMetrics: common.DefaultValue[oauth2.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_probabilisticsamplerprocessor.go b/internal/converter/internal/otelcolconvert/converter_probabilisticsamplerprocessor.go index d6088250e7..5062ff9140 100644 --- a/internal/converter/internal/otelcolconvert/converter_probabilisticsamplerprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_probabilisticsamplerprocessor.go @@ -58,5 +58,6 @@ func toProbabilisticSamplerProcessor(state *State, id component.InstanceID, cfg Logs: ToTokenizedConsumers(nextLogs), Traces: ToTokenizedConsumers(nextTraces), }, + DebugMetrics: common.DefaultValue[probabilistic_sampler.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_servicegraphconnector.go b/internal/converter/internal/otelcolconvert/converter_servicegraphconnector.go index 1607474426..49712d33f0 100644 --- a/internal/converter/internal/otelcolconvert/converter_servicegraphconnector.go +++ b/internal/converter/internal/otelcolconvert/converter_servicegraphconnector.go @@ -64,5 +64,6 @@ func toServicegraphConnector(state *State, id component.InstanceID, cfg *service Output: &otelcol.ConsumerArguments{ Metrics: ToTokenizedConsumers(nextMetrics), }, + DebugMetrics: common.DefaultValue[servicegraph.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_sigv4authextension.go b/internal/converter/internal/otelcolconvert/converter_sigv4authextension.go index 6c5ebd1afa..d4801fb59b 100644 --- a/internal/converter/internal/otelcolconvert/converter_sigv4authextension.go +++ b/internal/converter/internal/otelcolconvert/converter_sigv4authextension.go @@ -51,5 +51,6 @@ func toSigV4AuthExtension(cfg *sigv4authextension.Config) *sigv4.Arguments { SessionName: cfg.AssumeRole.SessionName, STSRegion: cfg.AssumeRole.STSRegion, }, + DebugMetrics: common.DefaultValue[sigv4.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_spanmetricsconnector.go b/internal/converter/internal/otelcolconvert/converter_spanmetricsconnector.go index 7a1654caf7..e024075998 100644 --- a/internal/converter/internal/otelcolconvert/converter_spanmetricsconnector.go +++ b/internal/converter/internal/otelcolconvert/converter_spanmetricsconnector.go @@ -115,5 +115,7 @@ func toSpanmetricsConnector(state *State, id component.InstanceID, cfg *spanmetr Output: &otelcol.ConsumerArguments{ Metrics: ToTokenizedConsumers(nextMetrics), }, + + DebugMetrics: common.DefaultValue[spanmetrics.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_spanprocessor.go b/internal/converter/internal/otelcolconvert/converter_spanprocessor.go index 60eee2cf42..fde1b7c5a6 100644 --- a/internal/converter/internal/otelcolconvert/converter_spanprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_spanprocessor.go @@ -74,6 +74,7 @@ func toSpanProcessor(state *State, id component.InstanceID, cfg *spanprocessor.C Output: &otelcol.ConsumerArguments{ Traces: ToTokenizedConsumers(nextTraces), }, + DebugMetrics: common.DefaultValue[span.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_tailsamplingprocessor.go b/internal/converter/internal/otelcolconvert/converter_tailsamplingprocessor.go index b57d441649..fac32df2d8 100644 --- a/internal/converter/internal/otelcolconvert/converter_tailsamplingprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_tailsamplingprocessor.go @@ -55,6 +55,7 @@ func toTailSamplingProcessor(state *State, id component.InstanceID, cfg *tailsam Output: &otelcol.ConsumerArguments{ Traces: ToTokenizedConsumers(nextTraces), }, + DebugMetrics: common.DefaultValue[tail_sampling.Arguments]().DebugMetrics, } } diff --git a/internal/converter/internal/otelcolconvert/converter_transformprocessor.go b/internal/converter/internal/otelcolconvert/converter_transformprocessor.go index 79f880748e..db7dc1f48a 100644 --- a/internal/converter/internal/otelcolconvert/converter_transformprocessor.go +++ b/internal/converter/internal/otelcolconvert/converter_transformprocessor.go @@ -59,6 +59,7 @@ func toTransformProcessor(state *State, id component.InstanceID, cfg *transformp Logs: ToTokenizedConsumers(nextLogs), Traces: ToTokenizedConsumers(nextTraces), }, + DebugMetrics: common.DefaultValue[transform.Arguments]().DebugMetrics, } }