Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[GER] NoSQL CGN: Zeitreihendaten mit InfluxDB (05/2014)

[GER] NoSQL CGN: Zeitreihendaten mit InfluxDB (05/2014)

Dear non-German speakers: Sorry :)

Auf der NoSQL Cologne User Group habe ich im Mai einen Vortrag zu InfluxDB gehalten und ein wenig erklärt und gezeigt, wie ich InfluxDB bei StormForger.com (Loadtesting as a Service) einsetze.

Sebastian Cohnen

May 08, 2014
Tweet

More Decks by Sebastian Cohnen

Other Decks in Technology

Transcript

  1. Zeitreihenda…WAS? • Zeit-Reihen-Daten (Time Series Data) • …sind Daten, die

    einen inhärenten zeitlichen Bezug haben… • Sensordaten • Logdaten • Börsenkurse • “Ereignisse” (Benutzeraktionen, Fehler, Commits, Deployments, …)
  2. Zeitreihendatenbank • Ausnutzung des inhärenten Zeitbezugs • “ORDER BY time”

    • RRDTool, Graphite (carbon), OpenTSDB, Kairos, …, InfluxDB
  3. Allgemeine Use Cases • (statistische) Auswertung • Zusammenfassungen • über

    alles • aggregiert über Intervalle • Moving Window: letzten X Minuten, Stunden, Tage… • …
  4. Anforderungen • Query Language • Stream Processing: On-the-Fly Verarbeitung von

    eingehenden Daten • (optionales) Downsampling • Cleanup • Online-Datenbank
  5. InfluxDB • geschrieben in Go, Open Source seit Ende 2013(?)

    • Storage Backend: LevelDB • aktuell Version 0.6 • von Paul Dix, Todd Persen, und John Shahid (ehemals Errplane)
  6. InfluxDB • REST/HTTP & Protobuf API • SQL-ähnliche Abfragesprache •

    Build-in Support für Authentifikation und Autorisierung • Support für clustering • Clients für JavaScript, Ruby, Rails, Python, Node.js, PHP, Clojure, Common Lisp, Java Metrics, Go, Go Metrics, Scala, R, Perl, Haskell
  7. Konzepte • Cluster, Server, User • Datenbanken (databases) • Zeitreihen

    (time series), “Tabellen” • Ereignisse (events), “Zeilen”
  8. Datenmodell der Ereignisse • Kein festes Schema • Ereignisse sind

    Maps (Schlüssel-Werte Paare); wobei als Werte Strings, Zahlen, Listen und Boolean erlaubt sind • time & sequence_number sind reserviert bzw. haben eine besondere Bedeutung
  9. StormForger? • Load Testing as a ServiceS für HTTP APIs

    • Vereinfachung und Automatisierung von Lasttests • Durchführung von umfangreichen und reproduzierbaren Lasttests
  10. StormForger • Überall Metriken! …und Auswertungen! …und Visualisierungen! • Sensordaten

    von Monitoring Systemen • Massig(!) Messdaten bei der Testdurchführung; aktuell 15 Datenpunkte pro Request… bei 10k+ rps über 90 Minuten… macht das…
  11. Anforderungen an Zeitreihen-DB • hohe/maximale Auflösung • Flexibles, On-the-Fly Downsampling

    & Stream Verarbeitung • Online Abfragen mit SQL-ähnlicher Sprache • Viele Daten :)
  12. Allgemeine Statistiken SELECT COUNT(duration) AS request_count, MIN(duration) AS min, MAX(duration)

    AS max, MEDIAN(duration) AS median, MEAN(duration) AS mean, STDDEV(duration) AS stddev, PERCENTILE(duration, 95.0) AS p95_0, PERCENTILE(duration, 99.0) AS p99_0, SUM(size) AS size FROM tr42.requests.fullstats {
  13. Funktionen • COUNT, MIN, MAX, MEAN, MODE, MEDIAN, DISTINCT, PERCENTILE,

    HISTOGRAM, DERIVATIVE, SUM, STDDEV, FIRST, LAST… • http://influxdb.org/docs/query_language/functions.html
  14. Merges & Joins SELECT COUNT(type) FROM user_events MERGE admin_events GROUP

    BY time(10m) ! SELECT * FROM MERGE /stats.*/ ! ! SELECT (hosta.value + hostb.value) AS total FROM cpu_load AS hosta INNER JOIN cpu_load AS hostb WHERE hosta.host = 'hosta.influxdb.org' AND hostb.host = 'hostb.influxdb.org'
  15. Continuous Queries • Es können Abfragen hinterlegt werden, die laufend

    auf neue Daten angewendet werden • Use Cases: • Downsampling, Vorberechnungen • Organisation (“fanout”)
  16. Aggregieren & Vorberechnen SELECT PERCENTILE(value, 95) FROM response_times GROUP BY

    time(5m) INTO response_times.percentiles.5m.95 SELECT COUNT(http_status) FROM response_times GROUP BY time(1m), http_status INTO response_times.count.1m.[http_status]
  17. Organisieren SELECT *
 FROM response_times INTO responses.status.[http_status] ! ! SELECT

    MAX(duration), http_status FROM /stats\..*/ GROUP BY time(10m), http_status INTO max_duration.[http_status].:series_name
  18. Cleanup • Es können Clean Up Regeln festgelegt werden, wann

    welche Daten gelöscht werden sollen • Beispiel:
 { "olderThan": "14d", "regex": "stats\\..*", "runAt": 3 }
  19. Authentifikation und Autorisierung • Cluster Admin, Database Admin, Database User

    • Rechte read/write bis auf Zeitreihen (definierbar mit Regexp) { "name": "tisba", "readFrom": ".*", "writeTo": ".*" }
  20. Weitere Themen… • Clustering (RAFT für Meta Daten, Sharding) •

    Write Ahead Log (WAL) • (Distributed) Query Processing • Storage Details (LevelDB, LSM Trees, …)
  21. (M)ein Fazit • Beta™ Software, “moving target”; aber läuft bei

    StormForger erfolgreich in Produktion :) • intensiver Austausch auf ML und IRC, super engagierte Devs • elegant in der Nutzung und Modellierung • Lernkurve fast nicht existent! • I like :)