Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Monitoring Workshop 2017 - Philip Griesbacher - Iapetos

94 views

Published on

Wie überwacht man Nagios / Naemon mit Prometheus.
How to monitor Nagios / Naemon with Prometheus.

https://github.com/Griesbacher/Iapetos

Published in: Software
  • Be the first to comment

  • Be the first to like this

Monitoring Workshop 2017 - Philip Griesbacher - Iapetos

  1. 1. Iapetos - ein Nagios / Naemon - Exporter für Prometheus Philip Griesbacher Düsseldorf, 12.09.2017 Monitoring Workshop 2017
  2. 2. Seite Inhalt • Ziel • Vorstellung von – Nagios – Prometheus • Realisierung • Demo • Fazit 12.09.2017 Philip Griesbacher - www.consol.de2
  3. 3. Seite Ziel • Nagios / Naemon in Prometheus integrieren • Überwachung von Nagios / Naemon • Monitoring-Administratoren die Möglichkeit zum Testen von Prometheus geben 12.09.2017 Philip Griesbacher - www.consol.de3
  4. 4. Seite Nagios ≈ Naemon 12.09.2017 Philip Griesbacher - www.consol.de4 [1]
  5. 5. Seite Realisierung – NEB Module • C Schnittstelle im Nagios-Core • Bekannteste Beispiele: – MK-Livestatus – ModGearman 12.09.2017 Philip Griesbacher - www.consol.de5
  6. 6. Seite Prometheus 12.09.2017 Philip Griesbacher - www.consol.de6 [2]
  7. 7. Seite Prometheus Check-Pendant • Direkte Integration – Offizielle Bibliotheken: • Go • Java • Python • Ruby • Exporter ≈ Mittelsmänner – Z.B. Nodeexporter 12.09.2017 Philip Griesbacher - www.consol.de7
  8. 8. Seite Realisierung – Komponenten 12.09.2017 Philip Griesbacher - www.consol.de8
  9. 9. Seite Realisierung – Go NEB Wrapper • Warum Go? • Alternativen: – C – C++ • → CGo Bibliothek • NEB C Schnittstelle ↔ Go Interface 12.09.2017 Philip Griesbacher - www.consol.de9
  10. 10. Seite Realisierung – Go NEB Wrapper • Abbildung von Konstanten • Aufrufen von C Methoden aus Go und umgekehrt • Eigenes Callback-Handling • Konvertieren von C void Pointer in Go Objekte 12.09.2017 Philip Griesbacher - www.consol.de10
  11. 11. Seite Demo – Iapetos 12.09.2017 Philip Griesbacher - www.consol.de11 [3]
  12. 12. Seite Fazit • Bestehende Monitoring Umgebungen können nahtlos in Prometheus zu integrieren, ohne sie in ihrer bisherigen Funktionsweise einzuschränken. • Der Exporter wird nun offiziell von Prometheus unterstützt, indem er auf ihrer Webseite Prometheus.io hinterlegt wurde. • Unterstützte Cores: – Nagios 3 / Icinga ohne Daemon-Mode – Nagios 4 – Naemon • Projekt: https://github.com/Griesbacher/Iapetos 12.09.2017 Philip Griesbacher - www.consol.de16
  13. 13. 17Seite Danke! 12.09.2017 Philip Griesbacher - www.consol.de
  14. 14. Seite Quellen • [1] basierend auf: https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/integratio n.html • [2] basierend auf: https://prometheus.io/docs/introduction/overview/ • [3]: https://cdn-images- 1.medium.com/max/800/1*QrP3uWcGAZfNWFDCwZOdmQ.jpeg 12.09.2017 Philip Griesbacher - www.consol.de18
  15. 15. 19Seite Fragen? 12.09.2017 Philip Griesbacher - www.consol.de
  16. 16. 20Seite Philip Griesbacher - www.consol.de ConSol* Software GmbH Franziskanerstraße 38 D-81669 München Tel: +49-89-45841-100 Fax: +49-89-45841-111 info@consol.de www.consol.de 12.09.2017
  17. 17. Seite Realisierung - Abbildung von Konstanten import "C" const ( ProcessData = C.NEBCALLBACK_PROCESS_DATA ... ) var callbackTypeMapping = map[int]string{ ProcessData: "ProcessData", … } func CallbackTypeToString(callbackType int) string {…} 12.09.2017 Philip Griesbacher - www.consol.de21
  18. 18. Seite Realisierung - Abbildung von Konstanten switch neb.GetCoreType() { case neb.CoreNagios3: Active = C.SERVICE_CHECK_ACTIVE Passive = C.SERVICE_CHECK_PASSIVE ... case neb.CoreNaemon, neb.CoreNagios4: Active = 0 Passive = 1 ... } 12.09.2017 Philip Griesbacher - www.consol.de22
  19. 19. Seite Realisierung - Abbildung von Konstanten • neb.CoreNaemon, neb.CoreNagios3, neb.CoreNagios4 ??? • go build -tags nagios3 • #cgo nagios3 CFLAGS: -DNAGIOS3 -I. -I${SRCDIR}/../libs int nebmodule_init( int flags, char *args, nebmodule *handle ) { //This is used to tell the Go code for which core its been compiled #if defined(NAGIOS3) CORE_TYPE = CORE_NAGIOS3; … 12.09.2017 Philip Griesbacher - www.consol.de23
  20. 20. Seite Realisierung - Aufruf von C Methoden aus Go /* #if defined(NAGIOS3) void Log(int lvl, char* data) { write_to_all_logs(data, lvl); } #elif defined(NAGIOS4) void Log(int lvl, char* data) { write_to_all_logs(data, lvl); } #elif defined(NAEMON) void Log(int lvl, char* data) { nm_log(lvl, data); } #endif */ import "C" func log(lvl int64, data string) { cs := C.CString(data) defer C.free(unsafe.Pointer(cs)) C.Log(C.int(lvl), cs) } 12.09.2017 Philip Griesbacher - www.consol.de24
  21. 21. Seite Realisierung - Aufruf von Go Methoden aus C //export GoNebModuleInit func GoNebModuleInit(flags int, args *C.char) C.int { ... } int nebmodule_init( int flags, char *args, nebmodule *handle ) { ... return(GoNebModuleInit(flags, args)); } 12.09.2017 Philip Griesbacher - www.consol.de25
  22. 22. Seite Realisierung - Callback-Handling • User soll keinen C Kontakt haben • Laufzeitfehler abfangen • Laufzeitmessung • Laufzeitüberschreitung erkennen 12.09.2017 Philip Griesbacher - www.consol.de26
  23. 23. Seite Realisierung - Konvertieren von C void Pointer in Go Objekte C void Pointer - 😓 → Go Objekte - 😀 12.09.2017 Philip Griesbacher - www.consol.de27

×