Monitoring mit Icinga und Nagios Müller Ltd.&Co.KG Ulm Müller Ltd. & Co.KG @jensschanz Beruflich • Teamleiter 2nd-Level-Support Filial- und Linuxsysteme • Linux- / Unix-Admin seit 1999 • Nagios-Nutzer seit 2002 • Icinga-Nutzer seit 2010 • OpenSource-Verfechter • Maintainer und Projektleiter Privat Müller Ltd. & Co.KG • Baby 0.5 • Kleinkind 2.3 • Mail: [email protected] • Twitter: @jensschanz • Blog: http://blog.jensschanz.de Vorstellung Vorstellung Müller Ltd. & Co.KG Müller auf einen Blick Firmenname Müller Ltd. & Co. KG Firmensitz 89081 Ulm-Jungingen Geschäftsführer Erwin Müller, Elke Menold, Mitarbeiter rund 24.000 Auszubildende derzeit 600 Gesamtzahl Filialen derzeit 602 (D: 475 / CH: 38 / Ö: 29 / Spanien: 9 / Slowenien: 10 / Ungarn: 31 / Kroatien: 10) Abteilungen / Fachmärkte Drogerie (ca. 50.000 Artikel) Parfümerie (ca. 23.000) Schreibwaren (ca. 18.000) Spielwaren (ca. 20.000) Multi-Media (ca. 40.000) Haushalt+Ambiente (ca. 10.000) OTC (ca. 1000 Artikel) Handarbeit (ca. 2.000) Strümpfe (ca. 6.000) Sortimentsvielfalt ca. 170.000 Artikel Auszeichnungen 1998 »Goldener Zuckerhut« durch die Lebensmittelzeitung Filialgröße 400 bis über 4.000 m² 2004 »Echo« in Kategorie bester Handelspartner Lagerfläche 161.900 m², davon 7.000 m² Hochregallager 2006 Erwin Müller erhält den Gründerpreis BadenWürttemberg Fuhrpark 58 LKW, 280 PKW plus 45 Speditionsfahrzeuge 2008/2009 LIMA Germany Awards Auszeichnung als bester Handelspartner 2009 Zertifizierung für seniorenfreundlichen Service vom Seniorenrat Ulm Stand: Oktober 2010 Müller Ltd. & Co.KG 2010 LARA Games Award Auszeichnung als bester Handelspartner im Bereich Games Müller IT im Überblick Müller Ltd. & Co.KG Müller IT (Zentrale Ulm) im Detail 3 Rechenzentren • 400 Linux Server (davon 300 virtuelle Server) • 120 Windows Server • 350 Router und Switches • 650 Filial-Router Müller Ltd. & Co.KG Müller IT (Filiale) im Detail 650 Filialen • 1600 Workstations • 3200 Kassensysteme • 850 Drucker • 1600 Netzwerkkomponenten • 1300 Zeiterfassungsterminals • 450 EC-Terminals (IP) Müller Ltd. & Co.KG Historie 2002 - Projektbeginn. Entscheidung FÜR Nagios 2003 - Proof of Concept in 5 Filialen 2004 - Rollout Nagios 1.2 in ca. 350 Filialen inkl. NDSUtils 1.0 2008 - Umstellung von Nagios 1.2 auf Nagios 3 mit NDOUtils als DB-Backend - NagiosLite 2009 - 600. Filiale mit Nagios überwacht 2011 - Migration auf Icinga Müller Ltd. & Co.KG Anforderung „WIR müssen merken, wenn etwas nicht funktioniert - NICHT der Kunde!“ ● Zeitnahes Monitoring aller Komponenten ● Verfügbarkeitsauswertung einzelner Komponenten ● Erkennung fehlerhafter Komponenten die mehrfach Störungen aufweisen ● Dokumentation von Störungen (z.B. Störungen und Tickets für Service-Firmen) ● Monitoring bei Software-Auslieferungen Müller Ltd. & Co.KG WTF? Müller Ltd. & Co.KG Umsetzung Manage Infrastructures NOT servers ● Klassifizierung Systeme in Klassen (Workstations, Kassen, Switches, etc.) ● Entscheidung FÜR Nagios und gegen HP Openview, BMC Patrol, etc. ● ● Open Source, Quellcode, Flexibilität, Skalier- und Erweiterbarkeit, große Community Jede Filiale ist eine eigene, selbständige Nagios-Instanz ● Einfache Administration, Pufferung von Daten bei Offline-Fall (DSL-Anbindung) ● Skalierbarkeit, Schonung von Bandbreite ● Replikation der Daten von der Filiale in die Zentrale über ndoutils ● Zentrale ndoutils-Datenbank für alle Instanzen für Auswertungen und Überwachung ● Eigenes Frontend für Fachabteilungen, Operations-Center, etc. Müller Ltd. & Co.KG Umsetzung Umsetzung Infrastruktur Icinga / Nagios NagVis Business Process Addon ndoutils / idoutils Müller Ltd. & Co.KG Infrastruktur Filiale (Nagios) Monitoring Center re ad er NDOUtils-App-Server MySQL-Multi-Master 2 writer reader1 ● reader2 ● ● ndoutils writer ROLE(s) writer reader1 MySQL Replikation MySQL1 ndoutils instance_id=101 Filiale 2 Nagios Workstation Müller Ltd. & Co.KG MySQL2 ndoutils instance_id=102 Filiale 1 Kasse Nagios Kasse Workstation Kasse ROLE(s) reader2 Kasse Infrastruktur Zentrale (Icinga) Icinga Mobile Icinga Icinga Web Jasper Reports DMZ reader2 reader2 writer reader2 writer reader1 ● reader2 ● ● MySQL-Multi-Master ROLE(s) writer reader1 MySQL1 Müller Ltd. & Co.KG MySQL Replikation ROLE(s) reader2 MySQL2 Icinga (Performance-Optimierung) http://docs.icinga.org/latest/de/tuning.html ● ● ● ● 2. Benutzen Sie "Verbesserungen für große Installationen" (large installation tweaks) icinga.cfg → use_large_installation_tweaks=1 3. Optimieren Sie Host-Prüfbefehle 1x Ping und 10 Re-Checks, anstelle 10 Pings 16. Optimieren Sie die Hardware für maximale Leistung 2x Intel QuadCore mit HT, 32 GB RAM, 4x 146GB FP RAID10 17. Benutzen Sie eine RAM-Disk für temporäre Daten icinga.cfg → status_file=/usr/local/icinga/tmpfs/status.dat icinga.cfg → object_cache_file=/usr/local/icinga/tmpfs/objects.cache root@spaceballs ~ $ mount ­t tmpfs ­o size=1024m none /usr/local/icinga/tmpfs/ Müller Ltd. & Co.KG NagVis ● Dokumentation ● Visuelles Monitoring für Management, Fachabteilung, User Help Desk, etc. Müller Ltd. & Co.KG Business Process Monitoring ● Reduzierung Alarme für Benachrichtigungen (E-Mail, SMS, Tickets) ● Reduzierung auf die für den Prozess notwendigen Checks (z.B. kein check_ntp) ● Transparenz für Fachabteilung, User Help Desk ● Schnelle Lokalisierung von Problemen Müller Ltd. & Co.KG Business Process Monitoring ● Abhängigkeitsanalyse ● Fehlersimulation Müller Ltd. & Co.KG Jasper-Reports Befindet sich gerade im Aufbau ● Auswertungen IT-Leitung, Fachabteilungen ● SLA-Management gegenüber Kunden (Filialen) / Wartungsfirma gegenüber uns ● Auswertungen für Support-Teams ● z.B. „Was war heute Nacht los?“ Müller Ltd. & Co.KG Idoutils-DB (Umsetzung) Probleme ● Daten-Overkill ● Schwierig die richtigen Broker-Einstellungen zu finden ● Permanente Kommunikation ● Umfangreiche Dokumentation, schwer verständlich geschrieben ● Source Code sehr schwer zu „lesen“ Müller Ltd. & Co.KG Idoutils-DB (ZLIB-Kompression + Burst-Mode) diff -U 3 -H -E -d -r -- ndoutils-1.4b7/include/config.h.in ndoutils-1.4b7-tre/include/config.h.in --- ndoutils-1.4b7/include/config.h.in 2007-10-31 19:17:05.000000000 +0100 +++ ndoutils-1.4b7-tre/include/config.h.in 2008-11-24 16:34:25.000000000 +0100 @@ -268,4 +268,11 @@ #include <libpq-fe.h> #endif +#undef USE_ZLIB +#undef HAVE_ZLIB +#ifdef USE_ZLIB +#define HAVE_ZLIB 1 +#include <zlib.h> +#endif ... @@ -176,6 +163,10 @@ case 't': if(!strcmp(optarg,"tcp")) socket_type=NDO_SINK_TCPSOCKET; +#ifdef HAVE_ZLIB + else if (!strcmp(optarg,"tcpzip")) + socket_type=NDO_SINK_TCPSOCKETZIP; +#endif else if(!strcmp(optarg,"unix")) socket_type=NDO_SINK_UNIXSOCKET; else Müller Ltd. & Co.KG Idoutils-DB (Performance-Optimierung Schema) ● BLACKHOLE-Engine verwenden ALTER TABLE nagios_commands ENGINE=BLACKHOLE; → ndoutils-DB „austricksen“ und nur das speichern, was benötigt wird ● INNODB-Engine komprimieren ALTER TABLE nagios_servicechecks ENGINE=ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; → reduziert die Größe der DB um 2/3 (CPU!) Müller Ltd. & Co.KG Idoutils-DB (Performance-Optimierung MySQL - Server) [mysqld] ... table_cache = 8192 thread_cache = 5000 max_connections = 2000 wait_timeout = 60 interactive_timeout = 60 concurrent_insert = 2 ... tmp_table_size=256M max_heap_table_size=256M ... Müller Ltd. & Co.KG # the number of open tables for all threads # avoid aborted connections # each ndoutils instance opens up to 3 connections # close idle connections # close idle connections # for some small myisam tables # avoid temp tables on disk # avoid temp tables on disk Idoutils-DB (Performance-Optimierung MySQL - InnoDB) # InnoDB total Configuration innodb_lock_wait_timeout innodb_thread_concurrency … innodb_log_files_in_group innodb_log_file_size innodb_log_buffer_size innodb_flush_log_at_trx_commit ... innodb_adaptive_hash_index innodb_commit_concurrency innodb_file_format innodb_file_per_table innodb_rollback_on_timeout innodb_flush_method Müller Ltd. & Co.KG = 10 =0 # Time to wait before rollback transactions =6 = 512M = 64M =0 # use 6 logfiles to avoid interruptions while checkpointing = OFF =0 = Barracuda # speed up access to data not stored in memory # use as much threads as possible # large enough to buffer high load of inserts # large enough to handle large reports # write log one per second to disk – not safe, but fast # commit as often as possible # enable compression of innodb tables # generate one data file per table # what to do on timeout? = O_DIRECT # use directio and bypass filesystem cache Müller Monitoring Center Müller Monitoring Center Müller Ltd. & Co.KG Monitoring Center (Overview) Müller Ltd. & Co.KG Monitoring Center (Process Monitoring) Müller Ltd. & Co.KG Monitoring Center (Filialeauswahl) Müller Ltd. & Co.KG Monitoring Center (Downtime Monitoring) Müller Ltd. & Co.KG NDS-Tools NDS-Tools Müller Ltd. & Co.KG NDS-Tools Keep it simple – automatize it ● ● ● NDSClient NagiosDataStorage-Client NDSServer NagiosDataStorage-Server CNE CreateNewEnvironment Müller Ltd. & Co.KG NDS-Tools (Funktionsweise) check_nrpe Icinga-Server Client icinga nrpe read read z.B. hosts.cfg nds … obsess_over_host 1 check_freshness 1 freshness_threshold 0 event_handler_enabled 1 low_flap_threshold 0 ... write nrpe.cfg … command[check_load]= command[check_disk_root]= … read (SQL) write (SQL) read cne(.pl) Müller Ltd. & Co.KG trigger ndsserver(.pl) XML ndsclient(.pl) NDSClient (Nagios Data Storage - Client) NDSClient ● PERL-Skript ● Unterstützt Linux, HP-UX, AIX, Windows (als VBS-Skript) ● Liest für Nagios / Icinga relevante Systemdaten aus ● IP-Adresse / Subnetz / Gateway ● /etc/nrpe.conf und /etc/nrpe.conf.d/*.conf ● Contact / Contactgroup / Hostgroup aus /opt/ndsclient/etc/ndsclient.conf ● „Müller“-spezifische Datei /etc/sys.conf (Root-Server, Systemtyp, Filialnummer) ● Generiert XML und schickt es per Socket an den „ndsserver“ Müller Ltd. & Co.KG NDSServer (Nagios Data Storage - Server) NDSServer ● PERL-Skript (Daemon-Mode) ● Liest XML-Stream des „ndsclient“ ● Generiert Objekt-Konfiguration in der nds-Datenbank ● Generiert Abhängigkeiten ● Parents ● Contacts / Contactgroups ● Host- / Servicegroups Triggert CNE für neue Konfiguration ● Müller Ltd. & Co.KG CNE (CreateNewEnvironment) CNE ● ● PERL-Skript Liest nds-Datenbank aus und generiert Konfgurationsdateien für Nagios / Icinga ● Müller Ltd. & Co.KG „Korrigiert“ über SQL-Hooks die nds-Datenbank ● Host- und Servicegroups zusammenbauen ● Attribute anpassen (z.B. check_interval und recheck_interval) ● Contactgroups erweitern, korrigieren ● Everythings is possible … because of SQL Tipps Müller Ltd. & Co.KG Herausforderungen im Admin-Bereich ● ● Organisation „Informations-Overkill“ ● Abhängigkeiten erkennen und definieren ● Eigentliches Problem lokalisieren ● Business-Process-Monitoring nutzen ● NagVis nutzen Bearbeitungszeit (Services im Status Flapping) ● ● ● Schwellwerte anpassen „Richtiges Downtime-Monitoring“ ● Keine Acknowledges setzen … (Gefahr: Fire and forget) ● Laut @dnsmichi auf Twitter für Icinga 1.6 verbessert Applikationen richtig monitoren Müller Ltd. & Co.KG „Richtiges“ Monitoring von Applikationen ● Typisches Monitoring-Szenario check_mysql -u root -p toor -h host1 check_mysql check_http -H host2 -u /applikation/ DB-Server check_http APP-Server Applikations-Update ● app2db.cfg app2db.cfg … username=old password=old123 … Applikation root:toor old:old123 Müller Ltd. & Co.KG … username=new password=new123 … „Richtiges“ Monitoring von Applikationen Ergebnis ● check_mysql → OK ● check_http → OK ● Applikation → DB-Benutzer nicht angelegt = Applikation KAPUTT = Kunde unzufrieden Lösung ● Wrapper-Skripte bauen #!/bin/sh # check_application2database USER=`cat app2db.cfg | grep username | awk ­F= '{ print $2 }'` PASSWORD=`cat app2db.cfg | grep password | awk ­F= '{ print $2 }'` HOST=`cat app2db.cfg | grep hostname | awk ­F= '{ print $2 }'` /usr/local/nagios/libexec/check_mysql ­u $USER ­p $PASSWORD ­h $HOST Müller Ltd. & Co.KG Status quo (Zentrale) Icinga / Nagios (Stand 28.11.2011) ● Migrationsbeginn 07.2011 / Migrationsende 01.2012 ● 1700 Hosts + 10600 Services = 1 Instanz ● 1 APP-Server (Icinga, Icinga-Web → 2 Intel QuadCore, 40GB RAM, 4x 146GB Disk) ● 2 DB-Server (MySQL-Multi-Master → 2 Intel QuadCore, 32GB RAM, 4x 146GB Disk) Müller Ltd. & Co.KG Status quo (Filialen ) Nagios (Stand 28.11.2011) ● 650 Nagios-Instanzen ● 9327 Hosts ● 121107 Servicechecks ● 1 APP-Server (ndotuils → 1x Intel DualCore, 4GB RAM, 2x 146GB Disk (OpenVZ)) ● 2 DB-Server (MySQL-Multi-Master → 2x Intel QuadCore, 32GB RAM, 4x 146GB Disk (OpenVZ)) Müller Ltd. & Co.KG Der Dank geht an … … all diejenigen, die keine Mühe und keinen Aufwand für den Erfolg freier Software scheuen. DANKE! Zlib-Patch für ndoutils (by Tilo Renz, tagwork <one>) – Müller Ltd. & Co.KG http://jensschanz.de/data/zlibpatch.diff.gz