Archive for Februar, 2011

Cisco SFP mit DDM

Dienstag, Februar 22nd, 2011

Bei einer Glasfaser-Leitung fragt sich der Netzwerkadministrator oft, ob das Signal nur gerade so eben ausreicht, um einen Link zu bekommen, oder ob die Faser noch ausreichend Budget für zusätzliche Patches oder Spleiße hat. Hilfreich hierbei ist es, wenn Glasfaser-Optiken zum Einsatz kommen, die anzeigen, wie stark das ankommende Signal ist. Diese Funktion nennt man Digital Diagnostics Monitoring (DDM) oder Digital Optical Monitoring (DOM).

Hier die Ausgabe eines Cisco 2960S-Switches mit entsprechendem SFP:

#sh int gi1/0/28 transceiver  
ITU Channel not available (Wavelength not available),
Transceiver is internally calibrated.
If device is externally calibrated, only calibrated values are printed.
++ : high alarm, +  : high warning, -  : low warning, -- : low alarm.
NA or N/A: not applicable, Tx: transmit, Rx: receive.
mA: milliamperes, dBm: decibels (milliwatts).

                                 Optical   Optical
           Temperature  Voltage  Tx Power  Rx Power
Port       (Celsius)    (Volts)  (dBm)     (dBm)
---------  -----------  -------  --------  --------
Gi1/0/28     28.1       3.28      -2.3     -15.2   

Wir sehen hier, dass der Empfangspegel (Rx Power) bei -15.2dB liegt. Um das optische Budget des konkreten SFP zu ermitteln hilft uns folgendes Kommando:

switch#sh int gi1/0/28 transceiver detail 
ITU Channel not available (Wavelength not available),
Transceiver is internally calibrated.
mA: milliamperes, dBm: decibels (milliwatts), NA or N/A: not applicable.
++ : high alarm, +  : high warning, -  : low warning, -- : low alarm.
A2D readouts (if they differ), are reported in parentheses.
The threshold values are calibrated.

                              High Alarm  High Warn  Low Warn   Low Alarm
          Temperature         Threshold   Threshold  Threshold  Threshold
Port       (Celsius)          (Celsius)   (Celsius)  (Celsius)  (Celsius)
--------- ------------------  ----------  ---------  ---------  ---------
Gi1/0/28    28.6                80.0        75.0        -5.0      -10.0

                              High Alarm  High Warn  Low Warn   Low Alarm
           Voltage            Threshold   Threshold  Threshold  Threshold
Port       (Volts)            (Volts)     (Volts)    (Volts)    (Volts)
---------  ---------------    ----------  ---------  ---------  ---------
Gi1/0/28   3.28                  3.60        3.50        3.00       2.90

           Optical            High Alarm  High Warn  Low Warn   Low Alarm
           Transmit Power     Threshold   Threshold  Threshold  Threshold
Port       (dBm)              (dBm)       (dBm)      (dBm)      (dBm)
---------  -----------------  ----------  ---------  ---------  ---------
Gi1/0/28    -2.3                 2.0         1.0        -6.0       -7.0

           Optical            High Alarm  High Warn  Low Warn   Low Alarm
           Receive Power      Threshold   Threshold  Threshold  Threshold
Port       (dBm)              (dBm)       (dBm)      (dBm)      (dBm)
-------    -----------------  ----------  ---------  ---------  ---------
Gi1/0/28   -15.2                 0.0        -1.0       -21.0      -22.0

Wir sehen hier, dass bei -22.0 dB ein Alarm ausgelöst wird. Wir haben also noch 6.8dB Puffer. Das ist beachtlich viel, wenn man bedenkt dass die Leitung ca. 15km lang ist. Als Vergleich habe ich hier noch eine Ausgabe für eine kurze Strecke von ca. 10m.

#sh int gi1/0/25 transceiver detail 
ITU Channel not available (Wavelength not available),
Transceiver is internally calibrated.
mA: milliamperes, dBm: decibels (milliwatts), NA or N/A: not applicable.
++ : high alarm, +  : high warning, -  : low warning, -- : low alarm.
A2D readouts (if they differ), are reported in parentheses.
The threshold values are calibrated.

                              High Alarm  High Warn  Low Warn   Low Alarm
          Temperature         Threshold   Threshold  Threshold  Threshold
Port       (Celsius)          (Celsius)   (Celsius)  (Celsius)  (Celsius)
--------- ------------------  ----------  ---------  ---------  ---------
Gi1/0/25    29.1                80.0        75.0        -5.0      -10.0

                              High Alarm  High Warn  Low Warn   Low Alarm
           Voltage            Threshold   Threshold  Threshold  Threshold
Port       (Volts)            (Volts)     (Volts)    (Volts)    (Volts)
---------  ---------------    ----------  ---------  ---------  ---------
Gi1/0/25   3.28                  3.60        3.50        3.00       2.90

           Optical            High Alarm  High Warn  Low Warn   Low Alarm
           Transmit Power     Threshold   Threshold  Threshold  Threshold
Port       (dBm)              (dBm)       (dBm)      (dBm)      (dBm)
---------  -----------------  ----------  ---------  ---------  ---------
Gi1/0/25    -2.3                 2.0         1.0        -6.0       -7.0

           Optical            High Alarm  High Warn  Low Warn   Low Alarm
           Receive Power      Threshold   Threshold  Threshold  Threshold
Port       (dBm)              (dBm)       (dBm)      (dBm)      (dBm)
-------    -----------------  ----------  ---------  ---------  ---------
Gi1/0/25    -8.8                 0.0        -1.0       -21.0      -22.0

Nagios: Check-Ergebnis invertieren mit negate

Dienstag, Februar 8th, 2011

Schon seit längerer Zeit hatte ich eine Idee im Hinterkopf, einen speziellen Nagios-Check zu schreiben, der das Ergebnis eines anderen Checks invertiert, d.h. meldet der Check “OK”, ist das Ergebnis “Critical” und umgekehrt. “Unknown” und “Warning” bleiben erhalten.

Dieser Check war zum Beispiel dafür gedacht, dass ein Router sich, wenn eine Standleitung ausfällt, über eine alternative Verbindung einwählt. Diese soll aber, wenn sie nutzungsabhängige Kosten verursacht, nicht ständig aufgebaut sein. Es ist also ein Ping-Check nötig, der dann alarmiert, wenn die Verbindung aufgebaut ist. Ein anderes Beispiel ist, dass man auf einem SSH-fähigen Cisco-Router sicherstellen möchte, dass telnet deaktiviert ist.

Jetzt habe ich festgestellt, dass ich nicht der einzige mit dieser Idee war, und sie offenbar schon vor einiger Zeit in dem “negate“-Check umgesetzt wurde. Dieser macht genau das oben beschriebene, und kann zusätzlich noch im Ergebnis die Zeichenketten “OK” und “WARNING” entsprechend ersetzen.

Hier ein Konfigurationsbeispiel. Man nimmt die ursprüngliche Konfiguration, um Telnet zu checken:

define command{
	command_name	check_telnet
	command_line	/usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p 23
}

Vor die command_line stellt man dann das negate-Plugin:

define command {
        command_name    check_telnet_disabled
        command_line    /usr/lib/nagios/plugins/negate /usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p 23
}

Und fertig ist ein Check-Command, das Alarm gibt, sobald Telnet aktiviert ist.