Skip to content

Commit 6f8a4df

Browse files
committed
jsonnet,test: enable /api/v1/series on Thanos tenancy port
1 parent 75ae703 commit 6f8a4df

File tree

4 files changed

+69
-7
lines changed

4 files changed

+69
-7
lines changed

CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
## 4.10
44

55
- [#1509](https://github.com/openshift/cluster-monitoring-operator/pull/1509) add NLB usage metrics for network edge
6-
- [#1299](https://github.com/openshift/cluster-monitoring-operator/pull/1299) Expose expose /api/v1/labels endpoint for Thanos query.
6+
- [#1299](https://github.com/openshift/cluster-monitoring-operator/pull/1299) Expose /api/v1/labels and /api/v1/labels/*/values endpoint on the Thanos query tenancy port.
7+
- [#1529](https://github.com/openshift/cluster-monitoring-operator/pull/1299) Expose /api/v1/series endpoint on the Thanos query tenancy port.
78
- [#1402](https://github.com/openshift/cluster-monitoring-operator/pull/1402) Drop pod-centric cAdvisor metrics that are available at slice level.
89
- [#1399](https://github.com/openshift/cluster-monitoring-operator/pull/1399) Rename ThanosSidecarUnhealthy to ThanosSidecarNoConnectionToStartedPrometheus and make it resilient to WAL replays.
910
- [#1446](https://github.com/openshift/cluster-monitoring-operator/pull/1446) Bump Grafana version to 7.5.11

jsonnet/components/thanos-querier.libsonnet

+7-1
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,13 @@ function(params)
504504
'--tls-private-key-file=/etc/tls/private/tls.key',
505505
'--tls-cipher-suites=' + cfg.tlsCipherSuites,
506506
'--logtostderr=true',
507-
'--allow-paths=/api/v1/query,/api/v1/query_range,/api/v1/labels,/api/v1/label/*/values',
507+
'--allow-paths=' + std.join(',', [
508+
'/api/v1/query',
509+
'/api/v1/query_range',
510+
'/api/v1/labels',
511+
'/api/v1/label/*/values',
512+
'/api/v1/series',
513+
]),
508514
],
509515
terminationMessagePolicy: 'FallbackToLogsOnError',
510516
volumeMounts: [

test/e2e/framework/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ func (c *PrometheusClient) PrometheusRules() ([]byte, error) {
216216
return body, nil
217217
}
218218

219-
// PrometheusRules runs an HTTP GET request against the Prometheus label API and returns
219+
// PrometheusLabel runs an HTTP GET request against the Prometheus label API and returns
220220
// the response body.
221221
func (c *PrometheusClient) PrometheusLabel(label string) ([]byte, error) {
222222
resp, err := c.Do("GET", fmt.Sprintf("/api/v1/label/%s/values", url.QueryEscape(label)), nil)

test/e2e/user_workload_monitoring_test.go

+59-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"io/ioutil"
2121
"net"
2222
"net/http"
23+
"net/url"
2324
"reflect"
2425
"strings"
2526
"testing"
@@ -88,8 +89,8 @@ func TestUserWorkloadMonitoringMetrics(t *testing.T) {
8889
f: assertTenancyForMetrics,
8990
},
9091
{
91-
name: "assert tenancy model is enforced for labels",
92-
f: assertTenancyForLabels,
92+
name: "assert tenancy model is enforced for series metadata",
93+
f: assertTenancyForSeriesMetadata,
9394
},
9495
{
9596
name: "assert prometheus is not deployed in user namespace",
@@ -891,7 +892,7 @@ func assertTenancyForRules(t *testing.T) {
891892
}
892893
}
893894

894-
func assertTenancyForLabels(t *testing.T) {
895+
func assertTenancyForSeriesMetadata(t *testing.T) {
895896
const testAccount = "test-labels"
896897

897898
err := framework.Poll(2*time.Second, 10*time.Second, func() error {
@@ -974,7 +975,61 @@ func assertTenancyForLabels(t *testing.T) {
974975
t.Fatalf("failed to query labels from Thanos querier: %v", err)
975976
}
976977

977-
// Check that /api/v1/label/namespace/values returns a single value.
978+
// Check the /api/v1/series endpoint.
979+
err = framework.Poll(5*time.Second, time.Minute, func() error {
980+
// The tenancy port (9092) is only exposed in-cluster so we need to use
981+
// port forwarding to access kube-rbac-proxy.
982+
host, cleanUp, err := f.ForwardPort(t, "thanos-querier", 9092)
983+
if err != nil {
984+
return err
985+
}
986+
defer cleanUp()
987+
988+
client := framework.NewPrometheusClient(
989+
host,
990+
token,
991+
&framework.QueryParameterInjector{
992+
Name: "namespace",
993+
Value: userWorkloadTestNs,
994+
},
995+
)
996+
997+
resp, err := client.Do("GET", "/api/v1/series?"+url.QueryEscape("match[]=up"), nil)
998+
if err != nil {
999+
return err
1000+
}
1001+
defer resp.Body.Close()
1002+
1003+
b, err := ioutil.ReadAll(resp.Body)
1004+
if err != nil {
1005+
return err
1006+
}
1007+
1008+
if resp.StatusCode != http.StatusOK {
1009+
return fmt.Errorf("unexpected status code response, want %d, got %d (%s)", http.StatusOK, resp.StatusCode, framework.ClampMax(b))
1010+
}
1011+
1012+
res, err := gabs.ParseJSON(b)
1013+
if err != nil {
1014+
return err
1015+
}
1016+
1017+
series, err := res.Path("data").Children()
1018+
if err != nil {
1019+
return err
1020+
}
1021+
1022+
if len(series) != 1 {
1023+
return errors.Errorf("expecting a series list with one item, got %d (%s)", len(series), framework.ClampMax(b))
1024+
}
1025+
1026+
return nil
1027+
})
1028+
if err != nil {
1029+
t.Fatalf("failed to query series from Thanos querier: %v", err)
1030+
}
1031+
1032+
// Check that /api/v1/label/{namespace}/values returns a single value.
9781033
err = framework.Poll(5*time.Second, time.Minute, func() error {
9791034
// The tenancy port (9092) is only exposed in-cluster so we need to use
9801035
// port forwarding to access kube-rbac-proxy.

0 commit comments

Comments
 (0)