[Xymon] flushing rrd files

Jeremy Laidman jlaidman at rebel-it.com.au
Tue Apr 29 04:33:23 CEST 2014


I think work would need to be done to integrate with rrdcached.

The RRD stats are cached by xymond_rrd.  The showgraph.cgi binary sends a
flush command to the xymond_rrd instances, via UNIX sockets, requesting a
cache flush, so that graphs are up-to-date.  You could probably emulate
this by running showgraph.cgi from the command-line.  Like so:

SCRIPT_NAME=showgraph.sh REQUEST_METHOD=GET QUERY_STRING="host=
hostname.example.com&service=conn" /usr/lib/xymon/server/bin/showgraph.cgi
>/dev/null

In this case, the "conn" is not used for anything (all RRD files are
flushed), but has to be a (I think) valid RRD filename (without the
extension) or graph name (defined in graphs.cfg).

Also, if you can send a string directly to the two UNIX sockets, you can
cause a flush.  The format is simply the hostname in slashes, like "/
hostname.example.com" and so you can probably achieve this using modern
versions netcat or socat, or other things that can write to sockets.

And just for fun, here's an implementation in Perl.

Cheers
Jeremy

#!/usr/bin/perl -Tw

my $hostname=shift;
die "Specify hostname\n" unless defined($hostname);

my $socketdir=$ENV{XYMONTMP};
die "XYMONTMP not defined, run from xymoncmd\n" unless $socketdir;

use Socket;
socket(SOCK, AF_UNIX, SOCK_DGRAM, 0)  or die "socket: $!\n";
use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
my $flags = fcntl(SOCK, F_SETFL, O_NONBLOCK) or die "fcntl: $!\n";

opendir(DIR,$socketdir) or die "$!: $socketdir\n";
while(my $socketfile=readdir(DIR)) {
        next unless substr($socketfile,0,7) eq "rrdctl.";
        my $socketpath="$socketdir/$socketfile";
        if (! -e $socketpath) {
                warn "not found: $socketpath\n";
                next;
        }
        if (! -w $socketpath) {
                warn "not writeable: $socketpath\n";
                next;
        }
        if (! -S $socketpath) {
                warn "not a socket: $socketpath\n";
                next;
        }

        $socketaddr=sockaddr_un($socketpath);

        if (defined(send(SOCK, "/$hostname/", 0, $socketaddr))) {
                print "Flush command for '$hostname' sent to $socketfile\n";
        } else {
                warn "Flush command for '$hostname' failed to send to
socket $socketfile\n";
        }
}




On 25 April 2014 22:29, Martin Sperl <Martin.Sperl at amdocs.com> wrote:

>  Hi!
>
>
>
> Is there a means to flush the rrd files filled in from xymond_rrd say via
> the "xymon"  command?
>
>
>
> As an alternative is it possible to use the generic RRDCACHED as a
> replacement for the caching?
>
> Any experience with that?
>
>
>
> Thanks,
>
>                                 Martin
>
>
>
>
>  This message and the information contained herein is proprietary and
> confidential and subject to the Amdocs policy statement, you may review at
> http://www.amdocs.com/email_disclaimer.asp
>
> _______________________________________________
> Xymon mailing list
> Xymon at xymon.com
> http://lists.xymon.com/mailman/listinfo/xymon
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xymon.com/pipermail/xymon/attachments/20140429/449c7285/attachment.html>


More information about the Xymon mailing list