Supervision des process actifs

De la même façon que je voulais une supervision du nombre de sessions ouvertes sur mes serveurs distants, je voulais aussi superviser le nombre de process actifs. Je suis allé au plus simple en faisant un petit script qui me remonte les informations attendues par SNMP.


#!/bin/bash
# Plugin to check the number of process on the remote system
# by ramon

######################"

HOST=$1
WARNING=$2
CRITICAL=$3

PROCESS=$(snmpwalk $HOST -c public -v 1  1.3.6.1.2.1.25.1.6.0 -OvQ)
#echo "$PROCESS"

if [ "$PROCESS" -lt "$WARNING" ]
        then
                echo "OK : $PROCESS actives process"
                exit 0;
        else
                if [ "$PROCESS" -lt "$CRITICAL" ]
                        then
                                echo "Warning : $PROCESS actives process"
                                exit 1;
                        else
                                echo "Critical : $PROCESS actives process"
                                exit 2;
                fi
fi
 

Au passage, voici la configuration de la commande et du service pour Nagios.



define command{
        command_name    check_snmp_procs
        command_line    /usr/lib/nagios/plugins/check_process.sh $HOSTADDRESS$ '$ARG1$' '$ARG2$'
        }

define service {
        hostgroup_name                  debian-servers
        service_description             check_procs
        check_command                   check_snmp_procs!160!180
        use                             generic-service
}

 


Supervision du nombre de sessions ouvertes

Voulant superviser le nombre de sessions ouvertes sur mes serveurs, j’ai cherché un plugin Nagios qui remontait cette information par SNMP. Je n’ai pas trouvé de plugin vraiment satisfaisant pour moi.

Du coup, j’ai développé un petit script pour faire le boulot.


#!/bin/bash
# Plugin to check the number of connected users on the system
# by ramon

######################"

HOST=$1
WARNING=$2
CRITICAL=$3

USERS=$(snmpwalk $HOST -c public -v 1 .1.3.6.1.2.1.25.1.5.0 -OvQ)
#echo "$USERS"

if [ "$USERS" -lt "$WARNING" ]
        then
                echo "OK : Only $USERS connected"
                exit 0;
        else
                if [ "$USERS" -lt "$CRITICAL" ]
                        then
                                echo "Warning : $USERS connected"
                                exit 1;
                        else
                                echo "Critical : $USERS connected"
                                exit 2;
                fi
fi
 

Au passage, voici la configuration de la commande et du service pour Nagios.



define command{
        command_name    check_users
        command_line    /usr/lib/nagios/plugins/check_users.sh $HOSTADDRESS$ '$ARG1$' '$ARG2$'
        }

define service{
        use                             generic-service         ; Name of service template to use
        hostgroup_name                  debian-servers
        service_description             Current_Users
        check_command                   check_users!20!50
        }
 


Activation des commandes externes

Je viens de réinstaller un serveur Nagios à la maison pour superviser mes différents équipements. Et lorsque j’ai voulu utiliser une commande externe pour forcer un nouveau check, j’ai eu ce « joli » message d’erreur :


Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'!
 

Rien de bien méchant, c’est juste un problème de droits d’accès entre Nagios et Apache sur les commandes externes.

Dans le fichier /etc/nagios3/nagios.cfg il faut bien que le paramètre suivant soit positionné à 1.


check_external_commands=1
 

Et ensuite, il faut passer les commandes suivantes :


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
 

Et il est maintenant possible de rescheduler un check !!


Présentation

Pour augmenter ma capacité de stockage j’ai investi dans des disques dur de 3TB. Mais lorsque j’ai voulu les installer, j’ai rencontré quelques soucis. Le problème n’était pas au niveau du hardware, mais au niveau de la déclaration et de la configuration des disques.


parted et non fdisk

Fdisk ne permet pas de créer des partitions supérieures à 2TB. Pour ne pas avoir ce problème il faut utiliser GPT. Cette technologie a deux principaux avantages par rapport au partitionnement classique (MsDos) :
- Gestion des des disques de taille >2.2To
- Pas de limite dans le nombre de partitions primaires

Il faut utiliser l’utilitaire parted pour configurer les disques avec GPT.


Partitionnement

Lors de mes premières manipulations, que cela soit avec fdisk ou parted j’avais un message d’erreur indiquant un problème d’alignement de disque.


parted Warning: The resulting partition is not properly aligned for best performance.
 

Du coup, lors du partitionnement, j’ai aussi passé une commande pour ré-aligner les disques. Ainsi la partitionnement commence au secteur suivant.


parted -a optimal /dev/sdh
(parted) mktable gpt
(parted) mkpart primary ext3 1 -1
 

En vérifiant, j’ai bien une partition entière sur tout le disque.


(parted) p
Model: ATA WDC WD30EZRX-00A (scsi)
Disk /dev/sdh: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End          Size         File system  Name     Flags
 1      2048s  5860532223s  5860530176s               primary
 

Et je n’ai plus de problème d’alignement non plus.


(parted) align-check optimal 1
1 aligned
 

Comme c’est un disque qui fera essentiellement de stockage de données et de sauvegarde, je n’ai pas besoin de conserver un espace réservé à root, qui est par défaut à 5% de l’espace total du disque.


tune2fs -m0 /dev/sdh1
 


Présentation

Comme j’avais galéré lors de précédentes tentatives pour créer un RAID sur mon serveur, cette fois, j’ai bien pris note pas à pas des opérations effectuées, pour me faire un mémo. Cela me permet aussi de ne pas à avoir à chercher partout des infos si je dois recommencer.

Pour gérer mon raid, que cela soit sur DEBIAN ou sur UBUNTU, j’utilise mdadm.


Procédure

Après les avoir installé physiquement, la première étape consiste à bien identifier que les disques sont présents. Il suffit d’utiliser fdisk qui va pouvoir lister tous les disques et partitions du système.

fdisk -l

S’il s’agit d’identifier les disques, avec un grep, cela devient un peu plus lisible.


fdisk -l | grep dev

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sdc » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sdh » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Le disque /dev/md_d0 ne contient pas une table de partitions valable
Disque /dev/sda : 250.1 Go, 250059350016 octets
/dev/sda1   *        2048    39999487    19998720   83  Linux
/dev/sda2        40001534   488396799   224197633    5  Étendue
/dev/sda5        40001536    79998975    19998720   83  Linux
/dev/sda6       480397312   488396799     3999744   82  partition d'échange Linux / Solaris
/dev/sda7        80001024   480391167   200195072   83  Linux
Disque /dev/sdb : 320.1 Go, 320072933376 octets
/dev/sdb1              63   625137344   312568641    c  W95 FAT32 (LBA)
Disque /dev/sdc : 3000.6 Go, 3000592982016 octets
/dev/sdc1               1  4294967295  2147483647+  ee  GPT
Disque /dev/sdh : 3000.6 Go, 3000592982016 octets
/dev/sdh1               1  4294967295  2147483647+  ee  GPT

Utilisant des disques de grandes capacités avec un formatage non pris en charge par fdisk, j’ai quelques messages d’avertissements. Mais rien d’anormal. C’est d’ailleurs avec ces deux disques que je vais monter mon raid.
Il sont identifiés comme /dev/sdh et /dev/sdc.

Il suffit de lancer la commande suivante pour initier la création du raid.


mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdh1

Avec la commande suivante, on visualise ensuite l’avancement de la synchronisation du raid :


cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 sdh1[1] sdc1[0]
      2930133824 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.0% (956672/2930133824) finish=612.3min speed=79722K/sec

unused devices: 

Là, le système m’indique qu’il y en a pour près de 10heures pour la synchro. Bah je repasserai plus tard.

Le lendemain, je vérifie que la synchronisation s’est bien faite et s’est bien terminée.


 mdadm --detail /dev/md_d0 

/dev/md_d0:
        Version : 1.2
  Creation Time : Wed Sep 11 00:13:08 2013
     Raid Level : raid1
     Array Size : 2930133824 (2794.39 GiB 3000.46 GB)
  Used Dev Size : 2930133824 (2794.39 GiB 3000.46 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Wed Sep 11 21:22:34 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : SERVER:0  (local to host SERVER)
           UUID : 8ede2d8c:d693e1dc:a085988a:8f0754cf
         Events : 19

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8      113        1      active sync   /dev/sdh1


cat /proc/mdstat
Personalities : [raid1]
md_d0 : active raid1 sdc1[0] sdh1[1]
      2930133824 blocks super 1.2 [2/2] [UU]

unused devices: 

Tout semble OK. Le raid est bien actif.

Je partitionne le RAID en ext3


mkfs.ext3 /dev/md_d0
mke2fs 1.42.5 (29-Jul-2012)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
183140352 i-noeuds, 732533456 blocs
36626672 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=4294967296
22356 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8192 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
	102400000, 214990848, 512000000, 550731776, 644972544

Allocation des tables de groupe : complété
Écriture des tables d'i-noeuds : complété
Création du journal (32768 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Je limite la taille de l’espace alloué à root


tune2fs -m0 /dev/md_d0
tune2fs 1.42.5 (29-Jul-2012)

Je créé un point de montage et monte le RAID sur ce point de mountage.


mkdir  /mnt/BIG
mount /dev/md_d0 /mnt/BIG

Je vérifie que le point de montage est bien là


df -h | grep BIG
/dev/md_d0                                               2,7T  202M  2,6T   1% /mnt/BIG

Tout va bien.

Il me reste plus qu’à finaliser la configuration mdadm pour que le RAID soit bien lancé au démarrage. Je récupère la configuration chargée par mdadm et je la copie dans le fichier de configuration de mdadm pour qu’elle soit bien lancée au démarrage.


mdadm  --examine  --scan
ARRAY /dev/md/0 metadata=1.2 UUID=8ede2d8c:d693e1dc:a085988a:8f0754cf name=SERVER:0
 

J’édite le fichier /etc/mdadm/mdadm.conf et j’ajoute le résultat de la commande précédente, pour forcer le raid à utiliser ces deux disques.


vi /etc/mdadm/mdadm.conf 

ARRAY /dev/md/0 metadata=1.2 UUID=8ede2d8c:d693e1dc:a085988a:8f0754cf name=SERVER:0

Enfin, je déclare le montage dans /etc/fstab pour que le RAID soit bien monté au reboot du serveur. J’ai voulu déclarer le montage en utilisant l’UUID du raid, mais cela n’a pas fonctionné. J’ai donc fait une déclaration plus classique. J’édite le fichier /etc/fstab pour déclarer le montage avec les options qui vont bien.


vi /etc/fstab

# Montage du RAID 3 TB
#UUID=UUID=7c54cd31-a66c-4770-851d-4777904815a3 /DATA2 ext3 defaults 0 1
/dev/md_d0 /DATA2 ext3 defaults 0 1

Pour finir, un reboot, quelques vérifications avec mount, df et mdadm pour contrôler que le RAID est bien actif et opérationnel.