89d7c1f584726cc7b4df85ffb4608d2b407b0079
InfluxDB aggregated buffer
In order to achieve maximum writing performance to InfluxDB an application needs to write series with as many points per series, as many series per batch as possible.
This buffer does exactly that: it aggregates multiple points into single series and multiple series into single batch. When buffer gets full it flushes series into database.
Example:
package main
import (
"net/http"
influxdb "github.com/influxdb/influxdb/client"
"github.com/localhots/influxdb_buffer"
)
func handleMetrics(rw http.ResponseWriter, req *http.Request) {
ua := parseUserAgent(req.UserAgent())
geo := fetchGeoInfo(req.RemoteAddr)
buf.Add(
&influxdb.Series{
Name: "app.browsers",
Columns: []string{"vendor", "version", "mobile"},
Points: [][]interface{}{{ua.Vendor, ua.Version, ua.IsMobile}},
},
&influxdb.Series{
Name: "app.visitors.geo",
Columns: []string{"ip", "country", "city", "isp"},
Points: [][]interface{}{{ip, geo.Country, geo.City, geo.Isp}},
},
)
}
func writeMetrics(series []*influxdb.Series) {
influxdb.WriteSeriesWithTimePrecision(series, "s")
}
var (
buf *buffer.Buffer
)
func main() {
buf = buffer.New(100, writeMetrics)
http.HandleFunc("/metrics", handleMetrics)
http.ListenAndServe(":8080", nil)
}
Description
A tool that was used to buffer InfluxDB metrics before version 1.0 that is completely obsolete at this point
Languages
Go
100%