Installation d’une architecture virtualisé pour mascarille¶
L’objectif de ce tutorial est d’obtenir l’architecture suivante
Installation du client VMWare¶
Présentation¶
VMWare Player est un logiciel de virtualisation proposé gratuitement pour une utilisation non commerciale .
Il permet rapidement de créer un machine virtuel fonctionnant avec certains paramètres systèmes (réseau, processeurs, ...) pouvant être modifiés.
Installation¶
Pour windows il s’agit simplement d’un exe à lancer
Pour linux il faut télécharger le fichier bundle VMware depuis le site wmware.com.
Rendre le fichier exécutable puis le lancer
chmod +x VMware-Player-*.bundle
./VMware-Player-*.bundle
l’installation des vmware-tools pour les machines virtuelles sous linux
apt-get install autoconf gcc-4.3* make psmisc linux-headers-$(uname -r)
mount /media/cdrom
cp /media/cdrom/VMwareTools-9.2.2-893683.tar.gz /usr/local/src
cd /usr/local/src
tar xzf /usr/local/src/VMwareTools-9.2.2-893683.tar.gz
cd /usr/local/src/vmware-tools-distrib/
./vmware-install.pl -d
Fonctionnement du réseau¶
Si il est assez simple d’imaginer comment fonctionne une machine virtuelle, le réseau virtuel est plus compliqué car il nous est permis de faire plusieurs choses totalement différents.
Lors de l’installation de vmware, deux cartes réseau virtuelles sont ajoutées:
- VMnet1
- VMnet8
Lors de la configuration d’une interface réseau, VMWare Player propose 3 types de connections:
- Bridged
- NAT
- Host-only
Réseau bridged: la machine virtuelle est connectée au même réseau physique que la machine hôte.
Réseau NAT:
Dans ce mode, la machine virtuelle est connectée à un réseau virtuel. La machine hôte est connectée à ce même réseau virtuel par l’intermédiaire de la carte réseau VMnet8.
Valeurs par défaut :
- L’adresse de ce réseau virtuel est 192.168.220.0/24.
- L’adresse IP de la carte VMnet8 est 192.168.220.1.
- L’adresse IP du routeur NAT est 192.168.220.2.
- Ce réseau dispose également d’un serveur DHCP virtuel dont le pool va de 192.168.220.128 à 192.168.220.254
Réseau Host-only
Dans ce mode, la machine virtuelle est connectée à un réseau virtuel. La machine hôte est connectée à ce même réseau virtuel par l’intermédiaire de la carte réseau VMnet1.
La seule différence avec le mode “NAT” est l’absence de routeur. Les ordinateurs virtuels présents sur ce réseau ne pourront pas accéder à internet (à moins d’activer le routage sur l’ordinateur hôte).
Valeurs par défaut :
- L’adresse de ce réseau virtuel est 192.168.177.0/24.
- L’adresse IP de la carte VMnet1 est 192.168.177.1.
- Ce réseau dispose également d’un serveur DHCP virtuel dont le pool va de 192.168.177.128 à 192.168.177.254.
Il est possible de changer le comportement de VMnet1 et 8 ou d’ajouter d’autres reseaux virtuelles en lançant l’utilitaire Virtual Network Editor
Pour cela il faut extraire le fichier wmnetcfg.exe et vmnetcfglib.dll de l’outil vmware workstation (source sur url http://www.eightforums.com/virtualization/5137-how-add-virtual-network-editor-vmware-player-2.html#post275406 )
Pour Linux, il faut aussi installer l’outil vmware workstation et récupérer /usr/bin/vmware-netcfg et /usr/lib/vmware/bin/vmware-netcfg (source sur url https://communities.vmware.com/thread/270128 )
Attention
quid de la pérennité du vmware player ?
Installation d’un système Debian¶
Installation¶
L’installation d’un système linux est assez simple (virtualisé ou non). Il faut simplement avoir identifié
- nom de la machine
- information réseau (dhcp, domaine)
- mot de passe de root
- utilisateur classique (login et mot de passe)
vous avez maintenant une machine prête qui est accesible via SSH.
Optimisation / Modification¶
A la suite d’une installation on peut réaliser les actions suivantes
- renommage de la machine
vi /etc/hostname
vi /etc/hosts
reboot
- identification de la source des paquets
vi /etc/apt/sources.list
- mise à jour de la liste des paquets
apt-get update
- mise à jour globale du système
apt-get upgrade
- installation de vim, unzip , rsync et nfs-common pour la sauvegarde
apt-get install vim unzip rsync nfs-common
- modification du .bashrc
vi /root/.bashrc
Pour obtenir
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
#ADD BY FAO
alias vi=vim
- paramétrage réseau
vi /etc/network/interfaces
exemple de configuration dhcp
allow-hotplug eth0 #activation de eth0 a chaud
iface eth0 inet dhcp #activation dhcp
exemple de configuration complète
allow-hotplug eth0
iface eth0 inet static
address 192.168.11.100
netmask 255.255.255.0
gateway 192.168.11.1
dns-domain example.com
dns-nameservers 192.168.11.1
- paramétrage des serveurs DNS
vi /etc/resolv.conf
exemple de configuration
nameserver 192.168.1.1
domain example.com
- pour activer / désactiver une interface réseau
ifup eth0
ifdown eth0
- pour arrêter la machine
shutdown -h now
- pour redémarrer la machine
reboot
A priori pour la sauvegarde des serveurs on peut utiliser rsync sur un montage nfs (correspondant au synology)
mkdir /synology
vi /etc/fstab
192.168.1.100:/Répertoire_à_partager_sur_Serveur /synology nfs user,noauto 0 0
et pour faire une sauvegarde
rsync -av /var/www /synology
pour autoriser l’utilisateur root a ce connecter via l’interface graphique gnome
vi /etc/pam.d/gdm3
puis commenter cette ligne
#auth required pam_succeed_if.so user != root quiet_success
Création d’une machine virtuelle Debian¶
il faut:
- télécharger l’iso d’installation par net sur http://www.debian.org/CD/http-ftp/#stable
- ouvrir vmwplayer et créer une nouvelle machine
Note
dans cet exemple nous utilisons au niveau réseau une carte virtuelle nous pouvons choisir d’autres solutions
Puis ce laisser guider par l’installation debian
A la fin on peut supprimer le service qui vérifie le raid (cela ne sert à rien en virtualisé)
apt-get remove mpt-status
Installation IPCOP¶
Préparation de la machine virtuelle¶
Pour un firewall IPCOP il faut au moins trouver sur notre machine
- une carte réseau en bridged (RED)
- une carte réseau en bridged ou autre mode (GREEN)
- un disque IDE
- le fichier iso d’IPCOP en boot sur le lecteur CD virtuel
Mise en place de l’architecture cible¶
IPCOP¶
Information sur le serveur
Système | IPCOP |
Disque 1 | 10GB |
Type Disque 1 | IDE |
Montage Disque 1 | / |
Network GREEN | VMnet1 |
IP GREEN | 192.168.2.254 |
Network RED | Bridged |
IP RED | DHCP |
DHCP START GREEN | 192.168.2.1 |
DHCP STOP GREEN | 192.168.2.253 |
user root | root / systemlx |
user ipcop | admin /et1000 |
clé cryptage | et1000 |
Règle de NAT
Source | Destination | Remarque |
---|---|---|
RED:80 | 192.168.2.90:82 | permet l’accès au site web depuis l’exterieur |
RED:22 | 192.168.2.90:20 | permet l’accès en ssh depuis l’exterieur |
RED:8443 | 192.168.2.254:8443 | permet l’acces de l’interface d’admin depuis ext. |
RED:8086 | 192.168.2.92:8086 | permet l’accès à la base influxdb depuis l’ext. |
RED:8083 | 192.168.2.92:8083 | permet l’accès à la base minfluxdb depuis l’ext. |
Note
il peut paraître étrange d’autoriser l’accès à l’interface d’admin d’ipcop depuis le réseau rouge. Mais le port d’admin (8443) n’est pas ouvert sur la box ... ce qui rend l’interface accessible que depuis le réseau local
Note
sur la box on ouvre le port 65022 pour le faire router sur le port 22 d’IPCOP et donc le port 22 du serveur srvweb
SRVNAGIOS¶
Information sur le serveur
Système | DEBIAN 7 |
Disque 1 | 20GB |
Type Disque 1 | SCSI |
Montage Disque 1 | / |
Network | VMnet1 |
IP | 192.168.2.92 |
NETMASK | 255.255.255.0 |
GATEWAY | 192.168.2.254 |
DNS | 192.168.0.253 |
user root | root / systemlx |
nagios admin | nagiosadmin / nagiosadmin |
installation complémentaire du serveur
apt-get install nagios3 pnp4nagios nagios-nrpe-plugin ssmtp sysstat
chmod -R g+x /var/lib/nagios3/rw
/etc/init.d/nagios3 restart
configuration de ssmtp
vi /etc/ssmtp/ssmtp.conf
root=zeizig@gmail.com
mailhub=smtp.gmail.com:587
hostname=zeizig@gmail.com
AuthUser=zeizig@gmail.com
AuthPass=???????????????
FromLineOverride=YES
UseSTARTTLS=YES
UseTLS=YES
AuthMethod=LOGIN
vi /etc/ssmtp/revaliases
root:zeizig@gmail.com:smtp.gmail.com:587
nagios:zeizig@gmail.com:smtp.gmail.com:587
mail:zeizig@gmail.com:smtp.gmail.com:587
userlx:zeizig@gmail.com:smtp.gmail.com:587
remplacement du mailer par défaut
unlink /usr/bin/mail
ln -s /usr/sbin/ssmtp /usr/bin/mail
test d’envoi de mail
echo "Contenu du mail" | mail -s "Test mail" zeizig@neuf.fr
Intégration des graphiques de performance dans l’interface nagios
mkdir /var/local/pnp4nagios/
mkdir /var/local/pnp4nagios/var
chmod 777 /var/local/pnp4nagios
vi /etc/nagios3/nagios.cfg
check_external_commands=1
process_performance_data=1
#host_perfdata_command=process-host-perfdata
#service_perfdata_command=process-service-perfdata
host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tHOSTOUTPUT::$HOSTOUTPUT$
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$\tSERVICEOUTPUT::$SERVICEOUTPUT$
host_perfdata_file_mode=a
service_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
service_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file
service_perfdata_file_processing_command=process-service-perfdata-file
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
chmod 2770 /var/lib/nagios3/rw
/etc/init.d/nagios3 stop
apache2ctl restart
/etc/init.d/nagios3 start
vi /etc/nagios3/conf.d/generic-host_nagios2.cfg
define host {
....
action_url /pnp4nagios/graph?host=$HOSTNAME$' class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=_HOST_
}
vi /etc/nagios3/conf.d/generic-service_nagios2.cfg
define service {
...
notifications_enabled 0
...
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
}
vi /etc/nagios3/command.cfg
define command {
command_name process-service-perfdata-file
command_line /usr/lib/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/service-perfdata
}
define command {
command_name process-host-perfdata-file
command_line /usr/lib/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/host-perfdata
}
define command{
command_name check_mascarille
command_line /usr/lib/nagios/plugins/check_http -I mascarille.com $ARG1$
}
define command{
command_name check_jlat
command_line /usr/lib/nagios/plugins/check_http -I auteursdetheatre.org $ARG1$
}
nagios3 -v /etc/nagios3/nagios.cfg
/etc/init.d/nagios3 restart
L’interface web est accessible via l’url http://ipcop:8008/nagios3 (via l’interface red) ou http://192.168.2.92/nagios3 (via l’interface green)
Ajout de la supervision des autres machines de l’architecture
vi /etc/nagios3/nagios.cfg
cfg_dir=/etc/nagios3/conf.d
vi /ect/nagios3/conf.d/contacts_nagios2.cfg
define contact {
contact_name root
....
email zeizig@neuf.fr
}
Note
il aurait été plus propre de créer le contact “emile” mais pour un utilisation simple avec un seul contact on peut se permettre d’utiliser le contact root
vi /etc/nagios3/conf.d/SRVMYSQL.cfg
define host{
use generic-host
host_name SRVMYSQL
alias SRVMYSQL
address 192.168.2.91
}
define service{
use generic-service
host_name SRVMYSQL
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use generic-service
host_name SRVMYSQL
service_description Sda1
check_command check_nrpe_1arg!check_sda1
}
define service{
use generic-service
host_name SRVMYSQL
service_description Users
check_command check_nrpe_1arg!check_users
}
define service{
use generic-service
host_name SRVMYSQL
service_description Load
check_command check_nrpe_1arg!check_load
}
define service{
use generic-service
host_name SRVMYSQL
service_description Total Procs
check_command check_nrpe_1arg!check_total_procs
}
define service{
use generic-service
host_name SRVMYSQL
service_description MYSQL
check_command check_mysql_cmdlinecred!mascarille!et1000!
}
define service{
use generic-service
host_name SRVMYSQL
service_description MEMOIRE
check_command check_nrpe_1arg!check_mem
}
define service{
use generic-service
host_name SRVMYSQL
service_description CPU-STATS
check_command check_nrpe_1arg!check_cpu
}
define service{
use generic-service
host_name SRVMYSQL
service_description BACKUP
check_command check_nrpe_1arg!check_backup
}
vi /etc/nagios3/conf.d/SRVWEB.cfg
define host{
use generic-host
host_name SRVWEB
alias SRVWEB
address 192.168.2.90
}
define service{
use generic-service
host_name SRVWEB
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use generic-service
host_name SRVWEB
service_description Sda1
check_command check_nrpe_1arg!check_sda1
}
define service{
use generic-service
host_name SRVWEB
service_description Sda2
check_command check_nrpe_1arg!check_sda2
}
define service{
use generic-service
host_name SRVWEB
service_description Users
check_command check_nrpe_1arg!check_users
}
define service{
use generic-service
host_name SRVWEB
service_description Load
check_command check_nrpe_1arg!check_load
}
define service{
use generic-service
host_name SRVWEB
service_description Total Procs
check_command check_nrpe_1arg!check_total_procs
}
define service{
use generic-service
host_name SRVWEB
service_description Load
check_command check_http
}
define service{
use generic-service
host_name SRVWEB
service_description MEMOIRE
check_command check_nrpe_1arg!check_mem
}
define service{
use generic-service
host_name SRVWEB
service_description CPU-STATS
check_command check_nrpe_1arg!check_cpu
}
vi /etc/nagios3/conf.d/IPCOP.cfg
define host{
use generic-host
host_name IPCOP
alias IPCOP
address 192.168.2.254
}
define service{
use generic-service
host_name IPCOP
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
ajout pour localhost
vi /etc/nagios3/conf.d/localhost_nagios2.cfg
define service{
use generic-service
host_name localhost
service_description MASCARILLE.COM
check_command check_mascarille
}
define service{
use generic-service
host_name localhost
service_description AUTHEURDETHEATRE.ORG
check_command check_jlat
}
vi /etc/nagios3/conf.d/DEBIANMV.cfg
define host{
use generic-host
host_name DEBIANMV
alias DEBIANMV
address 192.168.1.50
}
define service{
use generic-service
host_name DEBIANMV
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use generic-service
host_name DEBIANMV
service_description Sda2
check_command check_nrpe_1arg!check_sda2
}
define service{
use generic-service
host_name DEBIANMV
service_description Sdb2
check_command check_nrpe_1arg!check_sdb2
}
define service{
use generic-service
host_name DEBIANMV
service_description Sdd1
check_command check_nrpe_1arg!check_sdd1
}
define service{
use generic-service
host_name DEBIANMV
service_description Sdbc
check_command check_nrpe_1arg!check_sdc
}
define service{
use generic-service
host_name DEBIANMV
service_description Users
check_command check_nrpe_1arg!check_users
}
define service{
use generic-service
host_name DEBIANMV
service_description Load
check_command check_nrpe_1arg!check_load
}
define service{
use generic-service
host_name DEBIANMV
service_description Total Procs
check_command check_nrpe_1arg!check_total_procs
}
define service{
use generic-service
host_name DEBIANMV
service_description MEMOIRE
check_command check_nrpe_1arg!check_mem
}
define service{
use generic-service
host_name DEBIANMV
service_description CPU-STATS
check_command check_nrpe_1arg!check_cpu
}
define service{
use generic-service
host_name DEBIANMV
service_description TEMPERATURE
check_command check_nrpe_1arg!check_sensor
}
Note
afin d’avoir l’info de température il faut installer sur le serveur le paquet lm-sensors et ajouter dans la configuration de nrpe command[check_sensor]=/usr/lib/nagios/plugins/check_lm_sensors –high temp1=50,60
nagios3 -v /etc/nagios3/nagios.cfg
/etc/init.d/nagios3 restart
Note
le load résulte d’une serie de calculs mathématiques prenant en compte différents paramètre (cpu, I/O, etc ..) Ce qui faut retenir c’est que le load est le paramètre reflétant la charge d’un OS linux et qu il ne s’exprime pas en pourcentage.
Arrêt redémarrage du service nagios
/etc/init.d/nagios3 stop
/etc/init.d/nagios3 start
/etc/init.d/nagios3 restart
Pour surveiller les logs d’apache j’utilise goaccess
deux solutions pour l’installation
apt-get install goaccess
# ou
apt-get install libncursesw5-dev libglib2.0-dev libgeoip-dev libtokyocabinet-dev
cd
mkdir tmp
cd tmp
wget http://tar.goaccess.io/goaccess-0.9.2.tar.gz
tar -xzvf goaccess-0.9.2.tar.gz
cd goaccess-0.9.2/
./configure --enable-geoip --enable-utf8
make
make install
puis vous pouvez lancer
goaccess -f myfile.log
# pour la sortie web
goaccess -f myfile.log > report.html
vous pouvez modifier les paramètres via le fichier de conf goacess.conf ou par la ligne de commande
goaccess --log-format="%h %^[%d:%^] \"%r\" %s %b \"%R\" \"%u\"" --date-format=%d/%b/%Y --time-format %H:%M:%S -f /var/log/mascarille-2015_07_11_00_00.log
SRVMYSQL¶
Information sur le serveur
Système | DEBIAN 7 |
Disque | 20GB |
Type Disque 1 | SCSI |
Montage Disque 1 | / |
Network | VMnet1 |
IP | 192.168.2.91 |
NETMASK | 255.255.255.0 |
GATEWAY | 192.168.2.254 |
DNS | 192.168.0.253 |
user root | root / systemlx |
user root mysql | root / systemmysql |
user mysql | mascarille / et1000 |
installation complémentaire du serveur
apt-get install mysql-server nagios-nrpe-server sysstat
La configuration de base est stockée dans /etc/mysql/my.cnf
vi /etc/mysql/my.cnf
#bind-address = 127.0.0.1
bind-address = 192.168.2.91
/etc/init.d/mysql restart
Sécurisation de la base
mysql_secure_installation
Set root password ? Y
Remove anonymous users ? Y
Disallow root login remotely ? Y
Remove test database and access to it ? Y
Reload privilege tables now ? Y
Création d’un super utilisateur mascarille
mysql -u login -p
GRANT ALL PRIVILEGES ON *.* TO 'mascarille'@'%'
IDENTIFIED BY 'et1000' WITH GRANT OPTION;
Récupération d’une sauvegarde de la base
C:\>sftp
psftp: no hostname specified; use "open host.name" to connect
psftp> open 192.168.1.20
login as: root
root@192.168.1.20's password:
Remote working directory is /root
psftp> put mysql_20131117.zip
local:mysql_20131117.zip => remote:/root/mysql_20131117.zip
Importation de la sauvegarde
unzip mysql_20131117.zip
mysql -umascarille -pet1000 <mysql_20131117.sql
Note
il peut être utile de relancer les commandes de création des utilisateurs ou de modifier les mots de passe utilisateurs par un simple update sur la base mysql
UPDATE user SET password=PASSWORD('MOT_DE_PASSE_RECUPERE_AVEC_GREP') WHERE user='debian-sys-maint'
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'password from debian.cnf' WITH GRANT OPTION;
Commandes shell utiles
mysqldump -ulogin -pmotdepasse nom_base --opt >fichier.sql
# Exporte la base nom_base vers fichier.sql
mysqldump -ulogin -pmotdepasse --all-databases --opt >fichier.sql
# Exporte toutes les bases vers fichier.sql
mysql -ulogin -pmotdepasse <fichier.sql
# Importe les instructions du fichier SQL
mysqladmin
# Toute une collection d'outils pour administrer le serveur.
configuration du nrpe pour la supervision
cd /usr/lib/nagios/plugins
wget "http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=608&cf_id=30"
mv attachement* check_cpu_stats.sh
chmod 777 check_cpu_stats.sh
wget https://raw.github.com/justintime/nagios-plugins/master/check_mem/check_mem.pl
chmod 777 check_mem.pl
vi /usr/lib/nagios/plugins/check_logfile.py
#! /usr/bin/python
import optparse
import os, os.path
import re
import sys
import time
NAGIOS_STATUS = { "OK": 0, "WARNING": 1, "CRITICAL": 2, "UNKNOWN": 3 }
SEARCH_WARNING = ['Warning','WARNING']
SEARCH_ERROR = ['Error','ERROR']
parser = optparse.OptionParser()
parser.set_usage("%prog <file>")
(options, args) = parser.parse_args()
if len(args) != 1:
parser.print_help(file=sys.stderr)
sys.exit(1)
file = args[0]
if not os.path.isfile(file):
print('no file log')
sys.exit(NAGIOS_STATUS['OK'])
fichier= open(file,'r')
txt = ''
for i in fichier.readlines():
txt = txt + i
fichier.close()
if len(txt) == 0:
print('not error')
sys.exit(NAGIOS_STATUS['OK'])
for e in SEARCH_ERROR:
if e in txt:
print('find %s' % e)
sys.exit(NAGIOS_STATUS['CRITICAL'])
for e in SEARCH_WARNING:
if e in txt:
print('find %s' % e)
sys.exit(NAGIOS_STATUS['WARNING'])
print('file is not null')
sys.exit(NAGIOS_STATUS['UNKNOWN'])
chmod 777 /usr/lib/nagios/plugins/check_logfile.py
vi /etc/nagios/nrpe.cfg
allowed_hosts=192.168.2.92
command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/disk/by-uuid/1edfe8e1-0a9e-4df9-93fd-1e4fb501db5b
command[check_mem]=/usr/lib/nagios/plugins/check_mem.pl -w 99 -c 100
command[check_cpu]=/usr/lib/nagios/plugins/check_cpu_stats.sh -w 10 -c 20
command[check_backup]=/usr/lib/nagios/plugins/check_logfile.py /var/log/backup.log
Note
le uuid du disque 1 est récupéré via la commande df -k
/etc/init.d/nagios-nrpe-server restart
Arrêt redémarrage du service mysql
/etc/init.d/mysql stop
/etc/init.d/mysql start
/etc/init.d/mysql restart
Ajout d’une tâche de sauvegarde
vi /root/backup.sh
mkdir /root/backup
#!/bin/bash
cd /root
date=`date "+%Y-%m-%d"`
mkdir $date
cd $date
mysqldump -umascarille -pet1000 --all-databases --opt >alldatabase.sql 2>/var/log/backup.log
cd ..
tar -cjf mysql_$date.tar.gz $date
rm -R $date
mv mysql_$date.tar.gz /root/backup
find /root/backup -type f -mtime +30 -exec rm -f {} \;
# rsync
#rsync -av /root/backup /synology
chmod +x /root/backup.sh
automatisation via contrab (tout les jours à minuit)
crontab -e
0 0 * * * /root/backup.sh
Note
cette sauvegarde est monitoré par NAGIOS via python. cela est un simple exemple mais nagios via python peut contrôler tout et n’importe quoi
SRVWEB¶
Information sur le serveur
Système | DEBIAN 7 |
Disque 1 | 20GB |
Type Disque 1 | SCSI |
Montage Disque 1 | / |
Disque 2 | 2To |
Type Disque 2 | SCSI |
Montage Disque 2 | /var/www |
Network | VMnet1 |
IP | 192.168.2.90 |
NETMASK | 255.255.255.0 |
GATEWAY | 192.168.2.254 |
DNS | 192.168.0.253 |
user root | root / systemlx |
user piwigo | zeizig / et1000&& |
apache version | 2.2.22 |
php version | 5.4.4-14 |
installation complémentaire du serveur
apt-get install apache2 install php5 php-pear php5-mysql mysql-client nagios-nrpe-server imagemagick sysstat php5-gd
Note
le package mysql-client n’est pas obligatoire, mais cela va permettre de vérifier que le server SRVMYSQL est accessible par le serveur SRVWEB
Verification de la connexion à la base de donnée
mysql -h 192.168.2.91 -u mascarille -p
Ajout d’un nouveau disque:
- identification du disque
fdisk -l
# pour nous /dev/sdb
- création d’une partition primaire
cfdisk /dev/sdb
# Nouveau / Primaire/ Ecrire/ Quitter
fdisk -l
- formatage de la partition
mkfs -t ext3 /dev/sdb1
- vérification des données
fsck -f -y /dev/sdb1
- monter la partition
vi /etc/fstab
/dev/sdb1 /var/www ext3 defaults 0 2
reboot -n
- vérification
df -k
il sera par la suite possible d’agrandir une partition. Pour cela il faut
- arrêter la machine virtuelle
- ajouter via vmware player de l’espace disque
- redémarrer la machine virtuelle
- évaluer le résultat avant agrandissement
root@SRVWEB:~# df -k
Sys. fich. 1K-blocks Util. Disponible Uti% Montée sur
rootfs 19751804 1301656 17446784 7% /
udev 10240 0 10240 0% /dev
tmpfs 51440 256 51184 1% /run
/dev/disk/by-uuid/1edfe8e1-0a9e-4df9-93fd-1e4fb501db5b 19751804 1301656 17446784 7% /
tmpfs 5120 0 5120 0% /run/lock
tmpfs 283100 0 283100 0% /run/shm
/dev/sdb1 10321176 180328 9616564 2% /var/www
- demonter la partition
unmount /dev/sdb1
- suppression de la partition à agrandir et re création
cfdisk /dev/sdb
- redimensionnement de la partition
resize2fs /dev/sdb1
- monter la partition
mount /dev/sdb1
- vérification
root@SRVWEB:/var/www# df -k
Sys. fich. 1K-blocks Util. Disponible Uti% Montée sur
rootfs 19751804 1303232 17445208 7% /
udev 10240 0 10240 0% /dev
tmpfs 51440 256 51184 1% /run
/dev/disk/by-uuid/1edfe8e1-0a9e-4df9-93fd-1e4fb501db5b 19751804 1303232 17445208 7% /
tmpfs 5120 0 5120 0% /run/lock
tmpfs 283100 0 283100 0% /run/shm
/dev/sdb1 20642396 185396 19408432 1% /var/www
Paramétrage du serveur web:
l’ensemble des paramètres sont situés
/etc
/apache2
apache2.conf
ports.conf
/mod-enabled
*.load
*.conf
/conf.d
*.*
/sites-enabled
mascarille.conf
auteursdetheatre.conf
/php5
/apache2
php.ini
/var
/www
/mascarille
/auteursdetheatre
création des répertoires contenant les sites web
mkdir /var/www/mascarille
mkdir /var/www/auteursdetheatre
rm /etc/apache2/sites-enabled/*
paramétrage php
vi /etc/php5/apache2/php.ini
max_input_vars = 5000
upload_max_filesize = 24M
post_max_size = 24M
max_execution_time = 300
paramètrage des sites
vi /etc/apache2/sites-enabled/mascarille.conf
# conf/site-available/mascarille.conf
<VirtualHost *:80>
ServerAdmin zeizig@neuf.fr
ServerName www.mascarille.com
ServerAlias mascarille.com
DocumentRoot "/var/www/mascarille"
ErrorDocument 404 /galerie
ErrorLog /var/log/mascarille.log
LogLevel info
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
<LocationMatch ^/galerie/galleries/>
Order Allow,Deny
Deny from all
</LocationMatch>
<LocationMatch ^/galerie/upload/>
Order Allow,Deny
Deny from all
</LocationMatch>
<LocationMatch ^/galerie24/galleries/>
Order Allow,Deny
Deny from all
</LocationMatch>
<LocationMatch ^/galerie24/upload/>
Order Allow,Deny
Deny from all
</LocationMatch>
<Directory "/var/www/mascarille">
Options Indexes
AllowOverride none
Order allow,deny
Allow from all
ErrorDocument 404 /galerie
</Directory>
<Directory "/var/www/mascarille/galerie24">
Options Indexes
AllowOverride none
Order allow,deny
Allow from all
ErrorDocument 404 /galerie24
</Directory>
<Directory "/var/www/mascarille/tdm">
Options Indexes
AllowOverride none
Order allow,deny
Allow from all
ErrorDocument 404 /tdm
</Directory>
<Directory "/var/www/mascarille/mjv">
Options Indexes
AllowOverride none
Order allow,deny
Allow from all
ErrorDocument 404 /mjv
</Directory>
Alias "/jlat" "/var/www/auteursdetheatre"
<Directory "/var/www/mascarille/auteursdetheatre">
Options Indexes
AllowOverride none
Order allow,deny
Allow from all
ErrorDocument 404 /jlat
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "|/usr/sbin/rotatelogs /var/log/mascarille-%Y_%m_%d_%H_%M.log 86400" common
</IfModule>
</VirtualHost>
vi /etc/apache2/sites-enabled/auteursdetheatre.conf
# conf/site-available/auteursdetheatre.conf
<VirtualHost *:80>
ServerAdmin zeizig@neuf.fr
ServerName www.auteursdetheatre.org
ServerAlias auteursdetheatre.org
DocumentRoot "/var/www/auteursdetheatre"
ErrorDocument 404 /galerie
ErrorLog /var/log/auteursdetheatre.log
LogLevel info
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
<Directory "/var/www/auteursdetheatre">
Options Indexes
AllowOverride none
Order allow,deny
Allow from all
ErrorDocument 404 /galerie
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "|/usr/sbin/rotatelogs /var/log/auteursdetheatre-%Y_%m_%d_%H_%M.log 86400" common
</IfModule>
</VirtualHost>
Arrêt redémarrage du service apache
/etc/init.d/apache2 stop
/etc/init.d/apache2 start
/etc/init.d/apache2 restart
Note
chaque sites web possèdent son propre fichier log avec un système de rotation qui fait que les fichiers logs ne devraient pas grossir. Si on souhaite effacer des logs il ne faut pas supprimer le fichier de log mais le vider via la commande “> /var/log/mon_fichier_log.log”
configuration du nrpe pour la supervision
cd /usr/lib/nagios/plugins
wget "http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=608&cf_id=30"
mv attachement* check_cpu_stats.sh
chmod 777 check_cpu_stats.sh
wget https://raw.github.com/justintime/nagios-plugins/master/check_mem/check_mem.pl
chmod 777 check_mem.pl
vi /etc/nagios/nrpe.cfg
allowed_hosts=192.168.2.92
command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/disk/by-uuid/1edfe8e1-0a9e-4df9-93fd-1e4fb501db5b
command[check_sda2]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sdb1
command[check_mem]=/usr/lib/nagios/plugins/check_mem.pl -w 99 -c 100
command[check_cpu]=/usr/lib/nagios/plugins/check_cpu_stats.sh -w 10 -c 20
Note
le uuid du disque 1 est récupéré via la commande df -k
/etc/init.d/nagios-nrpe-server restart
Intégration des sites de l’ancien serveur sur SRVWEB
Source | Destination |
---|---|
E:/jlat | /var/www/auteursdetheatre |
C:/mascarille | /var/www/mascarille |
P:/Galerie24 | /var/www/mascarille/galerie |
P:/mjv | /var/www/mascarille/mjv |
P:/tdm | /var/www/mascarille/tdm |
E:/ajv | /var/www/mascarille/ajv |
E:/fred | /var/www/mascarille/fred |
E/woocom | /var/www/mascarille/woo |
Note
devons nous garder fred et woo?
Note
a la suite des copies si il y a des soucis de droit il suffit de lancer
chmod a+rX -R /var/www
création des dossiers cibles
mkdir /var/www/mascarille/galerie
mkdir /var/www/mascarille/mjv
mkdir /var/www/mascarille/ajv
mkdir /var/www/mascarille/fred
mkdir /var/www/mascarille/woo
afin de garder active l’url www.mascarille.cm/jlat on déclare dans la configuration de mascarille l’alias jlat et le répertoire /var/www/auteurdetheatre
Note
a priori auteurdetheatre.org a besoin de mascarille.com pour fonctionner Par exemple la banniere jlat est avec une adresse macarille.com/jlat ce qui est anormale (puisqu’un problème sur mascarille.com impact auteurdetheatre.org).
Modification des fichiers de configuration pour wordpress
vi wp-config.php
define('DB_NAME', 'joulyon');
define('DB_USER', 'mascarille');
define('DB_PASSWORD', 'et1000');
define('DB_HOST', '192.168.2.91');
Attention
contrairement à windows, linux est sensible à la case notament pour les informations de connexions (nom de base, id, password, ...) et pour les paths il faut donc renommer Blogzeizig en blogzeigi ...
mv /var/www/mascarille/Blog /var/www/mascarille/blog
mv /var/www/mascarille/Blogzeizig /var/www/mascarille/blogzeizig
de plus il faut ajouter un full droit sur le dossier _data de chaque site piwigo
chmod 777 -R /var/www/mascarille/blog/wp-content
chmod 777 -R /var/www/mascarille/blogzeizig/wordpress/wp-content
chmod 777 -R /var/www/auteursdetheatre/wp-content
Modification des fichiers de configuration pour piwigo
vi local/config/database.inc.php
$conf['db_base'] = 'galerie24';
$conf['db_user'] = 'zeizig';
$conf['db_password'] = 'et1000';
$conf['db_host'] = '192.168.2.91';
de plus il faut ajouter un full droit sur le dossier _data et upload de chaque site piwigo
chmod 777 -R _data
chmod 777 -R upload
chmod 777 -R plugins
chmod 777 -R galleries
SRVPIWIK¶
Information sur le serveur
Système | DEBIAN 7 |
Disque | 20GB |
Type Disque 1 | SCSI |
Montage Disque 1 | / |
Network | VMnet1 |
IP | 192.168.2.93 |
NETMASK | 255.255.255.0 |
GATEWAY | 192.168.2.254 |
DNS | 192.168.0.253 |
user root | root / systemlx |
user root mysql | root / systemmysql |
user mysql | piwik / pi1000 |
installation complémentaire du serveur
apt-get install apache2 php5 php-pear php5-mysql mysql-client nagios-nrpe-server mysql-server sysstat php5-gd
La configuration de base est stockée dans /etc/mysql/my.cnf
vi /etc/mysql/my.cnf
#bind-address = 127.0.0.1
bind-address = 192.168.2.93
/etc/init.d/mysql restart
Sécurisation de la base
mysql_secure_installation
Set root password ? Y
Remove anonymous users ? Y
Disallow root login remotely ? Y
Remove test database and access to it ? Y
Reload privilege tables now ? Y
Création d’un super utilisateur piwik et de la base PIWIK
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'piwik'@'%'
IDENTIFIED BY 'pi1000' WITH GRANT OPTION;
CREATE DATABASE piwik;
configuration du nrpe pour la supervision
cd /usr/lib/nagios/plugins
wget "http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=608&cf_id=30"
mv attachement* check_cpu_stats.sh
chmod 777 check_cpu_stats.sh
wget https://raw.github.com/justintime/nagios-plugins/master/check_mem/check_mem.pl
chmod 777 check_mem.pl
vi /usr/lib/nagios/plugins/check_logfile.py
#! /usr/bin/python
import optparse
import os, os.path
import re
import sys
import time
NAGIOS_STATUS = { "OK": 0, "WARNING": 1, "CRITICAL": 2, "UNKNOWN": 3 }
SEARCH_WARNING = ['Warning','WARNING']
SEARCH_ERROR = ['Error','ERROR']
parser = optparse.OptionParser()
parser.set_usage("%prog <file>")
(options, args) = parser.parse_args()
if len(args) != 1:
parser.print_help(file=sys.stderr)
sys.exit(1)
file = args[0]
if not os.path.isfile(file):
print('no file log')
sys.exit(NAGIOS_STATUS['OK'])
fichier= open(file,'r')
txt = ''
for i in fichier.readlines():
txt = txt + i
fichier.close()
if len(txt) == 0:
print('not error')
sys.exit(NAGIOS_STATUS['OK'])
for e in SEARCH_ERROR:
if e in txt:
print('find %s' % e)
sys.exit(NAGIOS_STATUS['CRITICAL'])
for e in SEARCH_WARNING:
if e in txt:
print('find %s' % e)
sys.exit(NAGIOS_STATUS['WARNING'])
print('file is not null')
sys.exit(NAGIOS_STATUS['UNKNOWN'])
chmod 777 /usr/lib/nagios/plugins/check_logfile.py
vi /etc/nagios/nrpe.cfg
allowed_hosts=192.168.2.92
command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10%
-p /dev/disk/by-uuid/e400f532-47de-47b5-a5c3-fbd683a7eda4
command[check_mem]=/usr/lib/nagios/plugins/check_mem.pl -w 99 -c 100
command[check_cpu]=/usr/lib/nagios/plugins/check_cpu_stats.sh -w 10 -c 20
command[check_backup]=/usr/lib/nagios/plugins/check_logfile.py /var/log/backup.log
Note
le uuid du disque 1 est récupéré via la commande df -k
/etc/init.d/nagios-nrpe-server restart
Arrêt redémarrage du service mysql
/etc/init.d/mysql stop
/etc/init.d/mysql start
/etc/init.d/mysql restart
Ajout d’une tâche de sauvegarde
vi /root/backup.sh
mkdir /root/backup
#!/bin/bash
cd /root
date=`date "+%Y-%m-%d"`
mkdir $date
cd $date
mysqldump -upiwik -ppi1000 --all-databases --opt >alldatabase.sql 2>/var/log/backup.log
cd ..
tar -cjf mysql_$date.tar.gz $date
rm -R $date
mv mysql_$date.tar.gz /root/backup
find /root/backup -type f -mtime +30 -exec rm -f {} \;
# rsync
#rsync -av /root/backup /synology
chmod +x /root/backup.sh
automatisation via contrab (tout les jours à minuit)
crontab -e
0 0 * * * /root/backup.sh
Note
cette sauvegarde est monitoré par NAGIOS via python. cela est un simple exemple mais nagios via python peut contrôler tout et n’importe quoi
SRVLOCAL¶
Information sur le serveur
Système | DEBIAN 7 |
Disque 1 | 20GB |
Type Disque 1 | SCSI |
Montage Disque 1 | / |
Network | VMnet1 |
IP | DHCP |
user root | root / systemlx |
Attention
pourquoi ne pas mettre un windows 7 juste pour logme par exemple et plus simple a utiliser pour emile?
SRVCLOUD¶
Information sur le serveur
Système | DEBIAN 7 |
Disque | 20GB |
Type Disque 1 | SCSI |
Montage Disque 1 | / |
Network | VMnet1 |
IP | 192.168.2.94 |
NETMASK | 255.255.255.0 |
GATEWAY | 192.168.2.254 |
DNS | 192.168.0.253 |
user root | root / systemlx |
user owncloud | admin / et1000 |
installation d’owncloud (cf site)
Annexes¶
check_mem.pl¶
#! /usr/bin/perl -w
#
# $Id: check_mem.pl 8 2008-08-23 08:59:52Z rhomann $
#
# check_mem v1.7 plugin for nagios
#
# uses the output of `free` to find the percentage of memory used
#
# Copyright Notice: GPL
#
# History:
# v1.8 Rouven Homann - rouven.homann@cimt.de
# + added findbin patch from Duane Toler
# + added backward compatibility patch from Timour Ezeev
#
# v1.7 Ingo Lantschner - ingo AT boxbe DOT com
# + adapted for systems with no swap (avoiding divison through 0)
#
# v1.6 Cedric Temple - cedric DOT temple AT cedrictemple DOT info
# + add swap monitoring
# + if warning and critical threshold are 0, exit with OK
# + add a directive to exclude/include buffers
#
# v1.5 Rouven Homann - rouven.homann@cimt.de
# + perfomance tweak with free -mt (just one sub process started instead of 7)
# + more code cleanup
#
# v1.4 Garrett Honeycutt - gh@3gupload.com
# + Fixed PerfData output to adhere to standards and show crit/warn values
#
# v1.3 Rouven Homann - rouven.homann@cimt.de
# + Memory installed, used and free displayed in verbose mode
# + Bit Code Cleanup
#
# v1.2 Rouven Homann - rouven.homann@cimt.de
# + Bug fixed where verbose output was required (nrpe2)
# + Bug fixed where perfomance data was not displayed at verbose output
# + FindBin Module used for the nagios plugin path of the utils.pm
#
# v1.1 Rouven Homann - rouven.homann@cimt.de
# + Status Support (-c, -w)
# + Syntax Help Informations (-h)
# + Version Informations Output (-V)
# + Verbose Output (-v)
# + Better Error Code Output (as described in plugin guideline)
#
# v1.0 Garrett Honeycutt - gh@3gupload.com
# + Initial Release
#
use strict;
use FindBin;
FindBin::again();
use lib $FindBin::Bin;
use utils qw($TIMEOUT %ERRORS &print_revision &support);
use vars qw($PROGNAME $PROGVER);
use Getopt::Long;
use vars qw($opt_V $opt_h $verbose $opt_w $opt_c);
$PROGNAME = "check_mem";
$PROGVER = "1.8";
# add a directive to exclude buffers:
my $DONT_INCLUDE_BUFFERS = 0;
sub print_help ();
sub print_usage ();
Getopt::Long::Configure('bundling');
GetOptions ("V" => \$opt_V, "version" => \$opt_V,
"h" => \$opt_h, "help" => \$opt_h,
"v" => \$verbose, "verbose" => \$verbose,
"w=s" => \$opt_w, "warning=s" => \$opt_w,
"c=s" => \$opt_c, "critical=s" => \$opt_c);
if ($opt_V) {
print_revision($PROGNAME,'$Revision: '.$PROGVER.' $');
exit $ERRORS{'UNKNOWN'};
}
if ($opt_h) {
print_help();
exit $ERRORS{'UNKNOWN'};
}
print_usage() unless (($opt_c) && ($opt_w));
my ($mem_critical, $swap_critical);
my ($mem_warning, $swap_warning);
($mem_critical, $swap_critical) = ($1,$2) if ($opt_c =~ /([0-9]+)[%]?(?:,([0-9]+)[%]?)?/);
($mem_warning, $swap_warning) = ($1,$2) if ($opt_w =~ /([0-9]+)[%]?(?:,([0-9]+)[%]?)?/);
# Check if swap params were supplied
$swap_critical ||= 90;
$swap_warning ||= 50;
# print threshold in output message
my $mem_threshold_output = " (";
my $swap_threshold_output = " (";
if ( $mem_warning > 0 && $mem_critical > 0) {
$mem_threshold_output .= "W> $mem_warning, C> $mem_critical";
}
elsif ( $mem_warning > 0 ) {
$mem_threshold_output .= "W> $mem_warning";
}
elsif ( $mem_critical > 0 ) {
$mem_threshold_output .= "C> $mem_critical";
}
if ( $swap_warning > 0 && $swap_critical > 0) {
$swap_threshold_output .= "W> $swap_warning, C> $swap_critical";
}
elsif ( $swap_warning > 0 ) {
$swap_threshold_output .= "W> $swap_warning";
}
elsif ( $swap_critical > 0 ) {
$swap_threshold_output .= "C> $swap_critical";
}
$mem_threshold_output .= ")";
$swap_threshold_output .= ")";
my $verbose = $verbose;
my ($mem_percent, $mem_total, $mem_used, $swap_percent, $swap_total, $swap_used) = &sys_stats();
my $free_mem = $mem_total - $mem_used;
my $free_swap = $swap_total - $swap_used;
# set output message
my $output = "Memory Usage".$mem_threshold_output.": ". $mem_percent.'% <br>';
$output .= "Swap Usage".$swap_threshold_output.": ". $swap_percent.'%';
# set verbose output message
my $verbose_output = "Memory Usage:".$mem_threshold_output.": ". $mem_percent.'% '."- Total: $mem_total MB, used: $mem_used MB, free: $free_mem MB<br>";
$verbose_output .= "Swap Usage:".$swap_threshold_output.": ". $swap_percent.'% '."- Total: $swap_total MB, used: $swap_used MB, free: $free_swap MB<br>";
# set perfdata message
my $perfdata_output = "MemUsed=$mem_percent\%;$mem_warning;$mem_critical";
$perfdata_output .= " SwapUsed=$swap_percent\%;$swap_warning;$swap_critical";
# if threshold are 0, exit with OK
if ( $mem_warning == 0 ) { $mem_warning = 101 };
if ( $swap_warning == 0 ) { $swap_warning = 101 };
if ( $mem_critical == 0 ) { $mem_critical = 101 };
if ( $swap_critical == 0 ) { $swap_critical = 101 };
if ($mem_percent>$mem_critical || $swap_percent>$swap_critical) {
if ($verbose) { print "<b>CRITICAL: ".$verbose_output."</b>|".$perfdata_output."\n";}
else { print "<b>CRITICAL: ".$output."</b>|".$perfdata_output."\n";}
exit $ERRORS{'CRITICAL'};
} elsif ($mem_percent>$mem_warning || $swap_percent>$swap_warning) {
if ($verbose) { print "<b>WARNING: ".$verbose_output."</b>|".$perfdata_output."\n";}
else { print "<b>WARNING: ".$output."</b>|".$perfdata_output."\n";}
exit $ERRORS{'WARNING'};
} else {
if ($verbose) { print "OK: ".$verbose_output."|".$perfdata_output."\n";}
else { print "OK: ".$output."|".$perfdata_output."\n";}
exit $ERRORS{'OK'};
}
sub sys_stats {
my @memory = split(" ", `free -mt`);
my $mem_total = $memory[7];
my $mem_used;
if ( $DONT_INCLUDE_BUFFERS) { $mem_used = $memory[15]; }
else { $mem_used = $memory[8];}
my $swap_total = $memory[18];
my $swap_used = $memory[19];
my $mem_percent = ($mem_used / $mem_total) * 100;
my $swap_percent;
if ($swap_total == 0) {
$swap_percent = 0;
} else {
$swap_percent = ($swap_used / $swap_total) * 100;
}
return (sprintf("%.0f",$mem_percent),$mem_total,$mem_used, sprintf("%.0f",$swap_percent),$swap_total,$swap_used);
}
sub print_usage () {
print "Usage: $PROGNAME -w <warn> -c <crit> [-v] [-h]\n";
exit $ERRORS{'UNKNOWN'} unless ($opt_h);
}
sub print_help () {
print_revision($PROGNAME,'$Revision: '.$PROGVER.' $');
print "Copyright (c) 2005 Garrett Honeycutt/Rouven Homann/Cedric Temple\n";
print "\n";
print_usage();
print "\n";
print "-w <MemoryWarn>,<SwapWarn> = Memory and Swap usage to activate a warning message (eg: -w 90,25 ) .\n";
print "-c <MemoryCrit>,<SwapCrit> = Memory and Swap usage to activate a critical message (eg: -c 95,50 ).\n";
print "-v = Verbose Output.\n";
print "-h = This screen.\n\n";
support();
}
check_cpu_stats.sh¶
#! /bin/bash
# ========================================================================================
# CPU Utilization Statistics plugin for Nagios
#
# Written by : Steve Bosek
# Patched by : Bas van der Doorn
# Release : 2.2
# Creation date : 8 September 2007
# Revision date : 23 November 2008
# Package : DTB Nagios Plugin
# Description : Nagios plugin (script) to check cpu utilization statistics.
# This script has been designed and written on Unix plateform (Linux, Aix, Solaris),
# requiring iostat as external program. The locations of these can easily
# be changed by editing the variables $IOSTAT at the top of the script.
# The script is used to query 4 of the key cpu statistics (user,system,iowait,idle)
# at the same time. Note though that there is only one set of warning
# and critical values for iowait percent.
#
# Usage : ./check_cpu_stats.sh [-w <warn>] [-c <crit] ( [ -i <intervals in second> ] [ -n <report number> ])
# ----------------------------------------------------------------------------------------
#
# TODO: Support for HP-UX
#
#
# ========================================================================================
#
# HISTORY :
# Release | Date | Authors | Description
# --------------+---------------+---------------+------------------------------------------
# 2.0 | 16.02.08 | Steve Bosek | Solaris support and new parameters
# | | | New Parameters : - iostat seconds intervals
# | | | - iostat report number
# 2.1 | 08.06.08 | Steve Bosek | Bug perfdata and convert comma in point for Linux result
# 2.1.1 | 20.11.08 | Bas van der Doorn | Fixed improperly terminated string
# 2.1.2 | 23.11.08 | Bas van der Doorn | Fixed linux steal reported as idle, comparisons
# 2.2 | 23.11.08 | Bas van der Doorn | Capable systems will output nice and steal data
# -----------------------------------------------------------------------------------------
#
# =========================================================================================
# Paths to commands used in this script. These may have to be modified to match your system setup.
IOSTAT=/usr/bin/iostat
# Nagios return codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
# Plugin parameters value if not define
WARNING_THRESHOLD=${WARNING_THRESHOLD:="30"}
CRITICAL_THRESHOLD=${CRITICAL_THRESHOLD:="100"}
INTERVAL_SEC=${INTERVAL_SEC:="1"}
NUM_REPORT=${NUM_REPORT:="3"}
# Plugin variable description
PROGNAME=$(basename $0)
RELEASE="Revision 2.1.1"
AUTHOR="(c) 2008 Steve Bosek (steve.bosek@gmail.com)"
if [ ! -x $IOSTAT ]; then
echo "UNKNOWN: iostat not found or is not executable by the nagios user."
exit $STATE_UNKNOWN
fi
# Functions plugin usage
print_release() {
echo "$RELEASE $AUTHOR"
}
print_usage() {
echo ""
echo "$PROGNAME $RELEASE - CPU Utilization check script for Nagios"
echo ""
echo "Usage: check_cpu_stats.sh -w -c (-i -n)"
echo ""
echo " -w Warning level in % for cpu iowait"
echo " -c Crical level in % for cpu iowait"
echo " -i Interval in seconds for iostat (default : 1)"
echo " -n Number report for iostat (default : 3)"
echo " -h Show this page"
echo ""
echo "Usage: $PROGNAME"
echo "Usage: $PROGNAME --help"
echo ""
}
print_help() {
print_usage
echo ""
echo "This plugin will check cpu utilization (user,system,iowait,idle in %)"
echo ""
exit 0
}
# Parse parameters
while [ $# -gt 0 ]; do
case "$1" in
-h | --help)
print_help
exit $STATE_OK
;;
-v | --version)
print_release
exit $STATE_OK
;;
-w | --warning)
shift
WARNING_THRESHOLD=$1
;;
-c | --critical)
shift
CRITICAL_THRESHOLD=$1
;;
-i | --interval)
shift
INTERVAL_SEC=$1
;;
-n | --number)
shift
NUM_REPORT=$1
;;
*) echo "Unknown argument: $1"
print_usage
exit $STATE_UNKNOWN
;;
esac
shift
done
# CPU Utilization Statistics Unix Plateform ( Linux,AIX,Solaris are supported )
case `uname` in
Linux ) CPU_REPORT=`iostat -c $INTERVAL_SEC $NUM_REPORT | sed -e 's/,/./g' | tr -s ' ' ';' | sed '/^$/d' | tail -1`
CPU_REPORT_SECTIONS=`echo ${CPU_REPORT} | grep ';' -o | wc -l`
CPU_USER=`echo $CPU_REPORT | cut -d ";" -f 2`
CPU_NICE=`echo $CPU_REPORT | cut -d ";" -f 3`
CPU_SYSTEM=`echo $CPU_REPORT | cut -d ";" -f 4`
CPU_IOWAIT=`echo $CPU_REPORT | cut -d ";" -f 5`
CPU_IOWAIT_MAJOR=`echo $CPU_IOWAIT | cut -d "." -f 1`
if [ ${CPU_REPORT_SECTIONS} -ge 6 ]; then
CPU_STEAL=`echo $CPU_REPORT | cut -d ";" -f 6`
CPU_IDLE=`echo $CPU_REPORT | cut -d ";" -f 7`
NAGIOS_DATA="user=${CPU_USER}% system=${CPU_SYSTEM}% iowait=${CPU_IOWAIT}% idle=${CPU_IDLE}% nice=${CPU_NICE}% steal=${CPU_STEAL}% | CpuUser=${CPU_USER};CpuSystem=${CPU_SYSTEM};CpuIoWait=${CPU_IOWAIT};CpuIdle=${CPU_IDLE};CpuNice=${CPU_NICE};CpuSteal=${CPU_STEAL};$WARNING_THRESHOLD;$CRITICAL_THRESHOLD"
else
CPU_IDLE=`echo $CPU_REPORT | cut -d ";" -f 6`
NAGIOS_DATA="user=${CPU_USER}% system=${CPU_SYSTEM}% iowait=${CPU_IOWAIT}% idle=${CPU_IDLE}% nice=${CPU_NICE}% | CpuUser=${CPU_USER};CpuSystem=${CPU_SYSTEM};CpuIoWait=${CPU_IOWAIT};CpuIdle=${CPU_IDLE};CpuNice=${CPU_NICE};$WARNING_THRESHOLD;$CRITICAL_THRESHOLD"
fi
;;
AIX ) CPU_REPORT=`iostat -t $INTERVAL_SEC $NUM_REPORT | sed -e 's/,/./g'|tr -s ' ' ';' | tail -1`
CPU_USER=`echo $CPU_REPORT | cut -d ";" -f 4`
CPU_SYSTEM=`echo $CPU_REPORT | cut -d ";" -f 5`
CPU_IOWAIT=`echo $CPU_REPORT | cut -d ";" -f 7`
CPU_IOWAIT_MAJOR=`echo $CPU_IOWAIT | cut -d "." -f 1`
CPU_IDLE=`echo $CPU_REPORT | cut -d ";" -f 6`
NAGIOS_DATA="user=${CPU_USER}% system=${CPU_SYSTEM}% iowait=${CPU_IOWAIT}% idle=${CPU_IDLE}% | CpuUser=${CPU_USER};CpuSystem=${CPU_SYSTEM};CpuIoWait=${CPU_IOWAIT};CpuIdle=${CPU_IDLE};$WARNING_THRESHOLD;$CRITICAL_THRESHOLD"
;;
SunOS ) CPU_REPORT=`iostat -c $INTERVAL_SEC $NUM_REPORT | tail -1`
CPU_USER=`echo $CPU_REPORT | awk '{ print $1 }'`
CPU_SYSTEM=`echo $CPU_REPORT | awk '{ print $2 }'`
CPU_IOWAIT=`echo $CPU_REPORT | awk '{ print $3 }'`
CPU_IOWAIT_MAJOR=`echo $CPU_IOWAIT | cut -d "." -f 1`
CPU_IDLE=`echo $CPU_REPORT | awk '{ print $4 }'`
NAGIOS_DATA="user=${CPU_USER}% system=${CPU_SYSTEM}% iowait=${CPU_IOWAIT}% idle=${CPU_IDLE}% | CpuUser=${CPU_USER};CpuSystem=${CPU_SYSTEM};CpuIoWait=${CPU_IOWAIT};CpuIdle=${CPU_IDLE};$WARNING_THRESHOLD;$CRITICAL_THRESHOLD"
;;
*) echo "UNKNOWN: `uname` not yet supported by this plugin. Coming soon !"
exit $STATE_UNKNOWN
;;
esac
# Return
if [ ${CPU_IOWAIT_MAJOR} -ge $WARNING_THRESHOLD ] && [ ${CPU_IOWAIT_MAJOR} -lt $CRITICAL_THRESHOLD ]; then
echo "CPU STATISTICS WARNING : ${NAGIOS_DATA}"
exit $STATE_WARNING
elif [ ${CPU_IOWAIT_MAJOR} -ge $CRITICAL_THRESHOLD ]; then
echo "CPU STATISTICS CRITICAL : ${NAGIOS_DATA}"
exit $STATE_CRITICAL
else
echo "CPU STATISTICS OK : ${NAGIOS_DATA}"
exit $STATE_OK
fi
Utilisation d’un disque SSD¶
Modification du fichier /et/fstab
# / was on /dev/sda1 during installation
UUID=6fd8af41-b50e-4147-b382-23765d37c6ca / ext3 defaults,noatime,nodiratime,errors=remount-ro 0 1
et modifier /etc/sysctl.conf pour éviter l’utilisation du swap
"m.swappiness=0
documentation finale ici