Überwachung von Apache Solr und Lucidworks mit Zabbix
Wenn Sie Apache Solr in der Produktion einsetzen, verlassen Sie sich darauf, dass es eine solide Leistung erbringt, und erwarten,…
Wenn Sie Apache Solr in der Produktion einsetzen, verlassen Sie sich darauf, dass es eine solide Leistung erbringt, und erwarten, dass es jederzeit verfügbar ist. Selbst wenn Sie Ihre Einrichtung mit der erwarteten Daten- und Abfragelast getestet haben, kann etwas schief gehen. Diese Probleme zu lösen, wenn sie auftreten, verursacht nicht nur Ausfallzeiten, sondern ist auch eine sehr unangenehme Aufgabe. Stellen Sie sich schlaflose Nächte vor, wenn Sie versuchen herauszufinden, warum Ihr Produktionssystem mit einem OutOfMemory-Fehler ausgefallen ist. Ähnliche Situationen kommen häufiger vor, als man denkt – kein freier Festplattenspeicher, keine freien Dateideskriptoren, kein freier Speicher für den Cache des Betriebssystems, hohe CPU-Auslastung usw. Es gibt eine spezielle Klasse von Softwareprogrammen, die Überwachungssoftware genannt werden und unter System- und Netzwerkadministratoren weit verbreitet sind. In unserem Fall möchten wir nicht nur die Metriken auf Betriebssystemebene, sondern auch die internen Parameter von Solr überwachen und entsprechend handeln.
Lucidworks und Apache Solr liefern viele wertvolle Informationen über eine JMX-Schnittstelle, die Sie in Ihr Überwachungsprogramm einbinden können.
Zabbix ist eines der beliebtesten Open-Source-Überwachungstools. Es verfügt über viele Funktionen wie eine benutzerfreundliche Weboberfläche, verschiedene Möglichkeiten zum Sammeln von Metrikdaten, die Möglichkeit, diese Daten dauerhaft zu speichern, integrierte Diagramme, Benachrichtigungen und Warnmeldungen, flexible Konfiguration und vieles mehr. Eines der überzeugendsten Merkmale der Integration mit Apache Solr ist die integrierte JMX-Unterstützung (nur in der Zabbix 2.0 Beta-Version verfügbar). Mit dieser Funktion können Sie den Zabbix-Server einfach so konfigurieren, dass er JMX-Metriken aus jeder Lucidworks- oder Solr-Anwendung abruft. Der Grund dafür ist, dass alle Konfigurationseinstellungen (JMX-Attribute, Graphen, Trigger) zentral auf einem Zabbix-Server gespeichert werden. Das bedeutet, dass Sie mit einem einzigen Klick ein neues Attribut für alle überwachten Server hinzufügen oder die Abrufhäufigkeit für Server ändern können.
Hier finden Sie Beispielgrafiken, die Sie in Zabbix erstellen können:
1. Gesamtzahl der Dokumente im Solr-Index
2. Suchaktivität – Anzahl der Suchanfragen, Fehler und Timeouts
Solr-Request-Handler bieten einen kumulativen Zähler für die Anzahl der Anfragen, aber Sie sind wahrscheinlich eher an der Anzahl der Suchanfragen pro bestimmter Zeitspanne interessiert, z.B. pro Minute oder pro Sekunde. Der Trick dabei ist, dass Zabbix eine Möglichkeit bietet, die Überwachung so einzurichten, dass nicht der Wert als solcher, sondern als Delta (einfacher Änderungswert oder Geschwindigkeit pro Sekunde) gespeichert wird.
3. Solr Dokumentoperationen (Hinzufügen, Löschen nach ID oder Abfrage)
4. Krabbeltätigkeit
Lucidworks bietet verschiedene Konnektoren/Crawler, mit denen Sie Dokumente in Solr indizieren können. Außerdem bietet es zusätzliche Statistiken über das Crawler-Verhalten, wie z.B. die Gesamtzahl der Dokumente, neue und gelöschte Dokumente, die Anzahl der aktualisierten Dokumente beim iterativen Crawlen, Fehlschläge usw.
5. Solr-Indexoperationen (Übertragungen, Optimierungen, Rollbacks)
6. Suche Durchschnittliche Antwortzeit
Solr Search Request Handler liefert den kumulativen Wert avgTimePerRequest. Das Problem bei diesem Attribut ist, dass, wenn Ihre Anwendungen über einen längeren Zeitraum in der Produktion laufen, kurzfristige Leistungsprobleme keine nennenswerten Auswirkungen auf diese aggregierte Metrik haben werden. Die Lösung ist die Verwendung eines von Zabbix berechneten Elements zur Delta-Änderung für die Attribute totalTime und requests. Hier ist ein mathematischer Ausdruck zur Berechnung der durchschnittlichen Suchantwortzeit für die letzten 5 Minuten:
sum("jmx["solr/collection1:type=/lucid,id=org.apache.solr.handler.StandardRequestHandler","totalTime"]",300)/sum("jmx["solr/collection1:type=/lucid,id=org.apache.solr.handler.StandardRequestHandler","requests"]",300)
7. Aufwärmzeit für Solr-Sucher
Dies ist eine wichtige Kennzahl, wenn Sie eine schnelle Commit-Rate (Indizierung nahezu in Echtzeit) anstreben und keine Abstriche bei der schnellen Facettierungsleistung machen wollen. Sie können das Überwachungstool so konfigurieren, dass es einen Alarm sendet, wenn die Aufwärmzeit einen vordefinierten Schwellenwert überschreitet.
8. Statistiken zu Filtern, Abfrageergebnissen und Dokumenten-Caches (Cache-Größe, Treffer, Trefferquote, Evictions usw.)
9. Java Heap-Speicherverwendung
Wie kann ich wissen, ob mein Suchserver ausgefallen ist?
Es gibt zwei Möglichkeiten – die offensichtliche ist, Ihr Überwachungstool so einzurichten, dass es Suchanfragen stellt und den Antwortstatus oder einen bestimmten Text auf einer Suchergebnisseite überprüft. Eine andere Möglichkeit besteht darin, zu prüfen, wann Ihr Überwachungstool das letzte Mal ein beliebiges JMX-Attribut von Ihrer Anwendung abgerufen hat, und anzunehmen, dass der Server ausgefallen ist, wenn dies länger als erwartet dauert. In Zabbix gibt es eine spezielle Funktion nodata, mit der Sie dies erreichen können.
Wie kann ich wissen, ob ich an eine Grenze meines Servers stoße und proaktiv darauf reagieren?
Dies ist ein komplexes Thema, denn es gibt viele Dinge, die schief gehen können (z.B. JVM-Heap-Speicher, CPU-Last, Festplattenspeicher, Dateideskriptoren usw.) und Sie sollten sie alle überwachen. Zabbix bietet großartige Beispielvorlagen für OS- und Java-Trigger, mit denen Sie all diese Parameter im Auge behalten können. Weitere Informationen über die Unterstützung von Solr und Lucidworks JMX, Anleitungen zur Konfiguration von Zabbix und Nagios, Zabbix-Konfigurationsvorlagen und andere hilfreiche Tipps finden Sie im Abschnitt Integration von Überwachungsdiensten im Lucid-Dokumentationsportal.