mirror of
https://github.com/prometheus/prometheus.git
synced 2025-08-06 14:17:12 +02:00
remote write 2.0: add write handler benchmark for V2 format (#16687)
Signed-off-by: Sandro Jijavadze <sandrojijavadze@protonmail.com>
This commit is contained in:
parent
9b00c296a8
commit
f8b3fce845
@ -23,7 +23,6 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -667,31 +666,58 @@ func TestOutOfOrderHistogram_V1Message(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkRemoteWriteHandler(b *testing.B) {
|
func BenchmarkRemoteWriteHandler(b *testing.B) {
|
||||||
const labelValue = "abcdefg'hijlmn234!@#$%^&*()_+~`\"{}[],./<>?hello0123hiOlá你好Dzieńdobry9Zd8ra765v4stvuyte"
|
labelStrings := []string{
|
||||||
var reqs []*http.Request
|
"__name__", "test_metric",
|
||||||
for i := 0; i < b.N; i++ {
|
"test_label_name", "abcdefg'hijlmn234!@#$%^&*()_+~`\"{}[],./<>?hello0123hiOlá你好Dzieńdobry9Zd8ra765v4stvuyte",
|
||||||
num := strings.Repeat(strconv.Itoa(i), 16)
|
|
||||||
buf, _, _, err := buildWriteRequest(nil, []prompb.TimeSeries{{
|
|
||||||
Labels: []prompb.Label{
|
|
||||||
{Name: "__name__", Value: "test_metric"},
|
|
||||||
{Name: "test_label_name_" + num, Value: labelValue + num},
|
|
||||||
},
|
|
||||||
Histograms: []prompb.Histogram{prompb.FromIntHistogram(0, &testHistogram)},
|
|
||||||
}}, nil, nil, nil, nil, "snappy")
|
|
||||||
require.NoError(b, err)
|
|
||||||
req, err := http.NewRequest("", "", bytes.NewReader(buf))
|
|
||||||
require.NoError(b, err)
|
|
||||||
reqs = append(reqs, req)
|
|
||||||
}
|
}
|
||||||
|
v1Labels := prompb.FromLabels(labels.FromStrings(labelStrings...), nil)
|
||||||
|
|
||||||
appendable := &mockAppendable{}
|
testCases := []struct {
|
||||||
// TODO: test with other proto format(s)
|
name string
|
||||||
handler := NewWriteHandler(promslog.NewNopLogger(), nil, appendable, []config.RemoteWriteProtoMsg{config.RemoteWriteProtoMsgV1}, false)
|
payloadFunc func() ([]byte, error)
|
||||||
recorder := httptest.NewRecorder()
|
protoFormat config.RemoteWriteProtoMsg
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "V1 Write",
|
||||||
|
payloadFunc: func() ([]byte, error) {
|
||||||
|
buf, _, _, err := buildWriteRequest(nil, []prompb.TimeSeries{{
|
||||||
|
Labels: v1Labels,
|
||||||
|
Histograms: []prompb.Histogram{prompb.FromIntHistogram(0, &testHistogram)},
|
||||||
|
}}, nil, nil, nil, nil, "snappy")
|
||||||
|
return buf, err
|
||||||
|
},
|
||||||
|
protoFormat: config.RemoteWriteProtoMsgV1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "V2 Write",
|
||||||
|
payloadFunc: func() ([]byte, error) {
|
||||||
|
buf, _, _, err := buildV2WriteRequest(promslog.NewNopLogger(), []writev2.TimeSeries{{
|
||||||
|
LabelsRefs: []uint32{0, 1, 2, 3},
|
||||||
|
Histograms: []writev2.Histogram{writev2.FromIntHistogram(0, &testHistogram)},
|
||||||
|
}}, labelStrings,
|
||||||
|
nil, nil, nil, "snappy")
|
||||||
|
return buf, err
|
||||||
|
},
|
||||||
|
protoFormat: config.RemoteWriteProtoMsgV2,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range testCases {
|
||||||
|
b.Run(tc.name, func(b *testing.B) {
|
||||||
|
appendable := &mockAppendable{}
|
||||||
|
handler := NewWriteHandler(promslog.NewNopLogger(), nil, appendable, []config.RemoteWriteProtoMsg{tc.protoFormat}, false)
|
||||||
|
b.ResetTimer()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
b.StopTimer()
|
||||||
|
buf, err := tc.payloadFunc()
|
||||||
|
require.NoError(b, err)
|
||||||
|
req, err := http.NewRequest("", "", bytes.NewReader(buf))
|
||||||
|
require.NoError(b, err)
|
||||||
|
b.StartTimer()
|
||||||
|
|
||||||
b.ResetTimer()
|
recorder := httptest.NewRecorder()
|
||||||
for _, req := range reqs {
|
handler.ServeHTTP(recorder, req)
|
||||||
handler.ServeHTTP(recorder, req)
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user