Netdata: Difference between revisions

Add instructions how to take newer web UI into use
DoggoBit (talk | contribs)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
__TOC__
<strong>[https://www.netdata.cloud/ Netdata]</strong> is a metrics tool, which comes with a lot of sane pre-configuration.
It contains various plugins, which may need specific steps to be enabled.


[https://www.netdata.cloud/ netdata] is a metrics tool, which comes with a lot of sane preconfiguration.
== Installation ==
It contains of various plugins, which need to be enabled sometimes with additional effort.


== Adding node ==
Add the following to your [[Overview_of_the_NixOS_Linux_distribution#Declarative_Configuration|NixOS configuration]] to setup and use Netdata:
*Install the netdata package and enable the service.
*When adding new node in the web interface you get a token, write that token to /var/lib/netdata/cloud.d/token
*As root run <code>nix-shell -p netdata --run "netdata-claim.sh"</code>


== Newer web UI ==
{{file|configuration.nix|nix|
Netdata comes with an old unmaintained web UI that is accesible at port <code>19999</code>. Netdata Inc. will not fix any bugs in the old UI and it may to become more and more broken as time goes on. There is, however, a newer maintained, but unfree proprietary web UI that can be optionally enabled to replace the old UI. To take it into use, override netdata's package:<syntaxhighlight lang="nix">
<nowiki>
services.netdata.package = pkgs.netdata.override {
{
   withCloudUi = true;
  services.netdata = {
    enable = true;
    config.global = {
      "memory mode" = "ram";
      "debug log" = "none";
      "access log" = "none";
      "error log" = "syslog";
    };
  };
  networking.firewall.allowedTCPPorts = [ 19999 ];
}
</nowiki>
}}
 
{{Evaluate}}
 
Netdata's basic instance will then be available at <code>http://localhost:19999</code> on the local network.  
 
== Configuration ==
 
You may wish to aggregate multiple machines' Netdata information, in which case, you can subscribe to the Netdata Cloud service, or you can self-host [[Prometheus]] and [[Grafana]] as a self-hosted solution.
 
==== Adding node to cloud ====
* Enable the Netdata service as described above.
* override package to be built `withCloud`
* When adding a new node in the web interface, you get a token; copy that token to <code>/var/lib/netdata/cloud.d/token</code>.
* As root, run the <code>netdata-claim.sh</code> script.
{{Commands|# nix-shell -p netdata --run "netdata-claim.sh"}}
 
====== Declare claim token ([https://search.nixos.org/options?show=services.netdata.claimTokenFile option docs]) ======
<syntaxhighlight lang="nixos">
services.netdata = {
  package = pkgs.netdata.override { withCloud = true; };
   claimTokenFile = config.sops.secrets.netdata-token.path; # mounted by sops-nix, in this example
};
};
</syntaxhighlight>In addition, you need to allow unfree packages.
</syntaxhighlight>


== Streaming node setup ==
=== Streaming node setup ===


Ensure you choose appropriate access control for your nodes.
{{Security Warning|Ensure you choose the appropriate access control for your nodes.}}


=== Receiver node ===
==== Receiver node ====


<syntaxhighlight lang="nix">
{{file|configuration.nix|nix|
services.netdata.configDir."stream.conf" =
<nowiki>
  let
{
    mkChildNode = apiKey: allowFrom: ''
  services.netdata.configDir."stream.conf" =
      [${apiKey}]
    let
        enabled = yes
      mkChildNode = apiKey: allowFrom: ''
        default history = <a value of your choice>
        [${apiKey}]
        default memory mode = dbengine # a good default
          enabled = yes
        health enabled by default = auto
          default history = <A value of your choice>
        allow from = ${allowFrom}
          default memory mode = dbengine
    '';
          health enabled by default = auto
  in pkgs.writeText "stream.conf" ''
          allow from = ${allowFrom}
    [stream]
      '';
       # This won't stream by itself, except if the receiver is a sender too, which is possible in netdata model.
    in pkgs.writeText "stream.conf" ''
      [stream]
       # This won't stream by itself, except if the receiver is a sender too, which is possible in the netdata model.
       enabled = no
       enabled = no
       enable compression = yes
       enable compression = yes


    # An allowed sender node
      # An allowed sender node
    ${mkChildNode "an API key" "an allowed IP"}
      ${mkChildNode "<API key goes here>" "<Allowed IP goes here>"}
  '';
    '';
</syntaxhighlight>
}
</nowiki>
}}


=== Sender node ===
==== Sender node ====


<syntaxhighlight lang="nix">
{{file|configuration.nix|nix|
services.netdata.configDir."stream.conf" = pkgs.writeText "stream.conf" ''
<nowiki>
  [stream]
{
  services.netdata.configDir."stream.conf" = pkgs.writeText "stream.conf" ''
    [stream]
     enabled = yes
     enabled = yes
     destination = receiver-hostname-or-ip-address:19999
     destination = <Receiver hostname or IP address goes here>:19999
     api key = any string that is set also on the receiver side
     api key = <API key goes here>
'';
  '';
</syntaxhighlight>
}
</nowiki>
}}


If you don't need any web UI and want to consume minimal resources on the sender node, use:
If you don't need any web UI and want to consume minimal resources on the sender node, use:


<syntaxhighlight lang="nix">
{{file|configuration.nix|nix|
services.netdata = {
<nowiki>
  config = {
{
  services.netdata.config = {
     global = { "memory mode" = "none"; };
     global = { "memory mode" = "none"; };
     web = {
     web = {
Line 66: Line 105:
     };
     };
   };
   };
};
}
</syntaxhighlight>
</nowiki>
}}


This way, it won't spawn any web UI, neither store any metric locally.
This way, it will neither spawn a web UI, nor store any metric locally.


<span id="python-plugins"></span>
<span id="python-plugins"></span>
= Python Plugins =


== nvidia-smi ==
== Tips and Tricks ==


To enable the <code>nvidia-smi</code> plugin you have to make sure <code>nvidia-smi</code> can be called by <code>netdata</code>.
==== Modern Web UI ====


<syntaxhighlight lang="nix">
{{tip/unfree}}
systemd.services.enable = true;
 
systemd.services.netdata.path = [pkgs.linuxPackages.nvidia_x11];
Netdata comes with an old, unmaintained but open source web UI that is accessible at port <code>19999</code>. Netdata Inc. will not fix any bugs in the old UI and it may to become more and more broken as time goes on. There is however, a newer, maintained but proprietary web UI that can be optionally enabled to replace the old UI. To use this new UI, override Netdata's package:
services.netdata.configDir."python.d.conf" = pkgs.writeText "python.d.conf" ''
 
   nvidia_smi: yes
{{file|configuration.nix|nix|
'';
<nowiki>
</syntaxhighlight>
{
  nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
    "netdata"
  ];
  services.netdata.package = pkgs.netdata.override {
    withCloudUi = true;
   };
}
</nowiki>
}}
 
=== Python Plugins ===
 
==== nvidia-smi ====
 
{{tip/unfree}}


== samba ==
To enable the <code>nvidia-smi</code> plugin, you have to ensure that <code>nvidia-smi</code> can be called by <code>netdata</code>:


To enable <code>samba</code> plugin additional permissions and configurations will need to be set.
{{file|configuration.nix|nix|
<nowiki>
{
  systemd.services.netdata.path = [ pkgs.linuxPackages.nvidia_x11 ];
  services.netdata.configDir."python.d.conf" = pkgs.writeText "python.d.conf" ''
    nvidia_smi: yes
  '';
}
</nowiki>
}}


<syntaxhighlight lang="nix">
==== samba ====
services.netdata.configDir."python.d.conf" = pkgs.writeText "python.d.conf" ''
  samba: yes
'';


# add samba and sudo to path of python plugin
To enable the <code>samba</code> plugin, additional permissions and configurations will need to be set:
systemd.services.netdata.path = [  pkgs.samba "/run/wrappers" ];


# permit to run sudo smbstatus -P
{{file|configuration.nix|nix|
security.sudo.extraConfig = ''
<nowiki>
  netdata ALL=(root) NOPASSWD: ${pkgs.samba}/bin/smbstatus
{
'';
  services = {
    netdata.configDir."python.d.conf" = pkgs.writeText "python.d.conf" ''
      samba: yes
    '';
    samba.extraConfig = ''
      smbd profiling level = on
    '';
  };


# as documented here : https://github.com/netdata/netdata/blob/master/system/netdata.service.in
  systemd.services.netdata = {
# review capabilityset above if other plugins are non functional
    path = [ pkgs.samba "/run/wrappers" ];
systemd.services.netdata.serviceConfig.CapabilityBoundingSet = ["CAP_SETGID"];
    serviceConfig.CapabilityBoundingSet = [ "CAP_SETGID" ];
  };


# enable profiling
  security.sudo.extraConfig = ''
services.samba.extraConfig = ''
    netdata ALL=(root) NOPASSWD: ${pkgs.samba}/bin/smbstatus
  smbd profiling level = on
  '';
'';
}
</syntaxhighlight>
</nowiki>
}}