Sebastian Harl [Mon, 26 Nov 2007 11:17:26 +0000 (12:17 +0100)]
perl plugin: Fixed a memory leak in pplugin_register_data_set().
The data set definition is copied by plugin_register_data_set() (in plugin.c)
and thus should be freed after it has been passed on to the plugin module.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Sun, 25 Nov 2007 13:54:05 +0000 (14:54 +0100)]
collectdmon: Added a small daemon monitoring collectd.
This is a small "wrapper" daemon which starts and monitors the collectd
daemon. If collectd terminates it will automatically be restarted, unless
collectdmon was told to shut it down.
Current features:
* restarting the daemon
* logging to syslog
* detection of quickly, repeatedly respawning processes
(similar to SysV init)
collectdmon is similar to mysqld_safe.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Sat, 17 Nov 2007 19:50:00 +0000 (20:50 +0100)]
logfile plugin: Default to $localstatedir/log/collectd.log instead of STDOUT.
Imho STDOUT is only a useful default during debugging (which should be by far
the less common case ;-). In any other case it might just "pollute" the
messages printed by e.g. the init script.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Wed, 21 Nov 2007 21:00:42 +0000 (22:00 +0100)]
perl plugin: Made global variables available to Perl plugins.
The "let's become magical" commit.
Each global variable (currently hostname_g and interval_g) will be exported by
introducing an equally named Perl variable. Perl's concept of "magic" is used
to create a read/write interface to the C variables (think of the variables as
being tied). This way any changes to the C variables will be immediately
accessible from the Perl plugin and vice versa.
Sebastian Harl [Mon, 19 Nov 2007 23:20:25 +0000 (00:20 +0100)]
perl plugin: Shut down an ithread if the embedding pthread terminates.
Each ithread object is registered as thread specific data along with a
destructor function. If the embedding pthread terminates the destructor is
called which takes care of cleanly shutting down the appropriate Perl
interpreter and freeing any related resources.
Sebastian Harl [Sun, 18 Nov 2007 19:37:36 +0000 (20:37 +0100)]
perl plugin: Fixed error in ithread shutdown loop.
Using the sfree() macro, the loop variable was accidentally set to NULL at the
end of the loop, causing the loop to terminate after the first iteration.
Sebastian Harl [Tue, 20 Nov 2007 07:45:22 +0000 (08:45 +0100)]
perl plugin: Execute END blocks in main thread only.
Each END block is executed during perl_destruct() which happens once for each
ithread. As the number of ithreads are in no way related to any Perl plugins
this is not what we want. Now, each END block is only executed when the main
threads terminates (which happens after any other Perl thread has been shut
down).
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Sat, 17 Nov 2007 19:49:19 +0000 (20:49 +0100)]
src/Makefile.am: Add installation directory defines to AM_CPPFLAGS.
Those definitions used to be available when compiling collectd itself only.
However, they should be available to the plugins as well - else, different
paths would be used within different parts of collectd.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Sat, 17 Nov 2007 17:45:58 +0000 (18:45 +0100)]
Collectd.pm: Improved error handling of failed callbacks.
If call_by_name() failed, it will be handled the same way as if the callback
returned "false". The $@ variable may now be used by plugins as well to
describe errors in greater detail.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Sat, 17 Nov 2007 17:43:19 +0000 (18:43 +0100)]
Collectd.pm: Use threads::shared to share @plugins between threads.
The list of plugins has to be common to all threads to be able to (un)register
callbacks after initialization. As threads::shared is not able to share
references to subroutines the callbacks now have to be identified by their
name. Collectd::call_by_name() is used to execute the callbacks.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Sat, 17 Nov 2007 17:38:45 +0000 (18:38 +0100)]
perl plugin: Added Collectd::call_by_name().
This XSUB passes on a function call to a subroutine identified by its name
passed through $Collectd::cb_name. Collectd::call_by_name does not touch the
stack (unless in case of an error), thus any arguments and return values are
kept in place.
This function is meant to be used inside Collectd.pm only.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Tue, 13 Nov 2007 23:00:05 +0000 (00:00 +0100)]
bindings/Makefile.am: perl/Makefile depends on config.status.
Any configuration changes should be forwarded to the perl bindings. This patch
will cause perl/Makefile to be recreated after a rerun of the configure
script.
Sebastian Harl [Tue, 13 Nov 2007 22:59:25 +0000 (23:59 +0100)]
perl plugin: Added basic multi-threading support.
This patch maps each C thread, which accesses the perl plugin, to an
interpreter based Perl thread. The implementation has been inspired by Perl's
ithreads introduced in version 5.6.0 and should be compatible (as in: can be
used side-by-side) with it. You can use threads::shared to share data
structures between threads of either implementation.
Sebastian Harl [Tue, 13 Nov 2007 22:58:54 +0000 (23:58 +0100)]
perl plugin: Use PERL_NO_GET_CONTEXT.
All Perl_* API functions have been replaced with their unprefixed
counterparts. The currently used Perl interpreter is passed along to each
function requiring access to it. This removes the need to access the global
variable keeping the pointer to the Perl interpreter in most cases but the
entry points into the plugin (i.e. the callbacks registered with collectd).
This prepares the plugin to efficiently support multiple interpreters.
Sebastian Harl [Tue, 13 Nov 2007 22:58:20 +0000 (23:58 +0100)]
configure, perl plugin: Check for ithreads support.
Disable the perl plugin if Perl does not support ithreads (introduced in Perl
5.6). The configure script will check, if USE_ITHREADS has been defined. Also,
the perl plugin won't build if it has not been defined.
Florian Forster [Tue, 13 Nov 2007 16:55:50 +0000 (16:55 +0000)]
collectd: The new `FQDNLookup' option controls whether or not the FQDN should be used.
So far the hostname as returned by `gethostname(2)' was used. This is not
practical for large setups.
To stay backwards compatible the option is disabled by default, but the sample
config file includes a line which sets this option so that (new) default
installations will have it enabled.
src/Makefile.am: Fix "make dist" to include utils_threshold.h
Hello,
Attached is a trivial Makefile patch so that when using "make dist", you
actually get the src/utils_threshold.h file, which is needed to successfully
build.
Signed-off-by: Chris Lalancette <clalance@redhat.com> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Richard Jones [Tue, 6 Nov 2007 18:46:29 +0000 (19:46 +0100)]
libvirtstats plugin: Add the `HostnameFormat' option.
This is something I missed out of the previous patch: I want a way to log
guests using their UUID instead of their name (more useful for us because of
the migration and other issues outlined before).
Richard Jones [Tue, 6 Nov 2007 14:09:59 +0000 (14:09 +0000)]
uuid plugin: Add a plugin which sets the hostname to an UUID.
Florian Forster wrote:
> Just out of curiosity: Why don't hostnames work for you?
For guests there's the question of what we put in the hostname field. The
previous plugin (libvirtstats) puts the guest's name in this field, but there
are some problems with this:
physicalserver1 <--- (hostname of physical server)
|
\--- database <--- (name of guest)
\--- web
physicalserver2
|
\--- database
\--- web
coldbackupserver
|
(no guests)
Guest names aren't really unique. Different physical servers may have guests
with overlapping names as in the example above. Also guest names aren't fixed.
Xen in particular renames guests at will. For example if a guest is about to
migrate then Xen renames the guest as 'migrating-foo' and if the guest is about
to shutdown Xen renames it as 'Zombie-foo'. The administrator of the physical
server can also rename guests.
While you're migrating you'll have an intermediate situation like this:
physicalserver1
|
\--- migrating-database
\--- migrating-web |
| migration
coldbackupserver |
| V
\--- database
\--- web
During live migrations the old instance ('migrating-foo') is still running.
The UUID is unique across physical servers, and is copied by migration and
preserved across shutdowns so if you care about which guest your stats "really"
came from then only the UUID tells you this.
Guests also have a hostname which is separate from the guest's name (the
guest's name is stored in the hypervisor, the hostname is stored inside the
guest's kernel). However it's not feasible to access the guest's hostname from
the hypervisor since this would involve some sort of snooping into the guest
kernel. The guest might be running Windows or FreeBSD etc. The only feasible
way to get this is to run an instance of collectd inside each guest, but then
the uuid plugin will also work in this scenario and can get the UUID since it
is exposed inside the guest either through an emulated BIOS or in
/sys/hypervisor/uuid.
Florian Forster [Tue, 6 Nov 2007 16:37:53 +0000 (16:37 +0000)]
snmp plugin: Don't try to free the request PDU - it segfaults for some reason.
According to other code I've seen this is never done by anyone else, so this
must mean that the snmp library takes care of this somehow. Man, I love well
documented libraries!
Florian Forster [Sun, 4 Nov 2007 21:18:49 +0000 (22:18 +0100)]
exec plugin: Allow arguments to be passed to the executed scripts.
Untested! Also, you can use the new config option `NagiosExec' to execute
Nagios scripts. The not yet implemented `NotificationExec' is supposed to
dispatch notifications to executables.
Florian Forster [Sun, 28 Oct 2007 15:46:58 +0000 (16:46 +0100)]
src/utils_cache.[ch]: Added a global cache for all values that are dispatched.
The cache translates counter values to gauge values using the last counter
value available. This can then be used to check against threshold values, as
we'll need to do for monitoring functionality.
Right now the cache doesn't do much: It sits there and caches the values, but
is not yet ever queried. The already implemented (but so far unused) function
`uc_get_rate' returns an array of gauge_t values.
The longterm goal is to have the network, rrdtool and unixsock plugins use this
cache, too. This will require some `plugin specific' data with appropriate
control structures and, which is likely the hardest part, some clever locking
for all that.
Sebastian Harl [Sun, 28 Oct 2007 09:50:24 +0000 (10:50 +0100)]
perl plugin: Set $0 to "collectd".
perl_parse() has to set it to "-e" which is not very meaningful. It would
be even nicer to set it to argv[0] but this is not available from inside
the plugin.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Sebastian Harl [Sun, 28 Oct 2007 08:57:17 +0000 (09:57 +0100)]
plugin.h: Make DEBUG() a noop when compiling without debugging support.
This saves a couple of useless calls to plugin_log() which the compiler
does not detect and remove itself.
A couple of DEBUG()'s in the apcups, hddtemp, mbmon and ntpd plugins have
been upgraded to INFO()'s. All of them provide error messages of failed
system / libc calls which should be available to the user somehow.
Besides, they use a local string buffer which generates an "unused
variable" warning if DEBUG() expands to a noop.
Signed-off-by: Sebastian Harl <sh@tokkee.org> Signed-off-by: Florian Forster <octo@huhu.verplant.org>