Znuny Health-Check & Performance-Tuning
Lange Ladezeiten oder hohe Serverlast? Wir optimieren Datenbankabfragen, Indizes, Caching und den Znuny-Daemon für spürbar schnellere Reaktionszeiten.
In diesem tiefgehenden Leitfaden behandeln wir alle relevanten Ebenen für eine skalierbare und performante Znuny-Installation:
Kernel::System::Ticket::IndexAccelerator::RuntimeDBticket-TabelleKernel::System::Ticket::IndexAccelerator::StaticDBticket_index-Tabelle mit Token-Spalten (Betreff, Status, Owner u.v.m.)Kernel::System::Ticket::IndexAccelerator::RuntimeDBtickettime-KommandoKernel::System::Ticket::IndexAccelerator::StaticDB| Einstellung | Wert | Zweck |
|---|---|---|
| Ticket::SearchIndex::IndexArchivedTickets | 0 (aus) | Archivierte Tickets ausschließen |
| Ticket::SearchIndex::Attribute.WordCountMax | 1000 | Erste 1000 Wörter indexieren |
| Ticket::SearchIndex::Filters | Standard | Regex-Filter für Sonderzeichen |
| Ticket::SearchIndex::StopWords###Custom | de, en | Eigene Stopwords ergänzen |
ticket_indexFür große Datenmengen (>10M Artikel) wird Elasticsearch empfohlen.
time
keyword
keyword-Typ für selten geänderte Felder (z. B. Ticket-IDs)text + analyzer für Freitext| Backend | Speicherort | Einsatz |
|---|---|---|
| DB | MySQL/MariaDB | < 10k Anhänge, Single-Server |
| FS | lokales FS / NFS / SAN | ≥ 10k Anhänge, Multi-Server, hohe IOPS |
text
/opt/znuny/var/log/article_storage.logznuny (UID 1000)Reduziert aktiv indexierte Datensätze.
Ticket::ArchiveSystem = 1State = close UND Changed < now-6monanalyzer/opt/znuny/var/log/article_storage.logcpan install Redis::Fastznuny/opt/znuny/var/tmpTicket::ArchiveSystem = 1
Bearbeite /etc/my.cnf.d/znuny.cnf:
State = close
Script: /usr/local/bin/znuny_monitor.sh
Changed < now-6mon
Cron (stündlich):
cpan install Redis::Fast
/opt/znuny/var/tmp
Cron: täglich 1:00 Uhr
znuny-agent Metriken (ResponseTime, QueueDepth)max_connectionsMit diesem umfassenden Performance-Tuning-Plan auf Index-, Such-, Storage-, Cache-, Datenbank- und Infrastruktur-Ebene erreichen Sie in Znuny eine stabile und schnelle Plattform, die auch bei Millionen von Tickets und Artikeln reibungslos skaliert.
Znuny Health-Check & Performance-Tuning
Lange Ladezeiten oder hohe Serverlast? Wir optimieren Datenbankabfragen, Indizes, Caching und den Znuny-Daemon für spürbar schnellere Reaktionszeiten.
Der Wechsel von RuntimeDB auf StaticDB in Znuny ist entscheidend für die Performance bei großen Ticketmengen. Während RuntimeDB (Modul Kernel::System::Ticket::IndexAccelerator::RuntimeDB) dynamische Abfragen direkt auf der ticket-Tabelle durchführt und bis etwa 60.000 offene Tickets ohne spürbare Latenz auskommt, steigt die Abfragezeit hier linear mit der Ticketanzahl. StaticDB (Modul Kernel::System::Ticket::IndexAccelerator::StaticDB) hingegen ist für Installationen mit über 80.000 offenen Tickets konzipiert und bietet konstante Abfragezeiten. Es nutzt eine vorkompilierte ticket_index-Tabelle mit Token-Spalten für Betreff, Status, Owner und weitere Attribute.
Die initiale Indizierung erfolgt durch Ausführung des Rebuild-Kommandos, und ein täglicher Rebuild, beispielsweise um 02:30 Uhr via Cron, ist empfehlenswert, um die Index-Tabelle aktuell zu halten. Für weitere Optimierung können automatische Teil-Rebuilds nur für geänderte Queues in der SysConfig aktiviert werden. Die Laufzeit des Rebuilds sollte mittels des time-Kommandos überwacht werden, um Performance-Engpässe zu identifizieren.
Quellen:
Nein, Elasticsearch ist für die Volltextsuche in Znuny nicht zwingend erforderlich. Znuny verfügt über einen internen Volltextindex, der für die meisten Installationen ausreichend ist. Dieser interne Index kann bei Bedarf neu aufgebaut werden und bietet Konfigurationsmöglichkeiten über die SysConfig, um beispielsweise archivierte Tickets auszuschließen (Ticket::SearchIndex::IndexArchivedTickets = 0), die Anzahl der zu indexierenden Wörter zu begrenzen (Ticket::SearchIndex::Attribute.WordCountMax = 1000) oder eigene Stopwords zu definieren.
Elasticsearch wird erst bei sehr großen Datenmengen, typischerweise ab mehr als 10 Millionen Artikeln, empfohlen. In solchen Szenarien kann Elasticsearch die Suchperformance erheblich verbessern. Bei der Implementierung von Elasticsearch sind Optimierungen wie die Einstellung der JVM-Heap-Größe (Min=Max, Max ≤ 50% des physischen RAM) und die Konfiguration von Disk Watermarks wichtig. Zudem sollten Mapping-Optimierungen vorgenommen werden, indem keyword-Typen für selten geänderte Felder (z. B. Ticket-IDs) und text mit analyzer für Freitextfelder verwendet werden, um die Effizienz der Suche zu maximieren.
Quellen:
Znuny bietet zwei primäre Backends für die Speicherung von Artikelanhängen: die Datenbank (DB) und das Dateisystem (FS). Die Wahl des richtigen Backends ist entscheidend für die Performance, insbesondere bei der Handhabung von Anhängen.
Ein Wechsel zwischen DB und FS ist möglich und sollte sorgfältig geplant werden. Nach einem Wechsel ist es wichtig, das Logfile /opt/znuny/var/log/article_storage.log auf Fehler zu überprüfen und sicherzustellen, dass der znuny-Benutzer (UID 1000) die korrekten Dateisystemberechtigungen besitzt, um auf die Anhänge zugreifen zu können.
Quellen:
Die Ticket-Archivierung ist ein effektives Mittel, um die Performance von Znuny zu optimieren, indem sie die Anzahl der aktiv indexierten Datensätze reduziert. Dies führt zu schnelleren Queue-Ansichten und Suchergebnissen, insbesondere in großen Installationen. Wenn Tickets archiviert werden, werden sie aus den primären Indizes entfernt, bleiben aber weiterhin zugänglich, falls sie benötigt werden.
Um die Ticket-Archivierung zu aktivieren und zu konfigurieren, sind folgende Schritte notwendig:
Ticket::ArchiveSystem auf 1, um die Archivierungsfunktion global zu aktivieren.State = close UND Changed < now-6mon sein, um alle geschlossenen Tickets, die älter als sechs Monate sind, zu archivieren.Durch diese Maßnahmen bleibt Ihre Znuny-Installation auch bei wachsendem Ticketvolumen performant und reaktionsschnell.
Quellen:
Der Redis-Cache kann die Performance von Znuny erheblich verbessern, indem er häufig angefragte Daten im Arbeitsspeicher vorhält und somit Datenbankzugriffe reduziert. Dies ist besonders vorteilhaft für dynamische Inhalte und Session-Daten.
Die Implementierung des Redis-Cache in Znuny umfasst mehrere Schritte:
Redis::Fast über CPAN. Dies kann in der Regel mit dem Befehl cpan install Redis::Fast erfolgen. Dieses Modul ermöglicht Znuny die Kommunikation mit dem Redis-Server.Durch die korrekte Einrichtung des Redis-Cache können Sie die Reaktionszeiten Ihrer Znuny-Installation deutlich verkürzen und die Datenbanklast reduzieren, was zu einer insgesamt flüssigeren Benutzererfahrung führt.
Quellen:
Ein gut abgestimmtes Datenbank-Backend ist das Herzstück einer performanten Znuny-Installation. Für MySQL oder MariaDB gibt es spezifische Tuning-Empfehlungen, die in der Konfigurationsdatei /etc/my.cnf.d/znuny.cnf vorgenommen werden sollten.
Wichtige Parameter, die angepasst werden müssen, umfassen:
innodb_buffer_pool_size: Dies ist der wichtigste Parameter. Er sollte so groß wie möglich sein, idealerweise 70-80% des verfügbaren RAMs, um häufig genutzte Daten und Indizes im Speicher zu halten.max_connections: Legt die maximale Anzahl gleichzeitiger Datenbankverbindungen fest. Dieser Wert sollte an die erwartete Last und die Anzahl der Znuny-Prozesse angepasst werden.query_cache_size: Kann für bestimmte Workloads nützlich sein, ist aber in modernen MySQL/MariaDB-Versionen oft weniger relevant oder sogar kontraproduktiv. Eine sorgfältige Bewertung ist hier angebracht.log_bin / sync_binlog: Für Replikation und Datenintegrität wichtig, kann aber die Performance beeinflussen.innodb_flush_log_at_trx_commit: Beeinflusst die Haltbarkeit von Transaktionen und die Performance. Ein Wert von 2 kann die Performance verbessern, birgt aber ein geringes Risiko bei Systemabstürzen.Es ist unerlässlich, die Datenbank-Performance regelmäßig zu überwachen und Lasttests (z.B. mit TPC-C oder sysbench) durchzuführen, um die Auswirkungen der Änderungen zu bewerten und die Konfiguration kontinuierlich zu optimieren.
Quellen: