회사의 서버는 실시간 모니터링이 필요하며 사용자 공간이 가득 찬 경우 작동이 실패하거나 프로그램 예외가 발생하면 실시간 모니터링 시스템이 실시간 모니터링 시스템을 조정하려면 실시간 알림이 필요합니다. 두 부분으로 나뉩니다.
1 부 : 실시간 시스템 모니터링 (CPU 활용, CPU 온도, 총 메모리 크기, 중고 메모리 크기)
2 부 : 실시간 경보는 실시간으로 사용되지 않으므로 AJAX 프레임 워크 만 사용하지 않습니다. 그리고 기본 시스템의 작업은 일반적으로 JN에 의해 완료되므로 Windows 아래에서 명령 줄을 사용하여 얻을 수 없지만 서버 시스템은 Linux를 사용하여 JNI를 호출하지 않고 시스템 정보를 얻을 수 있습니다. .
* Linux 시스템에서 CPU 및 메모리 정보를 가져옵니다 * * * / public final class linuxsystemtool { / ** * 사용 된 정보로 메모리 가져옵니다 * * @return int [] result * result.length == 4; t [0] =. memtotal; int [1] = memfree; int [2] = swaptotal; int [3] = swapfree; 새 파일 ( "/proc/meminfo"); (str = br.readline ()! = null) {token = if (! token.hasmoretokens ()); ()) 계속; str.equalsignorecase ( "memtotal :")) 결과 [0] = integer.parseint (token.nexttoken ()); = integer.parseint (token.nexttoken ()); swaptotal : ")) result [2] = integer.parseint (token.nexttoken ()); else if (str.equalsigno recase ("swapfree : ")) result [3] = integer.parseint (token.nextToken ()) } return result} / ** * 사용 정보를 얻습니다. /proc/stat "); bufferedReader br = new bufferedReader (new inputStreamReader (new inputStreamReader (new FileInpu tstream (file)); StringTokenizer token = new StringTokenizer (br.readline ()); token.nextToken (); int user1 = integer.parseint (token.nextToken ()); STREAD.SLEAP (1000); token.nexttoken ()) inte2 = token.nexttoken (); (float) ((user2 + sys2 + nice2) - (user1 + sys1 + nice1) / (float) ((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1);
다음은 두 가지 방법이 있습니다. 설명하겠습니다.
메소드 1 파일 "/proc/meminfo"에는 메모리 정보가 포함되어 있으며 정보를 스왑합니다. 예를 들어:
$ cat /proc /meminfo 총 : 중고 : 무료 : 공유 : 버퍼 : 캐시드 : MEM : MEM : 1057009664 851668992 205340672 0 67616768 367820800 스왑 : 2146787328 164429824 198 2357504 memtot : 103236 KB KB :
이러한 방식으로 문자열을 가로 채는 방법을 사용하여 Linux 메모리 정보를 얻을 수 있습니다.
방법 2는 "/proc/stat"파일에 CPU 정보를 포함합니다. 각 CPU의 모든 진드기는이 파일에 사용됩니다. 다음 숫자는 사용자, NICE, SYS, TIDLE, IOWAIT입니다. 일부 버전의 커널에는 Iowait 항목이 없습니다. 이 값은 컴퓨터의 시작부터 CPU의 각 진드기가 사용되는 위치를 나타냅니다. 예를 들어:
CPU0 256279030 0 11832528 1637168262
즉, CPU0이 시작된 이래로 256279030 개의 진드기가 사용자 소비에 사용되며 11832528은 SYS 소비에 사용됩니다. 따라서 단위 시간당 CPU로드 (예 : 1S)를 계산하려면 1 초 전과 후 값의 차이를 초당 진드기 수로 나눈 값 만 계산하면됩니다.
자, 여전히 CPU 온도가 남아 있습니다. "Cat/Proc/Acpi/Thermal_Zone/Thm/Linder"를 찾았습니다.
아마도 다음과 같습니다.
온도 : 68c
그러나 모든 Linux 머신 에이 THM 이이 파일을 사용하여 inputStreamReader (새 파일 ( "/proc/acpi/thermal_zone/thm/lestring")을 사용해야합니다 이 파일을 읽으십시오. 모든 사람이 다음을 수행하고, 콘텐츠를 읽은 다음 문자열을 나누어이 68을 얻을 것이라고 생각합니다. Ajax는이 클래스를 호출하여 기본 정보를 얻은 다음 Ajax 사용을 반복하지 않습니다.
다음은 시스템 모니터링의 효과가 몇 초마다 Linux로 이동하여 JSP 페이지에 표시됩니다.
이 시점에서 시스템 모니터링 부분의 첫 번째 부분이 완료되었습니다.
1. 온도와 CPU가 등급 값을 초과하여 경고해야합니다.
2. 사용자의 운영 체제는 실패하며, 사용자의 스토리지 공간은 충분하지 않습니다. 데이터베이스에 저장된 경우 사용자가 작업 중에 이러한 오류를 트리거 한 다음 실시간으로 모니터링 한 다음 정보를 검색합니다.
3. 알람은 실시간이어야합니다. 따라서 현재 시간과 미래의 데이터를 확인하면 현재 시간을 사용하여 Ajax를 추가하여 선택 *을 선택하십시오. 경고 목록에서 날짜> 새 날짜 ()+ ajaxtime에서 나중에 시간이 매우 부정확 한 네트워크 지연, 프로그램 처리 시간 (CPU 정보는 수면 기능을 사용) 등을 발견했습니다. 종종 일부 경보 정보가 무자비하게 놓아지는 경우가 종종 있습니다. 그리고 때로는 반복 데이터가 있으므로 Alarm 시스템을 입력 할 때마다 최대 경보 ID를 확인한 다음 AJAX가 데이터베이스에서 알람 정보를 가져 오면 확인합니다. 이 ID 이후의 데이터 (즉, 시스템 후 최신 데이터 모니터링을 입력하고 세션은 다음에 최대 ID를 저장합니다. Ajax가 가져올 때 정보가 최신 정보를 보장 할 수 있으며,이를 매우 좋지 않습니다!
테이블 만들기`warnlist` (`id` bigint (20)는 null auto_increment,`warnleave` tinyint (2) not null default '0', // 알람 레벨 : 알람의 심각도 '에서 varchar (20)가 아닙니다. ll, // 경고`warncontent` varchar (100) null, // cpu 사용률과 같은 경보 콘텐츠는 80% 초과`aviliablevalue` varchar (12) 기본 null, // 85%`warnvalue` varchar와 같은 승인 값 (12) 기본 NULL, // 경보 값 80`WARNTIME 'DATETIME NOT NULL, // ALARM TIME`STACKINFO` VARCHAR (255) DEFAULT NULL, // 예외 스택 정보'TINYINT (2) NOT NOT DEFAULT '0 ', // 처리 결과'버전 'int (11) 기본 null, // 버전`oragizerId` varchar (20) 기본 null, // 조직 ID` des` varchar (255) 기본 널, 기본 키 (`i d` )) 엔진 = innodb 기본 charset = utf8;
시스템에서 정보를 얻은 다음 (Cputempature> 75c) 또는 IF (CPUUSERD> 80%)가 데이터베이스에 기록 된 다음 AJAX의 최대 ID보다 더 큰 알람 정보를 쿼리해야한다고 가정합니다. 지난 시간에 보낸 데이터베이스 (이 기간 동안 다음 오류가 함께 발생하는 경우 사용자의 저장 공간이 충분하지 않으며 회사의 비즈니스 운영 실패 경보, 예외 등), XML 구문 분석 클래스로의 루프, 아마도 양식은 Ajax 일 것입니다. 페이지 추출 정보에 대해이 XML을 반환합니다
<respone> <cpuused> 67 </ cpuused> <cputemp> 76 <CPUTEMP> <Memory> 1023422 </ memory> <Freememory> 43244 </ freememory> <Wannlist> <aing> 2 </ warnid> <war ncontent> 시스템 저장 공간이 충분하지 않은 공간 </ ranconcontent> <fromguy> kakaluyi </ fromguy> ...... </ wanrlist> <aLactList> <aWarnid> 3 </ warnid> <AlantainContent> CPU 온도가 너무 높아 </ warlyContent> <fromguy > System </ fromguy> <Orgid> System </ orgid> <경고 value> 78 </ rantanvalue> ............ </ warlistlist> ..... ... ... </ response>
시스템 정보의 디스플레이 코드는 위의 그림과 관련이 있습니다.
var cpuused = req .responsexml.getEmentsByTagName ( 'cpuused') [0] .firstchild.nodevalue; getElementsByTagName ( 'freememory') [0] .firstchild.nodevalue; req .responsexml.getElementsByTagName ( 'CPUTEMP') ').
서버 CPU 사용 :
</ td> <td class = "text"> <font color = "#ff0000"size = "+2"> <label id = "cpuused"> </ label> </ font> <알람 사전 결정된 임계 값 : 80 %> </ td> </ tr> .........
그런 다음 페이지 디스플레이의 문제가 있습니다.
var length = req.responsexml.getElementsByTagName ( 'WarnList'). if (length> 0) {var trlength = getElementsByTagName ( 'table') +길이 -1> 50) // 50 항목보다 큰 경우 알람 목록의 테이블을 찾아 알람 정보의 하위 노드를 가져온 다음 가장 초기 경보 정보를 삭제합니다 {var tbody = document.getElementsByTagname ( 'table') [4] .ChildNodes [0]; }
그런 다음 새 알람 메시지를 삽입하십시오.
for (var i = 0; i <length; i ++) {var onewarnlist = req.responsexml.getElementsByTagName ( 'warnlist') [i] .ChildNodes (onewarnList [0] .firstchil d.nodevalue == 0) {var LeaM = "Enterprise Level Alarm"} var var} var var [1] onewarnlist [3] .firstchild.nodevalue = onewarnlist [4] [6]. firstild.nodevalue == 0) {var dealwith = "var dealwith = 'red'> processed </font>"; 'warntable'); var tr = createelement ( 'tr'); } x ++. AppendChild (tr); ( 'td'); innerhtml = var td3 = 'td'); CreateElement ( 'TD'); .innerhtml = <font color = "#ff0000"> ' + WarnValue +'</font> '; tt d6. appendchild (td6); = CreateElement ( 'td');
좋아요, 모든 것이 완료되었습니다. 다음은 최종 효과입니다.