Translations of this page:

Distributed Monitoring mit ocsp_sweeper

Das Problem

In verteilten Umgebungen mit Nagios Servern die ihre Ergebnisse als Passive Checks an eine zentrale Nagiosinstanz übermitteln, kann man manchmal beobachten das die Satelliten eine sehr hohe Service Check Latency haben, obwohl die Server noch lange nicht ausgelastet sind. Der Grund für dieses Problem könnte sein das der NSCA Daemon zu lange braucht um seine Ergebnisse zu übertragen, und damit Nagios blockiert. Denn in der Standard Konfiguration von NSCA wird jedes Ergebnis einzelnen übertragen, was zu einem Overhead sowohl auf dem Satelliten als auch auf dem Zentralen Nagios Server führt.

Die Lösung

Die Lösung für dieses Problem ist der ocsp_sweeper von Jason Lancaster. Der Daemon cached die Check Ergebnisse in einer Pipe und überträgt sie dann gesammelt an den Zentralen Nagios Server. Dies reduziert den Übertragungsoverhead auf beiden Seiten und macht den Nagios Prozess auf den Satelliten unabhängig von der Ausführungsgeschwindigkeit der NSCA Übertragung.

Konfiguration

Sourcecode herunterladen

Der Daemon und das Init Script dazu können bei NagiosExchange heruntergeladen werden. Ich habe die beiden Scripte geringfügig angepasst. Meine Version kann hier heruntergeladen werden. Die weiteren Ausführungen beziehen sich auf diese Version.

Installation

Das Init Script im dafür vorgesehenen Ordner ablegen (meistens /etc/init.d). Den Daemon ocsp_sweeper.pl habe ich in /usr/local/nagios/ocsp_sweeper abgelegt. Nachdem die Files ihren Platz gefunden haben, muss das Init Skript angepasst werden.

Die wichtigsten Punkte sind dabei die IP Adresse des zentralen Nagios Servers und der Pfad für das Cache File. Sollte die Pipe nicht vorhanden sein, wird sie beim Start automatisch erzeugt.

# IP address of the master nagios server
my $master = '192.168.0.1';

# Where to store the cache file (named pipe)
my $fifo = '/var/nagios/rw/ocsp.cmd';

Außerdem kann hier der User ausgewählt werden mit dessen Rechten ocsp_sweeper laufen soll. Ich verwende hierfür den gleichen User wie für den Nagios Hauptprozess

# OCSP is built to run as a specific user, therefore we can assume it will only
# run as the following user.
my $user = "nagios";

Konfiguration von Nagios

Variante A (ocsp_command)

Diese Variante sollte eingesetzt werden, wenn nicht für alle Checks Performance Daten verarbeitet werden. Damit Nagios seine Check-Ergebnisse weiterreicht ist in der nagios.cfg die Option obsess_over_services zu aktiveren und ein Check Kommando dazu zu defineren.

# OBSESS OVER SERVICE CHECKS OPTION
obsess_over_services=1

# OBSESSIVE COMPULSIVE SERVICE PROCESSOR COMMAND
ocsp_command=submit_service_check

Das dazugehörige Check Kommando sieht dann so aus:

define command{
        command_name    submit_service_check
        command_line    /usr/bin/printf "%b" "$HOSTNAME$,$SERVICEDESC$,$SERVICESTATEID$,$SERVICEOUTPUT$ | $SERVICEPERFDATA$\n" >> /var/nagios/rw/ocsp.cmd
        }

Variante B (service_perfdata_file_template)

Dieses Verfahren kann genutzt werden wenn für alle Checks Performance Daten ausgewertet werden. Das bedeutet, dass sowohl in der nagios.cfg die Option process_performance_data, als auch in der Service Definition process_perf_data aktiviert sein muss. Diese Variante hat den Vorteil das Nagios direkt in die Pipe des ocsp_sweepers schreibt, ohne zusätzlich ein Shell Kommando (printf) aufrufen zu müssen. Dazu nutzen wir die Möglichkeiten von service_perfdata_file_template.

Aus der Nagios Doku:

Format: 	service_perfdata_file_template=<template>
This option determines what (and how) data is written to the service performance data file. The template may contain macros, 
special characters (\t for tab, \r for carriage return, \n for newline) and plain text. A newline is automatically added after 
each write to the performance data file.

Damit Nagios direkt in die Pipe schreibt ist Folgendes in die nagios.cfg einzutragen:

service_perfdata_file=/var/nagios/rw/ocsp.cmd
service_perfdata_file_template=$HOSTNAME$,$SERVICEDESC$,$SERVICESTATEID$,$SERVICEOUTPUT$ | $SERVICEPERFDATA$
service_perfdata_file_mode=a

Abschluss

Nach einem Reload schreibt Nagios nun alle Ergebnisse in die Pipe. Dort werden sie vom ocsp_sweeper Daemon wieder ausgelesen und gesammelt an den Hauptserver übertragen.

Anmerkungen

  • Mit dieser Lösung konnte ich in meiner Umgebung die Latency auf den Satelliten im Durchschnitt um 10 Sekunden senken und auch die Load auf dem Master hat sich etwas reduziert da nicht mehr so viele NSCA Prozesse gleichzeitig laufen.
  • Alternativ kann man die hier beschriebene Lösung verwenden die ohne einen zusätzlichen Daemon auskommt. Allerdings hat man dann keine Möglichkeit Passive Hostchecks zu übermitteln was mit dem ocsp_sweeper gehen soll, allerdings habe ich es nicht selbst getestet.




Martin Hefter NETWAYS GmbH - 27 Feb 2007

nagios/howtos/ocsp_sweeper.txt · Zuletzt geändert: 2007/10/23 15:23 von psychotrahe
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0