From 855c32aceacf63e99bb0d4b3d5ad6c7511c0a360 Mon Sep 17 00:00:00 2001 From: "Corentin M." Date: Thu, 13 Mar 2025 14:26:59 -0400 Subject: [PATCH 1/7] Grafazos: filter netdata jobs on node_instance variable --- grafazos/src/node_hardware.jsonnet | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grafazos/src/node_hardware.jsonnet b/grafazos/src/node_hardware.jsonnet index bc5879c92ab6..3ff3fea0ed9c 100644 --- a/grafazos/src/node_hardware.jsonnet +++ b/grafazos/src/node_hardware.jsonnet @@ -71,13 +71,13 @@ local filecheck = std.extVar('storage_mode') == 'filecheck'; storage(h, w, x, y): local q = - if filecheck then self.query('netdata_filecheck_dir_size_bytes_average', '{{dimension}}') - else self.query('netdata_disk_space_GiB_average{chart="disk_space._",dimension="used"}', '{{dimension}}'); + if filecheck then self.query('netdata_filecheck_dir_size_bytes_average{'+ base.node_instance + '="$node_instance"}', '{{dimension}}') + else self.query('netdata_disk_space_GiB_average{chart="disk_space._",dimension="used", '+ base.node_instance + '="$node_instance"}', '{{dimension}}'); graph.new('Storage', [q], h, w, x, y) + timeSeries.standardOptions.withUnit('bytes'), diskFreeSpace(h, w, x, y): - local q = self.query('node_filesystem_free_bytes{mountpoint="/"}', 'Available bytes on disk'); + local q = self.query('node_filesystem_free_bytes{mountpoint="/"' + base.node_instance + '="$node_instance"}', 'Available bytes on disk'); graph.new('Disk free space', [q], h, w, x, y) + stat.standardOptions.withUnit('decbytes') + stat.options.withReduceOptions(stat.options.reduceOptions.withCalcs(['lastNotNull'])), -- GitLab From 7c3b92dae44b00eae8b096bd190f392ab8ce89be Mon Sep 17 00:00:00 2001 From: "Corentin M." Date: Thu, 13 Mar 2025 16:10:42 -0400 Subject: [PATCH 2/7] Grafazos: add mountpoints options --- grafazos/Makefile | 1 + grafazos/doc/index.rst | 8 ++++++++ grafazos/src/node_hardware.jsonnet | 13 +++++++++---- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/grafazos/Makefile b/grafazos/Makefile index a7e888106045..76792b781772 100644 --- a/grafazos/Makefile +++ b/grafazos/Makefile @@ -8,6 +8,7 @@ STORAGE_MODE ?= default -J vendor/ \ --ext-str node_instance_label="$(NODE_INSTANCE_LABEL)" \ --ext-str storage_mode="$(STORAGE_MODE)" \ + --ext-str mountpoints="$(MOUNTPOINTS)" src/$@ \ > output/$*.json diff --git a/grafazos/doc/index.rst b/grafazos/doc/index.rst index 323af3a242d1..acb5c0efdc04 100644 --- a/grafazos/doc/index.rst +++ b/grafazos/doc/index.rst @@ -82,3 +82,11 @@ Optionnally you can enable storage monitoring with ``filecheck``: .. code-block:: shell STORAGE_MODE=filecheck + + +If you want to selectively change mountpoints to ``/`` and ``/opt``, you can enable it with + +.. code-block:: shell + + MOUNTPOINTS=opt + diff --git a/grafazos/src/node_hardware.jsonnet b/grafazos/src/node_hardware.jsonnet index 3ff3fea0ed9c..fa4a835a0750 100644 --- a/grafazos/src/node_hardware.jsonnet +++ b/grafazos/src/node_hardware.jsonnet @@ -31,6 +31,8 @@ local graph = base.graph; local filecheck = std.extVar('storage_mode') == 'filecheck'; +local mountpoints = std.extVar('mountpoints') == 'opt'; + //## // Node Hardware related stats //## @@ -71,14 +73,17 @@ local filecheck = std.extVar('storage_mode') == 'filecheck'; storage(h, w, x, y): local q = - if filecheck then self.query('netdata_filecheck_dir_size_bytes_average{'+ base.node_instance + '="$node_instance"}', '{{dimension}}') - else self.query('netdata_disk_space_GiB_average{chart="disk_space._",dimension="used", '+ base.node_instance + '="$node_instance"}', '{{dimension}}'); + if filecheck then self.query('netdata_filecheck_dir_size_bytes_average{'+ base.node_instance + '="$node_instance"}', '{{dimension}}'); + else self.query('netdata_disk_space_GiB_average{dimension="used", '+ base.node_instance + '="$node_instance"}', '{{dimension}}'); graph.new('Storage', [q], h, w, x, y) + timeSeries.standardOptions.withUnit('bytes'), diskFreeSpace(h, w, x, y): - local q = self.query('node_filesystem_free_bytes{mountpoint="/"' + base.node_instance + '="$node_instance"}', 'Available bytes on disk'); - graph.new('Disk free space', [q], h, w, x, y) + local qall = self.query('node_filesystem_free_bytes{' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /'); + local qroot = self.query('node_filesystem_free_bytes{mountpoint="/",' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /'); + local qopt = self.query('node_filesystem_free_bytes{mountpoint="/opt",' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /opt'); + if mountpoints then mountq = [qroot, qopt] else mountq = [qall] + graph.new('Disk free space', mountq, h, w, x, y) + stat.standardOptions.withUnit('decbytes') + stat.options.withReduceOptions(stat.options.reduceOptions.withCalcs(['lastNotNull'])), -- GitLab From 0e6e415b24eb68044879e8e0f0fc3d9f3237a7b9 Mon Sep 17 00:00:00 2001 From: "Corentin M." Date: Thu, 13 Mar 2025 16:56:49 -0400 Subject: [PATCH 3/7] Grafazos: change Storage legend to print the mountpoint --- grafazos/Makefile | 2 +- grafazos/src/node_hardware.jsonnet | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/grafazos/Makefile b/grafazos/Makefile index 76792b781772..da2adee627cb 100644 --- a/grafazos/Makefile +++ b/grafazos/Makefile @@ -8,7 +8,7 @@ STORAGE_MODE ?= default -J vendor/ \ --ext-str node_instance_label="$(NODE_INSTANCE_LABEL)" \ --ext-str storage_mode="$(STORAGE_MODE)" \ - --ext-str mountpoints="$(MOUNTPOINTS)" + --ext-str mountpoints="$(MOUNTPOINTS)" \ src/$@ \ > output/$*.json diff --git a/grafazos/src/node_hardware.jsonnet b/grafazos/src/node_hardware.jsonnet index fa4a835a0750..b5ee3c7efa24 100644 --- a/grafazos/src/node_hardware.jsonnet +++ b/grafazos/src/node_hardware.jsonnet @@ -73,8 +73,8 @@ local mountpoints = std.extVar('mountpoints') == 'opt'; storage(h, w, x, y): local q = - if filecheck then self.query('netdata_filecheck_dir_size_bytes_average{'+ base.node_instance + '="$node_instance"}', '{{dimension}}'); - else self.query('netdata_disk_space_GiB_average{dimension="used", '+ base.node_instance + '="$node_instance"}', '{{dimension}}'); + if filecheck then self.query('netdata_filecheck_dir_size_bytes_average{' + base.node_instance + '="$node_instance"}', '{{dimension}}') + else self.query('netdata_disk_space_GiB_average{dimension="used", ' + base.node_instance + '="$node_instance"}', '{{family}}'); graph.new('Storage', [q], h, w, x, y) + timeSeries.standardOptions.withUnit('bytes'), @@ -82,7 +82,7 @@ local mountpoints = std.extVar('mountpoints') == 'opt'; local qall = self.query('node_filesystem_free_bytes{' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /'); local qroot = self.query('node_filesystem_free_bytes{mountpoint="/",' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /'); local qopt = self.query('node_filesystem_free_bytes{mountpoint="/opt",' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /opt'); - if mountpoints then mountq = [qroot, qopt] else mountq = [qall] + local mountq = if mountpoints then [qroot, qopt] else [qall]; graph.new('Disk free space', mountq, h, w, x, y) + stat.standardOptions.withUnit('decbytes') + stat.options.withReduceOptions(stat.options.reduceOptions.withCalcs(['lastNotNull'])), -- GitLab From 3d7223e7966df86f49e3c9aff8af15d3a604ad38 Mon Sep 17 00:00:00 2001 From: "Corentin M." Date: Fri, 14 Mar 2025 11:40:19 -0400 Subject: [PATCH 4/7] Grafazos: more precise Storage panel legend Grafazos: fix full dashboard Network traffic panel --- grafazos/src/delegate_hardware.jsonnet | 22 ++++++++++------------ grafazos/src/node_hardware.jsonnet | 19 ++++++------------- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/grafazos/src/delegate_hardware.jsonnet b/grafazos/src/delegate_hardware.jsonnet index 894f01e765c4..3e25afa2155e 100644 --- a/grafazos/src/delegate_hardware.jsonnet +++ b/grafazos/src/delegate_hardware.jsonnet @@ -44,10 +44,10 @@ local graph = base.graph; local writesAccuser = 'writes accuser'; local readsBaker = 'reads baker'; local writesBaker = 'writes baker'; - local readsAccuserQuery = self.query('netdata_apps_lreads_KiB_persec_average{dimension="octez-accuser"}', readsAccuser); - local writesAccuserQuery = self.query('netdata_apps_lwrites_KiB_persec_average{dimension="octez-accuser"}', writesAccuser); - local readsBakerQuery = self.query('netdata_apps_lreads_KiB_persec_average{dimension="octez-baker"}', readsBaker); - local writesBakerQuery = self.query('netdata_apps_lwrites_KiB_persec_average{dimension="octez-baker"}', writesBaker); + local readsAccuserQuery = self.query('netdata_apps_lreads_KiB_persec_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', readsAccuser); + local writesAccuserQuery = self.query('netdata_apps_lwrites_KiB_persec_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', writesAccuser); + local readsBakerQuery = self.query('netdata_apps_lreads_KiB_persec_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', readsBaker); + local writesBakerQuery = self.query('netdata_apps_lwrites_KiB_persec_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', writesBaker); graph.new('IOs', [readsAccuserQuery, writesAccuserQuery, readsBakerQuery, writesBakerQuery], h, w, x, y) + timeSeries.standardOptions.withUnit('kbytes') + graph.withLegendBottom(calcs=['current', 'mean', 'max']) @@ -56,8 +56,8 @@ local graph = base.graph; cpu(h, w, x, y): local loadAccuser = 'Cpu load accuser'; local loadBaker = 'Cpu load baker'; - local loadAccuserQuery = self.query('netdata_apps_cpu_percentage_average{dimension="octez-accuser"}', loadAccuser); - local loadBakerQuery = self.query('netdata_apps_cpu_percentage_average{dimension="octez-baker"}', loadBaker); + local loadAccuserQuery = self.query('netdata_apps_cpu_percentage_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', loadAccuser); + local loadBakerQuery = self.query('netdata_apps_cpu_percentage_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', loadBaker); graph.new('Cpu activity', [loadAccuserQuery, loadBakerQuery], h, w, x, y) + timeSeries.standardOptions.withUnit('percent') + graph.withQueryColor([[loadAccuser, 'light-yellow'], [loadBaker, 'light-red']]), @@ -67,14 +67,12 @@ local graph = base.graph; local swapAccuser = 'Swap usage accuser'; local ramBaker = 'Memory usage baker'; local swapBaker = 'Swap usage baker'; - local ramAccuserQuery = self.query('netdata_apps_mem_MiB_average{dimension="octez-accuser"}', ramAccuser); - local swapAccuserQuery = self.query('netdata_apps_swap_MiB_average{dimension="octez-accuser"}', swapAccuser); - local ramBakerQuery = self.query('netdata_apps_mem_MiB_average{dimension="octez-baker"}', ramBaker); - local swapBakerQuery = self.query('netdata_apps_swap_MiB_average{dimension="octez-baker"}', swapBaker); + local ramAccuserQuery = self.query('netdata_apps_mem_MiB_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', ramAccuser); + local swapAccuserQuery = self.query('netdata_apps_swap_MiB_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', swapAccuser); + local ramBakerQuery = self.query('netdata_apps_mem_MiB_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', ramBaker); + local swapBakerQuery = self.query('netdata_apps_swap_MiB_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', swapBaker); graph.new('Memory usage', [ramAccuserQuery, swapAccuserQuery, ramBakerQuery, swapBakerQuery], h, w, x, y) + timeSeries.standardOptions.withUnit('mbytes') + graph.withLegendBottom(calcs=['current', 'mean', 'max']) + graph.withQueryColor([[ramAccuser, 'dark-yellow'], [swapAccuser, 'light-yellow'], [ramBaker, 'dark-red'], [swapBaker, 'light-red']]), - - } diff --git a/grafazos/src/node_hardware.jsonnet b/grafazos/src/node_hardware.jsonnet index b5ee3c7efa24..096ad3f844fd 100644 --- a/grafazos/src/node_hardware.jsonnet +++ b/grafazos/src/node_hardware.jsonnet @@ -79,9 +79,9 @@ local mountpoints = std.extVar('mountpoints') == 'opt'; + timeSeries.standardOptions.withUnit('bytes'), diskFreeSpace(h, w, x, y): - local qall = self.query('node_filesystem_free_bytes{' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /'); - local qroot = self.query('node_filesystem_free_bytes{mountpoint="/",' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /'); - local qopt = self.query('node_filesystem_free_bytes{mountpoint="/opt",' + base.node_instance + '="$node_instance"}', 'Available bytes on disk /opt'); + local qall = self.query('node_filesystem_free_bytes{' + base.node_instance + '="$node_instance"}', 'Available bytes on disk {{mountpoint}}'); + local qroot = self.query('node_filesystem_free_bytes{mountpoint="/",' + base.node_instance + '="$node_instance"}', 'Available bytes on disk {{mountpoint}}'); + local qopt = self.query('node_filesystem_free_bytes{mountpoint="/opt",' + base.node_instance + '="$node_instance"}', 'Available bytes on disk {{mountpoint}}'); local mountq = if mountpoints then [qroot, qopt] else [qall]; graph.new('Disk free space', mountq, h, w, x, y) + stat.standardOptions.withUnit('decbytes') @@ -105,16 +105,9 @@ local mountpoints = std.extVar('mountpoints') == 'opt'; + graph.withQueryColor([[total, 'light-green'], [sockets, 'light-yellow'], [files, 'light-blue'], [pipes, 'light-orange']]), networkIOS(h, w, x, y): - local receivedQuery = self.query('irate(node_network_receive_bytes_total[5m]) > 0', 'Bytes received'); - local transmittedQuery = self.query('irate(node_network_transmit_bytes_total[5m]) > 0', 'Bytes transmitted'); + local receivedQuery = self.query('-(irate(node_network_receive_bytes_total{' + base.node_instance + '="$node_instance"}[5m]))', 'Bytes received'); + local transmittedQuery = self.query('irate(node_network_transmit_bytes_total{' + base.node_instance + '="$node_instance"}[5m])', 'Bytes transmitted'); graph.new('Network traffic', [receivedQuery, transmittedQuery], h, w, x, y) + timeSeries.standardOptions.withUnit('Bps') - + graph.withLegendBottom(calcs=['current', 'mean', 'max']) - + timeSeries.standardOptions.withOverrides( - { - alias: '/.*received/', - transform: 'negative-Y', - } - ), - + + graph.withLegendBottom(calcs=['current', 'mean', 'max']), } -- GitLab From a987820125e48153e5ca696430042214045f427d Mon Sep 17 00:00:00 2001 From: "Corentin M." Date: Fri, 14 Mar 2025 13:59:28 -0400 Subject: [PATCH 5/7] Grafazos: fix delegate panels to filter on the selected instances Grafazos: fix netdata metrics (`netdata_apps_` deprecated since netdata 1.43.0 - oct 2023) with matching metrics * netdata_apps_lreads_KiB_persec_average -> netdata_app_disk_logical_io_KiB_persec_average{dimension="reads"} * netdata_apps_lwrites_KiB_persec_average -> netdata_app_disk_logical_io_KiB_persec_average{dimension="writes"} * netdata_apps_cpu_percentage_average -> netdata_app_cpu_utilization_percentage_average * netdata_apps_mem_MiB_average -> netdata_app_mem_usage_MiB_average * netdata_apps_swap_MiB_average -> netdata_app_swap_usage_MiB_average --- grafazos/src/delegate_hardware.jsonnet | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/grafazos/src/delegate_hardware.jsonnet b/grafazos/src/delegate_hardware.jsonnet index 3e25afa2155e..f04116e77ea3 100644 --- a/grafazos/src/delegate_hardware.jsonnet +++ b/grafazos/src/delegate_hardware.jsonnet @@ -44,10 +44,10 @@ local graph = base.graph; local writesAccuser = 'writes accuser'; local readsBaker = 'reads baker'; local writesBaker = 'writes baker'; - local readsAccuserQuery = self.query('netdata_apps_lreads_KiB_persec_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', readsAccuser); - local writesAccuserQuery = self.query('netdata_apps_lwrites_KiB_persec_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', writesAccuser); - local readsBakerQuery = self.query('netdata_apps_lreads_KiB_persec_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', readsBaker); - local writesBakerQuery = self.query('netdata_apps_lwrites_KiB_persec_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', writesBaker); + local readsAccuserQuery = self.query('netdata_app_disk_logical_io_KiB_persec_average{dimension="reads", app_group="octez-accuser",' + base.node_instance + '="$node_instance"}', readsAccuser); + local writesAccuserQuery = self.query('netdata_app_disk_logical_io_KiB_persec_average{dimension="writes", app_group="octez-accuser",' + base.node_instance + '="$node_instance"}', writesAccuser); + local readsBakerQuery = self.query('netdata_app_disk_logical_io_KiB_persec_average{dimension="reads", app_group"octez-baker",' + base.node_instance + '="$node_instance"}', readsBaker); + local writesBakerQuery = self.query('netdata_app_disk_logical_io_KiB_persec_average{dimension="writes", app_groupoctez-baker",' + base.node_instance + '="$node_instance"}', writesBaker); graph.new('IOs', [readsAccuserQuery, writesAccuserQuery, readsBakerQuery, writesBakerQuery], h, w, x, y) + timeSeries.standardOptions.withUnit('kbytes') + graph.withLegendBottom(calcs=['current', 'mean', 'max']) @@ -56,8 +56,8 @@ local graph = base.graph; cpu(h, w, x, y): local loadAccuser = 'Cpu load accuser'; local loadBaker = 'Cpu load baker'; - local loadAccuserQuery = self.query('netdata_apps_cpu_percentage_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', loadAccuser); - local loadBakerQuery = self.query('netdata_apps_cpu_percentage_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', loadBaker); + local loadAccuserQuery = self.query('netdata_app_cpu_utilization_percentage_average{app_group="octez-accuser",' + base.node_instance + '="$node_instance"}', loadAccuser); + local loadBakerQuery = self.query('netdata_app_cpu_utilization_percentage_average{app_group="octez-baker",' + base.node_instance + '="$node_instance"}', loadBaker); graph.new('Cpu activity', [loadAccuserQuery, loadBakerQuery], h, w, x, y) + timeSeries.standardOptions.withUnit('percent') + graph.withQueryColor([[loadAccuser, 'light-yellow'], [loadBaker, 'light-red']]), @@ -67,10 +67,10 @@ local graph = base.graph; local swapAccuser = 'Swap usage accuser'; local ramBaker = 'Memory usage baker'; local swapBaker = 'Swap usage baker'; - local ramAccuserQuery = self.query('netdata_apps_mem_MiB_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', ramAccuser); - local swapAccuserQuery = self.query('netdata_apps_swap_MiB_average{dimension="octez-accuser",' + base.node_instance + '="$node_instance"}', swapAccuser); - local ramBakerQuery = self.query('netdata_apps_mem_MiB_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', ramBaker); - local swapBakerQuery = self.query('netdata_apps_swap_MiB_average{dimension="octez-baker",' + base.node_instance + '="$node_instance"}', swapBaker); + local ramAccuserQuery = self.query('netdata_app_mem_usage_MiB_average{app_group="octez-accuser",' + base.node_instance + '="$node_instance"}', ramAccuser); + local swapAccuserQuery = self.query('netdata_app_swap_usage_MiB_average{app_group="octez-accuser",' + base.node_instance + '="$node_instance"}', swapAccuser); + local ramBakerQuery = self.query('netdata_app_mem_usage_MiB_average{app_group="octez-baker",' + base.node_instance + '="$node_instance"}', ramBaker); + local swapBakerQuery = self.query('netdata_app_swap_usage_MiB_average{app_group="octez-baker",' + base.node_instance + '="$node_instance"}', swapBaker); graph.new('Memory usage', [ramAccuserQuery, swapAccuserQuery, ramBakerQuery, swapBakerQuery], h, w, x, y) + timeSeries.standardOptions.withUnit('mbytes') + graph.withLegendBottom(calcs=['current', 'mean', 'max']) -- GitLab From 78bed52fe2a0c81e6e77a6ee4f4efabe152b0a87 Mon Sep 17 00:00:00 2001 From: "Corentin M." Date: Fri, 14 Mar 2025 13:09:29 -0400 Subject: [PATCH 6/7] Grafazos: fix full dashboard Network traffic panel --- grafazos/src/delegate_hardware.jsonnet | 1 + 1 file changed, 1 insertion(+) diff --git a/grafazos/src/delegate_hardware.jsonnet b/grafazos/src/delegate_hardware.jsonnet index f04116e77ea3..99426e3f58c4 100644 --- a/grafazos/src/delegate_hardware.jsonnet +++ b/grafazos/src/delegate_hardware.jsonnet @@ -76,3 +76,4 @@ local graph = base.graph; + graph.withLegendBottom(calcs=['current', 'mean', 'max']) + graph.withQueryColor([[ramAccuser, 'dark-yellow'], [swapAccuser, 'light-yellow'], [ramBaker, 'dark-red'], [swapBaker, 'light-red']]), } + -- GitLab From d19c7083da271cda2bcbce15c6dceab520920554 Mon Sep 17 00:00:00 2001 From: "Corentin M." Date: Tue, 18 Mar 2025 17:17:53 -0400 Subject: [PATCH 7/7] Grafazos: describe changes into Changelog --- CHANGES.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 050c63a59054..ce3a50e4c9aa 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -166,3 +166,10 @@ Miscellaneous ------------- - Revert Renamed ``Bls`` file from the crypto library in ``Bls_aug.ml``. (MR :gl:`!17051`). +- Grafazos: fix netdata metrics used for hardware monitoring, and add more flexibility + over the mountpoint allowing to observe only / and /opt mountpoints if needed . Also, + fix the network IOs panel presentation, avoiding a grafana panel transformation. +- Grafazos: add a filter on the selected `node_instance` variable over all metrics (was + previously showing data from all sources on some panels even when a specific source had + been selected in the grafana dashboard's variable) + -- GitLab