Skip to content

Commit 01d4780

Browse files
authored
Merge pull request #1023 from Infomaniak/hotfix/use-nginx-controller-canary-metrics
Use nginx controller canary metrics
2 parents bce1d02 + 7d2f3de commit 01d4780

File tree

5 files changed

+15
-51
lines changed

5 files changed

+15
-51
lines changed

docs/gitbook/tutorials/nginx-progressive-delivery.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This guide shows you how to use the NGINX ingress controller and Flagger to auto
66

77
## Prerequisites
88

9-
Flagger requires a Kubernetes cluster **v1.19** or newer and NGINX ingress **v0.46** or newer.
9+
Flagger requires a Kubernetes cluster **v1.19** or newer and NGINX ingress **v1.0.2** or newer.
1010

1111
Install the NGINX ingress controller with Helm v3:
1212

pkg/metrics/observers/nginx.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ var nginxQueries = map[string]string{
3131
nginx_ingress_controller_requests{
3232
namespace="{{ namespace }}",
3333
ingress="{{ ingress }}",
34+
canary!="",
3435
status!~"5.*"
3536
}[{{ interval }}]
3637
)
@@ -40,7 +41,8 @@ var nginxQueries = map[string]string{
4041
rate(
4142
nginx_ingress_controller_requests{
4243
namespace="{{ namespace }}",
43-
ingress="{{ ingress }}"
44+
ingress="{{ ingress }}",
45+
canary!=""
4446
}[{{ interval }}]
4547
)
4648
)
@@ -50,7 +52,8 @@ var nginxQueries = map[string]string{
5052
rate(
5153
nginx_ingress_controller_ingress_upstream_latency_seconds_sum{
5254
namespace="{{ namespace }}",
53-
ingress="{{ ingress }}"
55+
ingress="{{ ingress }}",
56+
canary!=""
5457
}[{{ interval }}]
5558
)
5659
)
@@ -59,7 +62,8 @@ var nginxQueries = map[string]string{
5962
rate(
6063
nginx_ingress_controller_ingress_upstream_latency_seconds_count{
6164
namespace="{{ namespace }}",
62-
ingress="{{ ingress }}"
65+
ingress="{{ ingress }}",
66+
canary!=""
6367
}[{{ interval }}]
6468
)
6569
)

pkg/metrics/observers/nginx_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import (
3232

3333
func TestNginxObserver_GetRequestSuccessRate(t *testing.T) {
3434
t.Run("ok", func(t *testing.T) {
35-
expected := ` sum( rate( nginx_ingress_controller_requests{ namespace="nginx", ingress="podinfo", status!~"5.*" }[1m] ) ) / sum( rate( nginx_ingress_controller_requests{ namespace="nginx", ingress="podinfo" }[1m] ) ) * 100`
35+
expected := ` sum( rate( nginx_ingress_controller_requests{ namespace="nginx", ingress="podinfo", canary!="", status!~"5.*" }[1m] ) ) / sum( rate( nginx_ingress_controller_requests{ namespace="nginx", ingress="podinfo", canary!="" }[1m] ) ) * 100`
3636
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
3737
promql := r.URL.Query()["query"][0]
3838
assert.Equal(t, expected, promql)
@@ -89,7 +89,7 @@ func TestNginxObserver_GetRequestSuccessRate(t *testing.T) {
8989
}
9090

9191
func TestNginxObserver_GetRequestDuration(t *testing.T) {
92-
expected := ` sum( rate( nginx_ingress_controller_ingress_upstream_latency_seconds_sum{ namespace="nginx", ingress="podinfo" }[1m] ) ) / sum( rate( nginx_ingress_controller_ingress_upstream_latency_seconds_count{ namespace="nginx", ingress="podinfo" }[1m] ) ) * 1000`
92+
expected := ` sum( rate( nginx_ingress_controller_ingress_upstream_latency_seconds_sum{ namespace="nginx", ingress="podinfo", canary!="" }[1m] ) ) / sum( rate( nginx_ingress_controller_ingress_upstream_latency_seconds_count{ namespace="nginx", ingress="podinfo", canary!="" }[1m] ) ) * 1000`
9393

9494
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
9595
promql := r.URL.Query()["query"][0]

test/nginx/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
set -o errexit
44

5-
NGINX_HELM_VERSION=3.36.0 # ingress v0.49.0
5+
NGINX_HELM_VERSION=4.0.3 # ingress v1.0.2
66
REPO_ROOT=$(git rev-parse --show-toplevel)
77

88
mkdir -p ${REPO_ROOT}/bin

test/nginx/test-canary.sh

Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -32,40 +32,6 @@ spec:
3232
EOF
3333

3434
echo '>>> Create metric templates'
35-
cat <<EOF | kubectl apply -f -
36-
apiVersion: flagger.app/v1beta1
37-
kind: MetricTemplate
38-
metadata:
39-
name: error-rate
40-
namespace: ingress-nginx
41-
spec:
42-
provider:
43-
type: prometheus
44-
address: http://flagger-prometheus.ingress-nginx:9090
45-
query: |
46-
100 - sum(
47-
rate(
48-
http_request_duration_seconds_count{
49-
kubernetes_namespace="{{ namespace }}",
50-
kubernetes_pod_name=~"{{ target }}-[0-9a-zA-Z]+(-[0-9a-zA-Z]+)",
51-
path="root",
52-
status!~"5.*"
53-
}[{{ interval }}]
54-
)
55-
)
56-
/
57-
sum(
58-
rate(
59-
http_request_duration_seconds_count{
60-
kubernetes_namespace="{{ namespace }}",
61-
kubernetes_pod_name=~"{{ target }}-[0-9a-zA-Z]+(-[0-9a-zA-Z]+)",
62-
path="root"
63-
}[{{ interval }}]
64-
)
65-
)
66-
* 100
67-
EOF
68-
6935
cat <<EOF | kubectl apply -f -
7036
apiVersion: flagger.app/v1beta1
7137
kind: MetricTemplate
@@ -115,12 +81,9 @@ spec:
11581
maxWeight: 40
11682
stepWeight: 20
11783
metrics:
118-
- name: error-rate
119-
templateRef:
120-
name: error-rate
121-
namespace: ingress-nginx
84+
- name: request-success-rate
12285
thresholdRange:
123-
max: 1
86+
min: 1
12487
interval: 30s
12588
- name: latency
12689
templateRef:
@@ -255,12 +218,9 @@ spec:
255218
x-user:
256219
exact: "insider"
257220
metrics:
258-
- name: error-rate
259-
templateRef:
260-
name: error-rate
261-
namespace: ingress-nginx
221+
- name: request-success-rate
262222
thresholdRange:
263-
max: 1
223+
min: 1
264224
interval: 30s
265225
- name: latency
266226
templateRef:

0 commit comments

Comments
 (0)