grep logfiles via SSH on multiple server
Mittels des unten angeführten Shellscripts ist es möglich mit grep logfiles via SSH on multiplen server einzusammeln. Diese werden in eine Logfile geschrieben. Jetzt hat man alle Möglichkeiten die, die Bash bietet um alles mögliche mit den Logs anzustellen. Zum Beispiel zählen, wie of ein Logeintrag vorkommt:
grep LOGEINTRAG |wc -l
#!/usr/bin/env bash
#Date: 16.1.2018
#Version: 0.1
#Author: AWiechert
HOSTS=(ipaddr1 ipaddr2 ipaddr3)
USER=alex
LOG=~/mylog
DATE=$(date +%Y-%m-%d-%H:%M:%S)
echo SEARCHTERM: $1 >>$LOG
for HOSTS in ${HOSTS[@]}; do
echo "== $HOSTS ==" >> $LOG
ssh $USER@$HOSTS "grep '$1' /var/log/www/ >> $LOG
done
less $LOG
mv $LOG $DATE-mylog
Bespiel Output
./multi.sh 'grep logfiles via SSH auf multiplen Servern'
SEARCHTERM: grep logfiles via SSH auf multiplen Servern
== 172.30.100.27 ==
12
== 172.30.100.28 ==
20
== 172.30.100.29 ==
31
Um das ganze noch aufzuhübschen, da man sich ja nicht alle möglichen IP Adressen merken kann man das Array mit den Host IP Adressen in eine Datei auslagern. Im gezeigten Beispiel möchte ich wissen, welche Java Versionen auf den Server installiert sind.
#!/usr/bin/env bash
user="awiechert"
log=~/check_java.log
date=$(date +%Y-%m-%d-%H:%M:%S)
cat > hosts.$ <>$log
ssh -n $user@$IPADDR 'java -version' >> $log
done < hosts.$
less $log
rm -rf $log
rm -rf hosts.$
Bespiel Output
./multi.sh
== HOST_1 ==
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
== HOST_2 ==
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
== HOST_3 ==
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)
== HOST_4 ==
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)