O servidor da empresa precisa de monitoramento em tempo real e, quando o espaço do usuário está cheio, a operação falha ou quando a exceção do programa ocorre, são necessários lembretes em tempo real para facilitar o gerenciamento de rede e ajustes de programador, para que o sistema de monitoramento em tempo real é dividido em duas partes.
Parte 1: Monitoramento do sistema em tempo real (utilização da CPU, temperatura da CPU, tamanho total da memória, tamanho de memória usada)
Parte 2: Os alarmes em tempo real não são atualizados e em tempo real, para que eles possam usar o AJAX. E operações no sistema subjacente são geralmente concluídas pela JN. O tempo de execução é usado aqui.
* Obtenha informações de CPU e memória no sistema Linux * * * / public Final Class LinuxSystemTool { / ** * Obtenha memória por informações usadas * * @return int [] resultado * resultado.Length == 4; em t [0] = Memtotal; int [1] = memfree; int [2] = swaptotal; int [3] = swapFree; novo arquivo ("Proc/Meminfo"); while (str = b.readline ())! ()) Continue; = Integer.parseint (token.nextToken ()); Swaptotal: ")) resultado [2] = Integer.parseint (token.nextToken ()); else if (str.equalsigno recase (" swapfree: ")) resultado [3] = Integer.parseint (token.nextToken ())) Resultado de retorno; /proc/stat "); buffarredreader br = new buffarredreader (new inputStreamReader (new FileInpu tStream (file))); stringTokenizer token = new StringTokenizer (Br.readline ()); (token.nextToken ()); Thread.Sleep (1000); Token.NextToken (); (float) ((usuário2 + sys2 + nice2) - (usuário1 + sys1 + nice1)) / (float) ((user2 + nice2 + sys2 + indle2) - (user1 + nice1 + sys1 + indle1));
Aqui estão dois métodos, deixe -me explicar.
Método 1 arquivo "/proc/meminfo" contém informações de memória e trocar informações. Por exemplo:
$ cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 1057009664 851668992 205340672 0 67616768 367820800 Swap: 2146787328 164429824 198 2357504 MemTotal: 1032236 kB MemFree: 200528 kB MemShared: 0 kB
Dessa forma, você pode usar o método de interceptar seqüências para obter informações de memória Linux.
O método 2 contém informações da CPU no arquivo "/proc/stat". Cada carrapato de cada CPU é usado neste arquivo. Os seguintes números são: Usuário, Nice, Sys, Idle, Iowait. Algumas versões do kernel não têm o item do Iowait. Esses valores indicam onde cada tick da CPU é usado desde o início do computador. Por exemplo:
CPU0 256279030 0 11832528 1637168262
Ou seja, desde o início da CPU0, 256279030 ticks são usados para consumo de usuário e 11832528 é usado para o consumo de SYS. Portanto, se você deseja calcular a carga da CPU por unidade de tempo (por exemplo, 1s), você só precisará calcular a diferença entre os valores antes e depois de 1 segundo dividido pelo número de ticks por segundo.
OK, ainda resta temperatura da CPU, como fazer isso?
Provavelmente é assim:
Temperatura: 68c
Mas nem toda máquina Linux possui esse THM. Leia este arquivo, acredito que todos farão o seguinte, basta ler o conteúdo e depois dividir a string para obter isso 68. OK, todas as informações básicas do sistema são concluídas e, em seguida, há apenas uma coisa agora, que agora, que é é para usá -lo, o AJAX chama essa classe para obter informações básicas e depois retornar à página.
A seguir, o efeito do monitoramento do sistema.
Neste ponto, a primeira parte da parte de monitoramento do sistema foi concluída.
1. A temperatura e a CPU excedem o valor nominal precisa ser alertado
2. O sistema operacional do usuário falha e o espaço de armazenamento do usuário é insuficiente. Salvo no banco de dados.
3. Os alarmes precisam ser em tempo real. Da lista de avô onde data> new Date ()+ AjaxtaMe, mais tarde descobriu que o tempo é muito incorreto, atraso na rede, tempo de processamento do programa (informações da CPU usa a função do sono), etc. Você costuma achar que algumas informações de alarme são impiedosamente deixadas de lado, E, às vezes, há dados repetidos, então pensei em usar o ID. Os dados após esse ID (ou seja, digito o monitoramento dos dados mais recentes após o sistema) e a sessão salva o novo ID máximo. As informações podem ser garantidas como o mais recente quando o Ajax a buscar, e não há duplicação.
Crie a tabela `warnlist` (` id` bigint (20) não null auto_increment, `warnleave` tinyint (2) não nulo padrão '0', // Nível de alarme: a gravidade do alarme` fromguy` varchar (20) não nu Ll, // aviso `warncontent` Varchar (100) não nulo, // Alarme Conteúdo, como a taxa de uso da CPU, excede 80%` AvaliableValue` Varchar (12) NULL padrão, // valor autorizado como 85% `Warnvalue` Varchar (12) NULL padrão, // valor de alarme 80 `warntime` dateTime não null, // Tempo de alarme` Stackinfo` Varchar (255) NULL padrão, // Informações da pilha de exceção `Dealwith` tinyint (2) não n ull ' ', // Resultado do processamento' versão 'int (11) null padrão, // versão `organizerid` varchar (20) null padrão, // ID da organização` DES` Varchar (255) NULL, chave primária (`i d` )) MOTOR = Innodb Charset padrão = utf8;
Suponha que eu receba informações do sistema, então preciso escrever uma lógica, se (cputempature> 75c) ou se (cpuUserd> 80%) for gravada no banco de dados e, em seguida, consulte as informações de alarme maior que o ID máximo do Ajax Banco de dados enviado da última vez (se os seguintes erros ocorrerem durante esse período forem encontrados juntos: o espaço de armazenamento do usuário é insuficiente e o alarme de falha de operação comercial de nossa empresa, exceção etc.), loop em uma aula de análise XML, provavelmente o formulário é Ajax Retorna este XML para informações de extração de página
<swer Respons> <cpuused> 67 </ppuused> <cpteemp> 76 <cputeemp> <emoril> 1023422 </matemory> <freeMemory> 43244 </freememory> <wannlist> <arning> 2 </arnid> <war NCONTENT> Sistema Espaço insuficiente de armazenamento </vernningContent> <fuguy> kakaluyi </fuguy> ...... </wanrlist> <vernninglist> <arnid> 3 </vernid> <venningContent> A temperatura da CPU é muito alta </arningcontent> <doguy > Sistema </fuguy> <rorgid> Sistema </ orgid> <arnningValue> 78 </arnningValue> ............ </ warninglist> ..... ...
O código de exibição das informações do sistema está relacionado à figura acima:
var cpuUsed = req .Responsexml.getElementsByTagName ('cpuUsed') [0] .FirstChild.NodEvalue; getElementsByTagName ('Freemory') [0] .Firstchild.NodEvalue; ') .innerhtml = totalMemory;
Uso da CPU do servidor:
</td> <td class = "text"> <font color = "#ff0000" size = "+2"> <etiqueta id = "cpuUsed"> </creat> </font> <limiar pré-determinado do alarme: 80 %> </td> </tr> .........
Depois, há o problema da exibição da página.
var comprimento = req.Responsexml.getElementsByTagName ('WarnList') .Length; +comprimento-1> 50) // Se for superior a 50 itens, procure a tabela da lista de alarme, obtenha o nó filho das informações do alarme e exclua as informações mais antigas de alarme {var tbody = document.getElementsByTagName ('Tabela') [4] .ChildNodes [0]; ;
Em seguida, insira uma nova mensagem de alarme.
para (var i = 0; i <comprimento; i ++) {var onewarnList = req.Responsexml.getElementsByTagName ('warnlist') [i] .childnodes; Leave = "Alarm de nível corporativo"; = OneWarnList [3] .Firstchild.NodEvalue; [6]. 'Warntable'); } x ++; (' innerhtml = de; CreateElement (TD '); .innerhtml = '<font color = "#ff0000">' + warnvalue + '</font>'; tt d6.innerhtml = tempo de aviso; = Document.CreateElement ('TD');
Ok, tudo está feito, o seguinte é o efeito final