Handmatig periodiek je logfiles, geheugen- en diskruimte controleren, of alle processen nog draaien etc. kost heel veel tijd en is niet te doen.
Om dit te automatiseren, gebruiken we een paar door mezelf gemaakte BASH scripts en LogWatch voor de logfiles.
LogWatch
LogWatch is een goede tool om automatisch een overzicht te genereren. Dit overzicht kan bekeken worden op de commandline, maar in onderstaand artikel gaan we dagelijks een mail versturen.
Logwatch is als volgt te installeren:
$ apt-get install logwatch
Nu kun je al LogWatch aanroepen, waarmee je een compeet overzicht in tekst op de commandline krijgt:
$ logwatch
Als je LogWatch elke dag een email met de status wilt laten versturen, doe je het volgende:
$ vi /usr/share/logwatch/default.conf/logwatch.conf
En wijzig de volgende parameters in deze file:
Output = mail
Format = html
MailTo = me@example.com
MailFrom = root@example.com
Logwatch hoeft niet aan crontab te hoeven toegevoegd, hij staat al automatisch in cron.daily.
Het server_check script
Het server_check script heb ik gemaakt nadat er door een tekort aan geheugen een van de processen gecrasht was. Onderstaand script zorgt ervoor dat de kritische processen elke minuut gecheckt worden of ze nog draaien en worden gestart als dit niet zo is. Ook krijg je direct een email notificatie.
$ vi /usr/local/sbin/server_check
#!/bin/bash
MAIL=mijn@mailadres.nl
LOGFILE=/var/log/server_status.log
function restart-service {
echo "" >> $LOGFILE
echo Status before restarting $1 >> $LOGFILE
free >> $LOGFILE
echo "$(date): Restarting $1" >> $LOGFILE
/usr/sbin/service $1 restart >> $LOGFILE 2>&1
echo Status after restarting $1 >> $LOGFILE
free >> $LOGFILE
cat $LOGFILE | /usr/bin/mail -s "['$(hostname -f)] $1 process crashed and started" $MAIL
}
pidof /usr/sbin/mysqld >/dev/null
if [[ $? -ne 0 ]] ; then
restart-service mysql
fi
pidof /usr/sbin/nginx >/dev/null
if [[ $? -ne 0 ]] ; then
restart-service nginx
fi
pidof php5-fpm >/dev/null
if [[ $? -ne 0 ]] ; then
restart-service php5-fpm
fi
pidof /usr/lib/postfix/master >/dev/null
if [[ $? -ne 0 ]] ; then
restart-service postfix
fi
pidof /usr/sbin/saslauthd >/dev/null
if [[ $? -ne 0 ]] ; then
restart-service saslauthd
fi
pidof /usr/sbin/opendkim >/dev/null
if [[ $? -ne 0 ]] ; then
restart-service opendkim
fi
Het server_status script
Het tweede script wat ik gemaakt gemaakt heb, is eenvoudig diverse server checks naar een logfile, en deze wordt dagelijks gemaild. Als je nog commando’s wilt toevoegen, kun je dat eenvoudig zelf doen.
$ vi /usr/local/sbin/server_status
#!/bin/bash
MAIL=mijn@mailadres.nl
LOGFILE=/var/log/server_status.log
$ params
$ $1 = command
$ $2 = Description
function get-status {
echo "" >> $LOGFILE
echo "$2 (command: $1)" >> $LOGFILE
$1 >> $LOGFILE
}
echo "" >> $LOGFILE
echo "++++++++++ Server status +++++++++" >> $LOGFILE
echo "" >> $LOGFILE
get-status "df -h" "+++DiskStatus"
get-status "uptime" "+++Serverload"
get-status "apt-get -s upgrade" "+++Updates available?"
get-status "vmstat" "+++System Activity, Hardware and System Inform
ation"
get-status "w" "+++Who's logged in and what are the doing?"
#get-status "ps -A" "+++Which processes are running?"
get-status " free -m" "+++Free memory"
echo "" >> $LOGFILE
echo "+++Forwarded emails (without all root@ emails)" >> $LOGFILE
grep "$(date --date '-1 days' +'%b %e')" /var/log/mail.log?? | egrep 'postfix/qmgr|postfix/smtp' | egrep ' from=<| to=<'|cut -d' ' -f-4,6,8,14|awk -v nlines=1 '/ from=<root@cloud.example.com>/ {for (i=0; i<nlines; i++) {getline}; next} 1' >> $LOG_FILE 2>&1
# Mail and delete the server_status.log file of today, for a fresh log tomorrow
cat $LOGFILE | /usr/bin/mail -s "['$(hostname -f)] daily server status" $MAIL
echo "" > $LOGFILE
echo "+++++ Crashed/Restarted processes ++++" >> $LOGFILE
echo "" >> $LOGFILE
Toevoegen van de scripts aan de crontab
Het volgende toevoegen aan crontab om periodiek te scripts uit te voeren:
$ crontab -e
*/1 * * * * /usr/local/sbin/server_check > /dev/null 2>&1
5 19 * * * /usr/local/sbin/server_status > /dev/null 2>&1
De gids “VPS opzetten” bestaat uit de volgende artikelen:
- Inleiding: De gids: een VPS opzetten van A tot Z
- Welke VPS provider te kiezen
- VPS opzetten bij RamNode
- DNS instellen voor de VPS
- Installeren van Postfix
- Installeren van DKIM icm Postfix
- Installeren van de webserver Nginx, PHP en MySQL
- SFTP server via SSH
- Toegangsbeveiliging met Fail2ban op de VPS
- Monitoren van de VPS server
- Nieuwe website aanmaken in Nginx