#!/bin/bash -e # # checkMonitoring.sh # # Verify if we are monitoring everything on the server # # # Author: Jean-Louis Girard # if [[ $# -ne 2 ]] then echo "Usage: $(basename $0) " echo "" echo ' can be a list between double quotes "server1 server2 ..."' echo ' or a file containing a list of servers, one per line.' echo "" echo ' file that contains the output from running the following command on the centron server: ' echo ' /usr/share/centreon/www/modules/centreon-clapi/core/centreon -u admin -p -o service -a show | awk -F' "';' '{print \$2" ' " "' " \$4}' | sort" exit 1 fi if [[ -f $1 > /dev/null 2>&1 ]] then SERVERS=$(cat $1) else SERVERS=$1 fi CENTREON_FILE=$2 if [[ ! -f $CENTREON_FILE ]] then echo $CENTREON_FILE does not exist. exit fi function checkServer { red='\e[0;31m' orange='\e[0;33m' normal='\e[0m' #the function is called with one server in parameter. SERVER_NAME=$1 # Test if server name is valid if ! nslookup $SERVER_NAME > /dev/null 2>&1 then echo -e "$red $SERVER_NAME not found $normal" else readarray -t installedServices <<<"$(ssh $SERVER_NAME 'ls /etc/init.d/ | egrep "dhcp|haproxy|httpd|mariadb|mysqld|nfsd|postgres|redis|varnish|java" | grep -v avahi')" readarray -t enabledServices <<<"$(ssh $SERVER_NAME 'ls /etc/rc3.d/ | grep "^S" | sed "s/^...//" | egrep "dhcp|haproxy|httpd|mariadb|mysqld|nfsd|postgres|redis|varnish|java" | grep -v avahi')" readarray -t runningProcess <<<"$(ssh $SERVER_NAME 'ps auxwww | egrep "dhcp|haproxy|httpd|mariadb|mysqld|nfsd|postgres|redis|varnish|java" | grep -v grep | grep -v avahi')" readarray -t fsOnServer <<<"$(ssh $SERVER_NAME "df -l -x tmpfs -P | awk '{print \$6}' | grep -v '^Mounted' | grep -v '^boot\$'")" baseServices=('cpu' 'load' 'ping' 'memory' 'eth0' 'sshd') # verify if installedServices are active. for iS in "${installedServices[[@]]}" do if ! echo ${enabledServices[[@]]} | grep -qE "(^ | )$iS" then echo -e "$SERVER_NAME: $orange Service $iS is installed but not enabled in rc3.d. $normal" fi done # Veriffy if base services are monitored for s in "${baseServices[[@]]}" do if ! grep -i $SERVER_NAME $CENTREON_FILE | grep -qi $s then echo -e "$SERVER_NAME: $red $s is not monitored. $normal" fi done # Verify if local filesystems are monitored #for fsOnServer in $(df -l -x tmpfs -P | awk '{print $6}' | grep -v "^Mounted") for fs in "${fsOnServer[[@]]}" do if ! grep -i $SERVER_NAME $CENTREON_FILE | grep -qi "$fs$" then echo -e "$SERVER_NAME: $red $fs is not monitored. $normal" fi done # services that contain their name in the running process and init script. standardServices=('dhcp' 'haproxy' 'httpd' 'mariadb' 'postgres' 'redis' 'varnish' ) for s in "${standardServices[[@]]}" do if echo ${runningProcess[[@]]} ${enabledServices[[@]]} | grep -q $s then if ! grep -i $SERVER_NAME $CENTREON_FILE | grep -qi $s then echo -e "$SERVER_NAME: $red $s is not monitored. $normal" fi fi done # should we monitor mysqld. ie mysqld is not in the standardServices list because mariadb matches also. if echo ${runningProcess[[@]]} ${enabledServices[[@]]} | grep "mysqld" | grep -qv "maria" then if ! grep -i $SERVER_NAME $CENTREON_FILE | grep -qiE "(^| )mysqld" then echo -e "$SERVER_NAME: $red mysqld is not monitored. $normal" fi fi # Should we monitor java? if echo ${runningProcess[[@]]} | grep -q "java" then if ! grep -i $SERVER_NAME $CENTREON_FILE | grep -qi "java" then echo -e "$SERVER_NAME: $red java is not monitored. $normal" fi fi # Should we monitor nfsd? if echo ${runningProcess[[@]]} | grep -q "nfsd" || echo ${enabledServices[[@]]} | grep -qE "nfs( |$)" then if ! grep -i $SERVER_NAME $CENTREON_FILE | grep -qi "nfs" then echo -e "$SERVER_NAME: $red nfsd is not monitored. $normal" fi fi fi } for oneServer in ${SERVERS[[@]]} do checkServer "$oneServer" echo " " done