Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
NAGIOSPLUGINEINE PYTHON-KLASSENBIBLIOTHEK FÜR NAGIOS/ICINGA-                    PLUGINS                   Christian Kauhau...
“ The most important figures that oneneeds for management are unknown or             unknowable. ”             (Lloyd S. N...
CHRISTIAN KAUHAUS  seit 2008 bei gocept  Sysadmin  Hosting/Data Center  FlyingCircus.io
ÜBERBLICKIntroKonzepteBasics   Datenerhebung   Datenbewertung   PräsentationAdvanced   Logging & Output   Persistente Date...
BEIPACKZETTEL          DIESER VORTRAG ENTHÄLT     Einführung in n g o p u i                    aislgn     viele Code-Beisp...
INTRO        Plugins sind primäre Methode der    Informationsgewinnung bei Nagios/IcingaInput: KommandozeileOutput: Text a...
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...
NAGIOS PLUGIN APItimeout      standard options      output spec          exit codes           range syntax    performance ...
BEISPIEL: OUTPUT SPECCEK-sau ln |pr1pr2 HC   tts ie ef efln otu og uptln otu og upt|pr3pr4  ef efpr5pr6 ef ef
BEISPIEL: RANGE-SYNTAX         9         -6:8         ~:3         -2.25:         @5:7.5
NAGIOSPLUGIN IST...  Python-Klassenbibliothek  Open Source (ZPL-Lizenz)  entstanden aus gocept -Eigenbedarf  seit 2010 kon...
KONZEPTETerminlogie bei #monitoringsucks –      watch your language             Resource             Metric             Co...
KONZEPTE IM NAGIOS-KONTEXT
ZENTRALE KLASSEN
BASICS #1: DATENERHEBUNG
RESOURCE           Domain Model           Subklasse von R s u c                          eore           p o e )erzeugt Met...
BEISPIEL: CHECK_WORLDipr ngopuimot aislgncasWrdngopui.eore:ls ol(aislgnRsuc)  dfpoesl)  e rb(ef:    rtr [     eun       ng...
METRICStrukturiertes Value-Objekt für einzelnen DatenpunktcasMti:ls erc  df_ii_(ef nm,vle umNn,mnNn,mxNn,  e _nt_sl, ae au...
BEISPIEL: CHECK_LOADcasLa(aislgnRsuc)ls odngopui.eore: df_ii_(ef prp=as) e _nt_sl, ecuFle:   sl.ecu=prp   efprp   ecu dfcu...
BASICS #2: DATENBEWERTUNG
CONTEXT    erzeugt R s l aus M t i und R s u c             eut        erc       eore    erzeugt Performance Data    erzeug...
SCALARCONTEXT          Häufig gebrauchter Spezialfall          warning und critical RangescasSaaCnetCnet:ls clrotx(otx)  d...
ZUORDNUNG METRIC/CONTEXT  Jede M t i benennt den zuständigen C n e t        erc                           otx#La.rb(  odpo...
BASICS #3: PRÄSENTATION
SUMMARY           Statuszeile ist wichtig!erscheint in Mails, in SMS, auf Pagerin 80-140 Zeichen die „Message“ herüberbrin...
NICHT HILFREICH
SUMMARY – STANDARDIMPLEMENTIERUNGcasSmayls umr: dfo(ef rsls: e ksl, eut)   rtr srrsls0)   eun t(eut[] dfpolmsl,rsls: e rbe...
BEISPIEL: CHECK_LOADcasLaSmayngopui.umr)ls odumr(aislgnSmay: df_ii_(ef prp) e _nt_sl, ecu:   sl.ecu=prp   efprp   ecu dfo(...
ADVANCED #1: LOGGING & OUTPUT                Setup:dfmi(:e an)  ..  .  ag.d_ruetv,-ebs ato=cut,  rpadagmn(- -vroe, cinon  ...
VERBOSE=0      Status und Perfdata auf einer Zeile      Loglevel warning und höher      Summary.verbose() wird nicht angez...
VERBOSE=1 mehrzeilige Ausgabe sollte Standard sein für Server, die long output verarbeiten Loglevel warning und höher Summ...
VERBOSE=2     Konfigurationsinformationen zum Plugin     z.B. Commandlines externer Aufrufe     Loglevel info und höher$ce...
VERBOSE=3          Debugging-Informationen          z.B. Zwischenergebnisse          Loglevel debug und höher$cekuesp -v  ...
FORMATIERUNG VON METRIKEN    C n e tist für „seine“ Metriken zuständig     otx           Variante 1: String-TemplateCnet.....
ADVANCED #2: PERSISTENTE DATEN Zustand zwischen Plugin-Aufrufen behalten                   Cookie                   LogTail
COOKIE           persistentes d c                          it           Serialisierung mit JSON           Locking  wt ngop...
LOGTAILInkrementelles Lesen von wachsenden Logfiles       baut auf C o i auf                 oke       erkennt Log-Rotatio...
ADVANCED #3: FEHLERBEHANDLUNG Was ist, wenn es nicht so läuft wie geplant?          Wichtige Fehlerklassen:   Resource nic...
@NAGIOSPLUGIN.GUARDED    Schützt die main()-Funktion bei Exceptions:             Exit-Status 3             API-konforme Au...
BEISPIEL: EXCEPTION IN PROBE()casFi(aislgnRsuc)ls alngopui.eore:  dfpoesl)  e rb(ef:    rieRniero(Imfeigbd)    as utmErr" ...
FAZIT   Mit n g o p u i macht das        aislgnSchreiben von Plugins beinahe Spaß. ;-)  Trennung der Verantwortlichkeiten ...
USE THE SOURCE, LUKE                     Download:      http://pypi.python.org/pypi/nagiosplugin                        Co...
DANKE! FRAGEN?
Nächste SlideShare
Wird geladen in …5
×

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

1.999 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

  1. 1. NAGIOSPLUGINEINE PYTHON-KLASSENBIBLIOTHEK FÜR NAGIOS/ICINGA- PLUGINS Christian Kauhaus kc@gocept.com
  2. 2. “ The most important figures that oneneeds for management are unknown or unknowable. ” (Lloyd S. Nelson)
  3. 3. CHRISTIAN KAUHAUS seit 2008 bei gocept Sysadmin Hosting/Data Center FlyingCircus.io
  4. 4. ÜBERBLICKIntroKonzepteBasics Datenerhebung Datenbewertung PräsentationAdvanced Logging & Output Persistente Daten FehlerbehandlungFazit
  5. 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. 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. 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. 8. NAGIOS PLUGIN APItimeout standard options output spec exit codes range syntax performance data multi-threshold status line long output
  9. 9. BEISPIEL: OUTPUT SPECCEK-sau ln |pr1pr2 HC tts ie ef efln otu og uptln otu og upt|pr3pr4 ef efpr5pr6 ef ef
  10. 10. BEISPIEL: RANGE-SYNTAX 9 -6:8 ~:3 -2.25: @5:7.5
  11. 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. 12. KONZEPTETerminlogie bei #monitoringsucks – watch your language Resource Metric Context Event Action
  13. 13. KONZEPTE IM NAGIOS-KONTEXT
  14. 14. ZENTRALE KLASSEN
  15. 15. BASICS #1: DATENERHEBUNG
  16. 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. 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. 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. 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. 20. BASICS #2: DATENBEWERTUNG
  21. 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. 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. 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. 24. BASICS #3: PRÄSENTATION
  25. 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. 26. NICHT HILFREICH
  27. 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. 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. 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. 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. 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. 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. 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. 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. 35. ADVANCED #2: PERSISTENTE DATEN Zustand zwischen Plugin-Aufrufen behalten Cookie LogTail
  36. 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. 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. 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. 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. 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. 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. 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. 43. DANKE! FRAGEN?

×