From c0dec803084bc443622f6681af7d89d84eceaf44 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 25 Mar 2023 16:31:54 +0100 Subject: [PATCH] Initial commit --- defaults/main.yml | 2 + handlers/main.yml | 17 ++ meta/main.yml | 18 ++ tasks/main.yml | 56 ++++++ templates/nrpe.cfg.j2 | 384 ++++++++++++++++++++++++++++++++++++++++ templates/server.cfg.j2 | 12 ++ 6 files changed, 489 insertions(+) create mode 100644 defaults/main.yml create mode 100644 handlers/main.yml create mode 100644 meta/main.yml create mode 100644 tasks/main.yml create mode 100644 templates/nrpe.cfg.j2 create mode 100644 templates/server.cfg.j2 diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..3ab0f00 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,2 @@ +--- +nagios_extra_groups: [] diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..92dbbe1 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,17 @@ +--- +- name: reload nrpe + service: + name: nrpe + state: restarted + +- name: reload nagios-nrpe-server + service: + name: nagios-nrpe-server + state: restarted + +- name: restart nagios-server + docker_container: + name: monitor + restart: yes + delegate_to: "{{ item }}" + with_items: "{{ groups['nagios_hosts'] }}" diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..4bb59b9 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,18 @@ +--- + +dependencies: [] + +galaxy_info: + role_name: common + author: 'Pierre-Olivier Mercier ' + description: Install and configure nrpe server + license: GPL-3.0-or-later + min_ansible_version: 2.9 + platforms: + - name: Alpine + versions: + - all + - name: Debian + versions: + - all + galaxy_tags: [] diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..ca47911 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,56 @@ +--- +- name: install nrpe packages (debian) + apt: + name: + - nagios-nrpe-server + - nagios-nrpe-plugin + state: present + update_cache: yes + when: ansible_distribution == 'Debian' + +- name: install nrpe packages (alpine) + apk: + name: + - nagios-plugins-disk + - nagios-plugins-load + - nagios-plugins-ntp + - nagios-plugins-procs + - nagios-plugins-users + - nrpe + state: present + update_cache: yes + when: ansible_distribution == 'Alpine' + +- name: configure nrpe + template: + src: nrpe.cfg.j2 + dest: /etc/nrpe.cfg + notify: + - reload nrpe + when: ansible_distribution == 'Alpine' + +- name: configure nrpe + template: + src: nrpe.cfg.j2 + dest: /etc/nagios/nrpe.cfg + notify: + - reload nagios-nrpe-server + when: ansible_distribution == 'Debian' + +- name: ensure nrpe is running + service: + name: nrpe + enabled: yes + state: started + when: ansible_distribution == 'Alpine' + tags: + - pkg + +- name: register the new host on nagios + template: + src: server.cfg.j2 + dest: "/etc/nagios/servers/{{ inventory_hostname_short }}.cfg" + delegate_to: "{{ item }}" + with_items: "{{ groups['nagios_hosts'] }}" + notify: + - restart nagios-server diff --git a/templates/nrpe.cfg.j2 b/templates/nrpe.cfg.j2 new file mode 100644 index 0000000..79cd57d --- /dev/null +++ b/templates/nrpe.cfg.j2 @@ -0,0 +1,384 @@ +############################################################################# +# +# Sample NRPE Config File +# +# Notes: +# +# This is a sample configuration file for the NRPE daemon. It needs to be +# located on the remote host that is running the NRPE daemon, not the host +# from which the check_nrpe client is being executed. +# +############################################################################# + + +# LOG FACILITY +# The syslog facility that should be used for logging purposes. + +log_facility=daemon + + + +# LOG FILE +# If a log file is specified in this option, nrpe will write to +# that file instead of using syslog. + +#log_file=/var/nrpe.log + + + +# DEBUGGING OPTION +# This option determines whether or not debugging messages are logged to the +# syslog facility. +# Values: 0=debugging off, 1=debugging on + +debug=0 + + + +# PORT NUMBER +# Port number we should wait for connections on. +# NOTE: This must be a non-privileged port (i.e. > 1024). +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +server_port=5666 + + + +# SERVER ADDRESS +# Address that nrpe should bind to in case there are more than one interface +# and you do not want nrpe to bind on all interfaces. +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +#server_address=127.0.0.1 + + + +# LISTEN QUEUE SIZE +# Listen queue size (backlog) for serving incoming connections. +# You may want to increase this value under high load. + +#listen_queue_size=5 + + + +# NRPE USER +# This determines the effective user that the NRPE daemon should run as. +# You can either supply a username or a UID. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd +# NOTE: OpenRC starts NRPE already as nagios user. You can change the user +# in /etc/conf.d/nrpe. + +#nrpe_user=nagios + + + +# NRPE GROUP +# This determines the effective group that the NRPE daemon should run as. +# You can either supply a group name or a GID. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd +# NOTE: OpenRC starts NRPE already as nagios group. You can change the +# group in /etc/conf.d/nrpe. + +#nrpe_group=nagios + + + +# ALLOWED HOST ADDRESSES +# This is an optional comma-delimited list of IP address or hostnames +# that are allowed to talk to the NRPE daemon. Network addresses with a bit mask +# (i.e. 192.168.1.0/24) are also supported. Hostname wildcards are not currently +# supported. +# +# Note: The daemon only does rudimentary checking of the client's IP +# address. I would highly recommend adding entries in your /etc/hosts.allow +# file to allow only the specified host to connect to the port +# you are running this daemon on. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +allowed_hosts={{ nagios_host }},monitor.p0m.fr,2a01:e0a:518:830::a + + + +# COMMAND ARGUMENT PROCESSING +# This option determines whether or not the NRPE daemon will allow clients +# to specify arguments to commands that are executed. This option only works +# if the daemon was configured with the --enable-command-args configure script +# option. +# +# *** ENABLING THIS OPTION IS A SECURITY RISK! *** +# Read the SECURITY file for information on some of the security implications +# of enabling this variable. +# +# Values: 0=do not allow arguments, 1=allow command arguments + +dont_blame_nrpe=0 + + + +# BASH COMMAND SUBSTITUTION +# This option determines whether or not the NRPE daemon will allow clients +# to specify arguments that contain bash command substitutions of the form +# $(...). This option only works if the daemon was configured with both +# the --enable-command-args and --enable-bash-command-substitution configure +# script options. +# +# *** ENABLING THIS OPTION IS A HIGH SECURITY RISK! *** +# Read the SECURITY file for information on some of the security implications +# of enabling this variable. +# +# Values: 0=do not allow bash command substitutions, +# 1=allow bash command substitutions + +allow_bash_command_substitution=0 + + + +# COMMAND PREFIX +# This option allows you to prefix all commands with a user-defined string. +# A space is automatically added between the specified prefix string and the +# command line from the command definition. +# +# *** THIS EXAMPLE MAY POSE A POTENTIAL SECURITY RISK, SO USE WITH CAUTION! *** +# Usage scenario: +# Execute restricted commmands using sudo. For this to work, you need to add +# the nagios user to your /etc/sudoers. An example entry for allowing +# execution of the plugins from might be: +# +# nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/ +# +# This lets the nagios user run all commands in that directory (and only them) +# without asking for a password. If you do this, make sure you don't give +# random users write access to that directory or its contents! + +# command_prefix=/usr/bin/sudo + + +# MAX COMMANDS +# This specifies how many children processes may be spawned at any one +# time, essentially limiting the fork()s that occur. +# Default (0) is set to unlimited +# max_commands=0 + + + +# COMMAND TIMEOUT +# This specifies the maximum number of seconds that the NRPE daemon will +# allow plugins to finish executing before killing them off. + +command_timeout=60 + + + +# CONNECTION TIMEOUT +# This specifies the maximum number of seconds that the NRPE daemon will +# wait for a connection to be established before exiting. This is sometimes +# seen where a network problem stops the SSL being established even though +# all network sessions are connected. This causes the nrpe daemons to +# accumulate, eating system resources. Do not set this too low. + +connection_timeout=300 + + + +# WEAK RANDOM SEED OPTION +# This directive allows you to use SSL even if your system does not have +# a /dev/random or /dev/urandom (on purpose or because the necessary patches +# were not applied). The random number generator will be seeded from a file +# which is either a file pointed to by the environment valiable $RANDFILE +# or $HOME/.rnd. If neither exists, the pseudo random number generator will +# be initialized and a warning will be issued. +# Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness + +#allow_weak_random_seed=1 + + + +# SSL/TLS OPTIONS +# These directives allow you to specify how to use SSL/TLS. + +# SSL VERSION +# This can be any of: SSLv2 (only use SSLv2), SSLv2+ (use any version), +# SSLv3 (only use SSLv3), SSLv3+ (use SSLv3 or above), TLSv1 (only use +# TLSv1), TLSv1+ (use TLSv1 or above), TLSv1.1 (only use TLSv1.1), +# TLSv1.1+ (use TLSv1.1 or above), TLSv1.2 (only use TLSv1.2), +# TLSv1.2+ (use TLSv1.2 or above) +# If an "or above" version is used, the best will be negotiated. So if both +# ends are able to do TLSv1.2 and use specify SSLv2, you will get TLSv1.2. +# If you are using openssl 1.1.0 or above, the SSLv2 options are not available. + +#ssl_version=SSLv2+ + +# SSL USE ADH +# This is for backward compatibility and is DEPRECATED. Set to 1 to enable +# ADH or 2 to require ADH. 1 is currently the default but will be changed +# in a later version. + +#ssl_use_adh=1 + +# SSL CIPHER LIST +# This lists which ciphers can be used. For backward compatibility, this +# defaults to 'ssl_cipher_list=ALL:!MD5:@STRENGTH' for < OpenSSL 1.1.0, +# and 'ssl_cipher_list=ALL:!MD5:@STRENGTH:@SECLEVEL=0' for OpenSSL 1.1.0 and +# greater. + +#ssl_cipher_list=ALL:!MD5:@STRENGTH +#ssl_cipher_list=ALL:!MD5:@STRENGTH:@SECLEVEL=0 +#ssl_cipher_list=ALL:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!RC4:!MD5:@STRENGTH + +# SSL Certificate and Private Key Files + +ssl_cacert_file=/etc/ssl/certs/ca-certificates.crt +#ssl_cert_file=/etc/ssl/servercerts/nagios-cert.pem +#ssl_privatekey_file=/etc/ssl/servercerts/nagios-key.pem + +# SSL USE CLIENT CERTS +# This options determines client certificate usage. +# Values: 0 = Don't ask for or require client certificates (default) +# 1 = Ask for client certificates +# 2 = Require client certificates + +#ssl_client_certs=0 + +# SSL LOGGING +# This option determines which SSL messages are send to syslog. OR values +# together to specify multiple options. + +# Values: 0x00 (0) = No additional logging (default) +# 0x01 (1) = Log startup SSL/TLS parameters +# 0x02 (2) = Log remote IP address +# 0x04 (4) = Log SSL/TLS version of connections +# 0x08 (8) = Log which cipher is being used for the connection +# 0x10 (16) = Log if client has a certificate +# 0x20 (32) = Log details of client's certificate if it has one +# -1 or 0xff or 0x2f = All of the above + +#ssl_logging=0x00 + + + +# NASTY METACHARACTERS +# This option allows you to override the list of characters that cannot +# be passed to the NRPE daemon. + +# nasty_metachars="|`&><'\\[]{};\r\n" + + + +# COMMAND DEFINITIONS +# Command definitions that this daemon will run. Definitions +# are in the following format: +# +# command[]= +# +# When the daemon receives a request to return the results of +# it will execute the command specified by the argument. +# +# Unlike Nagios, the command line cannot contain macros - it must be +# typed exactly as it should be executed. +# +# Note: Any plugins that are used in the command lines must reside +# on the machine that this daemon is running on! The examples below +# assume that you have plugins installed in a /usr/local/nagios/libexec +# directory. Also note that you will have to modify the definitions below +# to match the argument format the plugins expect. Remember, these are +# examples only! + + +# The following examples use hardcoded command arguments... +# This is by far the most secure method of using NRPE + +command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 +command[check_load]=/usr/lib/nagios/plugins/check_load -r -w 7,3.5,3 -c 8,4,3.5 +command[check_disks]=/usr/lib/nagios/plugins/check_disk -w 16% -c 9% -A -i /var/lib/docker/overlay2 -i /var/lib/docker/containers -i /run/docker/{% if inventory_hostname == 'geb.ra.nemunai.re' %} -i /media/musik{% endif %} + +command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 +command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z +{% if inventory_hostname == 'geb.ra.nemunai.re' or inventory_hostname == 'jizah.masr.nemunai.re' %} +command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 260 -c 300 +{% else %} +command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 190 -c 220 +{% endif %} +{% if inventory_hostname == 'hesat.ra.nemunai.re' %} +command[check_ntp_time]=/usr/lib/nagios/plugins/check_ntp_time -H fr.pool.ntp.org -w 1 -c 2 +{% else %} +command[check_ntp_time]=/usr/lib/nagios/plugins/check_ntp_time -H {{ ntp_pool[0] }} -w 1 -c 2 +{% endif %} +{% if inventory_hostname == 'geb.ra.nemunai.re' %} +command[check_log_age_ankh.serekh.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/ankh.serekh.nemunai.re/messages.log +command[check_log_age_geb.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/geb.ra.nemunai.re/messages.log +command[check_log_age_hathor.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/hathor.ra.nemunai.re/messages.log +command[check_log_age_montou.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/montou.ra.nemunai.re/messages.log +command[check_log_age_nout.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/nout.ra.nemunai.re/messages.log +command[check_log_age_sekhmet0.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/sekhmet0.ra.nemunai.re/messages.log +command[check_log_age_sekhmet1.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/sekhmet1.ra.nemunai.re/messages.log +command[check_log_age_sekhmet2.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/sekhmet2.ra.nemunai.re/messages.log +command[check_log_age_sekhmet3.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/sekhmet3.ra.nemunai.re/messages.log +command[check_log_age_sekhmet4.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/sekhmet4.ra.nemunai.re/messages.log +command[check_log_age_sekhmet5.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/sekhmet5.ra.nemunai.re/messages.log +command[check_log_age_sekhmet6.ra.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/sekhmet6.ra.nemunai.re/messages.log +command[check_log_age_ouaset.masr.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/ouaset.masr.nemunai.re/messages.log +command[check_log_age_rhakotis.masr.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/rhakotis.masr.nemunai.re/messages.log +command[check_log_age_jizah.masr.nemunai.re]=/usr/lib/nagios/plugins/check_file_age -w 1800 -c 3600 -W 32 -C 32 /var/log/jizah.masr.nemunai.re/messages.log +{% endif %} +# The following examples allow user-supplied arguments and can +# only be used if the NRPE daemon was compiled with support for +# command arguments *AND* the dont_blame_nrpe directive in this +# config file is set to '1'. This poses a potential security risk, so +# make sure you read the SECURITY file before doing this. + +### MISC SYSTEM METRICS ### +#command[check_users]=/usr/lib/nagios/plugins/check_users $ARG1$ +#command[check_load]=/usr/lib/nagios/plugins/check_load $ARG1$ +#command[check_disk]=/usr/lib/nagios/plugins/check_disk $ARG1$ +#command[check_swap]=/usr/lib/nagios/plugins/check_swap $ARG1$ +#command[check_cpu_stats]=/usr/lib/nagios/plugins/check_cpu_stats.sh $ARG1$ +#command[check_mem]=/usr/lib/nagios/plugins/custom_check_mem -n $ARG1$ + +### GENERIC SERVICES ### +#command[check_init_service]=sudo /usr/lib/nagios/plugins/check_init_service $ARG1$ +#command[check_services]=/usr/lib/nagios/plugins/check_services -p $ARG1$ + +### SYSTEM UPDATES ### +#command[check_yum]=/usr/lib/nagios/plugins/check_yum +{% if ansible_distribution == 'Debian' %} +command[check_apt]=/usr/lib/nagios/plugins/check_apt +{% endif %} + +### PROCESSES ### +#command[check_all_procs]=/usr/lib/nagios/plugins/custom_check_procs +#command[check_procs]=/usr/lib/nagios/plugins/check_procs $ARG1$ + +### OPEN FILES ### +#command[check_open_files]=/usr/lib/nagios/plugins/check_open_files.pl $ARG1$ + +### NETWORK CONNECTIONS ### +#command[check_netstat]=/usr/lib/nagios/plugins/check_netstat.pl -p $ARG1$ $ARG2$ + +### ASTERISK ### +#command[check_asterisk]=/usr/lib/nagios/plugins/check_asterisk.pl $ARG1$ +#command[check_sip]=/usr/lib/nagios/plugins/check_sip $ARG1$ +#command[check_asterisk_sip_peers]=sudo /usr/lib/nagios/plugins/check_asterisk_sip_peers.sh $ARG1$ +#command[check_asterisk_version]=/usr/lib/nagios/plugins/nagisk.pl -c version +#command[check_asterisk_peers]=/usr/lib/nagios/plugins/nagisk.pl -c peers +#command[check_asterisk_channels]=/usr/lib/nagios/plugins/nagisk.pl -c channels +#command[check_asterisk_zaptel]=/usr/lib/nagios/plugins/nagisk.pl -c zaptel +#command[check_asterisk_span]=/usr/lib/nagios/plugins/nagisk.pl -c span -s 1 + + + +# INCLUDE CONFIG FILE +# This directive allows you to include definitions from an external config file. + +#include= + + + +# INCLUDE CONFIG DIRECTORY +# This directive allows you to include definitions from config files (with a +# .cfg extension) in one or more directories (with recursion). + +#include_dir= +#include_dir= diff --git a/templates/server.cfg.j2 b/templates/server.cfg.j2 new file mode 100644 index 0000000..631817c --- /dev/null +++ b/templates/server.cfg.j2 @@ -0,0 +1,12 @@ +define host { + use linux-server + host_name {{ inventory_hostname_short }} + address {{ inventory_hostname }} + hostgroups linux-servers{% if group_names | length > 0 %},{{ group_names | join(",") }}{% endif %}{% if nagios_extra_groups | length > 0 %},{{ nagios_extra_groups | join(",") }}{% endif %} + +{% if mydomain is defined and mydomain != "ra.nemunai.re" -%} +{% set dn = mydomain.split('.') %} + parents {{ dn[0] }} +{%- endif %} + +} \ No newline at end of file