Мониторинг сайтов на PHP
Автор: admin Раздел: Мониторинг
Есть немало услуг, таких как мониторинг хост Trekker и т.д. Является примером системы мониторинга Munin, Zabbix, MRTG и т.д. Но в этой очень информационной статье немного о другом.
На просторах рунета был обнаружен скрипт, написанный на PHP, веб-сайт мониторинг доступности через HTTP, если не доступа к сайту, посылает письмо по электронной почте или SMS на мобильные. Создайте папочку в нее положить сценарий и создать новую папочку вместе cashe, он создает файлик domains.txt будет хранить список проверяемых страниц сайта или домена страниц. Адрес сайта без http://. Кроме того, целесообразно оставить в той же папке. Htaccess файлик с содержимым отрицать не все. Остальные файликы будут созданы автоматически при первом запуске скрипта. Вот собственно PHP скрипт: [-hide-] Code: <?php set_time_limit(0); ignore_user_abort(); ini_set('display_errors',1); ini_set("error_reporting", E_ALL); $PID = getmypid(); $cachedir = "caсhe"; // папка в которой лежат файликы с данными, сюда же // будет складываться лог опроса страничек $mailto = "admin@my-poshta.com"; // мыло куда будет кидаться письмо, // в данном случае смс $subject = "allert"; // тема письма $message = ""; $arr = file("./$cachedir/domains.txt"); // файлик с доменами которые нужно // контролировать $buf = file_get_contents("./$cachedir/states.txt"); // сюда кидаем текущее // состояние сайтов if (strlen($buf)>5) { $states = unserialize($buf); } foreach ($arr as $ar) { $domain = trim($ar," \r\n\t"); if (empty($domain)) continue; if (!isset($states[$domain])) $states[$domain]=0; $url = "http://".$domain."/"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $buf = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); tolog("log", $url."\t".$http_code); if ($states[$domain]!=$http_code) { tolog("fail", $url."\t".$states[$domain]."=>".$http_code); $message.= $url."\n".$states[$domain]."=>".$http_code."\n"; $states[$domain] = $http_code; } } file_put_contents("./$cachedir/states.txt", serialize($states)); if (!empty($message)) mail($mailto, $subject, $message); function tolog($filename, $str) { global $PID, $cachedir; $fp = fopen("./$cachedir/".$filename.".log","a+"); fwrite($fp,$PID."\t".date("d.m.Y")." ".strftime("\t%H:%M:%S"."\t")); fwrite($fp,"$str\n"); fclose($fp); } ?> |