nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins

am

  • 1,315 Views

Auch wenn in der letzten Zeit sehr viel Bewegung in die Monitoring-Szene gekommen ist (#monitoringsucks etc.), werden die Platzhirsche Nagios/Icinga und ihre Standards auf absehbare Zeit nicht ...

Auch wenn in der letzten Zeit sehr viel Bewegung in die Monitoring-Szene gekommen ist (#monitoringsucks etc.), werden die Platzhirsche Nagios/Icinga und ihre Standards auf absehbare Zeit nicht verschwinden. Das Nagios-Plugin-API stellt eine sehr weit verbreitete Schnittstelle zur Anbindung einzelner Checks an Monitoring-Systeme dar. Obwohl das API in den Grundzügen sehr einfach ist, ist der Programmieraufwand für vollständig konforme Plugins erstaunlich hoch.

Die nagiosplugin-Bibliothek nimmt dem Entwickler viele Details ab, so dass er sich auf den Inhalt seiner Checks konzentrieren kann. Der Vortrag führt in das Schreiben von Nagios-kompatiblen Plugins ein, zeigt den typischen Aufbau von Nagios-Plugins und das Grundprinzip eigener Plugins. Die Konfiguration und der Betrieb von Monitoring-Systemen im Großen sollen nicht thematisiert werden.

Video: http://pyvideo.org/video/1460/nagiosplugin-eine-python-bibliothek-fur-monitor

Konferenzseite: https://2012.de.pycon.org/programm/schedule/sessions/45/

Projekt-Homepage: https://projects.gocept.com/projects/nagiosplugin/wiki

Statistiken

Views

Gesamtviews
1,315
Views auf SlideShare
1,315
Views einbetten
0

Actions

Gefällt mir
0
Downloads
5
Kommentare
0

0 Einbettungen 0

No embeds

Zugänglichkeit

Kategorien

Details hochladen

Uploaded via as Adobe PDF

Benutzerrechte

CC Attribution License

Report content

Als unangemessen gemeldet Als unangemessen melden
Als unangemessen melden

Wählen Sie Ihren Grund, warum Sie diese Präsentation als unangemessen melden.

Löschen
  • Full Name Full Name Comment goes here.
    Sind Sie sicher, dass Sie...
    Ihre Nachricht erscheint hier
    Processing...
Kommentar posten
Kommentar bearbeiten

nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins Presentation Transcript

  • 1. NAGIOSPLUGINEINE PYTHON-KLASSENBIBLIOTHEK FÜR NAGIOS/ICINGA- PLUGINS Christian Kauhaus kc@gocept.com
  • 2. “ The most important figures that oneneeds for management are unknown or unknowable. ” (Lloyd S. Nelson)
  • 3. CHRISTIAN KAUHAUS seit 2008 bei gocept Sysadmin Hosting/Data Center FlyingCircus.io
  • 4. ÜBERBLICKIntroKonzepteBasics Datenerhebung Datenbewertung PräsentationAdvanced Logging & Output Persistente Daten FehlerbehandlungFazit
  • 5. BEIPACKZETTEL DIESER VORTRAG ENTHÄLT Einführung in n g o p u i aislgn viele Code-Beispiele Live-Demos DIESER VORTRAG ENTHÄLT NICHTdie gesamte n g o p u i -API aislgnKonfiguration von Nagios/Icinga-Servern
  • 6. INTRO Plugins sind primäre Methode der Informationsgewinnung bei Nagios/IcingaInput: KommandozeileOutput: Text auf stdout, Exit-CodePlugin API:http://nagios.sourceforge.net/docs/3_0/pluginapi.htmlPlugin Development Guidelines:http://nagiosplug.sourceforge.net/developer-guidelines.html
  • 7. PLUGIN SCHREIBEN? IST DOCH EASY!#/i/h !bns#311ds pui cdz 13 ik lgn oe#()19,0420,01b wrzu C 9920-0621 y AEGY#i yudntudrtn ti g aa f o o nesad hs o wyeh "AEGYskw ds pui i rnig!" co wrzu el ik lgn s unn!!d /r/p0/aa|ge / |ak pit$ } | f svap1dt rp ^ w { rn 3 ge 15... | { rp [-].. | eh "M!!**ds i srwd!" ei 2 co OG! * ik s cee!!; xt}eh "iki o" co ds s kei 0 xt#XXsol nvrrahti X hud ee ec hs
  • 8. NAGIOS PLUGIN APItimeout standard options output spec exit codes range syntax performance data multi-threshold status line long output
  • 9. BEISPIEL: OUTPUT SPECCEK-sau ln |pr1pr2 HC tts ie ef efln otu og uptln otu og upt|pr3pr4 ef efpr5pr6 ef ef
  • 10. BEISPIEL: RANGE-SYNTAX 9 -6:8 ~:3 -2.25: @5:7.5
  • 11. NAGIOSPLUGIN IST... Python-Klassenbibliothek Open Source (ZPL-Lizenz) entstanden aus gocept -Eigenbedarf seit 2010 kontinuierlich weiterentwickelt Python 3-kompatibel Release-Stand:alte 0.4.x API wird nicht mehr weiterentwickeltInhalt des Vortrags neue 1.0 API
  • 12. KONZEPTETerminlogie bei #monitoringsucks – watch your language Resource Metric Context Event Action
  • 13. KONZEPTE IM NAGIOS-KONTEXT
  • 14. ZENTRALE KLASSEN
  • 15. BASICS #1: DATENERHEBUNG
  • 16. RESOURCE Domain Model Subklasse von R s u c eore p o e )erzeugt Metriken rb(casRsuc:ls eore @rpry poet dfnm(ef: e aesl) rtr sl._ls_._ae_ eun ef_cas__nm_ dfpoesl) e rb(ef: rtr [ eun ]
  • 17. BEISPIEL: CHECK_WORLDipr ngopuimot aislgncasWrdngopui.eore:ls ol(aislgnRsuc) dfpoesl) e rb(ef: rtr [ eun ngopui.ercol Tu,cnetul) aislgnMti(wrd, re otx=nl ]dfmi(:e an) cek=ngopui.hc(ol() hc aislgnCekWrd) cekmi( hc.an)i _nm_ = _an_: f _ae_ = _mi_ mi( an)
  • 18. METRICStrukturiertes Value-Objekt für einzelnen DatenpunktcasMti:ls erc df_ii_(ef nm,vle umNn,mnNn,mxNn, e _nt_sl, ae au, o=oe i=oe a=oe cnetNn) otx=oe: .. .
  • 19. BEISPIEL: CHECK_LOADcasLa(aislgnRsuc)ls odngopui.eore: df_ii_(ef prp=as) e _nt_sl, ecuFle: sl.ecu=prp efprp ecu dfcu(ef: e pssl) rtr itsbrcs.hc_upt[nrc]) eun n(upoescekotu(po) dfpoesl) e rb(ef: wt oe(/rclaag)a laag ih pnpo/odv s odv: la =laagraln(.pi([:] od odv.edie)slt)03 cu =sl.ps)i sl.ecues 1 ps efcu( f efprp le la =[la()/cu frli la] od fotl ps o n od fri pro i eueae[,5 1]: o , eid n nmrt(1 , 5) yedngopui.ercodd %pro,la[] il aislgnMti(la% eid odi, mn0 cneteal i=, otx=dfut)
  • 20. BASICS #2: DATENBEWERTUNG
  • 21. CONTEXT erzeugt R s l aus M t i und R s u c eut erc eore erzeugt Performance Data erzeugt Klartext-BeschreibungcasCnetls otx: df_ii_(ef nm,..: e _nt_sl, ae .) .. . dfeaut(ef mti,rsuc) e vlaesl, erc eore: rtr Rsl(.) eun eut.. dfpromnesl,mti,rsuc) e efrac(ef erc eore: rtr Promne.. eun efrac(.) dfdsrb(ef mti) e eciesl, erc: rtr . eun ..
  • 22. SCALARCONTEXT Häufig gebrauchter Spezialfall warning und critical RangescasSaaCnetCnet:ls clrotx(otx) df_ii_(ef nm,wrig ciia,..: e _nt_sl, ae ann, rtcl .) .. . Verwendung direkt in Check-Initialisierung:cek=ngopui.hc(hc aislgnCek ngopui.clrotx(la ag.ann, aislgnSaaCnetod, rswrig ag.rtcl,.. rsciia) .)
  • 23. ZUORDNUNG METRIC/CONTEXT Jede M t i benennt den zuständigen C n e t erc otx#La.rb( odpoe) frpro,ii zp[,5 1] ietoscut): o eid n i(1 , 5, trol.on() yedngopui.ercodd %pro,la[] il aislgnMti(la% eid odi, mn0 cnetod) i=, otx=la#mi( an)cek=ngopui.hc(hc aislgnCek La(, od) ngopui.clrotx(la ag.ann, aislgnSaaCnetod, rswrig ag.rtcl,.. rsciia) .) Standard-Contexts: n l - tut gar nichts ul d f u t- gibt Performance-Daten aus eal
  • 24. BASICS #3: PRÄSENTATION
  • 25. SUMMARY Statuszeile ist wichtig!erscheint in Mails, in SMS, auf Pagerin 80-140 Zeichen die „Message“ herüberbringenmuss nachts 3:30 Uhr verständlich sein
  • 26. NICHT HILFREICH
  • 27. SUMMARY – STANDARDIMPLEMENTIERUNGcasSmayls umr: dfo(ef rsls: e ksl, eut) rtr srrsls0) eun t(eut[] dfpolmsl,rsls: e rbe(ef eut) ty r: rtr srrslsfrtsgiiat eun t(eut.is_infcn) ecp Idxro: xet neErr rtr ocekrsls eun n hc eut dfvroesl,rsls: e ebs(ef eut) mg =[ ss ] frrsl i rsls o eut n eut: i rsl.tt = O: f eutsae = k cniu otne mg.ped} {fra(eutsae rsl) ssapn({: }.omtrsl.tt, eut) rtr mg eun ss
  • 28. BEISPIEL: CHECK_LOADcasLaSmayngopui.umr)ls odumr(aislgnSmay: df_ii_(ef prp) e _nt_sl, ecu: sl.ecu=prp efprp ecu dfo(ef rsls: e ksl, eut) i sl.ecu f efprp: wa =odv prcu ht laag e p es: le wa =odv ht laag rtr }i {fra(ht ji( eun { s }.omtwa, , .on srrslsr.erc t(eut[]mti) frri [la1,od od5]) o n od la5, la1)
  • 29. ADVANCED #1: LOGGING & OUTPUT Setup:dfmi(:e an) .. . ag.d_ruetv,-ebs ato=cut, rpadagmn(- -vroe, cinon dfut0 hl=ices vroiy) eal=, epnrae ebst .. . cekmi(ebs=rsvroe hc.anvroeag.ebs) Logging:dfls_sr(ef:e ituessl) lgigif(qeyn ueswt "s cmad, ogn.nourig sr ih %" omn sl.h_m) efwocd ues=[ sr ] .. .
  • 30. VERBOSE=0 Status und Perfdata auf einer Zeile Loglevel warning und höher Summary.verbose() wird nicht angezeigt$cekues hc_srUESO -4ueslge i |ttl4;0uiu=;;SR K sr ogd n oa=;; nqe1;0
  • 31. VERBOSE=1 mehrzeilige Ausgabe sollte Standard sein für Server, die long output verarbeiten Loglevel warning und höher Summary.verbose() wird angezeigt$cekues- hc_sr vUESO -4ueslge iSR K sr ogd nues cahu,cahu,cahu,cahusr: kuas kuas kuas kuas|ttl4;0uiu=;; oa=;; nqe1;0
  • 32. VERBOSE=2 Konfigurationsinformationen zum Plugin z.B. Commandlines externer Aufrufe Loglevel info und höher$cekuesp -v hc_sr.y vUESO -4ueslge iSR K sr ogd nues cahu,cahu,cahu,cahusr: kuas kuas kuas kuasqeyn ueswt "h"cmad(hc_sr.y3)urig sr ih wo omn cekuesp:4|ttl4;0uiu=;; oa=;; nqe1;0
  • 33. VERBOSE=3 Debugging-Informationen z.B. Zwischenergebnisse Loglevel debug und höher$cekuesp -v hc_sr.y vvUESO -4ueslge iSR K sr ogd nues cahu,cahu,cahu,cahusr: kuas kuas kuas kuasqeyn ueswt "h"cmad(hc_sr.y3)urig sr ih wo omn cekuesp:4wootu:bcahu ty 21-02 1:6 (hc_sr.y3)h upt kuas t1 021-9 23 cekuesp:8...|ttl4;0uiu=;; oa=;; nqe1;0
  • 34. FORMATIERUNG VON METRIKEN C n e tist für „seine“ Metriken zuständig otx Variante 1: String-TemplateCnet.. ftmti={ae i {auui})otx(., m_ercnm} s vlent Variante 2: Callabledffra_sron(erc cnet:e omtuecutmti, otx) rtr . eun ..Cnet.. ftmti=omtuecutotx(., m_ercfra_sron)
  • 35. ADVANCED #2: PERSISTENTE DATEN Zustand zwischen Plugin-Aufrufen behalten Cookie LogTail
  • 36. COOKIE persistentes d c it Serialisierung mit JSON Locking wt ngopui.okesl.ttfl)a coi: ih aislgnCoi(efsaeie s oke sl.ietm =coi.e(ls_en,) eftmsap okegtatse mtis=sl.osmtig) erc efd_oehn( coi[ls_en]=sl.ietm okeatse eftmsap Inhalt von statefile:{ "atse" "021-81:82" ls_en: 21-02 20:5}
  • 37. LOGTAILInkrementelles Lesen von wachsenden Logfiles baut auf C o i auf oke erkennt Log-Rotation Wiederaufsetzen nach Exceptionsdfprelgsl)e as_o(ef: coi =ngopui.okesl.ttfl) oke aislgnCoi(efsaeie wt ngopui.oTi(eflgie coi)a l: ih aislgnLgalsl.ofl, oke s f frln i l: o ie n f .. .
  • 38. ADVANCED #3: FEHLERBEHANDLUNG Was ist, wenn es nicht so läuft wie geplant? Wichtige Fehlerklassen: Resource nicht da/nicht abfragbar Fehlerhafte Kommandozeilen-Parameter Umgebungsfehler Programmierfehler
  • 39. @NAGIOSPLUGIN.GUARDED Schützt die main()-Funktion bei Exceptions: Exit-Status 3 API-konforme Ausgabe Traceback bei verbose ≥ 1@aislgngaddngopui.uredfmi(:e an) ag =agas.ruetasr) rp rpreAgmnPre( ag.d_ruet.. rpadagmn(.) ag =ag.as_rs) rs rppreag( cek=ngopui.hc(odag.ecu,.. hc aislgnCekLa(rsprp) .) cekmi( hc.an)
  • 40. BEISPIEL: EXCEPTION IN PROBE()casFi(aislgnRsuc)ls alngopui.eore: dfpoesl) e rb(ef: rieRniero(Imfeigbd) as utmErr" eln a"@aislgngaddngopui.uredfmi(:e an) ag =agas.ruetasr) rp rpreAgmnPre( ag.d_ruetv,ato=cut,dfut0 rpadagmn(- cinon eal=) ag =ag.as_rs) rs rppreag( cek=ngopui.hc(al) hc aislgnCekFi() cekmi(rsvroe hc.anag.ebs) Ausgabe (verbose=0):$cekfi.y hc_alpFI UKON Rniero:ImfeigbdAL NNW: utmErr eln a#ei 3 xt
  • 41. FAZIT Mit n g o p u i macht das aislgnSchreiben von Plugins beinahe Spaß. ;-) Trennung der Verantwortlichkeiten wartbarer, objekt-orientierter Code volle Unterstützung der Plugin-API kleine Helfer robustes Verhalten im Fehlerfall
  • 42. USE THE SOURCE, LUKE Download: http://pypi.python.org/pypi/nagiosplugin Code: https://bitbucket.org/gocept/nagiosplugin Wiki/Tracker/Forum:https://projects.gocept.com/projects/nagiosplugin/wiki
  • 43. DANKE! FRAGEN?