Xymon Mailing List Archive search

How to run multiple xymonnet processes?

3 messages in this thread

list Jeremy Laidman · Wed, 26 May 2021 10:55:13 +1000 ·
Hi all

We have a lot of net tests that take a lot of time, mostly DNS. There's not
a lot we can do to reduce the time it takes to run these tests. The end
result is that xymonnet takes in excess of 10 minutes to finish a polling
cycle, causing missing data points in RRD files.

Our Xymon server is not heavily loaded, so it could quite easily cope with
running two copies of xymonnet. But I need a way to distribute the hosts
between the two. Does anyone have suggestions about how to do this?

It'd be neat if I could run xymonnet saying "only run tests for these
hosts" on one instance, and "run tests for all except these hosts" on
another. But this doesn't seem possible. The nearest to this seems to be
the "NET:<netname>" tag, but I don't know how to use the combination of
XYMONNETWORK and "--test-untagged" to do what I need. Also, I'm not sure
that there won't be other side-effects to abusing the NET: tag in this way.

Another idea I had was to construct two new hosts.cfg files from the
original (and all included files) and tell two xymonnet instances to use
these other hosts.cfg files (perhaps by overriding HOSTSCFG?).

Any suggestions?

Cheers
Jeremy
list Christoph Zechner · Wed, 26 May 2021 07:28:21 +0200 ·
Hi,
quoted from Jeremy Laidman

On 26/05/2021 02:55, Jeremy Laidman wrote:
Hi all

We have a lot of net tests that take a lot of time, mostly DNS. There's not a lot we can do to reduce the time it takes to run these tests. The end result is that xymonnet takes in excess of 10 minutes to finish a polling cycle, causing missing data points in RRD files.

Our Xymon server is not heavily loaded, so it could quite easily cope with running two copies of xymonnet. But I need a way to distribute the hosts between the two. Does anyone have suggestions about how to do this?

It'd be neat if I could run xymonnet saying "only run tests for these hosts" on one instance, and "run tests for all except these hosts" on another. But this doesn't seem possible. The nearest to this seems to be the "NET:<netname>" tag, but I don't know how to use the combination of XYMONNETWORK and "--test-untagged" to do what I need. Also, I'm not sure that there won't be other side-effects to abusing the NET: tag in this way.
I also would use the NET: tag for this. In our network, we have lots of different network segments separated from each other and one machine, which runs xymon proxy that does the network checks for them.

Look in your tasks.cfg file, there's the default [xymonnet] task. You can easily define multiple checks just like it, for example:

[xymonnetabc]
    ENVFILE /usr/lib/xymon/server/etc/xymonserver.cfg
    #NEEDS xymond
    CMD XYMONNETWORK=abc xymonnet --report --ping --checkresponse --concurrency=4
    LOGFILE $XYMONSERVERLOGS/xymonnet.log
    INTERVAL 5m

[xymonnetdef]
    ENVFILE /usr/lib/xymon/server/etc/xymonserver.cfg
    #NEEDS xymond
    CMD XYMONNETWORK=def xymonnet --report --ping --checkresponse --concurrency=4
    LOGFILE $XYMONSERVERLOGS/xymonnet.log
    INTERVAL 5m

[xymonnetghi]
    ENVFILE /usr/lib/xymon/server/etc/xymonserver.cfg
    #NEEDS xymond
    CMD XYMONNETWORK=ghi xymonnet --report --ping --checkresponse --concurrency=4
    LOGFILE $XYMONSERVERLOGS/xymonnet.log
    INTERVAL 5m

This way, you can check three networks ("abc", "def", "ghi") separately. Note: "concurrency=4" is not strictly needed, we just use it to limit the number of concurrent connection to lighten the load on our xymon machine.

Don't forget to define [xymonnetagain] checks the same way if you need them for each segment/network.

In my opinion, this should work perfectly for your use case.

Cheers
Christoph
quoted from Jeremy Laidman

Another idea I had was to construct two new hosts.cfg files from the original (and all included files) and tell two xymonnet instances to use these other hosts.cfg files (perhaps by overriding HOSTSCFG?).

Any suggestions?

Cheers
Jeremy

list Jeremy Laidman · Thu, 27 May 2021 12:31:03 +1000 ·
quoted from Christoph Zechner
On Wed, 26 May 2021 at 15:28, Christoph Zechner <user-249716582ccc@xymon.invalid> wrote:

I also would use the NET: tag for this. In our network, we have lots of
different network segments separated from each other and one machine,
which runs xymon proxy that does the network checks for them.

Look in your tasks.cfg file, there's the default [xymonnet] task. You
can easily define multiple checks just like it, for example:
Thanks Christoph. I've done exactly that, and it's working perfectly. The
highest run-time of any of the xymonnet tasks is now down to 196 seconds.