diff --git a/pkg/tsdb/elasticsearch/response_parser.go b/pkg/tsdb/elasticsearch/response_parser.go index 3bbceb994b6..b4553604f03 100644 --- a/pkg/tsdb/elasticsearch/response_parser.go +++ b/pkg/tsdb/elasticsearch/response_parser.go @@ -693,7 +693,7 @@ func processAggregationDocs(esAgg *simplejson.Json, aggDef *BucketAgg, target *Q } case percentilesType: percentiles := bucket.GetPath(metric.ID, "values") - for percentileName := range percentiles.MustMap() { + for _, percentileName := range getSortedKeys(percentiles.MustMap()) { percentileValue := percentiles.Get(percentileName).MustFloat64() addMetricValue(values, fmt.Sprintf("p%v %v", percentileName, metric.Field), &percentileValue) } @@ -1129,3 +1129,14 @@ func createFieldsFromPropKeys(frames data.Frames, propKeys []string) []*data.Fie } return fields } + +func getSortedKeys(data map[string]interface{}) []string { + keys := make([]string, 0, len(data)) + + for k := range data { + keys = append(keys, k) + } + + sort.Strings(keys) + return keys +} diff --git a/pkg/tsdb/elasticsearch/response_parser_frontend_test.go b/pkg/tsdb/elasticsearch/response_parser_frontend_test.go index 4711aeef06a..398ff18aecd 100644 --- a/pkg/tsdb/elasticsearch/response_parser_frontend_test.go +++ b/pkg/tsdb/elasticsearch/response_parser_frontend_test.go @@ -1030,7 +1030,7 @@ func TestPercentilesWithoutDateHistogram(t *testing.T) { "3": { "buckets": [ { - "1": { "values": { "75": 3.3, "90": 5.5 } }, + "1": { "values": { "90": 5.5, "75": 3.3 } }, "doc_count": 10, "key": "id1" },