InfluxDB: Making time series fun

InfluxDB: Making time series fun

Fad1e9ed293fc5b3ec7d4abdffeb636f?s=128

Lindsay Holmwood

November 08, 2013
Tweet

Transcript

  1. InfluxDB Making time series fun

  2. What is it?

  3. Time series database

  4. Like: RRDtool (C) Graphite (Python) OpenTSDB (Java) KairosDB (Java)

  5. Written in Go

  6. What makes it neat?

  7. Metrics + Events (Numerical + Textual)

  8. HTTP API

  9. Client libraries Go, Java, JavaScript, Ruby

  10. Horizontally scalable*

  11. Single binary

  12. Getting started

  13. play.influxdb.org*

  14. # Download wget http://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb # Install sudo dpkg -i influxdb_latest_amd64.deb

  15. # Verify pgrep -f -l influxdb 32333 /usr/bin/influxdb \ -pidfile

    /opt/influxdb/shared/influxdb.pid \ -config /opt/influxdb/shared/config.json # Manage sudo service influxdb stop sudo service influxdb start sudo service influxdb status
  16. Writing data

  17. #!/usr/bin/env ruby require 'rubygems' require 'influxdb' require 'json'

  18. #!/usr/bin/env ruby require 'rubygems' require 'influxdb' require 'json' database =

    "dev" name = "sine" influxdb = InfluxDB::Client.new("localhost", 8086, "auxesis", "foobarbaz", database)
  19. #!/usr/bin/env ruby require 'rubygems' require 'influxdb' require 'json' database =

    "dev" name = "sine" influxdb = InfluxDB::Client.new("localhost", 8086, "auxesis", "foobarbaz", database) loop do data = { :value => Value.next, } result = influxdb.write_point(name, data) sleep 1 end
  20. #!/usr/bin/env ruby require 'rubygems' require 'influxdb' require 'json' # Create

    an enumerator that emits a sine wave Value = (0..360).to_a.map {|i| Math.send(:sin, i / 10.0) * 10 }.each database = "dev" name = "sine" influxdb = InfluxDB::Client.new("localhost", 8086, "auxesis", "foobarbaz", database) loop do data = { :value => Value.next, } result = influxdb.write_point(name, data) sleep 1 end
  21. #!/usr/bin/env ruby require 'rubygems' require 'influxdb' require 'json' # Create

    an enumerator that emits a sine wave Value = (0..360).to_a.map {|i| Math.send(:sin, i / 10.0) * 10 }.each database = "dev" name = "sine" influxdb = InfluxDB::Client.new("localhost", 8086, "auxesis", "foobarbaz", database) loop do data = { :value => Value.next, } result = influxdb.write_point(name, data) if not (200..299).include?(result.code.to_i) p result exit 1 end sleep 1 end
  22. Reading data

  23. query = "select * from sine where time > now()

    - 1m;" q = CGI.escape(query)
  24. database = 'dev' query = "select * from sine where

    time > now() - 1m;" q = CGI.escape(query) username = 'auxesis' password = 'foobarbaz'
  25. database = 'dev' query = "select * from sine where

    time > now() - 1m;" q = CGI.escape(query) username = 'auxesis' password = 'foobarbaz' cmd = [] cmd << 'curl -s' cmd << "'http://localhost:8087/db/#{database}/series?u=#{username}&p=#{password}&q=#{q}'" command = cmd.join(' ') puts command system(command) puts
  26. curl -s 'http://localhost:8087/db/dev/ series?u=auxesis&p=foobarbaz&q=select+%2A +from+k+where+time+%3E+now%28%29+-+1m%3B'

  27. [{"name":"k","columns":["time","sequence_number","value"],"points":[[1383889088856,970,-4.193609160732313], [1383889087853,969,-5.078965903906221],[1383889086850,968,-5.913575298651244], [1383889085848,967,-6.689098203780243],[1383889084846,966,-7.397785850778934], [1383889083843,965,-8.032557266939547],[1383889082839,964,-8.587070026099294], [1383889081837,963,-9.055783620066238],[1383889080834,962,-9.434014817545556], [1383889079832,961,-9.717984457438632],[1383889078829,960,-9.904855208971565], [1383889077825,959,-9.992759921366277],[1383889076823,958,-9.980820279793964], [1383889075820,957,-9.869155581206488],[1383889074809,956,-9.658881542360705], [1383889073805,955,-9.352099151945389],[1383889072803,954,-8.951873678196819], [1383889071800,953,-8.462204041751706],[1383889070797,952,-7.887982859754165],

    [1383889069792,951,-7.234947560442451],[1383889068788,950,-6.509623056662469], [1383889067786,949,-5.719256551095638],[1383889066783,948,-4.871745124605095], [1383889065780,947,-3.975556831214329],[1383889064777,946,-3.0396460881104708], [1383889063774,945,-2.0733642060675876],[1383889062767,944,-1.0863659542407975], [1383889061765,943,-0.08851309290403876],[1383889060762,942,0.9102241619984788], [1383889059759,941,1.8998667579543773],[1383889058756,940,2.8705265132772846], [1383889057753,939,3.8125049165494014],[1383889056750,938,4.7163900309419615], [1383889055747,937,5.573150535176614],[1383889054744,936,6.374225961502389], [1383889053741,935,7.1116122290598245],[1383889052738,934,7.777941618010928], [1383889051735,933,8.36655638536056],[1383889050732,932,8.87157528692351], [1383889049730,931,9.287952340772405],[1383889048727,930,9.611527245021165], [1383889047724,929,9.839066946186161],[1383889046721,928,9.968297942787993], [1383889045718,927,9.997929001426693],[1383889044715,926,9.92766405835907], [1383889043713,925,9.758205177669755],[1383889042710,924,9.491245536478946], [1383889041707,923,9.129452507276277],[1383889040704,922,8.676441006416674], [1383889039701,921,8.136737375071053],[1383889038698,920,7.515734153521483], [1383889037695,919,6.819636200681355],[1383889036692,918,6.05539869719601], [1383889035689,917,5.230657651576964],[1383889034686,916,4.353653603728932], [1383889033683,915,3.433149288198954],[1383889032681,914,2.478342079829598], [1383889031678,913,1.4987720966295235],[1383889030674,912,0.5042268780681123], [1383889029671,911,-0.4953564087836742]]}]
  28. database = 'dev' query = "select * from sine where

    time > now() - 1m;" q = CGI.escape(query) username = 'auxesis' password = 'foobarbaz' cmd = [] cmd << 'curl -s' cmd << "'http://localhost:8087/db/#{database}/series?u=#{username}&p=#{password}&q=#{q}'" cmd << '| jsonpp' command = cmd.join(' ') puts command system(command) puts
  29. [ { "name": "sine", "columns": [ "time", "sequence_number", "value" ],

    "points": [ [ 1383889204933, 1085, 0.9983341664682815 ], [ 1383889203929, 1084, 0 ], [ 1383889202193, 1083, -9.917788534431157 ], [ 1383889201190, 1082, -9.740490378683264 ] ] } ]
  30. Other things

  31. Multiple databases

  32. User management

  33. Cluster admin Database admin Database user

  34. BYO Graphs

  35. Clustering in December

  36. Production ready in January

  37. Questions?