Kan ook, nadeel is dat je iets op de client server nodig hebt.
En dat wilde ik omzeilen omdat ik ook switches e.d. wil monitoren.
Likes: 0
Kan ook, nadeel is dat je iets op de client server nodig hebt.
En dat wilde ik omzeilen omdat ik ook switches e.d. wil monitoren.
als de master geen info krijgt van de client controleert hij ook poorten.
Een simpele check of hij offline/online is, dat is zo gebouwd(heb je al gedaan). Maar bij serverbeheer is die extra info ook van belang.
Wat is gangbaar bij dit soort systemen?
dat is wat ik tot nu toe had, het moet nog even omgezet worden naar XML.Code:<?php $key = '12345'; $master_domain[1] = 'www.domain.nl'; $master_url[1] = 'http://www.domain.nl/receive.php'; $master_domain[2] = 'www.domain2.nl'; $master_url[2] = 'http://www.domain2.nl/receive.php'; //status.php -- very simple server status monitor $output = ''; //Get and display load average times 3 $load = sys_getloadavg(); $output .= ' LoadAverage1: '.$load[0].' LoadAverage5: '.$load[1].' LoadAverage15: '.$load[2]; //Get and display all sorts of memory usage info $output .= ' '.join('', file('/proc/meminfo')); //Get and display disk usage percentages $df = `/bin/df`; foreach(split("\n", $df) as $line) { if(preg_match( "/(\d+%)\s+(\S+)$/", $line, $matches)) { $fs = $matches[2]; $usage = $matches[1]; $output .= ' Usage_'.$fs.': '.$usage; } } # Count running processes $procs = `/bin/ps -e|wc -l`; $output .= ' RunningProcesses: '.$procs; if(fsockopen($master_domain[1],80,$error1,$error2,5)) { $ch = curl_init($master_url[1]); } elseif(fsockopen($master_domain[2],80,$error1,$error2,5)) { $ch = curl_init($master_url[2]); } curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, 'key='.$key.'&date='.time().'&output='.$output); curl_exec($ch); if(curl_errno($ch)) { echo curl_error($ch); } else { curl_close($ch); } echo $output; ?>
Wie weet kunnen we hier zo iets leuks mee maken met z'n allen?Code:<?php if(!empty($_POST['key']) && !empty($_POST['date']) && !empty($_POST['output'])) { // zet de post info in de database } ?>
Laatst gewijzigd door eweps; 21/07/09 om 14:36.
Mischien is een WHT monitoring script wel wat. Als iedereen met wat ideeën komt en stukjes code post kunnen we mischien wel tot iets komen?
Ik ben er alleen nog niet uit hoe de structuur van de database moet worden. Iemand met ideeen?Code:<?php if(!empty($_POST['key']) && !empty($_POST['date']) && !empty($_POST['output'])) { // verwerk de input $input = $_POST['output']; // check de key van de client server, matcht deze ook het server ip? // haal ip en poort info op uit de database $poort[0] = 80; // controleer de client server op gewenste poorten for($i=0; $i<count($poort); $i++) { if(fsockopen($ip,$poort,$error1,$error2,5)) { $status[$poort[$i]] = 1; } else { $status[$poort[$i]] = 0; } } // zet alle verkregen info in de database } ?>
De status pagina op de client geeft ongeveer de volgende info terug (voorbeeld):
Code:LoadAverage1: 0.59 LoadAverage5: 0.4 LoadAverage15: 0.29 MemTotal: 2021816 kB MemFree: 337592 kB Buffers: 35408 kB Cached: 286676 kB SwapCached: 3152 kB Active: 1115608 kB Inactive: 102288 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 2021816 kB LowFree: 337592 kB SwapTotal: 4192956 kB SwapFree: 4185596 kB Dirty: 304 kB Writeback: 0 kB AnonPages: 893740 kB Mapped: 119900 kB Slab: 256036 kB PageTables: 21240 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 5203864 kB Committed_AS: 1433344 kB VmallocTotal: 34359738367 kB VmallocUsed: 280284 kB VmallocChunk: 34359458043 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB Usage_/: 48% Usage_/var: 9% Usage_/tmp: 1% Usage_/dev/shm: 0% Usage_/export/people: 16% Usage_/home/bsm: 79% Usage_/LINUX/local64: 94% Usage_/cath/opt: 13% Usage_/cath/svnbin: 23% Usage_/nfs/mail: 82% Usage_/LINUX/local: 89% RunningProcesses: 149
Ik heb de komende dagen geen tijd meer om hiermee verder te gaan, zal wel dit topic in de gaten houden. Mocht iemand anders verder willen gaan met mijn opbouw, graag. Dan maken we er gewoon een open source server status script van.
Dus plaats je ideeën, meningen, stukjes code!
voor de mensen die Nagios draaien, het is niet zo al te moeilijk om een php ding te maken wat de status-log van nagios inleest.. beetje Ajax er omheen en het ziet er nog leuk uit
Ik ben niet zo`n PHP scripter, anders zou ik graag helpen met een WHT NOC script.
@eweps: Ik zou zelf de poorten / services in een andere tabel doen dan de servers / switches e.d. Dan vervolgens poorten koppelen en weer laten geven.
Dat sowieso,
we krijgen de volgende info:
- gebruikersgegevens, email en sms nummer
- servers
- poorten, gekoppeld aan de server
- status van de poorten
- geheugen, hdd ruimte, etc
maar er moet natuurlijk ook een archief aangelegd worden.
Ik hoop dat er nog wat meer mensen met input komen.
Ik heb een NOC scriptje het maken wat via meerdere servers cheakt.
Zo kan je vanaf meerdere netwerken controleren. Indien de server op meerdere netwerken offline is stuurt hij pas een SMSje. Na 10 minuten wordt er een herinnering SMS verzonden.
D.m.v. een bash script (wget) wordt er elke 5 minuten de volgende informatie naar de server verstuurd:
- Aantal processen
- Uptime
- Geheugen
- Vrij geheugen
- Swap
- Vrije swap
- Load 1,5 & 15 minuten
- Harddisk 1 & 2 ruimte
- Harddisk 1 & 2 bezet
Alles weergeven in grafieken met een logboek om terug te kijken. Grafieken worden gemaakt met pChart (http://pchart.sourceforge.net)
Grafieken wil ik eigelijk op de manier als Cacti gaan doen. Moet alleen nog even kijken hoe ik dat ga doen.

Ziet er netjes uit Dennis!
Als ik kijk in de database van IBM Tivoli MOnitoring dan werken die veel met aggregatie (instelbaar). Data van laatste 24 uur bijv wordt ruw in de DB gezet, daarna geaggregeerd per 5 minuten/uur/dag/week/maand etc.
DB Structuur zou ik flexibel houden en dus in de vorm van:
Server-ID
Label
Waarde
Timestamp
en als je dat dan combineert met aggregatie van je velden dan hou je de DB ook een beetje beheersbaar.
Precies, dus in plaats van hdd ruimte als veld aan te maken, gewoon een record met labelnaam: hdd ruimte.
Dennis, kun je de code alvast delen? En je haalt dus middels wget een pagina op op de client?
Ik maak eerst nog even wat aanpassingen. Morgen probeer ik de code te posten.
De client roept dmv een cron een bash script aan. In het bash script staat een wget regel welke een url aanroept met de gegevens erin. De URL (het bestandje op de master server) zet het in de database.
Dan kun je beter curl gebruiken in plaats van wget? via wget is niet echt veilig, omdat je dan die url zelf ook kunt intypen.
Zie mijn script voor curl, met POST en op de master kun je dan ook op de key en ip controleren.
Wel erg leuk dat je er al zo ver mee bent. Heb je hem ook gemaakt met controles zoals in mijn idee beschreven? Als er geen info binnen komt, de master zelf laten controleren?