Назад | Перейти на главную страницу

Nagios и температура

В настоящее время я использую Nagios 3 в Linux, а клиенты Windows используют NSClient ++. Клиенты Windows (8) будут помещены в жаркую влажную среду. У меня есть все основные проверки ЦП, ОЗУ и т. Д. Под Nagios. Но мне нужно найти способ контролировать температуру процессора, а затем передавать эти значения обратно на сервер Linux. Я видел несколько решений, но они расплывчаты. На всех машинах с Windows есть MOBO Supermicro. Любой совет будет принят во внимание.

В Linux есть инструмент для считывания датчиков температуры / напряжения / вентилятора под названием lm-sensor. Вы можете просто создать сценарий bash, который будет получать информацию от датчиков. Кроме того, есть также скрипт Perl, который сделает эту работу за вас, пожалуйста, проверьте это затыкание но сначала нужно установить lm-сенсоры.

Я не уверен в мониторинге ЦП, но вам также следует посмотреть на получение мониторинга окружающей среды в любом месте, где вы размещаете этот сервер. Это позволит вам лучше понять, что происходит в пространстве, и иметь больше проверок, кроме только температуры процессора.

http://nagios.org/products/environmental/

Если у вас есть карта SuperMicro IPMI, джентльмен здесь написал плагин Nagios для запроса этих показателей к интерфейсу IPMI.

#!/usr/bin/php -q
<?
/*
* check_ipmi for checking Supermicro IPMI on remote machine
* Gary Stimson 28aug2006
*/

$sIpmiTool = '/usr/bin/ipmitool';

if ($argc!=4)
{
print "Usage: ".$argv[0]." user password host\n";
exit(3);
}

$sUser = $argv[1];
$sPass = $argv[2];
$sHost = $argv[3];

$rExec = 0;
$aChassisLines= array();
$sCmd = "$sIpmiTool -U $sUser -P $sPass -H $sHost chassis status";
$s = exec($sCmd, &$aChassisLines, &$rExec);
if ($rExec)
{
print "Warning: Error running ipmitool command: $sCmd:" . implode("\n",$aChassisLines) . "\n";
exit(1);
}

$aChassisStatus=array();
foreach($aChassisLines as $sLine)
{
$aMatch = array();
if (preg_match('/(.*): (.*)/', $sLine, $aMatch))
{
$aChassisStatus[trim($aMatch[1])] = $aMatch[2];
}
}
if (count($aChassisStatus) < 8)
{
print "CRITICAL: Could not parse output from chassis list.";
exit(2);
}


if ($aChassisStatus['System Power'] != 'on')
{
print "OK: Switched off";
exit(0);
}

$iR = 0;
$asR = array();

$aChassisChecks = array('Power Overload', 'Main Power Fault', 'Power Control Fault', 'Drive Fault', 'Cooling/Fan Fault');
foreach ($aChassisChecks as $sCheck)
{
if ($aChassisStatus[$sCheck] != 'false')
{
$iR = 2;
$asR[] = $sCheck;
}
}


$rExec = 0;
$aSDRLines = array();
$sCmd = "$sIpmiTool -U $sUser -P $sPass -H $sHost sdr list";
$s = exec($sCmd, &$aSDRLines, &$rExec);
if ($rExec)
{
print "Warning: Error running ipmitool command: $sCmd:" . implode("\n",$aSDRLines) . "\n";
exit(1);
}

if (count($aSDRLines) < 10)
{
$iR = 2;
$sR = "Could not get sdr list. Machine uncontactable or other fault.";
}

$bParseErrorDone = false;
foreach($aSDRLines as $sLine)
{
$aFields = explode('|',$sLine);
if (count($aFields) < 3)
{
continue;
}

$sCaption = trim($aFields[0]);
$sDetail = trim($aFields[1]);
$sStatus = trim($aFields[2]);

// Power supply always seems to have 'cr' status so omit it from this check
// It is checked by the chassis check anyway
// Ignore Intrusion as well.
if ($sCaption != 'Power Supply' && $sCaption != 'Intrusion' && $sStatus != 'ok')
{
$iR = 2;
$asR[] = "$sCaption status '$sStatus': $sDetail";
}
}

$sR = implode('; ', $asR);
switch($iR)
{
case 0:
print "OK\n";
exit(0);
case 1:
print "Warning: $sR\n";
exit(1);
case 2:
print "CRITICAL: $sR\n";
exit(2);
}

?>