[Nagiosplug-devel] spopen and pipes?
Andreas Ericsson
ae at op5.se
Tue Feb 1 16:19:48 CET 2005
Andrew Perron wrote:
> I've taken over some old netsaint plugins that a developer made for us and they
> were not working in nagios, so I was trying to convert them (i.e. rewrite from
> scratch).
>
> One thing, in comparing how he did it vs. what the guide recommends is the use
> of popen instead of spopen and writing information to temporary files.
>
> I would like to do what amounts to the following to a log file on a syslog
> server:
>
> - use grep to find relevant entries (many)
> - use sort to ensure that they are in order (may not be)
> - use tail to get the most recent entry
>
This is a job for perl (shell is too slow and it's too trivial to make
it a fullblown regex scanning C app). Practical Extract and Report
Language means just that (although I absolutely loathe its weird shell
spinoff syntax and it's structure in general, it's actually ideal for this).
Properly written it shouldn't even use a lot of memory.
In shell it would look something like this;
grep <strings> | sort | uniq | tail -n 1
In this sequence, both grep and sort are CPU intensive, and sort will
use (total_amount_of_data * 2) + 4096 bytes of memory, so that's not an
option for a log server.
> Seems only under certain specific circumstances can I use pipes or redirects in
> the spopen command string, so my question is whether there's a way to pipe the
> output of spopen pipes from one to another or if there is another workaround.
>
> I tried using the output from the command executed and then writing to a file,
> but due to the volume this seems to cause unreasonable delays causing plugins
> to timeout.
>
With huge (as opposed to large) amounts of data you would probably want
to whip up something to scan each incoming message for a regex and send
passive check results for it instead.
--
Andreas Ericsson andreas.ericsson at op5.se
OP5 AB www.op5.se
Lead Developer
More information about the Devel
mailing list