From a61e43e18e3a9af975842c50f0dfb927e2b04927 Mon Sep 17 00:00:00 2001 From: Daniel Sampliner Date: Fri, 15 Nov 2024 18:02:26 -0500 Subject: [PATCH] nixos/netdata: copy apps_groups.conf instead of symlink Currently, it is not possible to configure `apps.plugin` via NixOS option `services.netdata.configDir."apps_groups.conf"`. This is because `apps.plugin` explicitly does not follow symbolic links when reading its configuration from apps_groups.conf[^ref]. This change will copy that file instead of symlinking to address this. Fixes #255161 [^ref]: https://github.com/netdata/netdata/blob/3849e70f93d9c13097e80823a5e0a0fa2c6ea39c/src/collectors/apps.plugin/apps_plugin.c#L679 --- nixos/modules/services/monitoring/netdata.nix | 2 +- nixos/tests/netdata.nix | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/nixos/modules/services/monitoring/netdata.nix b/nixos/modules/services/monitoring/netdata.nix index 6e18ef562b8f9..c848c565d5269 100644 --- a/nixos/modules/services/monitoring/netdata.nix +++ b/nixos/modules/services/monitoring/netdata.nix @@ -27,7 +27,7 @@ let mkdir $out ${concatStringsSep "\n" (mapAttrsToList (path: file: '' mkdir -p "$out/$(dirname ${path})" - ln -s "${file}" "$out/${path}" + ${if path == "apps_groups.conf" then "cp" else "ln -s"} "${file}" "$out/${path}" '') cfg.configDir)} ''; diff --git a/nixos/tests/netdata.nix b/nixos/tests/netdata.nix index df4d342905c68..0ae1f9c137fee 100644 --- a/nixos/tests/netdata.nix +++ b/nixos/tests/netdata.nix @@ -14,6 +14,10 @@ import ./make-test-python.nix ({ pkgs, ...} : { services.netdata = { enable = true; python.recommendedPythonPackages = true; + + configDir."apps_groups.conf" = pkgs.writeText "apps_groups.conf" '' + netdata_test: netdata + ''; }; }; }; @@ -33,12 +37,20 @@ import ./make-test-python.nix ({ pkgs, ...} : { # check if netdata can read disk ops for root owned processes. # if > 0, successful. verifies both netdata working and # apps.plugin has elevated capabilities. - url = "http://localhost:19999/api/v1/data\?chart=user.root_disk_physical_io" + url = "http://localhost:19999/api/v1/data?chart=user.root_disk_physical_io" filter = '[.data[range(10)][2]] | add | . < 0' cmd = f"curl -s {url} | jq -e '{filter}'" netdata.wait_until_succeeds(cmd) # check if the control socket is available netdata.succeed("sudo netdatacli ping") + + # check that custom groups in apps_groups.conf are used. + # if > 0, successful. verifies that user-specified apps_group.conf + # is used. + url = "http://localhost:19999/api/v1/data?chart=app.netdata_test_cpu_utilization" + filter = '[.data[range(10)][2]] | add | . > 0' + cmd = f"curl -s {url} | jq -e '{filter}'" + netdata.wait_until_succeeds(cmd, timeout=30) ''; })