Netdata: Difference between revisions
imported>Beardedtek m →nvidia-smi: edit quotes to not include html code |
Sync changes from nixos.wiki and re-format to fit the MoS. |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<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. | |||
== Installation == | |||
Add the following to your [[Overview_of_the_NixOS_Linux_distribution#Declarative_Configuration|NixOS configuration]] to setup and use Netdata: | |||
== | {{file|configuration.nix|nix| | ||
<nowiki> | |||
{ | |||
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. | ||
services.netdata.configDir."stream.conf" = | |||
==== Adding node ==== | |||
* Enable the Netdata service as described above. | |||
* 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"}} | |||
=== Streaming node setup === | |||
{{Security Warning|Ensure you choose the appropriate access control for your nodes.}} | |||
==== Receiver node ==== | |||
# This won't stream by itself, except if the receiver is a sender too, which is possible in netdata model. | |||
{{file|configuration.nix|nix| | |||
<nowiki> | |||
{ | |||
services.netdata.configDir."stream.conf" = | |||
let | |||
mkChildNode = apiKey: allowFrom: '' | |||
[${apiKey}] | |||
enabled = yes | |||
default history = <A value of your choice> | |||
default memory mode = dbengine | |||
health enabled by default = auto | |||
allow from = ${allowFrom} | |||
''; | |||
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 | |||
${mkChildNode "<API key goes here>" "<Allowed IP goes here>"} | |||
''; | |||
</ | } | ||
</nowiki> | |||
}} | |||
=== Sender node === | ==== Sender node ==== | ||
< | {{file|configuration.nix|nix| | ||
services.netdata.configDir."stream.conf" = pkgs.writeText "stream.conf" '' | <nowiki> | ||
{ | |||
services.netdata.configDir."stream.conf" = pkgs.writeText "stream.conf" '' | |||
[stream] | |||
enabled = yes | enabled = yes | ||
destination = | destination = <Receiver hostname or IP address goes here>:19999 | ||
api key = | api key = <API key goes here> | ||
''; | ''; | ||
</ | } | ||
</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: | ||
< | {{file|configuration.nix|nix| | ||
services.netdata | <nowiki> | ||
{ | |||
services.netdata.config = { | |||
global = { "memory mode" = "none"; }; | global = { "memory mode" = "none"; }; | ||
web = { | web = { | ||
Line 59: | Line 96: | ||
}; | }; | ||
}; | }; | ||
} | } | ||
</ | </nowiki> | ||
}} | |||
This way, it | This way, it will neither spawn a web UI, nor store any metric locally. | ||
<span id="python-plugins"></span> | <span id="python-plugins"></span> | ||
== | == Tips and Tricks == | ||
==== Modern Web UI ==== | |||
{{Unfree}} | |||
< | 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: | ||
== | {{file|configuration.nix|nix| | ||
<nowiki> | |||
{ | |||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ | |||
"netdata" | |||
]; | |||
services.netdata.package = pkgs.netdata.override { | |||
withCloudUi = true; | |||
}; | |||
} | |||
</nowiki> | |||
}} | |||
=== Python Plugins === | |||
==== nvidia-smi ==== | |||
{{Unfree}} | |||
To enable the <code>nvidia-smi</code> plugin, you have to ensure that <code>nvidia-smi</code> can be called by <code>netdata</code>: | |||
{{file|configuration.nix|nix| | |||
<nowiki> | |||
systemd.services.netdata. | { | ||
systemd.services.netdata.path = [ pkgs.linuxPackages.nvidia_x11 ]; | |||
services.netdata.configDir."python.d.conf" = pkgs.writeText "python.d.conf" '' | |||
nvidia_smi: yes | |||
''; | |||
} | |||
</nowiki> | |||
}} | |||
==== samba ==== | |||
services.samba.extraConfig = '' | |||
To enable the <code>samba</code> plugin, additional permissions and configurations will need to be set: | |||
''; | |||
</ | {{file|configuration.nix|nix| | ||
<nowiki> | |||
{ | |||
services = { | |||
netdata.configDir."python.d.conf" = pkgs.writeText "python.d.conf" '' | |||
samba: yes | |||
''; | |||
samba.extraConfig = '' | |||
smbd profiling level = on | |||
''; | |||
}; | |||
systemd.services.netdata = { | |||
path = [ pkgs.samba "/run/wrappers" ]; | |||
serviceConfig.CapabilityBoundingSet = [ "CAP_SETGID" ]; | |||
}; | |||
security.sudo.extraConfig = '' | |||
netdata ALL=(root) NOPASSWD: ${pkgs.samba}/bin/smbstatus | |||
''; | |||
} | |||
</nowiki> | |||
}} |
Latest revision as of 14:14, 30 October 2024
Netdata 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.
Installation
Add the following to your NixOS configuration to setup and use Netdata:
configuration.nix
{
services.netdata = {
enable = true;
config.global = {
"memory mode" = "ram";
"debug log" = "none";
"access log" = "none";
"error log" = "syslog";
};
};
networking.firewall.allowedTCPPorts = [ 19999 ];
}
Netdata's basic instance will then be available at http://localhost:19999
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
- Enable the Netdata service as described above.
- When adding a new node in the web interface, you get a token; copy that token to
/var/lib/netdata/cloud.d/token
. - As root, run the
netdata-claim.sh
script.
# nix-shell -p netdata --run "netdata-claim.sh"
Streaming node setup
Receiver node
configuration.nix
{
services.netdata.configDir."stream.conf" =
let
mkChildNode = apiKey: allowFrom: ''
[${apiKey}]
enabled = yes
default history = <A value of your choice>
default memory mode = dbengine
health enabled by default = auto
allow from = ${allowFrom}
'';
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
enable compression = yes
# An allowed sender node
${mkChildNode "<API key goes here>" "<Allowed IP goes here>"}
'';
}
Sender node
configuration.nix
{
services.netdata.configDir."stream.conf" = pkgs.writeText "stream.conf" ''
[stream]
enabled = yes
destination = <Receiver hostname or IP address goes here>:19999
api key = <API key goes here>
'';
}
If you don't need any web UI and want to consume minimal resources on the sender node, use:
configuration.nix
{
services.netdata.config = {
global = { "memory mode" = "none"; };
web = {
mode = "none";
"accept a streaming request every seconds" = 0;
};
};
}
This way, it will neither spawn a web UI, nor store any metric locally.
Tips and Tricks
Modern Web UI
Netdata comes with an old, unmaintained but open source web UI that is accessible at port 19999
. 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:
configuration.nix
{
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
"netdata"
];
services.netdata.package = pkgs.netdata.override {
withCloudUi = true;
};
}
Python Plugins
nvidia-smi
To enable the nvidia-smi
plugin, you have to ensure that nvidia-smi
can be called by netdata
:
configuration.nix
{
systemd.services.netdata.path = [ pkgs.linuxPackages.nvidia_x11 ];
services.netdata.configDir."python.d.conf" = pkgs.writeText "python.d.conf" ''
nvidia_smi: yes
'';
}
samba
To enable the samba
plugin, additional permissions and configurations will need to be set:
configuration.nix
{
services = {
netdata.configDir."python.d.conf" = pkgs.writeText "python.d.conf" ''
samba: yes
'';
samba.extraConfig = ''
smbd profiling level = on
'';
};
systemd.services.netdata = {
path = [ pkgs.samba "/run/wrappers" ];
serviceConfig.CapabilityBoundingSet = [ "CAP_SETGID" ];
};
security.sudo.extraConfig = ''
netdata ALL=(root) NOPASSWD: ${pkgs.samba}/bin/smbstatus
'';
}