Le serveur de l'entreprise a besoin d'une surveillance en temps réel, et lorsque l'espace utilisateur est plein, l'opération échoue, ou lorsque l'exception du programme se produit, des rappels en temps réel sont nécessaires pour faciliter la gestion du réseau et les ajustements du programmeur, de sorte que le système de surveillance en temps réel est divisé en deux parties.
Partie 1: Surveillance du système en temps réel (utilisation du processeur, température du processeur, taille totale de la mémoire, taille de la mémoire utilisée)
Partie 2: Les alarmes en temps réel ne sont pas rafraîchies et en temps réel, ils ne peuvent donc utiliser AJAX. et les opérations sur le système sous-jacent sont généralement terminées par JN. .
* Obtenez des informations CPU et mémoire sous le système Linux * * * / / public Final Class LinuxSystemTool {/ ** * Obtenez la mémoire par des informations utilisées * * @return int [] result * result.length == 4; in t [0] = Memtotal; int [1] = memfree; int [2] = swaptotal; int [3] = swapfree; * @throws ioException * @Throws InterruptedException * / public static int [] get meminfo () lance ioException, InterruptedException {fichier File = Nouveau fichier ("/ proc / meminfo"); while (Str = br.readline ())! = null) {token = new StringTokenizer (str); ()) Continuer; if (Str.EqualSignoreCase ("MemTotal:")) Result [0] = Integer.ParseInt (token.nextToken ()); = Integer.ParseInt (token.NextToken ()); else if (str.equalsignorecase ("memfree:")) Swaptotal: ")) Result [2] = Integer.ParseInt (token.nextToken ()); else if (str.equalsigno recase (" swapfree: ")) result [3] = Integer.parseint (token.nextttoken ()) ; / proc / stat "); bufferedReader br = new BufferedReader (new inputStreamReader (new FileInpu tSTResam (file))); stringTokenizer token = new StringTokenizer (br.readline ()); token.nextToken (); int user1 = Integer.Parseint (token.NextToken ()); int Nice1 = Integer.ParseInt (token.nextToken ()); ; token.nextToken ()); int Nice (float) ((user2 + sys2 + nice2) - (user1 + sys1 + nice1)) / (float) ((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1));
Voici deux méthodes, permettez-moi de l'expliquer.
Méthode 1 Le fichier "/ proc / meminfo" contient des informations mémoire et échangez des informations. Par exemple:
$ cat / proc / meminfo Total: Utilisé: gratuit: partagé: tampons: Cached: MEM: 1057009664 851668992 205340672 0 67616768 367820800 Swap: 2146787328 164429824 198 2357504 MEMTOTAL: 1032236 KB MEMFREA
De cette façon, vous pouvez utiliser la méthode d'interception des chaînes pour obtenir des informations de mémoire Linux.
La méthode 2 contient des informations CPU dans le fichier "/ proc / stat". Chaque tick de chaque CPU est utilisée dans ce fichier. Les numéros suivants sont: utilisateur, sympa, sys, inactif, iowait. Certaines versions du noyau n'ont pas l'élément iowait. Ces valeurs indiquent où chaque tique du CPU est utilisée à partir du début de l'ordinateur. Par exemple:
CPU0 256279030 0 11832528 1637168262
Autrement dit, depuis le démarrage de CPU0, les tiques 256279030 sont utilisées pour la consommation d'utilisateurs et 11832528 est utilisé pour la consommation SYS. Donc, si vous souhaitez calculer la charge du CPU par unité de temps (par exemple, 1s), vous n'avez qu'à calculer la différence entre les valeurs avant et après 1 seconde divisée par le nombre de tiques par seconde.
Ok, il reste encore une température du processeur, comment faire?
C'est probablement comme ça:
Température: 68c
Mais toutes les machines Linux ont ce THM. Lisez ce fichier, je crois que tout le monde fera ce qui suit, il suffit de lire le contenu, puis de diviser la chaîne pour obtenir ce 68. OK, toutes les informations de base du système sont terminées, et ensuite OK, il n'y a qu'une seule chose maintenant, qui, qui est de l'utiliser Ajax appelle cette classe pour obtenir des informations de base, puis revient à la page.
Ce qui suit est l'effet de la surveillance du système.
À ce stade, la première partie de la partie de surveillance du système est terminée.
1. La température et le processeur dépassent la valeur nominale doit être alertée
2. Le système d'exploitation de l'utilisateur échoue et l'espace de stockage de l'utilisateur est insuffisant. Enregistré dans la base de données.
3. Les alarmes doivent être en temps réel. à partir de WarningList où la date> Nouvelle date () + ajaxtime, a constaté plus tard que l'heure est très incorrecte, le retard du réseau, le temps de traitement du programme (les informations CPU utilisent la fonction de sommeil), etc. Vous constatez souvent que certaines informations d'alarme sont impitoyablement lâchées, Et parfois, il y a des données répétées, j'ai donc pensé à utiliser l'ID. Les données après cet ID (c'est-à-dire, j'entre la surveillance des dernières données après le système) et la session enregistre le nouvel ID maximum. Les informations peuvent être garanties pour être la dernière lorsque Ajax la récupère, et il n'y a pas de duplication.
Créer la table `WarnList` (` id` bigInt (20) pas null auto_increment, `warnleave` tinyint (2) pas null par défaut '0', // niveau d'alarme: la gravité de l'alarme` de varchar (20) pas nu Ll, // avertissement `WarnContent` varchar (100) pas null, // contenu d'alarme, tel que le taux d'utilisation du processeur dépasse 80%` AVILIBLEVALUE` VARCHAR (12) Null par défaut, // Valeur autorisée telle que 85% `Warnvalue` varChar (12) par défaut NULL, // Valeur d'alarme 80 `WARNTIME` DateTime Not Null, // Time d'alarme` StackInfo` varchar (255) Null par défaut, // Exception Informations de pile`dealwith` Tinyint (2) pas n ull par défaut '0 ', // Traitement Résultat `version` int (11) par défaut null, // version` OrganizerId` varchar (20) par défaut null, // id d'organisation `Des` varchar (255) par défaut null, clé primaire (` i d ` )) Moteur = innodb Charset par défaut = utf8;
Supposons que j'obtienne des informations du système, alors j'ai besoin d'écrire une logique, if (cPuterEmpature> 75c) ou if (cpuuserd> 80%) est écrite dans la base de données, puis interroge les informations d'alarme supérieures à l'ID maximum de l'AJAX La base de données envoyée la dernière fois (si les erreurs suivantes se produisent au cours de cette période sont trouvées ensemble: l'espace de stockage de l'utilisateur est insuffisant et l'alarme de défaillance de l'entreprise de notre entreprise, l'exception, etc.), Loop dans une classe d'analyse XML, le formulaire est probablement Ajax Renvoie ce XML pour les informations d'extraction de page
<SpeppS> <CPUUsed> 67 </cpuused> <cPuterMp> 76 <CPondEMP> <Memory> 1023422 </ Memory> <FreeMemory> 43244 </ FreeMemory> <Wannlist> <Verning> 2 </ Warnid> <War ncontent> System System Storage Space insuffisant </ WarningContent> <FromGuy> Kakaluyi </ FromGuy> ...... </wanrlist> <WarningList> <Ande > Système </ FromGuy> <Orgid> Système </GRID> <ArningValue> 78 </varningValue> ............ </varningList> ..... ... </ponse>
Le code d'affichage des informations système est lié à l'image ci-dessus:
var cpuused = req .Responsexml.getElementsByTagName ('cpuused') [0] .FirstChild.Nodevalue; GetElementsByTagname («FreeMemory») [0]. ') .Innerhtml = TotalMemory;Utilisation du processeur du serveur:
</td> <td class = "text"> <font color = "# ff0000" size = "+2"> <label id = "cpuused"> </ label> </font> <Alarme Seuil prédéterminé: 80%> </td> </tr> .........
Ensuite, il y a le problème de l'écran de la page.
var longueur = req.Responsexml.getElementsByTagName ('warnlist') .length; + longueur-1> 50) // s'il est supérieur à 50 éléments, recherchez le tableau de la liste des alarmes, obtenez le nœud enfant des informations d'alarme, puis supprimez les informations d'alarme les plus anciennes {var tbody = document.getElementsByTagName ('Table') [4] .ChildNodes [0]; pour (var i = 1; i <trlength + longueur-50; i ++) {var tr = tbody.childNodes [i]; ;
Insérez ensuite un nouveau message d'alarme.
pour (var i = 0; i <longueur; i ++) {var onewarnList = req.Responsexml.getElementsByTagName ('Warnlist') [i] .ChildNodes; LEART = ALARME ENTERPRISE ";} else {var Leave =" Alarme de niveau de l'opérateur ";} var from = onewarnlist [1]. = onewarnlist [3]. [6]. 'warntable'); } x ++; (td '); Innerhtml = CreateElement (TD '); .Innerhtml = '<font color = "# ff0000">' + warnvalue + '</font>'; TT D6.Innerhtml = Temps d'avertissement; Tr.APPEDCHILD (TD6); = Document.CreateElement (TD ');
Ok, tout est fait, ce qui suit est l'effet final