SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
NAGIOSPLUGIN
EINE PYTHON-KLASSENBIBLIOTHEK FÜR NAGIOS/ICINGA-
                    PLUGINS
                   Christian Kauhaus
                    kc@gocept.com
“ The most important figures that one
needs for management are unknown or
             unknowable. ”
             (Lloyd S. Nelson)
CHRISTIAN KAUHAUS
  seit 2008 bei gocept
  Sysadmin
  Hosting/Data Center
  FlyingCircus.io
ÜBERBLICK
Intro
Konzepte
Basics
   Datenerhebung
   Datenbewertung
   Präsentation
Advanced
   Logging & Output
   Persistente Daten
   Fehlerbehandlung
Fazit
BEIPACKZETTEL
          DIESER VORTRAG ENTHÄLT
     Einführung in n g o p u i
                    aislgn
     viele Code-Beispiele
     Live-Demos


        DIESER VORTRAG ENTHÄLT NICHT
die gesamte n g o p u i -API
             aislgn
Konfiguration von Nagios/Icinga-Servern
INTRO
        Plugins sind primäre Methode der
    Informationsgewinnung bei Nagios/Icinga
Input: Kommandozeile
Output: Text auf stdout, Exit-Code
Plugin API:
http://nagios.sourceforge.net/docs/3_0/pluginapi.html
Plugin Development Guidelines:
http://nagiosplug.sourceforge.net/developer-
guidelines.html
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 wy

eh "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 k
ei 0
 xt

#XXsol nvrrahti
  X hud ee ec hs
NAGIOS PLUGIN API

timeout      standard options      output spec
          exit codes           range syntax
    performance data      multi-threshold   status line
                       long output
BEISPIEL: OUTPUT SPEC
CEK-sau ln |pr1pr2
 HC   tts ie ef ef
ln otu
 og upt
ln otu
 og upt
|pr3pr4
  ef ef
pr5pr6
 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 kontinuierlich weiterentwickelt
  Python 3-kompatibel


              Release-Stand:
alte 0.4.x API wird nicht mehr weiterentwickelt
Inhalt des Vortrags neue 1.0 API
KONZEPTE
Terminlogie bei #monitoringsucks –
      watch your language


             Resource
             Metric
             Context
             Event
             Action
KONZEPTE IM NAGIOS-KONTEXT
ZENTRALE KLASSEN
BASICS #1: DATENERHEBUNG
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 ]
BEISPIEL: CHECK_WORLD
ipr ngopui
mot aislgn

casWrdngopui.eore:
ls ol(aislgnRsuc)

  dfpoesl)
  e rb(ef:
    rtr [
     eun
       ngopui.erc'ol' Tu,cnet'ul)
       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)
METRIC
Strukturiertes Value-Objekt für einzelnen Datenpunkt

casMti:
ls erc

  df_ii_(ef nm,vle umNn,mnNn,mxNn,
  e _nt_sl, ae au, o=oe i=oe a=oe
         cnetNn)
         otx=oe:
    ..
    .
BEISPIEL: CHECK_LOAD
casLa(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 pn'po/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.erc'odd %pro,la[]
      il aislgnMti(la%'    eid odi,
                    mn0 cnet'eal'
                     i=, otx=dfut)
BASICS #2: DATENBEWERTUNG
CONTEXT
    erzeugt R s l aus M t i und R s u c
             eut        erc       eore
    erzeugt Performance Data
    erzeugt Klartext-Beschreibung
casCnet
ls 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 ..
SCALARCONTEXT
          Häufig gebrauchter Spezialfall
          warning und critical Ranges
casSaaCnetCnet:
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,
   aislgnSaaCnet'od, rswrig
                ag.rtcl,..
                 rsciia) .)
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.erc'odd %pro,la[]
     il aislgnMti(la%'    eid odi,
                   mn0 cnet'od)
                    i=, otx=la'

#mi(
  an)
cek=ngopui.hc(
hc    aislgnCek
   La(,
   od)
   ngopui.clrotx(la' ag.ann,
   aislgnSaaCnet'od, rswrig
                ag.rtcl,..
                 rsciia) .)



              Standard-Contexts:
      n l - tut gar nichts
       ul
      d f u t- gibt Performance-Daten aus
       eal
BASICS #3: PRÄSENTATION
SUMMARY
           Statuszeile ist wichtig!


erscheint in Mails, in SMS, auf Pager
in 80-140 Zeichen die „Message“ herüberbringen
muss nachts 3:30 Uhr verständlich sein
NICHT HILFREICH
SUMMARY – STANDARDIMPLEMENTIERUNG
casSmay
ls 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
BEISPIEL: CHECK_LOAD
casLaSmayngopui.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')
ADVANCED #1: LOGGING & OUTPUT
                Setup:
dfmi(:
e an)
  ..
  .
  ag.d_ruet'v,'-ebs' ato=cut,
  rpadagmn(-' -vroe, cin'on'
           dfut0 hl=ices vroiy)
           eal=, ep'nrae ebst'
  ..
  .
  cekmi(ebs=rsvroe
  hc.anvroeag.ebs)


               Logging:
dfls_sr(ef:
e ituessl)
  lgigif(qeyn ueswt "s cmad,
  ogn.no'urig sr ih %" omn'
         sl.h_m)
         efwocd
  ues=[
  sr   ]
  ..
  .
VERBOSE=0

      Status und Perfdata auf einer Zeile
      Loglevel warning und höher
      Summary.verbose() wird nicht angezeigt
$cekues
  hc_sr
UESO -4ueslge i |ttl4;0uiu=;;
SR K    sr ogd n  oa=;; nqe1;0
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 v
UESO -4ueslge i
SR K    sr ogd n
ues cahu,cahu,cahu,cahu
sr: kuas kuas kuas kuas
|ttl4;0uiu=;;
  oa=;; nqe1;0
VERBOSE=2

     Konfigurationsinformationen zum Plugin
     z.B. Commandlines externer Aufrufe
     Loglevel info und höher
$cekuesp -v
  hc_sr.y v
UESO -4ueslge i
SR K    sr ogd n
ues cahu,cahu,cahu,cahu
sr: kuas kuas kuas kuas
qeyn ueswt "h"cmad(hc_sr.y3)
urig sr ih wo omn cekuesp:4
|ttl4;0uiu=;;
  oa=;; nqe1;0
VERBOSE=3

          Debugging-Informationen
          z.B. Zwischenergebnisse
          Loglevel debug und höher
$cekuesp -v
  hc_sr.y vv
UESO -4ueslge i
SR K    sr ogd n
ues cahu,cahu,cahu,cahu
sr: kuas kuas kuas kuas
qeyn ueswt "h"cmad(hc_sr.y3)
urig sr ih wo omn cekuesp:4
wootu:bcahu ty 21-02 1:6 (hc_sr.y3)
h upt 'kuas t1 021-9 23' cekuesp:8
..
.
|ttl4;0uiu=;;
  oa=;; nqe1;0
FORMATIERUNG VON METRIKEN
    C n e tist für „seine“ Metriken zuständig
     otx
           Variante 1: String-Template

Cnet.. ftmti={ae i {auui})
otx(., m_erc'nm} s vlent'



               Variante 2: Callable

dffra_sron(erc cnet:
e omtuecutmti, otx)
  rtr '.'
  eun ..

Cnet.. ftmti=omtuecut
otx(., m_ercfra_sron)
ADVANCED #2: PERSISTENTE DATEN
 Zustand zwischen Plugin-Aufrufen behalten


                   Cookie
                   LogTail
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  okegt'atse' '
    mtis=sl.osmtig)
     erc  efd_oehn(
    coi[ls_en]=sl.ietm
     oke'atse'  eftmsap


            Inhalt von statefile:
{
 "atse" "021-81:82"
  ls_en: 21-02 20:5
}
LOGTAIL
Inkrementelles Lesen von wachsenden Logfiles
       baut auf C o i auf
                 oke
       erkennt Log-Rotation
       Wiederaufsetzen nach Exceptions
dfprelgsl)
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
       ..
        .
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
@NAGIOSPLUGIN.GUARDED
    Schützt die main()-Funktion bei Exceptions:
             Exit-Status 3
             API-konforme Ausgabe
             Traceback bei verbose ≥ 1
@aislgngadd
ngopui.ure
dfmi(:
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)
BEISPIEL: EXCEPTION IN PROBE()
casFi(aislgnRsuc)
ls alngopui.eore:

  dfpoesl)
  e rb(ef:
    rieRniero(Imfeigbd)
    as utmErr"' eln a"

@aislgngadd
ngopui.ure
dfmi(:
e an)
  ag =agas.ruetasr)
  rp   rpreAgmnPre(
  ag.d_ruet'v,ato=cut,dfut0
  rpadagmn(-' cin'on' eal=)
  ag =ag.as_rs)
  rs   rppreag(
  cek=ngopui.hc(al)
  hc   aislgnCekFi()
  cekmi(rsvroe
  hc.anag.ebs)



            Ausgabe (verbose=0):
$cekfi.y
  hc_alp
FI UKON Rniero:Imfeigbd
AL NNW: utmErr ' eln a
#ei 3
  xt
FAZIT
   Mit n g o p u i macht das
        aislgn
Schreiben von Plugins beinahe Spaß. ;-)
  Trennung der Verantwortlichkeiten
  wartbarer, objekt-orientierter Code
  volle Unterstützung der Plugin-API
  kleine Helfer
  robustes Verhalten im Fehlerfall
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
DANKE!
 FRAGEN?

Weitere ähnliche Inhalte

Andere mochten auch

Tipps für schlanke Frauen Beine Ernährung bei Cellulite
Tipps für schlanke Frauen Beine Ernährung bei CelluliteTipps für schlanke Frauen Beine Ernährung bei Cellulite
Tipps für schlanke Frauen Beine Ernährung bei CelluliteDaniel Sebbin
 
Psychologies medewerkers van de maand: Annemieke Dubois & Genevieve Heintz
Psychologies medewerkers van de maand: Annemieke Dubois & Genevieve HeintzPsychologies medewerkers van de maand: Annemieke Dubois & Genevieve Heintz
Psychologies medewerkers van de maand: Annemieke Dubois & Genevieve HeintzBerkeley International
 
презентация высокого полета Slideshare
презентация высокого полета Slideshareпрезентация высокого полета Slideshare
презентация высокого полета SlideshareProstoPreza.ru
 
Erikson’s stages of psychosocial development
Erikson’s stages of psychosocial developmentErikson’s stages of psychosocial development
Erikson’s stages of psychosocial developmenthtenney37
 

Andere mochten auch (6)

Tipps für schlanke Frauen Beine Ernährung bei Cellulite
Tipps für schlanke Frauen Beine Ernährung bei CelluliteTipps für schlanke Frauen Beine Ernährung bei Cellulite
Tipps für schlanke Frauen Beine Ernährung bei Cellulite
 
Psychologies medewerkers van de maand: Annemieke Dubois & Genevieve Heintz
Psychologies medewerkers van de maand: Annemieke Dubois & Genevieve HeintzPsychologies medewerkers van de maand: Annemieke Dubois & Genevieve Heintz
Psychologies medewerkers van de maand: Annemieke Dubois & Genevieve Heintz
 
Richard ESCADAFAL "Land and soils task force"
Richard ESCADAFAL "Land and soils task force"Richard ESCADAFAL "Land and soils task force"
Richard ESCADAFAL "Land and soils task force"
 
презентация высокого полета Slideshare
презентация высокого полета Slideshareпрезентация высокого полета Slideshare
презентация высокого полета Slideshare
 
Erikson’s stages of psychosocial development
Erikson’s stages of psychosocial developmentErikson’s stages of psychosocial development
Erikson’s stages of psychosocial development
 
Gis mobile
Gis mobileGis mobile
Gis mobile
 

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

Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und LambdasNane Kratzke
 
Coffee Backone Introduction
Coffee Backone IntroductionCoffee Backone Introduction
Coffee Backone IntroductionTino Isnich
 
Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)GEEKcon
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbaseStefan Frömken
 
Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracingciganek
 
Schneller Einstieg in OpenCL mit C++ Bindings
Schneller Einstieg in OpenCL mit C++ BindingsSchneller Einstieg in OpenCL mit C++ Bindings
Schneller Einstieg in OpenCL mit C++ BindingsPatrick Charrier
 
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenSEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenDr. Herwig Henseler
 
Funktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit ScalaFunktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit Scalathoherr
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelNETWAYS
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX ConnectTrivadis
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processingAndrej Pashchenko
 
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...gedoplan
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyThorsten Kamann
 
Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln OPITZ CONSULTING Deutschland
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für EntwicklerCarsten Czarski
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickleroraclebudb
 

Ähnlich wie nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins (20)

Explain explain
Explain explainExplain explain
Explain explain
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
 
Coffee Backone Introduction
Coffee Backone IntroductionCoffee Backone Introduction
Coffee Backone Introduction
 
Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracing
 
Schneller Einstieg in OpenCL mit C++ Bindings
Schneller Einstieg in OpenCL mit C++ BindingsSchneller Einstieg in OpenCL mit C++ Bindings
Schneller Einstieg in OpenCL mit C++ Bindings
 
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgenSEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
 
Funktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit ScalaFunktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit Scala
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
 
01 sqlplus
01 sqlplus01 sqlplus
01 sqlplus
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX Connect
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processing
 
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
 
5min analyse
5min analyse5min analyse
5min analyse
 
Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickler
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickler
 

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

  • 1. NAGIOSPLUGIN EINE PYTHON-KLASSENBIBLIOTHEK FÜR NAGIOS/ICINGA- PLUGINS Christian Kauhaus kc@gocept.com
  • 2. “ The most important figures that one needs for management are unknown or unknowable. ” (Lloyd S. Nelson)
  • 3. CHRISTIAN KAUHAUS seit 2008 bei gocept Sysadmin Hosting/Data Center FlyingCircus.io
  • 4. ÜBERBLICK Intro Konzepte Basics Datenerhebung Datenbewertung Präsentation Advanced Logging & Output Persistente Daten Fehlerbehandlung Fazit
  • 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 NICHT die gesamte n g o p u i -API aislgn Konfiguration von Nagios/Icinga-Servern
  • 6. INTRO Plugins sind primäre Methode der Informationsgewinnung bei Nagios/Icinga Input: Kommandozeile Output: Text auf stdout, Exit-Code Plugin API: http://nagios.sourceforge.net/docs/3_0/pluginapi.html Plugin 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 wy eh "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 k ei 0 xt #XXsol nvrrahti X hud ee ec hs
  • 8. NAGIOS PLUGIN API timeout standard options output spec exit codes range syntax performance data multi-threshold status line long output
  • 9. BEISPIEL: OUTPUT SPEC CEK-sau ln |pr1pr2 HC tts ie ef ef ln otu og upt ln otu og upt |pr3pr4 ef ef pr5pr6 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 weiterentwickelt Inhalt des Vortrags neue 1.0 API
  • 12. KONZEPTE Terminlogie bei #monitoringsucks – watch your language Resource Metric Context Event Action
  • 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_WORLD ipr ngopui mot aislgn casWrdngopui.eore: ls ol(aislgnRsuc) dfpoesl) e rb(ef: rtr [ eun ngopui.erc'ol' Tu,cnet'ul) 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. METRIC Strukturiertes Value-Objekt für einzelnen Datenpunkt casMti: 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_LOAD casLa(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 pn'po/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.erc'odd %pro,la[] il aislgnMti(la%' eid odi, mn0 cnet'eal' i=, otx=dfut)
  • 21. CONTEXT erzeugt R s l aus M t i und R s u c eut erc eore erzeugt Performance Data erzeugt Klartext-Beschreibung casCnet ls 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 Ranges casSaaCnetCnet: 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, aislgnSaaCnet'od, 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.erc'odd %pro,la[] il aislgnMti(la%' eid odi, mn0 cnet'od) i=, otx=la' #mi( an) cek=ngopui.hc( hc aislgnCek La(, od) ngopui.clrotx(la' ag.ann, aislgnSaaCnet'od, rswrig ag.rtcl,.. rsciia) .) Standard-Contexts: n l - tut gar nichts ul d f u t- gibt Performance-Daten aus eal
  • 25. SUMMARY Statuszeile ist wichtig! erscheint in Mails, in SMS, auf Pager in 80-140 Zeichen die „Message“ herüberbringen muss nachts 3:30 Uhr verständlich sein
  • 27. SUMMARY – STANDARDIMPLEMENTIERUNG casSmay ls 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_LOAD casLaSmayngopui.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_ruet'v,'-ebs' ato=cut, rpadagmn(-' -vroe, cin'on' dfut0 hl=ices vroiy) eal=, ep'nrae ebst' .. . cekmi(ebs=rsvroe hc.anvroeag.ebs) Logging: dfls_sr(ef: e ituessl) lgigif(qeyn ueswt "s cmad, ogn.no'urig 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_sr UESO -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 v UESO -4ueslge i SR K sr ogd n ues cahu,cahu,cahu,cahu sr: 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 v UESO -4ueslge i SR K sr ogd n ues cahu,cahu,cahu,cahu sr: kuas kuas kuas kuas qeyn 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 vv UESO -4ueslge i SR K sr ogd n ues cahu,cahu,cahu,cahu sr: kuas kuas kuas kuas qeyn ueswt "h"cmad(hc_sr.y3) urig sr ih wo omn cekuesp:4 wootu: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-Template Cnet.. ftmti={ae i {auui}) otx(., m_erc'nm} s vlent' Variante 2: Callable dffra_sron(erc cnet: e omtuecutmti, otx) rtr '.' eun .. Cnet.. ftmti=omtuecut otx(., 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 okegt'atse' ' mtis=sl.osmtig) erc efd_oehn( coi[ls_en]=sl.ietm oke'atse' eftmsap Inhalt von statefile: { "atse" "021-81:82" ls_en: 21-02 20:5 }
  • 37. LOGTAIL Inkrementelles Lesen von wachsenden Logfiles baut auf C o i auf oke erkennt Log-Rotation Wiederaufsetzen nach Exceptions dfprelgsl) 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 @aislgngadd ngopui.ure dfmi(: 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" @aislgngadd ngopui.ure dfmi(: e an) ag =agas.ruetasr) rp rpreAgmnPre( ag.d_ruet'v,ato=cut,dfut0 rpadagmn(-' cin'on' eal=) ag =ag.as_rs) rs rppreag( cek=ngopui.hc(al) hc aislgnCekFi() cekmi(rsvroe hc.anag.ebs) Ausgabe (verbose=0): $cekfi.y hc_alp FI UKON Rniero:Imfeigbd AL NNW: utmErr ' eln a #ei 3 xt
  • 41. FAZIT Mit n g o p u i macht das aislgn Schreiben 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