Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Le monitoring est le fait de surveiller la santé d'une machine (un serveur généralement) sous tous les angles à savoir la charge du processeur, l'utilisation de la carte réseau, etc.
Ces informations peuvent être très utiles si vous avez un gros site / une grosse application qui demande pas mal de ressources. Donc c'est toujours assez sympa d'avoir des jauges indiquant l'état des différents composants de la machine directement dans le panneau d'administration de notre site.
Pourtant sous Linux, ce genre d'informations est assez rapidement demandé / traité par le système. Mais sous Microsoft Windows Serveur 2003, là c'est autre chose. En effet sous Windows, l'exportation du "moniteur de performances" existe, mais plus ou moins caché. Pourtant, il offre de très grandes possibilités ainsi qu'une structure adéquate pour un chargement direct en base de données (format CSV ou enregistrement direct en SQL).
Ce tutoriel nécessite l'utilisation d'un serveur dédié sur lequel vous disposez des droits administrateurs ! Ici, j'ai décidé de vous faire partager ma connaissance du dernier système d'exploitation de Microsoft, à savoir, à l'heure où j'écris ces lignes, Microsoft Windows Serveur 2003.
Sésame, ouvre toi !
Bon, dans un premier temps
connectons-nous à notre serveur.
Pour ma part, je préfère utiliser le
Bureau à Distance (inclus dans Windows), mais libre à vous d'utiliser d'autres programmes, comme
RealVNC.
Sur la capture suivante, je déclare le nom de mon serveur dans "Ordinateur", puis je me mets directement en "Administrateur" afin de jouir de tous les droits sur la machine pour effectuer nos opérations. Entrez également votre mot de passe, mais le domaine est optionnel.
KNIGHT-SERVER fait partie de mon réseau local domestique ! Si vous avez un serveur chez OVH par exemple, vous devez mettre une adresse semblable à celle-là : nsXXXXX.ovh.net. Il est aussi possible de mettre directement l'adresse IP.
Hop hop hop, cliquez sur "
Connexion".
Arrivée sur le bureau du serveur
...24 heures plus tard...
Ça y est, vous êtes connecté à votre serveur. Comme la capture ci-dessous, ouvrez votre menu
Démarrer -> Outils d'administration -> Performances.
Créer son propre journal !
Bon : maintenant, vous allez développer l'arbre "
Journaux et alertes de performances", puis cliquez sur "
Journaux de compteur". Nous allons donc maintenant créer notre propre journal. En gros, Windows va
périodiquement prendre les informations que vous avez choisies et
les enregistrer dans le fichier que vous désirez (ou dans une base de données). C'est ça, un journal.
Donc pour créer notre premier journal, cliquez droit sur le grand espace vide, puis "
Nouveaux paramètres de journal". Une fenêtre s'affiche vous demandant d'entrer un nom pour votre journal. Pour ma part, j'ai choisi "knight monitoring", mais bon, on s'en moque un peu

.
Donc, normalement si tout se passe comme prévu, vous devez tomber sur un truc comme ça :
Comme vous pouvez le voir, j'ai commencé à cliquer sur "
Ajouter des compteurs", une étape importante qui consiste à sélectionner les informations que l'on désire exporter. Vous devez arriver sur une fenêtre de ce type :
Tout de suite, il est préférable de séléctionner "
Utiliser les compteurs locaux de l'ordinateur", c'est un poil plus rapide. Mais voyez qu'il est possible d'avoir les informations de n'importe quel autre ordinateur Windows présent sur le réseau : c'est donc vraiment un outil très puissant.
"
Objet de performance" permet de séléctionner l'objet qui vous intéresse. Cliquez une fois dessus et admirez les nombreuses informations que l'on peut avoir. Impressionnant, non ?

Pour notre première fois, nous allons séléctionner "
Processeur".
"
Choisir les compteurs dans la liste", séléctionnez "
% Temps processeur" qui nous permet de savoir sur une échelle de 0 à 100 le niveau d'utilisation du processeur.
"
Choisir les instances" permet ici de séléctionner l'ensemble de l'occupation du processeur ou du coeur désiré. En gros ici, vous voyez que j'ai le choix entre "
_Total" et "
0". Donc à première vue, je n'ai qu'un processeur avec un seul coeur, mais certains utilisateurs pourraient avoir "
1" en plus (qui signifie le 2e coeur / 2e processeur). Ici nous allons faire simple, choisissez "
_Total".
Bon, cliquez sur
AJOUTER.
Voyez que sur la capture suivante, j'ai ajouté plusieurs informations supplémentaires, telles que la mémoire restante et le nombre d'octets envoyés vers le réseau Internet.
N'oubliez pas de mettre un
intervalle de 60 secondes minimum pour éviter que le fichier ne gonfle trop. Bon, onglet suivant : "
Fichiers journaux".
Alors
ici, il faut mettre "Fichier texte (séparé par des virgules)" : cela va nous donner un fichier facilement utilisable sur Excel ou via une base de données, mais également par PHP

. En clair,
ne laissez pas "Fichier binaire", car cela renvoie quelque chose d'inutilisable.
Ensuite, séléctionnez "
mmjjhh" comme suffixe pour vos fichiers de façon à les appeler avec la fonction
DATE() de PHP

, puis cliquez sur "
Configurer".
Ici, il est important de mettre "
LIMITE MAXIMALE", car sinon il va vous créer plusieurs fichiers par heure.

Il ne vous reste plus qu'à valider.
Ne faites pas attention à ma limite de 2 Mo, je l'utilise pour ce tuto afin de remplir rapidement le fichier chaque seconde pour vous donner quelque chose d'utilisable, vous allez voir après.
Maintenant, vous allez dans "
Planification" et vous remarquez qu'on peut exécuter une commande ! Donc pour l'instant, vous laissez vos fenêtres telles qu'elles sont, nous allons un peu faire de PHP.
D'abord, voici la structure de la table
test, libre à vous de la personnaliser suivant vos besoins et les données à traiter.
Code : SQL1
2
3
4
5
6 | CREATE TABLE `test` (
`date` varchar(256) NOT NULL,
`output` int(11) NOT NULL,
`ram` int(11) NOT NULL,
`cpu` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
Voyons voir ce petit code que j'ai conçu :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 | <?PHP
/* FICHIER D'IMPORATION
Moniteur de performances (journaux CSV) <<----->> MySQL
Par Mickael Knight */
for ($a = 0; $a < 24; $a++)
{
// Si l'heure est inférieure à 10, on rajoute un 0
if ($a < 10)
$heure = '0'.$a;
else
$heure = $a;
/* On construit ici le nom de notre journal avec la date d'hier. Eh oui, car avec la date d'aujourd'hui, un nouveau journal est créé, donc ça ne marche plus. */
$hier = date('d') - 1;
// Par contre, si nous sommes le 1er février, difficile de faire le 0 février. :) Donc on prend le mois précédent.
if ($hier < 1) {
// On prend le timestamp d'hier à 23h59
$timestamp_hier = mktime(date('m'), date('d'), date('Y'), 0,0,0) - 1;
$mois = date('m',$timestamp_hier);
$hier = date('d',$timestamp_hier);
}
else
$mois = date('m');
// On construit le chemin du journal --- A ADAPTER ---
$chemin_du_fichier = 'D:/knight_'.$mois.$hier.$heure.'.csv';
// Si le fichier existe bien
if (file_exists($chemin_du_fichier))
{
// Connexion au serveur MySQL --- A ADAPTER ---
mysql_connect("localhost", "root", "");
// Séléction de base de données --- A ADAPTER ---
mysql_select_db("test");
// Requête d'enregistrement
mysql_query("LOAD DATA INFILE '$chemin_du_fichier'
INTO TABLE `test`
FIELDS TERMINATED BY ','
ENCLOSED BY '\\"'
ESCAPED BY '/'
LINES TERMINATED BY 'rn';") or die (mysql_error());
// On supprime les lignes où CPU ne vaut rien (bugs ^^)
mysql_query("DELETE FROM test WHERE cpu = 0");
// Gros bisous MySQL !
mysql_close();
}
else
{
// On affiche une erreur
echo "Un journal n'a pas été trouvé, heure $heure --> \\"$chemin_du_fichier\\"<br />";
}
}
?>
|
Donc en fait pour toutes les heures, je regarde si un journal existe bien. Je fais attention quand on change de mois aussi.

Vous notez aussi au passage la requête qui permet d'avaler directement un CSV simplement et rapidement.
Maintenant que nous savons traiter un journal, nous pouvons ajouter dans "
Exécuter une commande", dans l'onglet "
Planification", la commande suivante :
Code : Console | C:\PHP\php.exe \"D:/www/admin/cron/traiter_journal.php\" |
Bien entendu, à adapter à vos configurations et à valider.

Théoriquement, votre journal doit commencer à se remplir au fil des minutes dès maintenant.
Maintenant que nos données arrivent et sont stockées en base de données, nous allons devoir retravailler les données de la date / heure et aussi de la bande passante d'envoi, sans oublier le pourcentage du CPU pour le représenter sous forme de jauge

.
Tout d'abord, l'avantage d'avoir nos informations en base de données autorise déjà un traitement au niveau du tri qui permet de voir les pics de la charge de travail, par exemple à l'aide d'une simple requête :
Code : SQL1 | SELECT * FROM test ORDER BY cpu DESC LIMIT 0,50
|
...ou encore de voir le moment où vous avez le plus de "pompeurs".
Code : SQL1 | SELECT * FROM test ORDER BY output DESC LIMIT 0,50
|
Enfin bref, vous voyez que déjà, notre première étape permet de trier nos données à notre convenance. Mais nous allons rendre la date et le champ
output (pour l'envoi de données, rappelez-vous) plus agréables à regarder.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 | echo '<table><tr style="font-weight: bold"><td>Date/Heure</td><td>Débit upload</td><td>RAM libre</td><td>%CPU</td></tr>';
$retoursql = mysql_query('SELECT STR_TO_DATE(test.date, "%m%d%Y %H:%i:%s") AS date, output, ram, cpu FROM test') or die (mysql_error());
while ($array = mysql_fetch_array($retoursql))
{
// On formate l'upload, ne pas oublier de diviser par 1024 et non par 1000 !
$output = number_format($array[1] / 1024, 0, ',', ' ');
// On arrondit aussi l'indicateur CPU
$cpu = round($array[3], 1);
// JAUGE CPU
// On définit les couleurs
if ($cpu < 25)
$couleur = "rgb(0,255,0)";
elseif ($cpu < 50)
$couleur = "yellow";
elseif ($cpu < 75)
$couleur = "orange";
else
$couleur = "red";
// JAUGE CPU
echo '<tr>
<td>'.$array[0].'</td>
<td style="text-align: right">'.$output.' Ko/s</td>
<td style="text-align: right">'.$array[2].' Mo</td>
<td style="width: 50%"><div style="height: 15px; width: '.$cpu.'%; background-color: '.$couleur.'">'.$cpu.'%</div></td>
</tr>';
}
echo '</table>';
|
Voilà mon zoli code qui permet d'obtenir ceci :
Vous pouvez constater que pendant 12 mesures, mon processeur est en train de passer un mauvais quart d'heure.

Cela montre que mes sauvegardes automatiques ne sont pas encore achevées à cet instant. 3 mesures plus tard, on remarque une forte activité du réseau ; là, on remarque que mon serveur envoie les sauvegardes sur une autre machine, puis le calme plat.
Donc ça, c'était le code de base pour bien traiter les données. Ainsi, en développant un peu plus, il est intégrable sur votre panneau d'administration de votre site ou votre application PHP.
Par exemple sur mon site, voilà ce que ça donne :