test(outputs.influxdb_v2): Add benchmarks (#16693)

Co-authored-by: skartikey <1942366+skartikey@users.noreply.github.com>
This commit is contained in:
Sven Rebhan 2025-04-08 15:34:36 +02:00 committed by GitHub
parent 05879b220e
commit cc6916e957
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 264 additions and 0 deletions

View File

@ -906,3 +906,267 @@ func TestUseDynamicSecret(t *testing.T) {
require.NoError(t, secretToken.Set([]byte(token)))
require.NoError(t, plugin.Write(metrics))
}
func BenchmarkWrite1k(b *testing.B) {
batchsize := 1000
// Setup a test server
ts := httptest.NewServer(
http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNoContent)
}),
)
defer ts.Close()
// Setup plugin and connect
plugin := &influxdb.InfluxDB{
URLs: []string{"http://" + ts.Listener.Addr().String()},
Token: config.NewSecret([]byte("sometoken")),
Bucket: "my_bucket",
Log: &testutil.Logger{},
}
require.NoError(b, plugin.Init())
require.NoError(b, plugin.Connect())
defer plugin.Close()
metrics := make([]telegraf.Metric, 0, batchsize)
for i := range batchsize {
metrics = append(metrics, metric.New(
"cpu",
map[string]string{
"bucket": "foo",
},
map[string]interface{}{
"value": float64(i),
},
time.Unix(0, 0),
))
}
// Benchmark the writing
b.ResetTimer()
for b.Loop() {
require.NoError(b, plugin.Write(metrics))
}
b.ReportMetric(float64(batchsize*b.N)/b.Elapsed().Seconds(), "metrics/s")
}
func BenchmarkWrite5k(b *testing.B) {
batchsize := 5000
// Setup a test server
ts := httptest.NewServer(
http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNoContent)
}),
)
defer ts.Close()
// Setup plugin and connect
plugin := &influxdb.InfluxDB{
URLs: []string{"http://" + ts.Listener.Addr().String()},
Token: config.NewSecret([]byte("sometoken")),
Bucket: "my_bucket",
Log: &testutil.Logger{},
}
require.NoError(b, plugin.Init())
require.NoError(b, plugin.Connect())
defer plugin.Close()
metrics := make([]telegraf.Metric, 0, batchsize)
for i := range batchsize {
metrics = append(metrics, metric.New(
"cpu",
map[string]string{
"bucket": "foo",
},
map[string]interface{}{
"value": float64(i),
},
time.Unix(0, 0),
))
}
// Benchmark the writing
b.ResetTimer()
for b.Loop() {
require.NoError(b, plugin.Write(metrics))
}
b.ReportMetric(float64(batchsize*b.N)/b.Elapsed().Seconds(), "metrics/s")
}
func BenchmarkWrite10k(b *testing.B) {
batchsize := 10000
// Setup a test server
ts := httptest.NewServer(
http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNoContent)
}),
)
defer ts.Close()
// Setup plugin and connect
plugin := &influxdb.InfluxDB{
URLs: []string{"http://" + ts.Listener.Addr().String()},
Token: config.NewSecret([]byte("sometoken")),
Bucket: "my_bucket",
Log: &testutil.Logger{},
}
require.NoError(b, plugin.Init())
require.NoError(b, plugin.Connect())
defer plugin.Close()
metrics := make([]telegraf.Metric, 0, batchsize)
for i := range batchsize {
metrics = append(metrics, metric.New(
"cpu",
map[string]string{
"bucket": "foo",
},
map[string]interface{}{
"value": float64(i),
},
time.Unix(0, 0),
))
}
// Benchmark the writing
b.ResetTimer()
for b.Loop() {
require.NoError(b, plugin.Write(metrics))
}
b.ReportMetric(float64(batchsize*b.N)/b.Elapsed().Seconds(), "metrics/s")
}
func BenchmarkWrite25k(b *testing.B) {
batchsize := 25000
// Setup a test server
ts := httptest.NewServer(
http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNoContent)
}),
)
defer ts.Close()
// Setup plugin and connect
plugin := &influxdb.InfluxDB{
URLs: []string{"http://" + ts.Listener.Addr().String()},
Token: config.NewSecret([]byte("sometoken")),
Bucket: "my_bucket",
Log: &testutil.Logger{},
}
require.NoError(b, plugin.Init())
require.NoError(b, plugin.Connect())
defer plugin.Close()
metrics := make([]telegraf.Metric, 0, batchsize)
for i := range batchsize {
metrics = append(metrics, metric.New(
"cpu",
map[string]string{
"bucket": "foo",
},
map[string]interface{}{
"value": float64(i),
},
time.Unix(0, 0),
))
}
// Benchmark the writing
b.ResetTimer()
for b.Loop() {
require.NoError(b, plugin.Write(metrics))
}
b.ReportMetric(float64(batchsize*b.N)/b.Elapsed().Seconds(), "metrics/s")
}
func BenchmarkWrite50k(b *testing.B) {
batchsize := 50000
// Setup a test server
ts := httptest.NewServer(
http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNoContent)
}),
)
defer ts.Close()
// Setup plugin and connect
plugin := &influxdb.InfluxDB{
URLs: []string{"http://" + ts.Listener.Addr().String()},
Token: config.NewSecret([]byte("sometoken")),
Bucket: "my_bucket",
Log: &testutil.Logger{},
}
require.NoError(b, plugin.Init())
require.NoError(b, plugin.Connect())
defer plugin.Close()
metrics := make([]telegraf.Metric, 0, batchsize)
for i := range batchsize {
metrics = append(metrics, metric.New(
"cpu",
map[string]string{
"bucket": "foo",
},
map[string]interface{}{
"value": float64(i),
},
time.Unix(0, 0),
))
}
// Benchmark the writing
b.ResetTimer()
for b.Loop() {
require.NoError(b, plugin.Write(metrics))
}
b.ReportMetric(float64(batchsize*b.N)/b.Elapsed().Seconds(), "metrics/s")
}
func BenchmarkWrite100k(b *testing.B) {
batchsize := 100000
// Setup a test server
ts := httptest.NewServer(
http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNoContent)
}),
)
defer ts.Close()
// Setup plugin and connect
plugin := &influxdb.InfluxDB{
URLs: []string{"http://" + ts.Listener.Addr().String()},
Token: config.NewSecret([]byte("sometoken")),
Bucket: "my_bucket",
Log: &testutil.Logger{},
}
require.NoError(b, plugin.Init())
require.NoError(b, plugin.Connect())
defer plugin.Close()
metrics := make([]telegraf.Metric, 0, batchsize)
for i := range batchsize {
metrics = append(metrics, metric.New(
"cpu",
map[string]string{
"bucket": "foo",
},
map[string]interface{}{
"value": float64(i),
},
time.Unix(0, 0),
))
}
// Benchmark the writing
b.ResetTimer()
for b.Loop() {
require.NoError(b, plugin.Write(metrics))
}
b.ReportMetric(float64(batchsize*b.N)/b.Elapsed().Seconds(), "metrics/s")
}