Скрипт для проверки загрузки сервера и уведомления при повышенной нагрузке на CPU
Размещено 2010-03-20
в разделе Администрирование | Метки:
PHP, Linux
Сегодня от хостера письмо свалилось, что они вынуждены были прибить мой скрипт, т.к. нагрузка превысила 90% в течении 30 минут, в общем я решил написать скрипт, который сам меня будет уведомлять если загрузка превышает к примеру 20%, при этом еще будет показывать список процессов запущенных в данный момент. Скрипт актуален для shared хостинга в основном.
<?php
#!/usr/local/bin/php
<?php
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR .
realpath(dirname(__FILE__)) . '/../Zend/library/'
);
setlocale(LC_ALL, 'ru_RU.UTF-8');
date_default_timezone_set('Europe/Moscow');
require_once('Zend/Loader/Autoloader.php');
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('App_');
$loader->setFallbackAutoloader(true);
$loader->suppressNotFoundWarnings(false);
$emailConfig = array(
'auth' => 'login',
'username' => 'noreply@myhost.ru',
'password' => 'topsecret',
'port' => 587,
'ssl' => 'tls',);
$notificationEmail = 'someemail@email.com';
$smtpHost = 'smtp.gmail.com';
$transport = new Zend_Mail_Transport_Smtp($smtpHost, $emailConfig);
function sendMail($to, $subject, $body, $transport)
{
$mail = new Zend_Mail('utf-8');
$mail->setBodyHtml($body);
$mail->setFrom('noreply@myhost.ru');
$mail->addTo($to);
$mail->setSubject($subject);
$mail->send($transport);
}
exec('whoami', $output);
$username = $output[0];
$output = array();
exec("ps -o pcpu -u $username | grep -v CPU", $output);
foreach ($output as $value)
{
$cpuLoad += $value;
}
$output = array();
if ($cpuLoad > 20)
{
exec("ps -o pcpu,user,pid,fname,args -u $username", $output);
$emailText = implode("\n", $output);
sendMail($notificationEmail, "CPU load on $username is over 20%", $emailText, $transport);
}
?>