Tracing und Fehlerbehebung bei NGINX, OpenResty und ihren Backends
Yichun Zhang, Gründer und CEO von OpenResty Inc.
Verbrauchen einige Ihrer laufenden nginx-Prozesse zu viel Arbeitsspeicher, CPU-Zeit oder Festplatten-E/A-Ressourcen? Treten in der Produktionsumgebung sporadisch sehr langsame Anfragen auf, die sich offline nicht reproduzieren lassen? Sehen Sie rätselhafte NGINX-Fehlermeldungen, ohne einen Hinweis auf die tatsächlichen Ursachen zu haben? Bereiten Ihnen sporadische Abstürze von nginx-Prozessen und Core-Dumps in der Produktionsumgebung Probleme?
In seiner Session auf der NGINX Conf 2018 untersucht Yichun verschiedene reale Leistungsprobleme und andere Verhaltensauffälligkeiten im Zusammenhang mit NGINX und OpenResty. Außerdem erklärt er, wie sich mithilfe von dynamischem Tracing und anderen fortschrittlichen Technologien zur nachträglichen Fehleranalyse die Ursachen im laufenden Betrieb schnell ermitteln lassen, ohne die Produktionsdienste zu beeinträchtigen.
Yichun beschreibt und vergleicht die Vor- und Nachteile verschiedener Open-Source-Debugging-Frameworks wie GDB, SystemTap und BCC/eBPF und geht kurz auf die besonderen Herausforderungen beim Tracing von Docker-Containern in Produktionsumgebungen ein. Anschließend stellt er die neue Plattform OpenResty Trace vor, die diese Debugging-Technologien vereint und ihre Benutzerfreundlichkeit, Skalierbarkeit und Erweiterbarkeit auf ein neues Niveau hebt – insbesondere im Kontext verteilter Onlinesysteme wie einem Microservices-Mesh oder Clustern von Traffic-Gateways, wie sie in einem CDN-Netzwerk zum Einsatz kommen. Anhand von Beispielen zeigt er, wie sich mit den von OpenResty Trace bereitgestellten universellen Debugging-Sprachen benutzerdefinierte Tracing-Tools entwickeln lassen.
Anhand konkreter Beispiele demonstriert Yichun außerdem den Einsatz fortschrittlicher Tracing-Tools auf Basis von OpenResty Trace für den NGINX-Kern und den OpenResty-Kern mit LuaJIT. Er behandelt auch das Tracing anderer herkömmlicher Backend-Dienste wie PHP, Python, Perl und Ruby, die über FastCGI, uWSGI oder NGINX Unit hinter NGINX oder OpenResty ausgeführt werden. Abschließend zeigt er Beispiele für das Tracing von Datendiensten wie PostgreSQL, Memcached und Redis, auf die NGINX, OpenResty oder deren Backend-Anwendungen zugreifen.