Zum Hauptinhalt gehen

Probleme bei der Suche und Indexierung

Die Suchleiste bietet nicht die Option, alle Ordner zu durchsuchen.

Für alle Nutzer

Wenn dies bei allen Nutzern der Fall ist, ist dies wahrscheinlich auf eine Migration der E-Mails auf Dateisystemebene zurückzuführen. Das bedeutet, dass der Elasticsearch-Suchindex nicht vorhanden ist: Sie können den ConsolidateMailSpoolIndexJob-Task ausführen, um den Index zu erstellen und alle E-Mails des Servers zu indizieren:

  • Entweder indem Sie zum Admin-Bereich > Systemverwaltung > Zeitplanung gehen > den ConsolidateMailSpoolIndexJob-Task ausführen

  • Oder per Befehlszeilenwerkzeug den Wartungsvorgang consolidateIndex ausführen:

    bm-cli maintenance consolidateIndex domain.net

Da diese Operation sehr ressourcenintensiv ist, können Sie sie mit der Option --match in Benutzergruppen ausführen:

bm-cli maintenance consolidateIndex --match "a.\*" domain.net
bm-cli maintenance consolidateIndex --match "[b-c].\*" domain.net

Für einige Nutzer

Wenn das Problem nur einen oder wenige Nutzer betrifft, bedeutet dies, dass der ElasticSearch-Index für diese Nutzer nicht existiert oder beschädigt ist und neu erstellt werden muss:

  • Oder indem Sie zum Admin-Bereich jedes Benutzers gehen, den Wartungstab öffnen und auf "Bestätigen und reparieren" und dann auf "Index konsolidieren" klicken

  • Oder per Befehlszeilenwerkzeug :

    bm-cli maintenance repair user@domain.net
    bm-cli maintenance consolidateIndex user@domain.net

In einigen Fällen reicht "Index konsolidieren" nicht aus und es ist dann notwendig, eine vollständige Indizierung über das Argument --reset erneut zu starten:

bm-cli maintenance consolidateIndex --reset user@domain.tld

Es fehlen Ergebnisse in der Suche

Bei vorübergehenden Problemen mit dem Indizierungsdienst kann es sein, dass einige während dieser Zeit gesendeten und empfangenen Nachrichten nicht indiziert wurden. In diesem Fall genügt es, den Task ConsolidateMailSpoolIndexJob auszuführen, der den Unterschied zwischen den Nachrichten auf IMAP-Ebene und im Index berechnet und nur die fehlenden Nachrichten indiziert.

Bei der Suche wird ein Fehler angezeigt.

Dies kann auf eine Inkonsistenz zwischen der Liste der Ordner auf IMAP-Ebene und in der Datenbank zurückzuführen sein. Die Wartungsaktion "Bestätigen und reparieren" (Operation* check&repair*) im Wartungstab des Benutzerprofils ermöglicht es, diese Liste neu zu erstellen, eine Neuindizierung des Postfachs sollte dann das Problem beheben (im selben Tab "Postfachindex neu erstellen").

Wenn dies nicht der Fall ist, können die Protokolle /var/log/bm-webmail/errors die Ursache des Problems anzeigen.

Beim Zugriff auf eine Nachricht, die durch eine Suche gefunden wurde, wird ein Fehler angezeigt.

Es handelt sich wahrscheinlich um einen Indexierungsfehler, wenn eine Nachricht verschoben wurde. Die Wartungsaktion "Mailbox konsolidieren", die über die Registerkarte Wartung der Benutzerdaten zugänglich ist, aktualisiert den Suchindex.

ElasticSearch wechselt in den "read only"-Modus

Problem : Elasticsearch setzt sich selbst in den Modus "nur lesbar", der Cluster ist grün, aber ein Neustart behebt das Problem nicht.

Festgestellte Symptome : Im Allgemeinen scheint BlueMind nicht mehr zu funktionieren, neben Problemen mit Suche und Anzeige ist es unmöglich, Ereignisse zu erstellen, auf E-Mails zu antworten usw.

Warnungen mit bm-elasticsearch werden auf der Seite Überwachungskonsole->Allgemeiner Zustand der Installation des Admin-Portals sowie in TICK angezeigt.

Sie können Fehler mit ClusterBlockException in /var/log/bm/core.log feststellen. Zum Beispiel :

... class java.util.concurrent.ExecutionException: ClusterBlockException[index [mailspool_pending] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];]

oder

...  class net.bluemind.core.api.fault.ServerFault: java.util.concurrent.ExecutionException: ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]

Bestätigung : Der folgende Befehl gibt ERROR: At least one index is read-only zurück (auf dem Elasticsearch-Server ausführen)

curl -s 'http://localhost:9200/_all/_settings' | jq -r '
if any(.[]; .settings.index.blocks.read_only_allow_delete == "true")
then
"ERROR: At least one index is read-only"
else
"INFO: All indexes are read-write"
end'

Ursache : Das Dateisystem, das die ElasticSearch-Indexdaten enthält, ist zu mehr als 80% gefüllt.

Lösung :

  1. Erhöhen Sie die Größe des Dateisystems, das die Daten der ElasticSearch-Indizes enthält (erweitern Sie die Partition oder ändern Sie die Festplatte und ändern Sie dann die Größe des Dateisystems)
  2. Überprüfe, ob der Prozentsatz der Nutzung der Datenpartitionen der ElasticSearch-Indizes wieder unter 80% gefallen ist (auf dem Elasticsearch-Server ausführen):
df /var/spool/bm-elasticsearch/{data,repo} -h
  1. Spielt den folgenden Befehl ab:
curl -X PUT "localhost:9200/_all/_settings" -H 'Content-Type: application/json' -d'{ "index.blocks.read_only_allow_delete" : false } }'
  1. Starten Sie den Befehl des Bestätigungs-Schritts erneut, er sollte INFO: Alle Indizes sind schreibgeschützt zurückgeben.
  2. Starte die Indizierung der Boxen, die sie benötigen (auf dem Core-Server ausführen):
bm-cli index coherency --workers=4 --run-consolidate all

Die Logs zeigen Fehler in Bezug auf die Quoten esQuota und imapQuota an.

Meldungen wie diese finden sich in der Datei /var/log/bm-webmail/errors :

10-Nov-2019 17:37:38 UTC] [jdoe@bluemind.loc] esQuota < (imapQuota \* 0.8). disable es search. esQuota: 4199171, imapQuota: 6123568 

Dies bedeutet, dass für das angegebene Konto weniger als 80% der Box indiziert ist (esQuota = elasticsearch-Quote), die elasticsearch-Suche (== die erweiterte Suchmaschine) ist daher deaktiviert, da sie ineffizient ist.

Um dies zu beheben, muss eine Konsolidierung oder Neuindizierung des Kontos vorgenommen werden.

Für einige identifizierte Nutzer

Wenn das Problem nur einen oder wenige Nutzer betrifft, bedeutet dies, dass der ElasticSearch-Index für diese Nutzer nicht existiert oder beschädigt ist und neu erstellt werden muss:

  • entweder indem Sie zur Administrationsseite jedes Benutzers gehen und auf "Bestätigen und Reparieren" und dann auf "Index konsolidieren" klicken und falls keine Verbesserung vorliegt, auf "Index neu aufbauen"

  • Oder per Befehlszeilenwerkzeug :

    bm-cli maintenance repair user@domain.net
    bm-cli maintenance consolidateIndex user@domain.net

Für alle betroffenen Nutzer

Um alle betroffenen Konten zu reparieren, können Sie folgendermaßen vorgehen:

  1. die Konten mit einem Grep auf die Logdatei finden:
grep "disable es search. esQuota:" /var/log/bm-webmail/errors
  1. kopieren Sie die gefundenen Logins in eine Textdatei (z. B. /tmp/accountWithoutEsSearch.txt)
  2. Verwende die folgende Kombination von Befehlen, um die Indexkonsolidierung für jeden Login in der Datei :
while read account; do bm-cli maintenance consolidateIndex $account;done < /tmp/accountWithoutEsSearch.txt

Globale Fehlfunktion

Analyse

Wenn Sie ein Suchproblem in BlueMind feststellen, können Sie den Zustand des ElasticSearch-Clusters mit dem Befehl überprüfen:

$ curl -XGET --silent 'http://localhost:9200/_cluster/health'

Wenn der Status 'grün' ist, ist alles in Ordnung, wenn er 'rot' ist, bedeutet dies, dass es ein Problem mit Elasticsearch gibt. Diese Information wird auch im Überwachungskonsole angezeigt.

Mit dem Befehlszeilenverwaltungs-Tool können Sie den Zustand des Index eines bestimmten Benutzers überprüfen :

$ bm-cli index info admin@local.lan
{"email":"jdoe@domain.loc","ESQuota":3056,"IMAPQuota":3058,"ratio":95}

Auflösung

Es gibt mehrere Bedingungen, die den Betrieb von ElasticSearch verhindern können:

  • unzureichend indexierter Posteingang : Wenn bei der Überprüfung des Indexes (siehe oben) ein Verhältnis unter 80% festgestellt wird, bedeutet dies, dass weniger als 80% der E-Mails des Benutzers indexiert sind => führen Sie eine Neuindizierung des Posteingangs durch :

    • Gehen Sie zur Verwaltungskonsole von BlueMind.
    • gehen Sie zur Administrationsseite des Benutzers > Tab Wartung
    • Führen Sie die Operation "Posteingangsindex neu erstellen" aus
  • Indexbeschädigung : hauptsächlich aufgrund von nicht ausreichendem Festplattenspeicher, es sollten mindestens 10% freier Festplattenspeicher vorhanden sein. Wenn die Festplatte mit den ES-Daten (/var/spool/bm-elasticsearch) knapp wurde, können die Suchindizes beschädigt sein. In den ES-Logs äußert sich dies in einem Fehler beim Start des Dienstes :

    [2017-01-26 20:06:54,764][WARN ][cluster.action.shard] [Bill Foster] [mailspool][0] received shard failed for [mailspool][0], node[PcC6eICxRAajmWioK1mhDA], [P], s[INITIALIZING], indexUUID 
    [IEJHQkOnTtOcdY0bMMIFRA], reason [master [Bill Foster][PcC6eICxRAajmWioK1mhDA][bluemind.exa.net.uk][inet[/82.219.13.101:9300]] marked shard as initializing, but shard is marked as failed, resend shard failure]
    [2016-01-26 20:06:55,828][WARN ][indices.cluster] [Bill Foster] [mailspool][0] failed to start shard
    org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [mailspool][0] failed to recover shard
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:287)
    at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

    Dann muss man :

    1. die Indexdateien löschen und ElasticSearch neu starten :
    service bm-elasticsearch stop
    rm -rf /var/spool/bm-elasticsearch/data/nodes/0/indices/\*
    service bm-elasticsearch start
    1. Indizes zurücksetzen :
    bm-cli index reset mailspool
    bm-cli index reset mailspool_pending
    bm-cli index reset event
    bm-cli index reset contact
    bm-cli index reset todo
    bm-cli index reset im
    bm-cli index reset note
    1. Starten Sie dann eine neue Indizierung von der geplanten Aufgabenverwaltung aus: Administrationskonsole > Systemverwaltung > Planung > wählen Sie die Domain "global.virt" aus und starten Sie die Aufgaben *IndexJob :
    • CalendarIndexJob

    • KontaktIndexJob

    • ConsolidateMailSpoolIndexJob

      Beachten Sie jedoch, dass die Indizierung von E-Mails eine IO-intensive Operation ist, es ist also ratsam, diese Aufgabe am Abend oder am Wochenende zu starten. Beachte, dass es möglich ist, die Indexierung im Batch mit bm-cli zu starten.

    • TodoListIndexJob

    • HSMIndexJob

  • Translog-Beschädigung : dies kann bei einem Serverabsturz oder Speichermangel auftreten. In diesem Fall wird der allgemeine Index nicht beschädigt und nur die Indizierung der letzten Dokumente, die noch nicht auf die Festplatte geschrieben wurden, geht verloren. In den ES-Logs wird dies durch den Fehler beim Start des Dienstes :

    [2017-09-04 19:24:38,340][WARN ][indices.cluster          ] [Hebe] [mailspool][1] failed to start shard
    org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [mailspool][1] failed to recover shard
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:287)
    at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.elasticsearch.index.translog.TranslogCorruptedException: translog corruption while reading from stream
    at org.elasticsearch.index.translog.ChecksummedTranslogStream.read(ChecksummedTranslogStream.java:70)
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:257)
    ... 4 more

Um beschädigte Translogs zu löschen :

service bm-elasticsearch stop
rm -rf /var/spool/bm-elasticsearch/data/nodes/0/indices/mailspool/\*/translog
service bm-elasticsearch start

Durch Ausführen der Aufgabe ConsolidateMailSpoolIndexJob werden die fehlenden E-Mails neu indiziert