|
View previous topic :: View next topic |
Author |
Message |
bmekler
Joined: 17 Apr 2012 Posts: 38
|
Posted: Tue Apr 17, 2012 5:01 am Post subject: Monitor ESXi Free datastores |
|
|
I have a number of ESXi 4.1 Free servers at various locations where I'd like to monitor datastore utilization using HostMonitor RMA. This being ESXi, I can't install anything on the service console, and with the free version, I don't have access to SNMP. However, I can enable SSH access to console and run commands remotely. For instance, if I run the following command, I get a simple two-digit integer number that gives me utilization percentage of a specific datastore:
df | grep '4f460e19' | grep -o [0-9][0-9]% | grep -o [0-9][0-9]
Where '4f460e19' is the datastore ID.
Question is, how do I get the RMA to execute this command against ESXi host via SSH, and then evaluate the result against a specific value - for instance, raise alert if the value returned is higher than 80. Is it even possible? |
|
Back to top |
|
|
KS-Soft
Joined: 03 Apr 2002 Posts: 12795 Location: USA
|
Posted: Tue Apr 17, 2012 6:25 am Post subject: |
|
|
Quote from the manual
===============
Check for
SSH test allows you to check result of the command execution in 3 different ways:
1) ...
2) ...
3) Check for Shell Script result
HostMonitor checks output text for specially formatted result string. I.e. result of the command execution should follow the same rules as Shell Script
===============
Requirements to the script:
...
The script or external program must write to stdout (standard output stream) single result string. This string should contain 3 parts separated by colon (.
First obligatory part - marker "scriptres" tells to HostMonitor or RMA that this string is the result string.
...
Second obligatory part represents the test status, it can take one of the following values (case insensitive):
...
Third optional part contains Reply value, HostMonitor displays this value in Reply field, writes to log files, uses to displays charts (Log Analyzer), etc. If you want Log Analyzer to process Reply values correctly and display charts, use one of the following formats for Reply value:
- decimal_number (like "123", "0", "6456.45". as decimal separator use symbol that is specified on your system, usually a dot (.) or a comma (,))
- decimal_number + space + "Kb" (like "512 Kb", "64 Kb")
- decimal_number + space + "Mb" (like "1024 Mb", "5 Mb")
- decimal_number + space + "Gb" (like "12 Gb", "4 Gb")
- decimal_number + space + "%" (like "50 %", "99 %")
- decimal_number + space + "ms" (like "100 ms", "5400 ms")
In your case script should return string like
scriptres:Ok:50 %
or
scriptres:Bad:88 %
Please check the manual or help file for details
- SSH test
http://www.ks-soft.net/hostmon.eng/mframe.htm#tests.htm#chkssh
- Shell Script test
http://www.ks-soft.net/hostmon.eng/mframe.htm#tests.htm#chkShell
Regards
Alex |
|
Back to top |
|
|
bmekler
Joined: 17 Apr 2012 Posts: 38
|
Posted: Tue Apr 17, 2012 8:12 am Post subject: |
|
|
I'm not sure I can run shell scripts on ESXi remote tech support console. However, I wrote this batch file that runs on the Windows VM where RMA is installed:
set STATUS=Unknown
set DSUTIL=
for /f %%a in ('c:\scripts\plink.exe -ssh root@esx1.domain.local "df | grep '4f460e19' | grep -o [0-9][0-9]%% | grep -o [0-9][0-9]"') do set DSUTIL=%%a
echo %DSUTIL%
if /i %DSUTIL% GTR 80 set STATUS=Bad
if /i %DSUTIL% LEQ 80 set STATUS=Ok
set ERRORLEVEL=scriptres:%STATUS%:%DSUTIL% %%
When I run this batch file from command line, then echo %errorlevel%, it returns the following:
scriptres:Ok:63 %
However, when I plug it into an "External test" check with Hostmonitor, the status is always returned is 'Ok' (even if the script returns 'Bad'), and the value is always 0.
I tried plugging it into shell script test module in various ways, but that simply gives me errors "Unable to read from standard input: The handle is invalid." |
|
Back to top |
|
|
KS-Soft Europe
Joined: 16 May 2006 Posts: 2832
|
Posted: Tue Apr 17, 2012 8:59 am Post subject: |
|
|
Looks like plink.exe do not work correctly with Windows pipe mechanism.
Could you try to add/modify "SScript_UseWindowsPipe=0" line in [Misc] section of hostmon.ini file and restart HostMonitor.
Also, you should change your script in order to use with ShellScript test.
E.g.
Code: | @echo off
set STATUS=Unknown
set DSUTIL=
for /f %%a in ('c:\scripts\plink.exe -ssh root@esx1.domain.local "df | grep '4f460e19' | grep -o [0-9][0-9]%% | grep -o [0-9][0-9]"') do set DSUTIL=%%a
if /i %DSUTIL% GTR 80 set STATUS=Bad
if /i %DSUTIL% LEQ 80 set STATUS=Ok
echo scriptres:%STATUS%:%DSUTIL%%% |
Start CMD: cmd /c %Script% %Params% |
|
Back to top |
|
|
KS-Soft
Joined: 03 Apr 2002 Posts: 12795 Location: USA
|
Posted: Tue Apr 17, 2012 9:06 am Post subject: |
|
|
Quote: | scriptres:Ok:63 %
However, when I plug it into an "External test" check with Hostmonitor, the status is always returned is 'Ok' (even if the script returns 'Bad'), and the value is always 0 |
"External" test method has different requirements. It does not check text output, it checks ErrorLevel code that has nothing to do with "errorlevel" string.
Quote: | I tried plugging it into shell script test module in various ways, |
What exactly command have you specified as "Start cmd" parameter?
Something like cmd /c c:\pathtoBATfile\batfilename.bat %Params%?
Have you added echo scriptres:%STATUS%:%DSUTIL% line into your script?
I do not see this command in your sample.
Regards
Alex |
|
Back to top |
|
|
KS-Soft Europe
Joined: 16 May 2006 Posts: 2832
|
Posted: Tue Apr 17, 2012 9:35 am Post subject: |
|
|
Quote: | Could you try to add/modify "SScript_UseWindowsPipe=0" line in [Misc] section of hostmon.ini file and restart HostMonitor. |
If test is performed by RMA agent, then add/modify "SScript_UseWindowsPipe=0" line in [Misc] section of rma.ini file and restart RMA agent. |
|
Back to top |
|
|
bmekler
Joined: 17 Apr 2012 Posts: 38
|
Posted: Tue Apr 17, 2012 11:50 pm Post subject: |
|
|
Thank you, it's working now. This is the final version of the shell script I'm running:
Code: | @echo off
set STATUS=Unknown
set DSUTIL=
for /f %%a in ('c:\scripts\plink.exe -ssh -pw %3 %2@%1 "df | grep '%4' | grep -o [0-9][0-9]%% | grep -o [0-9][0-9]"') do set DSUTIL=%%a
if /i "%DSUTIL%" GTR "%5" set STATUS=Bad
if /i "%DSUTIL%" LEQ "%5" set STATUS=Ok
echo scriptres:%STATUS%:%DSUTIL% %% |
Starts with cmd /c %Script% %Params%
Parameters passed are hostname, username, password, datastore ID and usage threshold (percentage). The script returns current utilization percentage allowing for tracking utilization trends over time. And yes, adding "SScript_UseWindowsPipe=0" to rma.ini on the agents is indeed crucial - without it the PuTTYLink (plink.exe) command doesn't work correctly. |
|
Back to top |
|
|
KS-Soft
Joined: 03 Apr 2002 Posts: 12795 Location: USA
|
Posted: Wed Apr 18, 2012 6:02 am Post subject: |
|
|
Great
Thanks for the notice
Regards
Alex |
|
Back to top |
|
|
bmekler
Joined: 17 Apr 2012 Posts: 38
|
Posted: Wed Apr 18, 2012 1:38 pm Post subject: |
|
|
Okay, I spent some time on it today, and ended up with much better checks. There is a very capable perl script developed by op5, available here:
http://www.op5.com/how-to/monitoring-vmware-esx-3-x-esxi-vsphere-4-and-vcenter-server/
It uses vSphere API to access performance counters and status checks.
On a Windows system, it misses a whole bunch of dependencies, but I was able to retrieve all of them from cpan.org. After installing VMware vSphere SDK for Perl and placing all the extra perl scripts under C:\Program Files (x86)\VMware\VMware vSphere CLI\Perl\site\lib\, I can now run scripts such as this (using cmd /c perl %script% %params%:
Code: | #!/usr/bin/perl
$response = `c:/scripts/check_esx3.pl -H $ARGV[0] -u root -p $ARGV[1] -N $ARGV[2] -l io`;
chomp $response;
($load) = ($response =~ /io_read=(\d+\.\d\d)\MB/);
if ($load >= $ARGV[3]) {
$status = "Bad";
}
if ($load < $ARGV[3]) {
$status = "Ok";
}
print "scriptres:$status:$load Mb\n";
|
This checks current disk write throughput on a specific virtual machine. Parameters are ESXi hostname, root password, VM name and write throughput threshold in MB/s.
Another example, this one checks the CPU load of the host, parameters are hostname, root password and load threshold:
Code: | #!/usr/bin/perl
$response = `c:/scripts/check_esx3.pl -H $ARGV[0] -u root -p $ARGV[1] -l cpu -s usage`;
chomp $response;
($load) = ($response =~ /cpu_usage=(\d)\.\d\d\%/);
$load = int($load);
if ($load >= $ARGV[2]) {
$status = "Bad";
}
if ($load < $ARGV[2]) {
$status = "Ok";
}
print "scriptres:$status:$load %\n"; |
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|