Dual Stack Monitoring

24
Dual-stack IPv4+IPv6 monitoring with Nagios GN3 IPv6 Workshop Lightning demo session 2012-10-05 Ville Mattila , CSC/Funet

description

Dual Stack Monitoring

Transcript of Dual Stack Monitoring

Page 1: Dual Stack Monitoring

Dual-stack IPv4+IPv6 monitoring with Nagios

GN3 IPv6 Workshop Lightning demo session

2012-10-05

Ville Mattila, CSC/Funet

Page 2: Dual Stack Monitoring

Acknowledgements

These slides are a near-complete replica of

Teemu Kiviniemi’s presentation at Terena TF-

NOC meeting #6 on 2012-06.

Page 3: Dual Stack Monitoring

Introduction

Supporting IPv6 and IPv4 access to a

service requires monitoring it with both

protocols.

– If monitored with IPv4 only any possible IPv6

connectivity issues causing problems to IPv6-

enabled users would not be detected by

monitoring.

How to monitor a dual-stack service with

Nagios?

Page 4: Dual Stack Monitoring

Monitoring a dual-stack service (1/3)

The traditional solution: Separate checks

for IPv4 and IPv6 services

Problems:

– It’s easy to forget to configure the IPv6 service.

– Doubles the number of monitored services.

– Doubles the number of service

problem/recovery notifications.

– Doubles the number of services that must have

scheduled downtime during service

maintenance.

Page 5: Dual Stack Monitoring

Monitoring a dual-stack service (2/3)

Using check clusters: Combine the results

of separate IPv4 and IPv6 checks using

e.g. the check_cluster plugin

Problems:

– It’s still easy to forget to configure the IPv6

service.

– Three times the number of monitored services.

– Error-prone to configure manually.

Page 6: Dual Stack Monitoring

Introducing check_v46

A Nagios plugin wrapper that makes

monitoring dual-stack services easier.

Compatible with most Nagios plugins that

support the standard command line

options: -4, -6, --hostname (-H)

Developed at Funet.

~200 lines of Perl code, needs Socket6

– Nagios Embedded Perl interpreter not

supported because of incompatibilities with

Getopt::Long

Page 7: Dual Stack Monitoring

How check_v46 works

The check_v46 wrapper behaves like any

Nagios check plugin.

To use it, replace e.g. check_http –H www.funet.fi

with check_v46 check_http -H www.funet.fi

check_v46 resolves the hostname and

runs the actual plugin once or twice adding

option -4 or -6 depending on what type of

addresses are associated to the name.

Page 8: Dual Stack Monitoring

How check_v46 works (continued)

The wrapper returns the worst result

returned by the actual check plugin runs.

– If the IPv4 service is in CRITICAL state, but the

IPv6 service is in OK state, CRITICAL will be

returned by the wrapper.

Any returned performance data labels are

prepended with ”ipv6_” or ”ipv4_”.

The extended status information will

contain the full output of the executed

check plugins.

Page 9: Dual Stack Monitoring

check_v46 benefits

Easy to configure: it is enough to update

the configuration of the check command.

– All services monitored with the check

command become instantly dual-stack aware.

Monitoring follows the actual data returned

by DNS.

– Dual-stack monitoring is done only if the host

name has both IPv4 and IPv6 addresses.

– Follows the behaviour of real clients.

Only one monitored service in Nagios.

Page 10: Dual Stack Monitoring

check_v46 disadvantages

Only one monitoring target (Nagios

host/service) for both IPv4 and IPv6

– No separate availability statistics for IPv4 and

IPv6.

May decrease monitoring performance, as

IPv4 and IPv6 service checks are run

serially.

Page 11: Dual Stack Monitoring

Demo: Monitoring web server

IPv4/IPv6 connectivity

Demo web sites:

– IPv6 and IPv4 enabled

working normally: http://all-ok.demo.funet.fi/

Both down: http://all-dead.demo.funet.fi/

IPv6 down, IPv4 ok: http://ipv6-dead.demo.funet.fi/

IPv4 down, IPv6 ok: http://ipv4-dead.demo.funet.fi/

– IPv6 only enabled: http://ipv6-only.demo.funet.fi/

– IPv4 only enabled: http://ipv4-only.demo.funet.fi/

Try them!

Page 12: Dual Stack Monitoring

Demo: Monitoring web server

IPv4/IPv6 connectivity

Traditional way: Check IPv6 and IPv4

connectivity separately

– Live Nagios Service Status Details view

Alternative way: Combine IPv6 and IPv4

checks with check_v46

– Live Nagios Service Status Details view

Page 13: Dual Stack Monitoring

check_v46 command line demo: SSH

monitoring

$ check_ssh -4 –H nxdomain.funet.fi

SSH OK - OpenSSH_5.9p1 Debian-5ubuntu1 (protocol 2.0)

IPv4 check

Page 14: Dual Stack Monitoring

check_v46 command line demo: SSH

monitoring

$ check_ssh -4 –H nxdomain.funet.fi

SSH OK - OpenSSH_5.9p1 Debian-5ubuntu1 (protocol 2.0)

$ check_ssh -6 –H nxdomain.funet.fi

SSH OK - OpenSSH_5.9p1 Debian-5ubuntu1 (protocol 2.0)

IPv6 check

Page 15: Dual Stack Monitoring

check_v46 command line demo: SSH

monitoring

$ check_ssh -4 –H nxdomain.funet.fi

SSH OK - OpenSSH_5.9p1 Debian-5ubuntu1 (protocol 2.0)

$ check_ssh -6 –H nxdomain.funet.fi

SSH OK - OpenSSH_5.9p1 Debian-5ubuntu1 (protocol 2.0)

$ check_v46 check_ssh –H nxdomain.funet.fi

OK: IPv6/nxdomain.funet.fi OK, IPv4/nxdomain.funet.fi OK

Status details:

IPv6/nxdomain.funet.fi:

SSH OK - OpenSSH_5.9p1 Debian-5ubuntu1 (protocol 2.0)

IPv4/nxdomain.funet.fi:

SSH OK - OpenSSH_5.9p1 Debian-5ubuntu1 (protocol 2.0)

Automatic IPv6 + IPv4 check

Page 16: Dual Stack Monitoring

check_v46 command line demo: Web

server monitoring

$ check_http -4 –H info.funet.fi

HTTP OK: HTTP/1.1 302 Found - 497 bytes in 0.003 second response

time |time=0.003495s;;;0.000000 size=497B;;;0

IPv4 check

Page 17: Dual Stack Monitoring

check_v46 command line demo: Web

server monitoring

$ check_http -4 –H info.funet.fi

HTTP OK: HTTP/1.1 302 Found - 497 bytes in 0.003 second response

time |time=0.003495s;;;0.000000 size=497B;;;0

$ check_http -6 –H info.funet.fi

HTTP OK: HTTP/1.1 302 Found - 497 bytes in 0.002 second response

time |time=0.002468s;;;0.000000 size=497B;;;0

IPv6 check

Page 18: Dual Stack Monitoring

check_v46 command line demo: Web

server monitoring

$ check_http -4 –H info.funet.fi

HTTP OK: HTTP/1.1 302 Found - 497 bytes in 0.003 second response

time |time=0.003495s;;;0.000000 size=497B;;;0

$ check_http -6 –H info.funet.fi

HTTP OK: HTTP/1.1 302 Found - 497 bytes in 0.002 second response

time |time=0.002468s;;;0.000000 size=497B;;;0

$ check_v46 check_http –H info.funet.fi

OK: IPv6/info.funet.fi OK, IPv4/info.funet.fi OK |

ipv6_a1_time=0.004322s;;;0.000000 ipv6_a1_size=497B;;;0

ipv4_a1_time=0.004377s;;;0.000000 ipv4_a1_size=497B;;;0

Status details:

IPv6/info.funet.fi:

HTTP OK: HTTP/1.1 302 Found - 497 bytes in 0.004 second response

time

IPv4/info.funet.fi:

HTTP OK: HTTP/1.1 302 Found - 497 bytes in 0.004 second response

time

Automatic IPv6 + IPv4 check

Page 19: Dual Stack Monitoring

check_v46 command line demo: Host

check with ping

$ check_fping -4 -H ping.funet.fi

FPING OK - ping.funet.fi (loss=0%, rta=0.280000

ms)|loss=0%;;;0;100 rta=0.000280s;;;0.000000

IPv4 check

Page 20: Dual Stack Monitoring

check_v46 command line demo: Host

check with ping

$ check_fping -4 -H ping.funet.fi

FPING OK - ping.funet.fi (loss=0%, rta=0.280000

ms)|loss=0%;;;0;100 rta=0.000280s;;;0.000000

$ check_fping -6 –H ping.funet.fi We use patched check_fping

FPING OK - ping.funet.fi (loss=0%, rta=0.270000

ms)|loss=0%;;;0;100 rta=0.000270s;;;0.000000

IPv6 check

Page 21: Dual Stack Monitoring

check_v46 command line demo: Host

check with ping

$ check_fping -4 -H ping.funet.fi

FPING OK - ping.funet.fi (loss=0%, rta=0.280000

ms)|loss=0%;;;0;100 rta=0.000280s;;;0.000000

$ check_fping -6 –H ping.funet.fi We use patched check_fping

FPING OK - ping.funet.fi (loss=0%, rta=0.270000

ms)|loss=0%;;;0;100 rta=0.000270s;;;0.000000

$ check_v46 check_fping –H ping.funet.fi

OK: IPv6/ping.funet.fi OK, IPv4/ping.funet.fi OK |

ipv6_a1_loss=0%;;;0;100 ipv6_a1_rta=0.000350s;;;0.000000

ipv4_a1_loss=0%;;;0;100 ipv4_a1_rta=0.000310s;;;0.000000

Status details:

IPv6/ping.funet.fi:

FPING OK - ping.funet.fi (loss=0%, rta=0.350000 ms)

IPv4/ping.funet.fi:

FPING OK - ping.funet.fi (loss=0%, rta=0.310000 ms)

Automatic IPv6 + IPv4 check

Page 22: Dual Stack Monitoring

check_v46 command line demo: Skip

DNS resolving by specifying addresses

$ check_v46 check_fping -a 86.50.27.65,193.166.3.2 -A

2001:708:10:6004::20

OK: IPv6/2001:708:10:6004::20 OK, IPv6/2001:708:10:9::20:2 OK,

IPv4/193.166.3.2 OK, IPv4/86.50.27.65 OK

Status details:

IPv6/2001:708:10:6004::20:

HTTP OK: HTTP/1.1 200 OK - 1168 bytes in 0.006 second response

time

IPv4/193.166.3.2:

HTTP OK: HTTP/1.1 200 OK - 6596 bytes in 0.005 second response

time

IPv4/86.50.27.65:

HTTP OK: HTTP/1.1 302 Found - 495 bytes in 0.002 second response

time

Page 23: Dual Stack Monitoring

Conclusions?

check_v46 wrapper makes dual-stack

monitoring very easy.

check_v46 wrapper is available at:

– https://gitorious.org/nagios-monitoring-

tools/nagios-monitoring-

tools/blobs/master/check_v46

check_fping IPv6 patch is available at:

– http://sourceforge.net/tracker/?func=detail&aid

=3490731&group_id=29880&atid=397599

Page 24: Dual Stack Monitoring

check_v46 command line help check_v46 --help

Usage: check_v46 -H <host> [--use-ipv4|--use-ipv6]

[<other options>]

<plugin> [<other plugin args>]

Options:

-H, --hostname <host|address>

Hostname or IPv6/IPv4 address to connect to.

-4, --use-ipv4

Check IPv4 only.

-6, --use-ipv6

Check IPv6 only.

-a, --ipv4-address=a.b.c.d,e.f.g.h

Check IPv4 using addresses a.b.c.d and e.f.g.h;

plugin will be run with the address as --hostname

option argument (replacing the original argument

of

--hostname).

-A, --ipv6-address=A::B,C::D

Check IPv6 using addresses A::B and C::D; see -a

above

for notes on plugin --hostname option handling.

<plugin>

Path to the actual plugin program to run.

<other plugin args>

Any command line arguments besides -H, -4, -6, -a

and -A

will be passed as-is to the <plugin>.

The order of options is not relevant, e.g.

'check_v46 -H <host> <plugin>' is effectively the

same as

'check_v46 <plugin> -H <host>'.

Examples:

check_v46 check_ssh -H host.example.org

- "Automatic dual stack test": Run check_ssh for

IPv6 only if

the system resolver returns an IPv6 address and

likewise for

IPv4.

check_v46 check_ssh -H host.example.org -4

- Run IPv4 check only.

check_v46 check_ssh -H host.example.org -6

- Run IPv6 check only.

check_v46 check_ssh -H host.example.org -a a.b.c.d

- Pass "--hostname a.b.c.d" to check_ssh when

checking IPv4

and have IPv6 checks run automatically as in the

first example.

check_v46 check_ssh -H host.example.org -6 -A A::B

- IPv6 checking only, skip resolving

host.example.org and

just pass "--hostname A::B" to check_ssh.