Your SlideShare is downloading. ×
0
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?
Upcoming SlideShare
Loading in...5
×

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

1,174

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,174
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "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?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×