Outils pour utilisateurs

Outils du site


Panneau latéral

start:supervision:check_mk:quagga

Pour vérifier l'état des sessions BGP sur les routeurs Linux tournant Quagga on utilise un plugin local pour check_mk qui va donc régulièrement interroger Quagga pour connaitre les sessions en cours, et leur état. Un fichier de configuration permet de définir, en spécifiant les numéros d'AS, les sessions à ignorer, ou celles qui sont critiques (un client, un transitaire, par exemple). Par défaut une session qui n'est pas active, et pour laquelle ce n'est pas volontaire (shutdown) donne un retour WARNING.

  • DISABLEPWD est le mot de passe Quagga pour pouvoir se connecter
  • ENABLEPWD est le mot de passe Quagga pour pouvoir passer enable
/usr/lib/check_mk_agent/local/check_bgp_summary
#!/bin/bash
 
## Neuronnexion - www.neuronnexion.coop - tech@nnx.com 
## Released under the terms of GNU/GPL
 
conf="/etc/check_mk/bgp.conf"
script_expect="/usr/local/bin/bgp_summary localhost bgpd DISABLEPWD ENABLEPWD"
 
# Var NAGIOS
STATE_OK="0"
STATE_WARNING="1"
STATE_CRITICAL="2"
STATE_UNKNOWN="3"
STATE_DEPENDENT="4"
 
# Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
(
$script_expect |grep -A 9999999 "^Neighbor"|grep -B 999999 "^Total"|egrep "^[0-9]" | sed -e 's/\r//' | \
while read Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ UpDown StatePfxRcd sup  ; do
  # Status ItemName PerformanceData CheckOutput
 
  if [[ $(grep -i "^exclude:as$AS:" "$conf") ]] ; then
    continue # skip when exclude
  fi
 
  infos="$StatePfxRcd"
  [ "x" != "x$sup" ] && infos="$infos $sup" # Gestion des cas ou l'info est en deux mots
 
  count=0
  val=$STATE_UNKNOWN
  if [[ $StatePfxRcd =~ [0-9]+ ]] ; then
    val=$STATE_OK
    count=$StatePfxRcd
  else 
    # Erreur, donc warning
    val=$STATE_WARNING
 
    # Si CRITIQUE, alors on hurle
    if [[ $(grep -i "^critical:as$AS:" "$conf") ]] ; then
      val=$STATE_CRITICAL
    fi
 
    # Si c'est volontaire, shut
    if [[ "$infos" =~ \(Admin\) ]] ; then
      val=$STATE_OK
    fi
  fi
 
  echo "$val BGP_AS"$AS"_$Neighbor count=$count Duration: $UpDown - Status: $infos"
done
)|sort -k 2

Exemple de fichier de configuration.

/etc/check_mk/bgp.conf
# Keywords : critical or exclude
# AS like ASXXXX
# Description is not an option ;)
 
# this one is a transit
critical:AS29075:Ielo
# this one keeps flapping
exclude:AS666:BadPeer

(en vrai, on a pas de session avec l'AS 666 ;-)

Le script communiquant avec Quagga utilise expect.

/usr/local/bin/bgp_summary
#!/usr/bin/expect -f
 
# Utilisé par le check_mk_agent pour gérer la vue des sessions BGP
# Viva NNX
 
# Note: this script is NOT good example of writting code in Expect at all.
 
if { [llength $argv] != 4 } {
 
  puts "Expect 'show ip bgp summary' script for Quagga services."
  puts "Copyright (C) 2007 Matous Jan Fialka."
  puts "Released under the terms of GNU/GPL.\n"
  puts "Usage: hostname { service | port } disable_password enable_password\n"
  puts "Example: qshru.exp localhost zebra secret password\n"
  puts "Use with extreme caution! You have been warned..."
  exit 1
}
 
set hostname [lindex $argv 0]
set service [lindex $argv 1]
set disable_password [lindex $argv 2]
set enable_password [lindex $argv 3]
 
set disable_prompt "^*>"
set enable_prompt "^*#"
 
set disable_password_prompt "Password:"
set enable_password_prompt "Password:"
 
set terminal_length_command "terminal length 0"
set enable_command "enable"
set disable_command "disable"
set quit_command "quit"
set show_running_config_command "show running-config"
set show_ip_bgp_summary "show ip bgp summary"
 
set timeout 10
 
set telnet /usr/bin/telnet
 
spawn "$telnet" "$hostname" "$service"
 
expect "$disable_password_prompt"
send "$disable_password\r"
 
expect "$disable_prompt"
send "$terminal_length_command\r"
 
expect "$disable_prompt"
send "$enable_command\r"
 
expect "$enable_password_prompt"
send "$enable_password\r"
 
expect "$enable_prompt"
send "$show_ip_bgp_summary\r"
#send "$show_running_config_command\r"
 
expect "$enable_prompt"
send "$disable_command\r"
 
expect "$disable_prompt"
send "$quit_command\r"
 
expect eof
puts "\nBye, bye..."
 
exit 0
start/supervision/check_mk/quagga.txt · Dernière modification: 2012/12/28 15:49 par domi