diff --git a/CHANGELOG.md b/CHANGELOG.md index aa72f9a..bda51af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,3 +8,4 @@ * Ensure Netdata service is enabled and started. * Manage IP address and port used. * Manage memory mode. +* Define some vars to manage master and slaves configuration. diff --git a/README.md b/README.md index bd94cd9..099e811 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,15 @@ A role to manage Netdata installation and configuration. * **netdata__conf_bind_ip** : IP address used by Netdata to listen [default : `127.0.0.1`]. * **netdata__conf_bind_port** : Port used by Netdata to listen [default : `19999`]. * **netdata__conf_memory_mode** : The memory mode of the database [default : `ram`]. +* **netdata__slave_enable** : If node should send metrics to a master [default : `False`]. +* **netdata__slave_destination** : The destination to send metrics to [default : `netdata.{{ ansible_domain }}`]. +* **netdata__slave_api_key** : The API KEY to use to identify with the master [default : `''`]. +* **netdata__slave_buffer_size** : The buffer to use for sending metrics [default : ``]. +* **netdata__slave_reconnect** : If the connection fails, or it disconnects, retry after that many seconds [default : `5`]. +* **netdata__master_enable** : If node should receive metrics from other nodes [default : `False`]. +* **netdata__master_api_key** : The API key to authenticate slaves [default : `''`]. +* **netdata__master_history** : The number of entries in the database per hosts [default : `3600`]. +* **netdata__master_memory_mode** : The memory mode to be used for all hosts using this API key [default : `ram`]. ## Example Playbook diff --git a/defaults/main.yml b/defaults/main.yml index 4937446..b8a37ac 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -57,7 +57,7 @@ netdata__service_manage: True # ]]] # ]]] -# Configuration [[[ +# Common configuration [[[ # ----------------------------- # .. envvar:: netdata__etc_src [[[. @@ -95,4 +95,93 @@ netdata__conf_memory_mode: 'ram' # ]]] + # ]]] +# Slave configuration [[[ +# ----------------------------- + +# .. envvar:: netdata__slave_enable [[[. +# +# If node should send metrics to a master. Possible options : +# +# +# ``False`` +# Default. +# +# ``True`` +# +netdata__slave_enable: False + + # ]]] +# .. envvar:: netdata__slave_destination [[[. +# +# The destination to send metrics to. +# https://github.com/firehol/netdata/wiki/Replication-Overview#options-for-the-sending-node +# +netdata__slave_destination: 'netdata.{{ ansible_domain }}' + + # ]]] +# .. envvar:: netdata__slave_api_key [[[. +# +# The API KEY to use (as the sender). +# https://github.com/firehol/netdata/wiki/Replication-Overview#streaming-configuration +# +netdata__slave_api_key: '' + + # ]]] +# .. envvar:: netdata__slave_buffer_size [[[. +# +# The buffer to use for sending metrics. +# 1MB by default is good for 2-3 seconds of data. +# +netdata__slave_buffer_size: '1048576' + + # ]]] +# .. envvar:: netdata__slave_reconnect [[[. +# +# If the connection fails, or it disconnects, retry after that many seconds. +# +netdata__slave_reconnect: '5' + + # ]]] + + # ]]] +# Master configuration [[[ +# ----------------------------- + +# .. envvar:: netdata__master_enable [[[. +# +# If node should receive metrics from other nodes. Possible options : +# +# +# ``False`` +# Default. +# +# ``True`` +# +netdata__master_enable: False + + # ]]] +# .. envvar:: netdata__master_api_key [[[. +# +# The API key to authenticate slaves. +# +netdata__master_api_key: '' + + # ]]] +# .. envvar:: netdata__master_history [[[. +# +# The number of entries in the database per hosts. +# +netdata__master_history: '3600' + + # ]]] +# .. envvar:: netdata__master_memory_mode [[[. +# +# The memory mode to be used for all hosts using this API key. +# https://github.com/firehol/netdata/wiki/Memory-Requirements#memory-modes +# +netdata__master_memory_mode: 'ram' + + # ]]] + # ]]] diff --git a/templates/etc/netdata/stream.conf.j2 b/templates/etc/netdata/stream.conf.j2 new file mode 100644 index 0000000..87d2c86 --- /dev/null +++ b/templates/etc/netdata/stream.conf.j2 @@ -0,0 +1,153 @@ +## {{ ansible_managed }} + +# netdata configuration for aggregating data from remote hosts +# +# API keys authorize a pair of sending-receiving netdata servers. +# Once their communication is authorized, they can exchange metrics for any +# number of hosts. +# +# You can generate API keys, with the linux command: uuidgen +# +# ----------------------------------------------------------------------------- +# 1. ON SLAVE NETDATA - THE ONE THAT WILL BE SENDING METRICS + +[stream] + # Enable this on slaves, to have them send metrics. + {% if netdata__slave_enable -%} + enabled = yes + {% else %} + enabled = no + {%- endif %} + + # The destination to send metrics to. + # A space separated list of: + # [PROTOCOL:]HOST[%INTERFACE][:PORT] + # The first available will get the metrics. + # PROTOCOL = tcp or udp (only tcp is supported by masters) + # HOST = an IPv4, IPv6 IP, or a hostname. + # IPv6 IPs should be given with brackets [ip:address] + # INTERFACE = the network interface to use + # PORT = the port number or service name (/etc/services) + # This communication is not HTTP (cannot be proxied by web proxies). + destination = {{ netdata__slave_destination }} + + # The API_KEY to use (as the sender) + api key = {{ netdata__slave_api_key }} + + # The timeout to connect and send metrics + timeout seconds = 60 + + # If the destination line above does specify a port, use this + default port = 19999 + + # The buffer to use for sending metrics. + # 1MB by default is good for 2-3 seconds of data, so increase this + # if you expect latencies. + buffer size bytes = {{ netdata__slave_buffer_size }} + + # If the connection fails, or it disconnects, + # retry after that many seconds. + reconnect delay seconds = {{ netdata__slave_reconnect }} + + # Attempt to sync the clock the of the master with the clock of the + # slave for that many iterations, when starting. + initial clock resync iterations = 60 + + +# ----------------------------------------------------------------------------- +# 2. ON MASTER NETDATA - THE ONE THAT WILL BE RECEIVING METRICS +# +# You can have one API key per slave, or the same API key for all slaves. +# +# All options below are used in this order: +# +# a) MACHINE_GUID (settings for each machine) +# b) API_KEY (settings for the API key) +# c) this netdata defaults (as in netdata.conf) +# +# You can combine the above (the more specific setting will be used). + +# API key authentication +# If the key is not listed here, it will not be able to connect. + +[{{ netdata__master_api_key }}] + # Default settings for the API key + + # You can disable the API key, by setting this to: no + # The default (for unknown API keys) is also: no + {% if netdata__master_enable -%} + enabled = yes + {% else %} + enabled = no + {%- endif %} + + # The default history in entries, for all hosts using this API key. + # You can also set it per host below. + # If you don't set it here, the history size of the central netdata + # will be used + default history = {{ netdata__master_history }} + + # The default memory mode to be used for all hosts using this API key. + # You can also set it per host below. + # If you don't set it here, the memory mode of netdata.conf will be used. + # Valid modes: + # save save on exit, load on start + # map like swap (continuously syncing to disks) + # ram keep it in RAM, don't touch the disk + # none no database (passing through this netdata) + default memory mode = {{ netdata__master_memory_mode }} + + # Shall we enable health monitoring for the hosts using this API key? + # 3 values: + # yes enable alarms + # no do not enable alarms + # auto enable alarms, only when the sending netdata is connected + # You can also set it per host, below. + # The default is the same as to netdata.conf + health enabled by default = auto + + # postpone alarms for a short period after the sender is connected + default postpone alarms on connect seconds = 60 + + # need to route metrics differently? set these. + # the defaults are the ones at the [stream] section + #default proxy enabled = yes | no + #default proxy destination = IP:PORT IP:PORT ... + #default proxy api key = API_KEY + + +# ----------------------------------------------------------------------------- +# 3. ON MASTER NETDATA - THE ONE THAT WILL BE RECEIVING METRICS +# +# THIS IS OPTIONAL - YOU DON'T NEED IT BY DEFAULT +# It only exists to give you finer control of the master settings for each +# slave host, when the same API key is used by many netdata slaves / proxies. +# +# Each netdata has a unique GUID - generated the first time netdata starts. +# You can find it at /var/lib/netdata/registry/netdata.public.unique.id +# The host sending data will have one. If the host is not ephemeral, +# you can give settings for each specific host here. + +[MACHINE_GUID] + # enable this host: yes | no + # When disabled, the master will not receive metrics for this host. + # THIS IS NOT A SECURITY MECHANISM - AN ATTACKER CAN SET ANY OTHER GUID. + # Use only the API key for security. + enabled = no + + # The number of entries in the database + history = 3600 + + # The memory mode of the database: save | map | ram | none + memory mode = save + + # Health / alarms control: yes | no | auto + health enabled = yes + + # postpone alarms when the sender connects + postpone alarms on connect seconds = 60 + + # need to route metrics differently? + #proxy enabled = yes | no + #proxy destination = IP:PORT IP:PORT ... + #proxy api key = API_KEY