MSDP-monitorering

Aktuelt

MSDP-monitorering

En av våre kunder hadde behov for å finne ut nøyaktig når noen MSDP-annonserte multicast-ruter ble borte, og kom tilbake. 

Problemet med MSDP-annonserte multicast ruter var at det skjedde fra tid til annen, med vilkårlige ruter.

"MSDP interconnects multiple IPv4 PIM Sparse-Mode (PIM-SM) domains which enables PIM-SM to have Rendezvous Point (RP) redundancy and inter-domain multicasting RFC 4611" - Wikipedia

Vurdering av oppgaven

Det ble konkludert med at en periodisk sjekk for å se nye/frafallene ruter ville gi en god oversikt. Ett minutts oppløsning på dataene var nok.

Vi landet på å bruke XML-RPC over NETCONF via PyEZ for å hente ut rutene, da det er ryddig og enkelt. Koden ble skrevet for å løse ett konkret problem på raskest mulig utviklingstid - feilhåndtering og "pen kode" ble ikke vektlagt da resultatet skulle gås igjennom manuelt.

Ved behov kunne vi enkelt bygget videre på denne løsningen, som å lagre ting i database, eller sendt varsler (epost, SMS) ved utfall. Det ville óg vært hensiktsmessig med feilhåndtering i større grad om dette var en løsning som skulle gå over lang tid i produksjon.

Vår løsning

  • Python 
  • PyEZ
  • Cron

For å vite hva som er tidligere MSDP-signalerte ruter, og hva som er nytt, må vi ha noe som holder på "state".

Statene i dette eksempelet her er veldig enkle.
"Tidligere hadde jeg rutene A, B, C og D. Nå har jeg rutene A, C, D og E. Hva har endret seg?"

Koden

Rekkefølge i scriptet:

  1. Inkludere nødvendige biblioteker, som pyez
  2. Koble til utstyret via NetCONF (XML-RPC)
  3. Hente ett objekt som inneholder alle MSDP-ruter
  4. Gå igjennom objektet og bygge en liste over alle nåværende MSDP-ruter inn i variabelen "current_sources"
  5. Lese forrige scriptgjennomkjørings resultat inn fra fila "temp" inn i variabelen "prev_sources"
  6. Overskrive fila "temp" med nåværende MSDP-ruter
  7. Sammenligne current_sources og prev_sources
  8. Ved avvik logges dette til fil

Her finner man scriptet i helhet

For å få XML-output rett i tekstform på Junos-enheten, noe som er veldig nyttig under utvikling for å se XML-struktur, brukes " | display xml". Om man vil vite hvilken XML PRC man skal bruke for hente ut den XML-en brukes " | display xml rpc". XML RPC-en brukes i

Eksempelutdrag fra filer

j@j-laptop:~/msdp-monitor$ head -n5 temp

    233.0.0.1-10.230.16.1

    233.0.0.2-10.230.16.2

    233.0.0.3-10.230.16.3

    233.0.0.4-10.230.16.4

    233.0.0.5-10.230.16.5

   

    j@j-laptop:~/msdp-monitor$ cat log.txt

    [...]

    2017-05-19T11:54:02.130932: Connecting to MSDP source

    2017-05-19T11:54:06.347257: Comparing MSDP sources

    2017-05-19T11:54:06.348839: The following MSDP active route have been added: multicast-group-address 233.0.0.221 -> multicast-source-address 10.130.16.221

    2017-05-19T11:55:01.763388: Connecting to MSDP source

    2017-05-19T11:55:06.158661: Comparing MSDP sources

    2017-05-19T11:55:06.163703: The following MSDP active route have been removed: multicast-group-address 233.0.0.221 -> multicast-source-address 10.130.16.221

    2017-05-19T11:56:01.505725: Connecting to MSDP source

    2017-05-19T11:56:05.836410: Comparing MSDP sources

    2017-05-19T11:56:05.839060: No changes

   

    j@j-laptop:~/msdp-monitor$ crontab -l | grep -v "#"

    * * * * * python ~/msdp-monitor/poll.py