JMeter & ELK Search Meetup Jan. 2015

Die Seite wird erstellt Aaron-Arvid Fink
 
WEITER LESEN
JMeter & ELK Search Meetup Jan. 2015
JMeter & ELK

Search Meetup
  Jan. 2015
JMeter & ELK Search Meetup Jan. 2015
Hintergrundinfos

‣   schon mehrere Lasttests durchgeführt:
     ‣   größere (2500 req/s)
     ‣   mittlere
     ‣   aber auch kleine (40 req/s)
‣   grober Ablauf stets:
     ‣   Testspezifikation
          ‣   Was genau soll getestet werden?
          ‣   Was sind die Exit Kriterien?
     ‣   Tests programmieren und Tests durchführen
     ‣   Testergebnisse auswerten und interpretieren
     ‣   Ggf. Anpassungen am object under test und/oder den Tests
     ‣   rinse and repeat

                                                                    2
JMeter & ELK Search Meetup Jan. 2015
Problemstellung 1: Unklare Anforderungen

‣   Was ist „schnell“? Was bedeutet „auch unter Last stabil“?
‣   Wenn möglich: sich an vorhandenen oder ähnlichen Systemen orientieren
‣   Klassischer ELK use-case: Logfiles analysieren

                                                                            3
JMeter & ELK Search Meetup Jan. 2015
Problemstellung 2: Datenmenge

‣     2500 req/s * 120 Minuten Laufzeit = 18.000.000 req
‣     Zu viel für Excel
‣     Einige JMeter Elemente „töten“ das GUI
        ‣         „View Results Tree“ ganz sicher1
        ‣         „Graph Results“ manchmal
‣     Headless ist generell zu bevorzugen
‣     Lösungsansatz ohne ELK war:
        ‣         aggregator.groovy2
        ‣         Excel

1) fairerweise:
              ist auch eher fürs Entwickeln/Debuggen gedacht
2) auch im JMeter Wiki wird ein „Shell Script to Aggregate Per Minute“ beschrieben (http://wiki.apache.org/jmeter/LogAnalysis)   4
JMeter & ELK Search Meetup Jan. 2015
Testergebnisse
Ohne ELK, mit Excel

                      15           15               20
                      Webserver,   Webserver,       Webserver,
                      überlastet   überlastet       stabil

                                                +5 Webserver
      15 Webserver

                                                                 5
JMeter & ELK Search Meetup Jan. 2015
Problemstellung 3: Nachgelagerte Analysen

http://jmeter.apache.org/images/screenshots/graph_results.png   6
JMeter & ELK Search Meetup Jan. 2015
Problemstellung 3: Nachgelagerte Analysen

http://jmeter.apache.org/images/screenshots/response_time_graph.png   7
JMeter & ELK Search Meetup Jan. 2015
Lösung: JMeter ELK Integration
JMeter schreibt ein .csv
/JMeter/config/addiontal.properties
    # Timestamp format - this only affects CSV output files
    # legitimate values: none, ms, or a format suitable for SimpleDateFormat
    # Default:
    # jmeter.save.saveservice.timestamp_format=ms
    jmeter.save.saveservice.timestamp_format=yyyy-MM-dd_HH:mm:ss.SSS

    # For use with Comma-separated value (CSV) files or other formats
    # where the fields' values are separated by specified delimiters.
    # Default:
    # jmeter.save.saveservice.default_delimiter=,
    jmeter.save.saveservice.default_delimiter=|

/Jmeter/logs/MasterTestPlan.jmx_foo.bar.de_20140708-145452
    timeStamp|elapsed|label|responseCode|responseMessage|threadName|dataType|success|
    failureMessage|bytes|grpThreads|allThreads|URL|Filename|Latency|Encoding|SampleCount|
    ErrorCount|Hostname|IdleTime
    2014-07-08_14:54:53.238|167|TC4-ChatPollHttpPost|200|OK|Thread Group 1-1|text|true||537|1|1|
    http://foo.bar.de/index.php/?m=lite&module=chat&action=ping&hx1ylvte||167|ISO-8859-1|1|0|
    barfoo|0
    2014-07-08_14:54:54.074|67|TC4-ChatPollHttpPost|200|OK|Thread Group 1-1|text|true|     8
JMeter & ELK Search Meetup Jan. 2015
Lösung: JMeter ELK Integration
grok und date Filter zum einlesen der JMeter Daten
/etc/logstash/conf.d/foobar_jmeter_csv.conf
     # use a grok filter to match our event. For debugging use http://grokdebug.herokuapp.com/
     grok {
         patterns_dir => "/etc/logstash/patterns"
         match => [ "message“,
                    "%{JMETER_TIMESTAMP:timestamp}\|%{NONNEGINT:elapsed:int}\|%{DATA:label}\|
                     %{POSINT_OR_DATA:responseCode}\|%{DATA:responseMessage}\|%{DATA:threadName}
\|
                     %{DATA:dataType}\|%{DATA:success}\|%{DATA:failureMessage}\|
                     %{NONNEGINT:bytes:int}\|%{NONNEGINT:grpThreads:int}\|
                     %{NONNEGINT:allThreads:int}\|%{URI:uri}\|%{DATA:filename}\|
                     %{NONNEGINT:latency:int}\|%{DATA:encoding}\|%{NONNEGINT:sampleCount:int}\|
                     %{NONNEGINT:errorCount:int}\|%{HOSTNAME:hostname}\|
                     %{NONNEGINT:idleTime:int}" ]
     }
     # use a date filter to extract the @timestamp metadata field from the timestamp field
     # remove timestamp when done
     date {
         match => [ "timestamp", "yyyy-MM-dd_HH:mm:ss.SSS" ]
         timezone => "Europe/Berlin"
         remove_field => [ "timestamp" ]                                                           9
JMeter & ELK Search Meetup Jan. 2015
Testergebnisse „Social Intranet“
3 Testläufe von Köln aus
‣   idle         ≈ 1 req/s
‣   elapsed time ≈ 100ms

                                   10
Testergebnisse „Social Intranet“
3 Testläufe von Köln aus
‣   100% Last    ≈ 45 req/s
‣   elapsed time ≈ 200ms

                                   11
Testergebnisse „Social Intranet“
3 Testläufe von Köln aus
‣   ~150% Last   ≈ 70 req/s
‣   elapsed time ≈ 150ms (?!? *shrug*)

                                         12
Testergebnisse „Social Intranet“
Testlauf von Hong-Kong mit 100% Last

                                       13
Testergebnisse „Social Intranet“
Zoom auf die ersten 10 Minuten
‣   nur zu Beginn einige erfolgreiche Requests

                                                 14
Testergebnisse „Social Intranet“
Zoom auf die ersten 10 Minuten
‣   Fehler: großteils Timeouts

                                   15
Testergebnisse „Social Intranet“
Zoom auf die letzten 10 Minuten
‣   Fehler nun: UnknownHostExceptions (DNS?). Zu diesem Zeitpunkt kommen die
    Requests gar nicht mehr am Server an

                                                                               16
Kurze Live-Demo

‣   cd ~/git-repos/inovex-vagrant/vagrantfiles/ubuntu12-with-jmeter-and-elk
‣   vagrant up
‣   http://localhost:13080/kibana/index.html#/dashboard/file/logstash.json
‣   load ~/git-repos/inovex-vagrant/vagrantfiles/ubuntu12-with-jmeter-and-elk/kibana-
    dashboard_jmeter.json

                                                                                        17
Fazit & Ausblick

‣   ELK hilft in der Testspezifikation
‣   ELK ist sehr geeignet für die event-basierten Daten aus JMeter
‣   Datenmengen sind kein Problem mehr
‣   Nachträgliche Auswertungen inkl. Drill-down
‣   Korrelationsmöglichkeit zwischen client-seitigen Metriken aus JMeter und server-
    seitigen Metriken

                                                                                       18
Vielen Dank für Ihre Aufmerksamkeit

 Kontakt

 Max Wippert
 Head of Project Management & Quality Assurance

 inovex GmbH
 Office Köln
 Kupferhütte 4.1 Schanzenstraße 6-20
 51063, Köln

 Mobil: 0173-3181-048
 Mail: max.wippert@inovex.de

                                                  19
Sie können auch lesen