From a7cc6156055fd45cf8b0cfc42d6b6a64c22e0506 Mon Sep 17 00:00:00 2001 From: gmanandhar-nr Date: Tue, 20 Jan 2026 20:00:39 +0530 Subject: [PATCH 1/6] feat(atp): making manifest file changes to get process metrics and add atp --- .../k8s/rendered/daemonset-configmap.yaml | 155 +++++++++++++++--- .../examples/k8s/rendered/daemonset.yaml | 8 +- .../k8s/rendered/deployment-configmap.yaml | 4 +- .../examples/k8s/rendered/deployment.yaml | 2 +- .../examples/k8s/rendered/secret.yaml | 2 +- 5 files changed, 146 insertions(+), 25 deletions(-) diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset-configmap.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset-configmap.yaml index e12c3f9d9d..16c671bff6 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset-configmap.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset-configmap.yaml @@ -56,17 +56,40 @@ data: system.network.connections: enabled: false # Uncomment to enable process metrics, which can be noisy but valuable. - # processes: - # process: - # metrics: - # process.cpu.utilization: - # enabled: true - # process.cpu.time: - # enabled: false - # mute_process_name_error: true - # mute_process_exe_error: true - # mute_process_io_error: true - # mute_process_user_error: true + processes: + process: + metrics: + process.cpu.time: + enabled: true + process.cpu.utilization: + enabled: true + process.memory.usage: # Physical memory + enabled: true + process.memory.virtual: # Virtual memory + enabled: true + process.disk.io: # Bytes read/written + enabled: true + process.disk.operations: # Number of read/write operations + enabled: true + process.threads: # Number of threads (replaces process.thread.count) + enabled: true + process.open_file_descriptors: # Number of open file descriptors (replaces process.open_file_descriptor.count) + enabled: true + process.paging.faults: + enabled: true + process.context_switches: + enabled: true + process.uptime: + enabled: true + # Platform-specific metrics (enable if on the respective OS, might be ignored or cause errors on others) + process.handles: # Windows-specific: Number of open handles + enabled: false + process.signals_pending: # Linux-specific: Number of pending signals for the process + enabled: true + mute_process_name_error: true + mute_process_exe_error: true + mute_process_io_error: true + mute_process_user_error: true kubeletstats: collection_interval: 1m @@ -190,6 +213,53 @@ data: - node - namespace + attributes/atp_identifier: + include: + match_type: regexp + metric_names: + - ".*" # Apply to all metrics + actions: + - key: telemetry.atp.env + value: "atp-customer-zero" + action: insert + + adaptivetelemetryprocessor: + # Storage configuration for persistence + storage_path: "/var/lib/nrdot-collector/adaptivetelemetry.db" + retention_minutes: 30 + include_process_list: + - "stress-ng" + + # Metric thresholds for actual hostmetrics receiver metrics + metric_thresholds: + # CPU metrics from hostmetrics receiver + # Process metrics from hostmetrics receiver + process.cpu.utilization: 0.0005 # This means 0.05% + process.memory.utilization: 0.0005 # This means 0.05% + + # Dynamic threshold configuration + enable_dynamic_thresholds: true + dynamic_smoothing_factor: 0.1 + min_thresholds: + process.cpu.utilization: 0.0005 # Minimum 0.05% CPU + process.memory.utilization: 0.0005 # Minimum 0.05% CPU + max_thresholds: + process.cpu.utilization: 0.30 # Minimum 4% CPU + process.memory.utilization: 0.30 # Minimum 4% process CPU + + # Multi-metric composite scoring + enable_multi_metric: true + composite_threshold: 0.8 # Lower threshold for testing + weights: + process.cpu.utilization: 0.5 + process.memory.utilization: 0.5 + + # Anomaly detection configuration + enable_anomaly_detection: true + anomaly_history_size: 15 + anomaly_change_threshold: 50.0 + anomaly_min_data_points: 3 + transform/ksm: metric_statements: - delete_key(resource.attributes, "k8s.node.name") @@ -400,7 +470,16 @@ data: metricstransform/hostmetrics: transforms: - - include: process\.(cpu\.utilization|disk\.io|memory\.(usage|virtual)) + - include: process\..* + action: update + match_type: regexp + operations: + - action: update_label + label: low.data.mode + value_actions: + - value: 'false' + new_value: 'true' + - include: processes\..* action: update match_type: regexp operations: @@ -602,7 +681,7 @@ data: # We set the cluster name to what the customer specified in the helm chart - key: k8s.cluster.name action: upsert - value: + value: gaurab-nrdot-plus-manifest - key: "newrelic.chart.version" action: upsert value: 0.9.9 @@ -714,25 +793,31 @@ data: table: - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/networkscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/loadscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/memoryscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/cpuscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/pagingscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] + - context: metric + condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processesscraper" + pipelines: [metrics/nr_hostmetrics] + - context: metric + condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processscraper" + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver" pipelines: [metrics/nr_prometheus_cadv_kubelet] @@ -789,6 +874,36 @@ data: - cumulativetodelta exporters: - routing/metrics_egress + metrics/nr_hostmetrics: + receivers: + - routing/nr_metrics_pipelines + processors: + - memory_limiter + - attributes/atp_identifier + - adaptivetelemetryprocessor + - metricstransform/ldm + - metricstransform/hostmetrics + - filter/exclude_metrics_low_data_mode + - metricstransform/hostmetrics_cpu + - transform/truncate + - filter/exclude_cpu_utilization + - filter/exclude_memory_utilization + - filter/exclude_memory_usage + - filter/exclude_filesystem_utilization + - filter/exclude_filesystem_usage + - filter/exclude_filesystem_inodes_usage + - filter/exclude_system_disk + - filter/exclude_system_paging + - filter/exclude_network + - attributes/exclude_system_paging + - resourcedetection/env + - resourcedetection/cloudproviders + - resource/newrelic + - transform/low_data_mode_inator + - resource/low_data_mode_inator + - cumulativetodelta + exporters: + - routing/metrics_egress metrics/nr_prometheus_cadv_kubelet: receivers: - routing/nr_metrics_pipelines diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset.yaml index 5f87c4bea9..3622802d76 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset.yaml @@ -88,7 +88,7 @@ spec: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 1001 - image: "docker.io/newrelic/nrdot-collector-k8s:1.5.0" + image: "docker.io/gmanandhar321/nrdot-collector-host:2.11" imagePullPolicy: IfNotPresent args: - --config @@ -131,6 +131,8 @@ spec: readOnly: true - name: final-daemonset-config mountPath: /config + - name: nrdot-data-storage + mountPath: /var/lib/nrdot-collector volumes: - name: host-fs hostPath: @@ -143,3 +145,7 @@ spec: - name: daemonset-config configMap: name: nr-k8s-otel-collector-daemonset-config + - name: nrdot-data-storage + hostPath: + path: /var/lib/nrdot-collector + type: DirectoryOrCreate diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment-configmap.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment-configmap.yaml index 9974bf0a49..8c7d5c6203 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment-configmap.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment-configmap.yaml @@ -513,7 +513,7 @@ data: # We set the cluster name to what the customer specified in the helm chart - key: k8s.cluster.name action: upsert - value: + value: gaurab-nrdot-plus-manifest - key: "newrelic.chart.version" action: upsert value: 0.9.9 @@ -531,7 +531,7 @@ data: value: "kubernetes" - key: k8s.cluster.name action: upsert - value: + value: gaurab-nrdot-plus-manifest - key: "newrelic.chart.version" action: upsert value: 0.9.9 diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment.yaml index ad1b56b92c..dda50cde9c 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment.yaml @@ -40,7 +40,7 @@ spec: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 1001 - image: "docker.io/newrelic/nrdot-collector-k8s:1.5.0" + image: "docker.io/gmanandhar321/nrdot-collector-host:2.10" imagePullPolicy: IfNotPresent args: - --config diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml index f1ed165777..44bb23ddcb 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml @@ -12,4 +12,4 @@ metadata: app.kubernetes.io/version: 1.2.0 helm.sh/chart: nr-k8s-otel-collector-0.9.9 data: - licenseKey: PE5SX2xpY2Vuc2VLZXk+ + licenseKey: Y2ZmOWE5YzNjY2YzMTMyZDFmMDk1YjdlMjMyYjU1MDdGRkZGTlJBTA== From eb25ed2af451ec04d513b435575d27a67d931ed4 Mon Sep 17 00:00:00 2001 From: gmanandhar-nr Date: Tue, 20 Jan 2026 20:56:22 +0530 Subject: [PATCH 2/6] feat(atp): adding atp related changes to helm template --- .../templates/daemonset-configmap.yaml | 149 +++++++++++++++--- .../templates/daemonset.yaml | 6 + 2 files changed, 136 insertions(+), 19 deletions(-) diff --git a/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml b/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml index 3cb456269b..c74d62db8c 100644 --- a/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml +++ b/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml @@ -55,17 +55,39 @@ data: system.network.connections: enabled: false # Uncomment to enable process metrics, which can be noisy but valuable. - # processes: - # process: - # metrics: - # process.cpu.utilization: - # enabled: true - # process.cpu.time: - # enabled: false - # mute_process_name_error: true - # mute_process_exe_error: true - # mute_process_io_error: true - # mute_process_user_error: true + processes: + process: + metrics: + process.cpu.time: + enabled: true + process.cpu.utilization: + enabled: true + process.memory.usage: + enabled: true + process.memory.virtual: + enabled: true + process.disk.io: + enabled: true + process.disk.operations: + enabled: true + process.threads: + enabled: true + process.open_file_descriptors: + enabled: true + process.paging.faults: + enabled: true + process.context_switches: + enabled: true + process.uptime: + enabled: true + process.handles: + enabled: false + process.signals_pending: + enabled: true + mute_process_name_error: true + mute_process_exe_error: true + mute_process_io_error: true + mute_process_user_error: true kubeletstats: collection_interval: {{ .Values.receivers.kubeletstats.scrapeInterval }} @@ -207,6 +229,42 @@ data: - node - namespace + attributes/atp_identifier: + include: + match_type: regexp + metric_names: + - ".*" + actions: + - key: telemetry.atp.env + value: "atp-customer-zero" + action: insert + + adaptivetelemetryprocessor: + storage_path: "/var/lib/nrdot-collector/adaptivetelemetry.db" + retention_minutes: 30 + include_process_list: + - "stress-ng" + metric_thresholds: + process.cpu.utilization: 0.0005 + process.memory.utilization: 0.0005 + enable_dynamic_thresholds: true + dynamic_smoothing_factor: 0.1 + min_thresholds: + process.cpu.utilization: 0.0005 + process.memory.utilization: 0.0005 + max_thresholds: + process.cpu.utilization: 0.30 + process.memory.utilization: 0.30 + enable_multi_metric: true + composite_threshold: 0.8 + weights: + process.cpu.utilization: 0.5 + process.memory.utilization: 0.5 + enable_anomaly_detection: true + anomaly_history_size: 15 + anomaly_change_threshold: 50.0 + anomaly_min_data_points: 3 + transform/ksm: metric_statements: - delete_key(resource.attributes, "k8s.node.name") @@ -417,7 +475,16 @@ data: metricstransform/hostmetrics: transforms: - - include: process\.(cpu\.utilization|disk\.io|memory\.(usage|virtual)) + - include: process\..* + action: update + match_type: regexp + operations: + - action: update_label + label: low.data.mode + value_actions: + - value: 'false' + new_value: 'true' + - include: processes\..* action: update match_type: regexp operations: @@ -737,25 +804,31 @@ data: table: - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/networkscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/loadscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/memoryscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/cpuscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/pagingscraper" - pipelines: [metrics/nr] + pipelines: [metrics/nr_hostmetrics] + - context: metric + condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processesscraper" + pipelines: [metrics/nr_hostmetrics] + - context: metric + condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processscraper" + pipelines: [metrics/nr_hostmetrics] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver" pipelines: [metrics/nr_prometheus_cadv_kubelet] @@ -842,6 +915,44 @@ data: - cumulativetodelta exporters: - routing/metrics_egress + metrics/nr_hostmetrics: + receivers: + - routing/nr_metrics_pipelines + processors: + - memory_limiter + - attributes/atp_identifier + - adaptivetelemetryprocessor + {{- if include "nrKubernetesOtel.lowDataMode" . }} + - metricstransform/ldm + - metricstransform/hostmetrics + - filter/exclude_metrics_low_data_mode + {{- end }} + - metricstransform/hostmetrics_cpu + - transform/truncate + - filter/exclude_cpu_utilization + - filter/exclude_memory_utilization + - filter/exclude_memory_usage + - filter/exclude_filesystem_utilization + - filter/exclude_filesystem_usage + - filter/exclude_filesystem_inodes_usage + - filter/exclude_system_disk + - filter/exclude_system_paging + - filter/exclude_network + - attributes/exclude_system_paging + - resourcedetection/env + {{- if include "newrelic.common.openShift" . }} + - resourcedetection/openshift + {{- else }} + - resourcedetection/cloudproviders + {{- end }} + - resource/newrelic + {{- if include "nrKubernetesOtel.lowDataMode" . }} + - transform/low_data_mode_inator + - resource/low_data_mode_inator + {{- end }} + - cumulativetodelta + exporters: + - routing/metrics_egress metrics/nr_prometheus_cadv_kubelet: receivers: - routing/nr_metrics_pipelines diff --git a/charts/nr-k8s-otel-collector/templates/daemonset.yaml b/charts/nr-k8s-otel-collector/templates/daemonset.yaml index 810d8d17e3..1a9edc2f0f 100644 --- a/charts/nr-k8s-otel-collector/templates/daemonset.yaml +++ b/charts/nr-k8s-otel-collector/templates/daemonset.yaml @@ -155,6 +155,8 @@ spec: readOnly: true - name: final-daemonset-config mountPath: /config + - name: nrdot-data-storage + mountPath: /var/lib/nrdot-collector {{- with .Values.daemonset.extraVolumeMounts }} {{- toYaml . | nindent 12 }} {{- end }} @@ -172,6 +174,10 @@ spec: - name: daemonset-config configMap: name: {{ include "nrKubernetesOtel.daemonset.configMap.fullname" . }} + - name: nrdot-data-storage + hostPath: + path: /var/lib/nrdot-collector + type: DirectoryOrCreate {{- with .Values.daemonset.extraVolumes }} {{- toYaml . | nindent 8 }} {{- end }} From 4c2e51eb91bba8e9a5c31fec8481f737d09f43fb Mon Sep 17 00:00:00 2001 From: gmanandhar-nr Date: Tue, 20 Jan 2026 22:33:02 +0530 Subject: [PATCH 3/6] feat(atp): revert --- charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml index 44bb23ddcb..f1ed165777 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/secret.yaml @@ -12,4 +12,4 @@ metadata: app.kubernetes.io/version: 1.2.0 helm.sh/chart: nr-k8s-otel-collector-0.9.9 data: - licenseKey: Y2ZmOWE5YzNjY2YzMTMyZDFmMDk1YjdlMjMyYjU1MDdGRkZGTlJBTA== + licenseKey: PE5SX2xpY2Vuc2VLZXk+ From 8f2f4a726c79164e3d6f5f4d4864fead8ebebe7e Mon Sep 17 00:00:00 2001 From: gmanandhar-nr Date: Wed, 21 Jan 2026 21:25:08 +0530 Subject: [PATCH 4/6] feat(atp): send only process and processes receiver data to a new pipeline called nr_process --- .../templates/daemonset-configmap.yaml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml b/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml index c74d62db8c..002aa515b1 100644 --- a/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml +++ b/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml @@ -804,31 +804,31 @@ data: table: - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/networkscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/loadscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/memoryscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/cpuscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/pagingscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processesscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr_process] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr_process] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver" pipelines: [metrics/nr_prometheus_cadv_kubelet] @@ -915,7 +915,7 @@ data: - cumulativetodelta exporters: - routing/metrics_egress - metrics/nr_hostmetrics: + metrics/nr_process: receivers: - routing/nr_metrics_pipelines processors: From 8462b4c7c5322d94e98bcbd9c8f3726d6555c0bc Mon Sep 17 00:00:00 2001 From: gmanandhar-nr Date: Wed, 21 Jan 2026 22:45:19 +0530 Subject: [PATCH 5/6] feat(atp): put the atp related configs such as processor and image names behind a flag --- .../templates/_images.tpl | 4 ++ .../templates/daemonset-configmap.yaml | 49 ++++--------------- charts/nr-k8s-otel-collector/values.yaml | 17 ++++++- 3 files changed, 29 insertions(+), 41 deletions(-) diff --git a/charts/nr-k8s-otel-collector/templates/_images.tpl b/charts/nr-k8s-otel-collector/templates/_images.tpl index 25f5e7a3a9..1ec8280e9e 100644 --- a/charts/nr-k8s-otel-collector/templates/_images.tpl +++ b/charts/nr-k8s-otel-collector/templates/_images.tpl @@ -5,7 +5,11 @@ Temporary image helper to transition from old image config structure to new stru {{- if or (.Values.image).repository (.Values.image).tag }} {{- (.Values.image).repository | default .Values.images.collector.repository }}:{{- (.Values.image).tag | default .Chart.AppVersion }} {{- else }} + {{- if .Values.nrdot_plus.enabled }} + {{- include "newrelic.common.images.image" ( dict "imageRoot" .Values.nrdot_plus.image "context" .) }} + {{- else }} {{- include "newrelic.common.images.image" ( dict "imageRoot" .Values.images.collector "context" .) }} + {{- end }} {{- end }} {{- end }} diff --git a/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml b/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml index 002aa515b1..c04b0a8268 100644 --- a/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml +++ b/charts/nr-k8s-otel-collector/templates/daemonset-configmap.yaml @@ -229,6 +229,7 @@ data: - node - namespace + {{- if and .Values.nrdot_plus.enabled .Values.nrdot_plus.atp }} attributes/atp_identifier: include: match_type: regexp @@ -247,6 +248,7 @@ data: metric_thresholds: process.cpu.utilization: 0.0005 process.memory.utilization: 0.0005 + system.cpu.utilization: 0.0001 enable_dynamic_thresholds: true dynamic_smoothing_factor: 0.1 min_thresholds: @@ -264,6 +266,7 @@ data: anomaly_history_size: 15 anomaly_change_threshold: 50.0 anomaly_min_data_points: 3 + {{- end }} transform/ksm: metric_statements: @@ -825,10 +828,10 @@ data: pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processesscraper" - pipelines: [metrics/nr_process] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processscraper" - pipelines: [metrics/nr_process] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver" pipelines: [metrics/nr_prometheus_cadv_kubelet] @@ -878,6 +881,10 @@ data: - routing/nr_metrics_pipelines processors: - memory_limiter + {{- if and .Values.nrdot_plus.enabled .Values.nrdot_plus.atp }} + - attributes/atp_identifier + - adaptivetelemetryprocessor + {{- end }} - metricstransform/k8s_cluster_info {{- if include "nrKubernetesOtel.lowDataMode" . }} - metricstransform/ldm @@ -915,44 +922,6 @@ data: - cumulativetodelta exporters: - routing/metrics_egress - metrics/nr_process: - receivers: - - routing/nr_metrics_pipelines - processors: - - memory_limiter - - attributes/atp_identifier - - adaptivetelemetryprocessor - {{- if include "nrKubernetesOtel.lowDataMode" . }} - - metricstransform/ldm - - metricstransform/hostmetrics - - filter/exclude_metrics_low_data_mode - {{- end }} - - metricstransform/hostmetrics_cpu - - transform/truncate - - filter/exclude_cpu_utilization - - filter/exclude_memory_utilization - - filter/exclude_memory_usage - - filter/exclude_filesystem_utilization - - filter/exclude_filesystem_usage - - filter/exclude_filesystem_inodes_usage - - filter/exclude_system_disk - - filter/exclude_system_paging - - filter/exclude_network - - attributes/exclude_system_paging - - resourcedetection/env - {{- if include "newrelic.common.openShift" . }} - - resourcedetection/openshift - {{- else }} - - resourcedetection/cloudproviders - {{- end }} - - resource/newrelic - {{- if include "nrKubernetesOtel.lowDataMode" . }} - - transform/low_data_mode_inator - - resource/low_data_mode_inator - {{- end }} - - cumulativetodelta - exporters: - - routing/metrics_egress metrics/nr_prometheus_cadv_kubelet: receivers: - routing/nr_metrics_pipelines diff --git a/charts/nr-k8s-otel-collector/values.yaml b/charts/nr-k8s-otel-collector/values.yaml index 8d86b75649..2c7b513cbc 100644 --- a/charts/nr-k8s-otel-collector/values.yaml +++ b/charts/nr-k8s-otel-collector/values.yaml @@ -2,6 +2,20 @@ # This is a YAML-formatted file. # Declare variables to be passed into your templates. +# -- NRDOT Plus configuration +nrdot_plus: + # -- Enable NRDOT Plus features. When false (default), uses standard k8s collector. + # When true, enables NRDOT Plus collector with advanced features. + enabled: true + # -- Enable Adaptive Telemetry Processor (ATP) for intelligent process metrics filtering + atp: true + # -- Image for NRDOT Plus collector (only used when nrdot_plus.enabled is true) + image: + registry: "docker.io" + repository: gmanandhar321/nrdot-collector-host + tag: "2.11" + pullPolicy: IfNotPresent + # -- Name of the Kubernetes cluster monitored. Mandatory. Can be configured also with `global.cluster` cluster: "" # -- This set this license key to use. Can be configured also with `global.licenseKey` @@ -51,7 +65,8 @@ images: # -- The secrets that are needed to pull images from a custom registry. pullSecrets: [] # - name: regsecret - # -- Image for the OpenTelemetry Collector. + # -- Image for the OpenTelemetry Collector (standard New Relic k8s collector). + # This is used when nrdot_plus.enabled is false (default). collector: registry: "" repository: newrelic/nrdot-collector-k8s From 6ce72dec4d5c91ca01999c5f0dac40e8ec8d0d81 Mon Sep 17 00:00:00 2001 From: gmanandhar-nr Date: Wed, 21 Jan 2026 22:52:46 +0530 Subject: [PATCH 6/6] chore: regenerate example manifests for k8s-collector --- .../k8s/rendered/daemonset-configmap.yaml | 114 +++--------------- .../examples/k8s/rendered/daemonset.yaml | 4 +- .../k8s/rendered/deployment-configmap.yaml | 4 +- .../examples/k8s/rendered/deployment.yaml | 2 +- charts/nr-k8s-otel-collector/values.yaml | 2 +- 5 files changed, 24 insertions(+), 102 deletions(-) diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset-configmap.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset-configmap.yaml index 16c671bff6..6a9af2754a 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset-configmap.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset-configmap.yaml @@ -63,17 +63,17 @@ data: enabled: true process.cpu.utilization: enabled: true - process.memory.usage: # Physical memory + process.memory.usage: enabled: true - process.memory.virtual: # Virtual memory + process.memory.virtual: enabled: true - process.disk.io: # Bytes read/written + process.disk.io: enabled: true - process.disk.operations: # Number of read/write operations + process.disk.operations: enabled: true - process.threads: # Number of threads (replaces process.thread.count) + process.threads: enabled: true - process.open_file_descriptors: # Number of open file descriptors (replaces process.open_file_descriptor.count) + process.open_file_descriptors: enabled: true process.paging.faults: enabled: true @@ -81,10 +81,9 @@ data: enabled: true process.uptime: enabled: true - # Platform-specific metrics (enable if on the respective OS, might be ignored or cause errors on others) - process.handles: # Windows-specific: Number of open handles + process.handles: enabled: false - process.signals_pending: # Linux-specific: Number of pending signals for the process + process.signals_pending: enabled: true mute_process_name_error: true mute_process_exe_error: true @@ -213,53 +212,6 @@ data: - node - namespace - attributes/atp_identifier: - include: - match_type: regexp - metric_names: - - ".*" # Apply to all metrics - actions: - - key: telemetry.atp.env - value: "atp-customer-zero" - action: insert - - adaptivetelemetryprocessor: - # Storage configuration for persistence - storage_path: "/var/lib/nrdot-collector/adaptivetelemetry.db" - retention_minutes: 30 - include_process_list: - - "stress-ng" - - # Metric thresholds for actual hostmetrics receiver metrics - metric_thresholds: - # CPU metrics from hostmetrics receiver - # Process metrics from hostmetrics receiver - process.cpu.utilization: 0.0005 # This means 0.05% - process.memory.utilization: 0.0005 # This means 0.05% - - # Dynamic threshold configuration - enable_dynamic_thresholds: true - dynamic_smoothing_factor: 0.1 - min_thresholds: - process.cpu.utilization: 0.0005 # Minimum 0.05% CPU - process.memory.utilization: 0.0005 # Minimum 0.05% CPU - max_thresholds: - process.cpu.utilization: 0.30 # Minimum 4% CPU - process.memory.utilization: 0.30 # Minimum 4% process CPU - - # Multi-metric composite scoring - enable_multi_metric: true - composite_threshold: 0.8 # Lower threshold for testing - weights: - process.cpu.utilization: 0.5 - process.memory.utilization: 0.5 - - # Anomaly detection configuration - enable_anomaly_detection: true - anomaly_history_size: 15 - anomaly_change_threshold: 50.0 - anomaly_min_data_points: 3 - transform/ksm: metric_statements: - delete_key(resource.attributes, "k8s.node.name") @@ -681,7 +633,7 @@ data: # We set the cluster name to what the customer specified in the helm chart - key: k8s.cluster.name action: upsert - value: gaurab-nrdot-plus-manifest + value: - key: "newrelic.chart.version" action: upsert value: 0.9.9 @@ -793,31 +745,31 @@ data: table: - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/networkscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/loadscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/memoryscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/cpuscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/pagingscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processesscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processscraper" - pipelines: [metrics/nr_hostmetrics] + pipelines: [metrics/nr] - context: metric condition: instrumentation_scope.name == "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver" pipelines: [metrics/nr_prometheus_cadv_kubelet] @@ -874,36 +826,6 @@ data: - cumulativetodelta exporters: - routing/metrics_egress - metrics/nr_hostmetrics: - receivers: - - routing/nr_metrics_pipelines - processors: - - memory_limiter - - attributes/atp_identifier - - adaptivetelemetryprocessor - - metricstransform/ldm - - metricstransform/hostmetrics - - filter/exclude_metrics_low_data_mode - - metricstransform/hostmetrics_cpu - - transform/truncate - - filter/exclude_cpu_utilization - - filter/exclude_memory_utilization - - filter/exclude_memory_usage - - filter/exclude_filesystem_utilization - - filter/exclude_filesystem_usage - - filter/exclude_filesystem_inodes_usage - - filter/exclude_system_disk - - filter/exclude_system_paging - - filter/exclude_network - - attributes/exclude_system_paging - - resourcedetection/env - - resourcedetection/cloudproviders - - resource/newrelic - - transform/low_data_mode_inator - - resource/low_data_mode_inator - - cumulativetodelta - exporters: - - routing/metrics_egress metrics/nr_prometheus_cadv_kubelet: receivers: - routing/nr_metrics_pipelines diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset.yaml index 3622802d76..d98f61c182 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/daemonset.yaml @@ -24,7 +24,7 @@ spec: app.kubernetes.io/name: nr-k8s-otel-collector component: daemonset annotations: - checksum/config: e5ed2a50cca2ea8d60809343fedea4aa56b79d590445edf7bbf5227dfa6d436c + checksum/config: b6143109537f5330e68ed65d73c5552d792fce18687bc8aab1edbd8a14ed0f58 spec: serviceAccountName: nr-k8s-otel-collector initContainers: @@ -88,7 +88,7 @@ spec: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 1001 - image: "docker.io/gmanandhar321/nrdot-collector-host:2.11" + image: "docker.io/newrelic/nrdot-collector-k8s:1.5.0" imagePullPolicy: IfNotPresent args: - --config diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment-configmap.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment-configmap.yaml index 8c7d5c6203..9974bf0a49 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment-configmap.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment-configmap.yaml @@ -513,7 +513,7 @@ data: # We set the cluster name to what the customer specified in the helm chart - key: k8s.cluster.name action: upsert - value: gaurab-nrdot-plus-manifest + value: - key: "newrelic.chart.version" action: upsert value: 0.9.9 @@ -531,7 +531,7 @@ data: value: "kubernetes" - key: k8s.cluster.name action: upsert - value: gaurab-nrdot-plus-manifest + value: - key: "newrelic.chart.version" action: upsert value: 0.9.9 diff --git a/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment.yaml b/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment.yaml index dda50cde9c..ad1b56b92c 100644 --- a/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment.yaml +++ b/charts/nr-k8s-otel-collector/examples/k8s/rendered/deployment.yaml @@ -40,7 +40,7 @@ spec: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 1001 - image: "docker.io/gmanandhar321/nrdot-collector-host:2.10" + image: "docker.io/newrelic/nrdot-collector-k8s:1.5.0" imagePullPolicy: IfNotPresent args: - --config diff --git a/charts/nr-k8s-otel-collector/values.yaml b/charts/nr-k8s-otel-collector/values.yaml index 2c7b513cbc..f4dbef8a83 100644 --- a/charts/nr-k8s-otel-collector/values.yaml +++ b/charts/nr-k8s-otel-collector/values.yaml @@ -6,7 +6,7 @@ nrdot_plus: # -- Enable NRDOT Plus features. When false (default), uses standard k8s collector. # When true, enables NRDOT Plus collector with advanced features. - enabled: true + enabled: false # -- Enable Adaptive Telemetry Processor (ATP) for intelligent process metrics filtering atp: true # -- Image for NRDOT Plus collector (only used when nrdot_plus.enabled is true)