<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>RE: [Nagios-users] Re: Request For Comments: NWPE - Nagios Web Plugin Executor</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>No reason to run apache - it could be any webserver that supports CGI and whatever scripting language your service checks are written in.</FONT></P>

<P><FONT SIZE=2>--</FONT>
<BR><FONT SIZE=2>"Computer science is as much about computers as</FONT>
<BR><FONT SIZE=2>        astronomy is about telescopes" -- Edsger Dijkstra</FONT>
<BR><FONT SIZE=2>---------------------------------------------------------</FONT>
<BR><FONT SIZE=2>Anthony Tonns, UNIX Administrator - atonns@mail.ivillage.com</FONT>
</P>
<BR>

<P><FONT SIZE=2>> -----Original Message-----</FONT>
<BR><FONT SIZE=2>> From: Tedman Eng [<A HREF="mailto:teng@dataway.com">mailto:teng@dataway.com</A>]</FONT>
<BR><FONT SIZE=2>> Sent: Thursday, July 10, 2003 1:10 AM</FONT>
<BR><FONT SIZE=2>> To: nagios-users@lists.sourceforge.net</FONT>
<BR><FONT SIZE=2>> Subject: [Nagios-users] Re: Request For Comments: NWPE - Nagios Web</FONT>
<BR><FONT SIZE=2>> Plugin Executor</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Would someone have to run apache on each server they want to </FONT>
<BR><FONT SIZE=2>> use it with?</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> <atonns@mail.ivillage.com> wrote in message</FONT>
<BR><FONT SIZE=2>> <A HREF="news:F63694D14D538A4CB8DA5DAB5215A11C053D83CA@cookiemonster.iv" TARGET="_blank">news:F63694D14D538A4CB8DA5DAB5215A11C053D83CA@cookiemonster.iv</A></FONT>
<BR><FONT SIZE=2>> illage.net...</FONT>
<BR><FONT SIZE=2>> > Dear Nagios Community,</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > I'm considering making a project that I'm working on for my </FONT>
<BR><FONT SIZE=2>> employer open</FONT>
<BR><FONT SIZE=2>> > source. They are o.k. with the concept of open source </FONT>
<BR><FONT SIZE=2>> licensing (otherwise</FONT>
<BR><FONT SIZE=2>> I</FONT>
<BR><FONT SIZE=2>> > wouldn't be writing this email). However, before putting </FONT>
<BR><FONT SIZE=2>> the extra effort</FONT>
<BR><FONT SIZE=2>> in</FONT>
<BR><FONT SIZE=2>> > to "clean it up for public consumption", I want to poll the </FONT>
<BR><FONT SIZE=2>> community to</FONT>
<BR><FONT SIZE=2>> see</FONT>
<BR><FONT SIZE=2>> > if there's any interest.</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > Project:</FONT>
<BR><FONT SIZE=2>> > NWPE: Nagios Web Plugin Executor</FONT>
<BR><FONT SIZE=2>> > Execute service checks remotely, using HTTP[S] as a </FONT>
<BR><FONT SIZE=2>> transport protocol,</FONT>
<BR><FONT SIZE=2>> and</FONT>
<BR><FONT SIZE=2>> > a thin wrapper around CGI as a service check API.</FONT>
<BR><FONT SIZE=2>> > It functions similar to nrpe with the benefit of possibly </FONT>
<BR><FONT SIZE=2>> improving the</FONT>
<BR><FONT SIZE=2>> > performance of perl scripts for service checks (when using</FONT>
<BR><FONT SIZE=2>> apache/mod_perl).</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > History:</FONT>
<BR><FONT SIZE=2>> > For a home-grown monitoring system, I decided I wanted to </FONT>
<BR><FONT SIZE=2>> go with SNMPv3</FONT>
<BR><FONT SIZE=2>> > agents. The main reason were the authentication and </FONT>
<BR><FONT SIZE=2>> encryption aspects.</FONT>
<BR><FONT SIZE=2>> So,</FONT>
<BR><FONT SIZE=2>> > I created a nice Solaris package of net-snmpd 5.0.7 and was </FONT>
<BR><FONT SIZE=2>> very happy</FONT>
<BR><FONT SIZE=2>> with</FONT>
<BR><FONT SIZE=2>> > it. I am using Nagios to poll all of my servers w/agents. </FONT>
<BR><FONT SIZE=2>> At the time,</FONT>
<BR><FONT SIZE=2>> > SNMPv3 support had not been integrated into check_snmp, so </FONT>
<BR><FONT SIZE=2>> I ventured into</FONT>
<BR><FONT SIZE=2>> > coding my own plugins. Using perl with Net::SNMP was the </FONT>
<BR><FONT SIZE=2>> right solution.</FONT>
<BR><FONT SIZE=2>> One</FONT>
<BR><FONT SIZE=2>> > major advantage my scripts have over check_snmp/snmpget is </FONT>
<BR><FONT SIZE=2>> that I can</FONT>
<BR><FONT SIZE=2>> > retrieve an entire MIB table and reference objects by their </FONT>
<BR><FONT SIZE=2>> description</FONT>
<BR><FONT SIZE=2>> > field (ie: from the hrStorageTable use htStorageDescr to </FONT>
<BR><FONT SIZE=2>> determine the</FONT>
<BR><FONT SIZE=2>> index</FONT>
<BR><FONT SIZE=2>> > into hrStorageUsed/hrStorageSize) and have the script be </FONT>
<BR><FONT SIZE=2>> automatically</FONT>
<BR><FONT SIZE=2>> > flexible when new items are added (ie: additional </FONT>
<BR><FONT SIZE=2>> partitions are mounted,</FONT>
<BR><FONT SIZE=2>> > etc.). So far, I've had miserable success with embedded </FONT>
<BR><FONT SIZE=2>> Perl Nagios (ePN).</FONT>
<BR><FONT SIZE=2>> > It leaks memory like mad (I have to restart at LEAST once a </FONT>
<BR><FONT SIZE=2>> day) and the</FONT>
<BR><FONT SIZE=2>> > number of service checks (1400+) is totally overwhelming my </FONT>
<BR><FONT SIZE=2>> poor UltraII.</FONT>
<BR><FONT SIZE=2>> So</FONT>
<BR><FONT SIZE=2>> > I cooked up an alternative...</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > Functionality:</FONT>
<BR><FONT SIZE=2>> > A small C program 'nwpe' is called from a Nagios command</FONT>
<BR><FONT SIZE=2>> > (checkcommands.cfg). It is small, and strongly leverages libcurl</FONT>
<BR><FONT SIZE=2>> > (<A HREF="http://curl.sourceforge.net/libcurl/" TARGET="_blank">http://curl.sourceforge.net/libcurl/</A>) to connect (via HTTP </FONT>
<BR><FONT SIZE=2>> or HTTPS) and</FONT>
<BR><FONT SIZE=2>> > optionally authenticate to a webserver. An example usage would be:</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > ./nwpe -U <A HREF="https://servicechecker.nagios.org/svc/check_remote_disk" TARGET="_blank">https://servicechecker.nagios.org/svc/check_remote_disk</A> -a</FONT>
<BR><FONT SIZE=2>> > "args=--hostname=webserver1 --path=/usr --warning=20% </FONT>
<BR><FONT SIZE=2>> --critical=10%" -u</FONT>
<BR><FONT SIZE=2>> > nagios -p checkITout</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > "check_remote_disk" is a CGI script written in perl. In my case the</FONT>
<BR><FONT SIZE=2>> > webserver is running mod_perl. It uses Net::SNMP and other </FONT>
<BR><FONT SIZE=2>> perl modules to</FONT>
<BR><FONT SIZE=2>> > perform it's service check. It also invokes a custom perl </FONT>
<BR><FONT SIZE=2>> module I have</FONT>
<BR><FONT SIZE=2>> > written, NWPE (which will hopefully become Nagios::NWPE) </FONT>
<BR><FONT SIZE=2>> that does the</FONT>
<BR><FONT SIZE=2>> > following:</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > a) parses the POST/GET "args" field with a CGI object into @ARGV for</FONT>
<BR><FONT SIZE=2>> parsing</FONT>
<BR><FONT SIZE=2>> > by Getopt::Long</FONT>
<BR><FONT SIZE=2>> > b) redirects STDOUT to an IO::String to capture all output </FONT>
<BR><FONT SIZE=2>> from the plugin</FONT>
<BR><FONT SIZE=2>> > c) sets the appropriate return value for the state of the </FONT>
<BR><FONT SIZE=2>> service check</FONT>
<BR><FONT SIZE=2>> > (OK/WARNING/CRITICAL/UNKNOWN) in the HTTP Header field </FONT>
<BR><FONT SIZE=2>> "Return-state:"</FONT>
<BR><FONT SIZE=2>> > d) prints the 'cached' output of the plugin on the real STDOUT with</FONT>
<BR><FONT SIZE=2>> > mime-type "text/plain"</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > Essentially, the NWPE module makes it relatively painless to convert</FONT>
<BR><FONT SIZE=2>> command</FONT>
<BR><FONT SIZE=2>> > line service checks written in perl to CGI/mod_perl service checks.</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > Finally, after the service check has return the data, the </FONT>
<BR><FONT SIZE=2>> 'nwpe' C program</FONT>
<BR><FONT SIZE=2>> > prints the output of the request on STDOUT and returns the </FONT>
<BR><FONT SIZE=2>> appropriate</FONT>
<BR><FONT SIZE=2>> value</FONT>
<BR><FONT SIZE=2>> > (Return-state:) to Nagios.</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > Reasoning:</FONT>
<BR><FONT SIZE=2>> > The 'nwpe' system creates:</FONT>
<BR><FONT SIZE=2>> > 1) Additional flexibility - any scripting language that can </FONT>
<BR><FONT SIZE=2>> be run from a</FONT>
<BR><FONT SIZE=2>> > webserver (perl/mod_perl/asp/jsp) can be used as a service check</FONT>
<BR><FONT SIZE=2>> > 2) Additional scalability - allows you to deploy multiple </FONT>
<BR><FONT SIZE=2>> service check</FONT>
<BR><FONT SIZE=2>> > webservers just about anywhere on any network and leverage HTTP</FONT>
<BR><FONT SIZE=2>> load-balance</FONT>
<BR><FONT SIZE=2>> > technology (Cisco LocalDirector, BigIP, etc.) to distribute </FONT>
<BR><FONT SIZE=2>> the load of</FONT>
<BR><FONT SIZE=2>> > running service checks.</FONT>
<BR><FONT SIZE=2>> > 3) Additional performance - using mod_perl to speed up </FONT>
<BR><FONT SIZE=2>> normally slow perl</FONT>
<BR><FONT SIZE=2>> > service check execution</FONT>
<BR><FONT SIZE=2>> > 4) Additional security - access to service checks can be </FONT>
<BR><FONT SIZE=2>> authenticated &</FONT>
<BR><FONT SIZE=2>> > encrypted, and use any other access control mechanisms your favorite</FONT>
<BR><FONT SIZE=2>> > webserver provides.</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > When using nwpe with apache/mod_perl, I see it as combining </FONT>
<BR><FONT SIZE=2>> the best of</FONT>
<BR><FONT SIZE=2>> nrpe</FONT>
<BR><FONT SIZE=2>> > and ePN.</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > Downsides:</FONT>
<BR><FONT SIZE=2>> > 1) I have not integrated performance data into NWPE. </FONT>
<BR><FONT SIZE=2>> However, I suspect it</FONT>
<BR><FONT SIZE=2>> > could easily be added as an additional HTTP Header or </FONT>
<BR><FONT SIZE=2>> something similar</FONT>
<BR><FONT SIZE=2>> > (I've not done any performance data work with Nagios whatsoever).</FONT>
<BR><FONT SIZE=2>> > 2) the NWPE perl module is currently rough around the </FONT>
<BR><FONT SIZE=2>> edges. Very rough.</FONT>
<BR><FONT SIZE=2>> > It's the first serious perl module I've written (and bares </FONT>
<BR><FONT SIZE=2>> a striking</FONT>
<BR><FONT SIZE=2>> > resemblance to the stuff in perlboot, perltoot and perlobj).</FONT>
<BR><FONT SIZE=2>> > 3) While SSL has been integrated into libcurl for sometime, HTTP</FONT>
<BR><FONT SIZE=2>> > authentication is only part of the 7.10.6 pre-release and I </FONT>
<BR><FONT SIZE=2>> couldn't get</FONT>
<BR><FONT SIZE=2>> > pre3 to work (but pre2 works like a champ). This might make </FONT>
<BR><FONT SIZE=2>> compiling nwpe</FONT>
<BR><FONT SIZE=2>> a</FONT>
<BR><FONT SIZE=2>> > little hairy.</FONT>
<BR><FONT SIZE=2>> > 4) nwpe has not been setup with autoconf yet. It's features </FONT>
<BR><FONT SIZE=2>> are slim.</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > If there's a decent amount of positive response, I will try </FONT>
<BR><FONT SIZE=2>> to see if I</FONT>
<BR><FONT SIZE=2>> > carve out some time to setup a site for NWPE development.</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > Thanks,</FONT>
<BR><FONT SIZE=2>> > --Tony</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > --</FONT>
<BR><FONT SIZE=2>> > "Computer science is as much about computers as</FONT>
<BR><FONT SIZE=2>> >         astronomy is about telescopes" -- Edsger Dijkstra</FONT>
<BR><FONT SIZE=2>> > ---------------------------------------------------------</FONT>
<BR><FONT SIZE=2>> > Anthony Tonns, UNIX Administrator - atonns@mail.ivillage.com</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > -------------------------------------------------------</FONT>
<BR><FONT SIZE=2>> > This SF.Net email sponsored by: Parasoft</FONT>
<BR><FONT SIZE=2>> > Error proof Web apps, automate testing & more.</FONT>
<BR><FONT SIZE=2>> > Download & eval WebKing and get a free book.</FONT>
<BR><FONT SIZE=2>> > www.parasoft.com/bulletproofapps</FONT>
<BR><FONT SIZE=2>> > _______________________________________________</FONT>
<BR><FONT SIZE=2>> > Nagios-users mailing list</FONT>
<BR><FONT SIZE=2>> > Nagios-users@lists.sourceforge.net</FONT>
<BR><FONT SIZE=2>> > <A HREF="https://lists.sourceforge.net/lists/listinfo/nagios-users" TARGET="_blank">https://lists.sourceforge.net/lists/listinfo/nagios-users</A></FONT>
<BR><FONT SIZE=2>> > ::: Please include Nagios version, plugin version (-v) and OS when</FONT>
<BR><FONT SIZE=2>> reporting any issue.</FONT>
<BR><FONT SIZE=2>> > ::: Messages without supporting info will risk being sent </FONT>
<BR><FONT SIZE=2>> to /dev/null</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> -------------------------------------------------------</FONT>
<BR><FONT SIZE=2>> This SF.Net email sponsored by: Parasoft</FONT>
<BR><FONT SIZE=2>> Error proof Web apps, automate testing & more.</FONT>
<BR><FONT SIZE=2>> Download & eval WebKing and get a free book.</FONT>
<BR><FONT SIZE=2>> www.parasoft.com/bulletproofapps</FONT>
<BR><FONT SIZE=2>> _______________________________________________</FONT>
<BR><FONT SIZE=2>> Nagios-users mailing list</FONT>
<BR><FONT SIZE=2>> Nagios-users@lists.sourceforge.net</FONT>
<BR><FONT SIZE=2>> <A HREF="https://lists.sourceforge.net/lists/listinfo/nagios-users" TARGET="_blank">https://lists.sourceforge.net/lists/listinfo/nagios-users</A></FONT>
<BR><FONT SIZE=2>> ::: Please include Nagios version, plugin version (-v) and OS </FONT>
<BR><FONT SIZE=2>> when reporting any issue.</FONT>
<BR><FONT SIZE=2>> ::: Messages without supporting info will risk being sent to /dev/null</FONT>
<BR><FONT SIZE=2>> </FONT>
</P>

</BODY>
</HTML>