Defining services at runtime
Sam Stickland
sam_mailinglists at spacething.org
Thu May 11 17:05:01 CEST 2006
Thanks for your reply Bob.
Comments are inline.
> -----Original Message-----
> From: nagios-devel-admin at lists.sourceforge.net [mailto:nagios-devel-
> admin at lists.sourceforge.net] On Behalf Of Bob Ingraham
> Sent: 11 May 2006 15:08
> To: Sam Stickland
> Cc: nagios-devel at lists.sourceforge.net
> Subject: RE: [Nagios-devel] Defining services at runtime
> >
> > * Create for existing services
> >
> > I notice that Nagios-db gets it's configuration information from the
> > following callback:
>
>
> Which callback were you thinking of?
The message got sent too early first time around. The second message didn't
mention this :)
> > * Create a new service check
> >
> > nebstructs.h defines a struct "nebstruct_service_check_struct". However,
> > this seems to be the only place this struct is referred to in the header
> > files. How do I pass a completed struct to Nagios?
> >
> > It looks reality straight forward to work out how to fill out this
> struct,
> > but "char *host_name;" could be a problem. The plugin is only going to
> > know
> > the host address, so I'll need a way to get a hostname from an address.
>
> You can't add a service to Nagios using the
> nebstruct_service_check_struct; in fact you can't add anything to Nagios
> using any of the nebstruct_* structure. They are one-way, informational
> only - passed down to your module. When your module returns, Nagios never
> examines the structure that it passed to you for changes.
>
> The way to add a service from within a NEB module would be to call the
> internal "add_service()" function. It's the same one that Nagios uses to
> add services during configuration load.
>
> The API for the add_service() function is:
OK, that makes sense. Of course, the need to get the host_name from the host
address still remains.
> However, you have a significant problem with your above strategy:
> So, you have a timing issue:
> One strategy might be to have your service_check either:
>
> - Return the list of services it wants created as a result string
> (although, you might not have enough space to do so on one line,) and then
> have your callback routine create services based on the contents of the
> results string, or
>
> - Your service check writes it results to a temp file or IPC message queue
> or some such, and your callback routine then reads this file (or from the
> message queue,) and creates the services based upon that information
> source.
>
> I'm sure that there are many other ways to do this...
>
> Anyway, anyone please correct me if I'm off on any of this, but that's how
> I understand the way the callback routine mechanism works.
Yes, I understand the issue here. The code here
http://www.louisville.edu/~tjande01/nagios/exthandler.c
uses a schedule_new_event callback that executes once a second in order to
handle the socket code. Personally, I'd prefer to spawn a new thread to
handle the socket communication with the check-command. This ties into the
last thing that got missed off my original email that is:
* Submit passive service check results
The old school method of doing this is via the external command file, but I
presume the new API has a method of doing this? There's some functions in
broker.h that look like likely candidates, but they don't even have basic
comments ;) (e.g. broker_service_check).
The check-command that reports back to the broker module would only return
state based on its ability to reach the switch and to talk to the broker
module.
Sam
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
More information about the Developers
mailing list