Hystrix + ELK Markus Rodi Karlsruhe, 29.01.2015
2
1. Hystrix
2. Use Cases
3. Problemstellungen
4. Hystrix Dashboard
5. Architektur
6. Softwarekomponenten
7. Konfiguration
8. Kibana Dashboards
9. Fazit und Ausblick
Agenda
3
● Implementierung von Patterns zur Ausfallsicherheit
- Graceful Degradation
- Fail Fast
- Fail Silent
- Circuit Breaker
- Bulkheading
HystrixWas ist das überhaupt?
4
● Empfehlungen für Kunden durch externes System● Fehler/Timeouts schlagen sofort auf der Webseite auf
Lösung mit Hystrix:● Fallback auf lokales System● Empfehlungen werden von statischen Regeln erstellt
Use CaseKundenspezifische Empfehlungen
5
● Begrenzte Ressourcen werden gebunden● Aufwand für Connection-Handling steigt rapide● z.B.: DB Verbindungen werden für andere Dienste blockiert
Lösung mit Hystrix:● Direkte Fehlerrückgabe● Verhindert weitere Laufzeitprobleme
Use CaseFehler-Kaskaden
6
● Hystrix bietet eine Echtzeit-API aber keine Historisierung● Dashboard bietet nur eine Übersicht der letzten 2 Minuten● Keine Filtermöglichkeit● Keine Möglichkeit zur schrittweisen Verfeinerung der Analyse
ProblemstellungenHistorie und Analyse
7
● Datenmenge für klassisches Monitoring (Zabbix, Nagios) nicht zu bewältigen
- 50 Werte pro Komponente
- 12 Werte pro Threadpool
=> bei 10 Komponenten + 3 Threadpools ca. 2 Mio Events/Stunde/Server● Datenmenge wächst proportional zu:
- Anzahl der Server
- Anzahl der Komponenten
ProblemstellungenDatenmenge
11
● Ausrollen der Pakete und Konfigs per Puppet● Software-Stack:
- ELK
- Tomcat
- hystrix-dashboard.war
- trubine.war
- nginx
- Kibana● Types long/short → aggregierte Streams/einzelne Streams
SoftwarekomponentenWie läuft das denn?
12
data: {"type":"HystrixThreadPool",
"name":"PlaybackGroup",
"currentActiveCount":0,
"currentCompletedTaskCount":0,
"currentCorePoolSize":10,
"currentLargestPoolSize":0,
"currentMaximumPoolSize":10,
"currentPoolSize":0,
"currentQueueSize":0,
"currentTaskCount":0,"
...}
Hystrix Event StreamDie Basis
13
Logstash KonfigurationDie Magie
input { pipe { type => "short" tags => ["mw-01"] command => "curl -s --url 'http://my.server/hystrix.stream' | cut -c 7- | sed
's/type/hystrixType/g'" codec => json {} }
18
● Schnell und einfach aufzusetzen
● Datenmenge nicht unterschätzen
● Skalierung sehr einfach
● Redis als Cache um Datenverlust zu vermeiden
● Curl ersetzen durch Programmierung auf Hystrix API
Fazit und Ausblick
19
Kontakt
Markus RodiLinux System Engineer
inovex GmbHOffice KarlsruheLudwig-Erhard-Allee 676131, Karlsruhe
Mobil: 0173-3181-063Mail: [email protected]
Vielen Dank für Ihre Aufmerksamkeit!