Installation d’une architecture virtualisé pour mascarille

L’objectif de ce tutorial est d’obtenir l’architecture suivante

_images/mascarille_ip.png

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.

_images/emile_00.png

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.

_images/emile_34.png

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
_images/emile_31.png

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.
_images/emile_32.png

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

_images/emile_33.png

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)
_images/emile_08.png
_images/emile_09.png
_images/emile_10.png
_images/emile_11.png
_images/emile_12.png
_images/emile_13.png
_images/emile_14.png
_images/emile_15.png
_images/emile_16.png
_images/emile_17.png
_images/emile_18.png
_images/emile_19.png
_images/emile_20.png
_images/emile_21.png
_images/emile_22.png
_images/emile_23.png
_images/emile_24.png
_images/emile_25.png
_images/emile_26.png
_images/emile_27.png
_images/emile_28.png
_images/emile_29.png

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:

_images/emile_02.png
_images/emile_03.png
_images/emile_04.png
_images/emile_05.png
_images/emile_06.png
_images/emile_07.png

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
_images/emile_35.png
_images/emile_36.png
_images/emile_42.png

Installation

IPCOP possède un outil d’installation qu’il faut suivre pas à pas

_images/emile_37.png
_images/emile_38.png
_images/emile_39.png
_images/emile_41.png
_images/emile_43.png
_images/emile_44.png
_images/emile_45.png
_images/emile_46.png
_images/emile_47.png
_images/emile_48.png
_images/emile_49.png
_images/emile_50.png
_images/emile_51.png
_images/emile_52.png
_images/emile_53.png
_images/emile_54.png
_images/emile_55.png
_images/emile_56.png
_images/emile_57.png
_images/emile_58.png
_images/emile_59.png
_images/emile_60.png
_images/emile_61.png
_images/emile_62.png
_images/emile_63.png

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.
_images/emile_64.png

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
_images/emile_65.png
  • 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