ГлавнаяРегистрацияВходВ закладки

Главная » Статьи » CentOS » Мониторинг
Мониторинг сайтов на PHP
Есть немало услуг, таких как мониторинг хост 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  = "[email protected]"; // мыло куда будет кидаться письмо,
// в данном случае смс
$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);
}

?>
[-hide-]
Просмотров: 3721
Дата: 2011-07-14 00:42:45
Комментариев: 0
Источник: