This is an automated email from the ASF dual-hosted git repository.

shreemaanabhishek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new 963207faf Revert "fix: the leak of prometheus metrics (#10655)" 
(#11025)
963207faf is described below

commit 963207faf8ec2ab0e240c09d398da4d634a63376
Author: Abhishek Choudhary <[email protected]>
AuthorDate: Wed Mar 13 09:49:13 2024 +0545

    Revert "fix: the leak of prometheus metrics (#10655)" (#11025)
---
 apisix/plugins/prometheus/exporter.lua |   1 -
 t/node/healthcheck-metric.t            | 508 ---------------------------------
 2 files changed, 509 deletions(-)

diff --git a/apisix/plugins/prometheus/exporter.lua 
b/apisix/plugins/prometheus/exporter.lua
index d04d9bb79..59da6c670 100644
--- a/apisix/plugins/prometheus/exporter.lua
+++ b/apisix/plugins/prometheus/exporter.lua
@@ -480,7 +480,6 @@ local function collect(ctx, stream_only)
 
     -- update upstream_status metrics
     local stats = control.get_health_checkers()
-    metrics.upstream_status:reset()
     for _, stat in ipairs(stats) do
         for _, node in ipairs(stat.nodes) do
             metrics.upstream_status:set(
diff --git a/t/node/healthcheck-metric.t b/t/node/healthcheck-metric.t
deleted file mode 100644
index 7a7d2f993..000000000
--- a/t/node/healthcheck-metric.t
+++ /dev/null
@@ -1,508 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-use t::APISIX 'no_plan';
-
-no_root_location();
-repeat_each(1);
-log_level('debug');
-no_root_location();
-no_shuffle();
-
-add_block_preprocessor(sub {
-    my ($block) = @_;
-
-    if (!$block->http_config) {
-        my $http_config = <<'_EOC_';
-server {
-    listen 8765;
-
-    location /ping {
-        return 200 '8765';
-    }
-
-    location /healthz {
-        return 200 'ok';
-    }
-}
-
-server {
-    listen 8766;
-
-    location /ping {
-        return 200 '8766';
-    }
-
-    location /healthz {
-        return 200 'ok';
-    }
-}
-
-
-server {
-    listen 8767;
-    location /ping {
-        return 200 '8767';
-    }
-
-    location /healthz {
-        return 200 'ok';
-    }
-}
-
-_EOC_
-        $block->set_value("http_config", $http_config);
-    }
-
-    if (!$block->request) {
-        $block->set_value("request", "GET /t");
-    }
-
-});
-
-run_tests;
-
-__DATA__
-
-=== TEST 1: enable metrics uri
---- config
-    location /t {
-        content_by_lua_block {
-            local t = require("lib.test_admin")
-            local core = require("apisix.core")
-
-            -- enable prometheus
-            local metric_data = {
-                uri = "/apisix/prometheus/metrics",
-                plugins = {
-                    ["public-api"] = {}
-                }
-            }
-
-            local code, body = t.test('/apisix/admin/routes/metrics',
-                ngx.HTTP_PUT, core.json.encode(metric_data))
-            ngx.say(body)
-        }
-    }
---- request
-GET /t
---- response_body
-passed
-
-
-
-=== TEST 2: to reduce one upstream node, the metric should also be reduced by 
one.
---- extra_init_worker_by_lua
-    local healthcheck = require("resty.healthcheck")
-    local new = healthcheck.new
-    healthcheck.new = function(...)
-        local obj = new(...)
-        local clear = obj.delayed_clear
-        obj.delayed_clear = obj.clear
-        return obj
-    end
---- config
-    location /t {
-        content_by_lua_block {
-            local core = require("apisix.core")
-            local t = require("lib.test_admin")
-            local http = require("resty.http")
-
-            local function find_apisix_upstream_status(multiLineStr)
-                local pattern = "(apisix_upstream_status{.-)$"
-                local result = {}
-                for line in multiLineStr:gmatch("[^\r\n]+") do
-                    local match = line:match(pattern)
-                    if match then
-                        table.insert(result, match)
-                    end
-                end
-                return result
-            end
-
-            --- get the metrics
-            local function get_metrics()
-                local httpc = http.new()
-                local metric_uri = "http://127.0.0.1:"; .. ngx.var.server_port 
.. "/apisix/prometheus/metrics"
-                local metric_res, err = httpc:request_uri(metric_uri, {method 
= "GET"})
-                if err then
-                    ngx.say("failed to request: ", err)
-                    return
-                end
-                local apisix_upstream_status_body = 
find_apisix_upstream_status(metric_res.body)
-                for _, match in ipairs(apisix_upstream_status_body) do
-                    ngx.say(match)
-                end
-            end
-
-            -- create a route
-            local data = {
-                uri = "/ping",
-                upstream = {
-                    nodes = {
-                        ["127.0.0.1:8765"] = 1,
-                        ["127.0.0.1:8766"] = 1,
-                        ["127.0.0.1:8767"] = 1
-                    },
-                    retries = 2,
-                    checks = {
-                        active = {
-                            http_path = "/healthz",
-                            healthy = {
-                                interval = 1,
-                                successes = 1
-                            },
-                            unhealthy = {
-                                interval = 1,
-                                http_failures = 1
-                            },
-                        }
-                    }
-                }
-            }
-            local code, body = t.test('/apisix/admin/routes/1',
-                ngx.HTTP_PUT, core.json.encode(data))
-            if code >= 300 then
-                ngx.status = code
-                ngx.say(body)
-                return
-            end
-
-            local httpc = http.new()
-            local uri = "http://127.0.0.1:"; .. ngx.var.server_port .. "/ping"
-            local _, _ = httpc:request_uri(uri, {method = "GET", keepalive = 
false})
-
-            --- get metrics
-            get_metrics()
-
-            ngx.say("update the upstream")
-
-            --- update the route
-            local new_data = {
-                uri = "/ping",
-                upstream = {
-                    nodes = {
-                        ["127.0.0.1:8765"] = 1,
-                        ["127.0.0.1:8766"] = 1
-                    },
-                    retries = 2,
-                    checks = {
-                        active = {
-                            http_path = "/healthz",
-                            healthy = {
-                                interval = 1,
-                                successes = 1
-                            },
-                            unhealthy = {
-                                interval = 1,
-                                http_failures = 1
-                            },
-                        }
-                    }
-                }
-            }
-            local code, body = t.test('/apisix/admin/routes/1',
-                ngx.HTTP_PUT, core.json.encode(new_data))
-            if code >= 300 then
-                ngx.status = code
-                ngx.say(body)
-                return
-            end
-
-            local http = require("resty.http")
-            local httpc = http.new()
-            local uri = "http://127.0.0.1:"; .. ngx.var.server_port .. "/ping"
-            local _, _ = httpc:request_uri(uri, {method = "GET", keepalive = 
false})
-
-            --- get metrics
-            get_metrics()
-        }
-    }
---- request
-GET /t
---- grep_error_log eval
-qr/create new checker: table: 0x|try to release checker: table: 0x|event: 
target added '127.0.0.1\(127.0.0.1:8767.*/
---- grep_error_log_out
-create new checker: table: 0x
-event: target added '127.0.0.1(127.0.0.1:8767)'
-try to release checker: table: 0x
-create new checker: table: 0x
---- response_body
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8765"} 1
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8766"} 1
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8767"} 1
-update the upstream
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8765"} 1
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8766"} 1
-
-
-
-=== TEST 3: add an upstream node, and metric should also be added.
---- extra_init_worker_by_lua
-    local healthcheck = require("resty.healthcheck")
-    local new = healthcheck.new
-    healthcheck.new = function(...)
-        local obj = new(...)
-        local clear = obj.delayed_clear
-        obj.delayed_clear = obj.clear
-        return obj
-    end
---- config
-    location /t {
-        content_by_lua_block {
-            local core = require("apisix.core")
-            local t = require("lib.test_admin")
-            local http = require("resty.http")
-
-            local function find_apisix_upstream_status(multiLineStr)
-                local pattern = "(apisix_upstream_status{.-)$"
-                local result = {}
-                for line in multiLineStr:gmatch("[^\r\n]+") do
-                    local match = line:match(pattern)
-                    if match then
-                        table.insert(result, match)
-                    end
-                end
-                return result
-            end
-
-            --- get the metrics
-            local function get_metrics()
-                local httpc = http.new()
-                local metric_uri = "http://127.0.0.1:"; .. ngx.var.server_port 
.. "/apisix/prometheus/metrics"
-                local metric_res, err = httpc:request_uri(metric_uri, {method 
= "GET"})
-                if err then
-                    ngx.say("failed to request: ", err)
-                    return
-                end
-                local apisix_upstream_status_body = 
find_apisix_upstream_status(metric_res.body)
-                for _, match in ipairs(apisix_upstream_status_body) do
-                    ngx.say(match)
-                end
-            end
-
-            -- create a route
-            local data = {
-                uri = "/ping",
-                upstream = {
-                    nodes = {
-                        ["127.0.0.1:8765"] = 1,
-                        ["127.0.0.1:8766"] = 1
-                    },
-                    retries = 2,
-                    checks = {
-                        active = {
-                            http_path = "/healthz",
-                            healthy = {
-                                interval = 1,
-                                successes = 1
-                            },
-                            unhealthy = {
-                                interval = 1,
-                                http_failures = 1
-                            },
-                        }
-                    }
-                }
-            }
-            local code, body = t.test('/apisix/admin/routes/1',
-                ngx.HTTP_PUT, core.json.encode(data))
-            if code >= 300 then
-                ngx.status = code
-                ngx.say(body)
-                return
-            end
-
-            local httpc = http.new()
-            local uri = "http://127.0.0.1:"; .. ngx.var.server_port .. "/ping"
-            local _, _ = httpc:request_uri(uri, {method = "GET", keepalive = 
false})
-
-            --- get metrics
-            get_metrics()
-
-            ngx.say("update the upstream")
-
-            --- update the route
-            local new_data = {
-                uri = "/ping",
-                upstream = {
-                    nodes = {
-                        ["127.0.0.1:8765"] = 1,
-                        ["127.0.0.1:8766"] = 1,
-                        ["127.0.0.1:8767"] = 1
-                    },
-                    retries = 2,
-                    checks = {
-                        active = {
-                            http_path = "/healthz",
-                            healthy = {
-                                interval = 1,
-                                successes = 1
-                            },
-                            unhealthy = {
-                                interval = 1,
-                                http_failures = 1
-                            },
-                        }
-                    }
-                }
-            }
-            local code, body = t.test('/apisix/admin/routes/1',
-                ngx.HTTP_PUT, core.json.encode(new_data))
-            if code >= 300 then
-                ngx.status = code
-                ngx.say(body)
-                return
-            end
-
-            local http = require("resty.http")
-            local httpc = http.new()
-            local uri = "http://127.0.0.1:"; .. ngx.var.server_port .. "/ping"
-            local _, _ = httpc:request_uri(uri, {method = "GET", keepalive = 
false})
-
-            --- get metrics
-            get_metrics()
-        }
-    }
---- request
-GET /t
---- grep_error_log eval
-qr/create new checker: table: 0x|try to release checker: table: 0x|event: 
target added '127.0.0.1\(127.0.0.1:8767.*/
---- grep_error_log_out
-create new checker: table: 0x
-try to release checker: table: 0x
-create new checker: table: 0x
-event: target added '127.0.0.1(127.0.0.1:8767)'
---- response_body
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8765"} 1
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8766"} 1
-update the upstream
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8765"} 1
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8766"} 1
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8767"} 1
-
-
-
-=== TEST 4: delete the route
---- extra_init_worker_by_lua
-    local healthcheck = require("resty.healthcheck")
-    local new = healthcheck.new
-    healthcheck.new = function(...)
-        local obj = new(...)
-        local clear = obj.delayed_clear
-        obj.delayed_clear = obj.clear
-        return obj
-    end
---- config
-    location /t {
-        content_by_lua_block {
-            local core = require("apisix.core")
-            local t = require("lib.test_admin")
-            local http = require("resty.http")
-
-            local function find_apisix_upstream_status(multiLineStr)
-                local pattern = "(apisix_upstream_status{.-)$"
-                local result = {}
-                for line in multiLineStr:gmatch("[^\r\n]+") do
-                    local match = line:match(pattern)
-                    if match then
-                        table.insert(result, match)
-                    end
-                end
-                return result
-            end
-
-            --- get the metrics
-            local function get_metrics()
-                local httpc = http.new()
-                local metric_uri = "http://127.0.0.1:"; .. ngx.var.server_port 
.. "/apisix/prometheus/metrics"
-                local metric_res, err = httpc:request_uri(metric_uri, {method 
= "GET"})
-                if err then
-                    ngx.say("failed to request: ", err)
-                    return
-                end
-                local apisix_upstream_status_body = 
find_apisix_upstream_status(metric_res.body)
-                for _, match in ipairs(apisix_upstream_status_body) do
-                    ngx.say(match)
-                end
-            end
-
-            -- create a route
-            local data = {
-                uri = "/ping",
-                upstream = {
-                    nodes = {
-                        ["127.0.0.1:8765"] = 1,
-                        ["127.0.0.1:8766"] = 1
-                    },
-                    retries = 2,
-                    checks = {
-                        active = {
-                            http_path = "/healthz",
-                            healthy = {
-                                interval = 1,
-                                successes = 1
-                            },
-                            unhealthy = {
-                                interval = 1,
-                                http_failures = 1
-                            },
-                        }
-                    }
-                }
-            }
-            local code, body = t.test('/apisix/admin/routes/1',
-                ngx.HTTP_PUT, core.json.encode(data))
-            if code >= 300 then
-                ngx.status = code
-                ngx.say(body)
-                return
-            end
-
-            local httpc = http.new()
-            local uri = "http://127.0.0.1:"; .. ngx.var.server_port .. "/ping"
-            local _, _ = httpc:request_uri(uri, {method = "GET", keepalive = 
false})
-
-            --- get metrics
-            get_metrics()
-
-            --- delete the route
-            local code, body = t.test('/apisix/admin/routes/1', 
ngx.HTTP_DELETE)
-            if code >= 300 then
-                ngx.status = code
-                ngx.say(body)
-                return
-            end
-
-            local http = require("resty.http")
-            local httpc = http.new()
-            local uri = "http://127.0.0.1:"; .. ngx.var.server_port .. "/ping"
-            local _, _ = httpc:request_uri(uri, {method = "GET", keepalive = 
false})
-
-            --- get metrics
-            get_metrics()
-        }
-    }
---- request
-GET /t
---- grep_error_log eval
-qr/create new checker: table: 0x|try to release checker: table: 0x/
---- grep_error_log_out
-create new checker: table: 0x
-try to release checker: table: 0x
---- response_body
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8765"} 1
-apisix_upstream_status{name="/apisix/routes/1",ip="127.0.0.1",port="8766"} 1

Reply via email to