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

monkeydluffy 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 f3b549bd5 feat(prometheus): allow user configure DEFAULT_BUCKETS 
(#9673)
f3b549bd5 is described below

commit f3b549bd5a2e4ec88f24ec9607346b58b95cb6cd
Author: Fucheng Jiang <[email protected]>
AuthorDate: Sun Jun 25 14:45:08 2023 +0800

    feat(prometheus): allow user configure DEFAULT_BUCKETS (#9673)
---
 apisix/plugins/prometheus/exporter.lua |  7 ++++-
 conf/config-default.yaml               |  6 ++++
 docs/en/latest/plugins/prometheus.md   | 19 ++++++++++++
 docs/zh/latest/plugins/prometheus.md   | 19 ++++++++++++
 t/plugin/prometheus4.t                 | 55 ++++++++++++++++++++++++++++++++++
 5 files changed, 105 insertions(+), 1 deletion(-)

diff --git a/apisix/plugins/prometheus/exporter.lua 
b/apisix/plugins/prometheus/exporter.lua
index 1cb4a534c..8e9032640 100644
--- a/apisix/plugins/prometheus/exporter.lua
+++ b/apisix/plugins/prometheus/exporter.lua
@@ -173,10 +173,15 @@ function _M.http_init(prometheus_enabled_in_stream)
             {"code", "route", "matched_uri", "matched_host", "service", 
"consumer", "node",
             unpack(extra_labels("http_status"))})
 
+    local buckets = DEFAULT_BUCKETS
+    if attr and attr.default_buckets then
+        buckets = attr.default_buckets
+    end
+
     metrics.latency = prometheus:histogram("http_latency",
         "HTTP request latency in milliseconds per service in APISIX",
         {"type", "route", "service", "consumer", "node", 
unpack(extra_labels("http_latency"))},
-        DEFAULT_BUCKETS)
+        buckets)
 
     metrics.bandwidth = prometheus:counter("bandwidth",
             "Total bandwidth in bytes consumed per service in APISIX",
diff --git a/conf/config-default.yaml b/conf/config-default.yaml
index d41df397b..0e9802c7a 100755
--- a/conf/config-default.yaml
+++ b/conf/config-default.yaml
@@ -561,6 +561,12 @@ plugin_attr:
     #  bandwidth:
     #    extra_labels:
     #      - upstream_addr: $upstream_addr
+    # default_buckets:
+    #   - 10
+    #   - 50
+    #   - 100
+    #   - 200
+    #   - 500
   server-info:
     report_ttl: 60   # live time for server info in etcd (unit: second)
   dubbo-proxy:
diff --git a/docs/en/latest/plugins/prometheus.md 
b/docs/en/latest/plugins/prometheus.md
index df30025ce..b2120ceaf 100644
--- a/docs/en/latest/plugins/prometheus.md
+++ b/docs/en/latest/plugins/prometheus.md
@@ -77,6 +77,25 @@ plugin_attr:
                 - upstream_status: $upstream_status
 ```
 
+### Specifying `default_buckets`
+
+`DEFAULT_BUCKETS` is the default value for bucket array in `http_latency` 
metrics.
+
+You can change the `DEFAULT_BUCKETS` by configuring `default_buckets` 
attribute in you configuration file.
+
+Here is a configuration example:
+
+```yaml title="conf/config.yaml"
+plugin_attr:
+  prometheus:
+    default_buckets:
+      - 15
+      - 55
+      - 105
+      - 205
+      - 505
+```
+
 ## API
 
 This Plugin will add the API endpoint `/apisix/prometheus/metrics` or your 
custom export URI for exposing the metrics.
diff --git a/docs/zh/latest/plugins/prometheus.md 
b/docs/zh/latest/plugins/prometheus.md
index b63d7f970..f386d681e 100644
--- a/docs/zh/latest/plugins/prometheus.md
+++ b/docs/zh/latest/plugins/prometheus.md
@@ -59,6 +59,25 @@ plugin_attr:
     export_uri: /apisix/metrics
 ```
 
+### 如何修改延迟指标中的 `default_buckets`
+
+`DEFAULT_BUCKETS` 是 `http_latency` 指标中 bucket 数组的默认值。
+
+你可以通过修改配置文件中的 `default_buckets` 来重新指定 `DEFAULT_BUCKETS`
+
+配置示例如下:
+
+```yaml title="conf/config.yaml"
+plugin_attr:
+  prometheus:
+    default_buckets:
+      - 15
+      - 55
+      - 105
+      - 205
+      - 505
+```
+
 ## API
 
 `prometheus` 插件会增加 `/apisix/prometheus/metrics` 接口或者你自定义的 URI 来暴露其指标信息。
diff --git a/t/plugin/prometheus4.t b/t/plugin/prometheus4.t
index 999316a61..2a72736c8 100644
--- a/t/plugin/prometheus4.t
+++ b/t/plugin/prometheus4.t
@@ -134,3 +134,58 @@ GET /hello
 GET /apisix/prometheus/metrics
 --- response_body eval
 
qr/apisix_http_status\{code="200",route="10",matched_uri="\/hello",matched_host="",service="",consumer="",node="127.0.0.1",dummy=""\}
 \d+/
+
+
+
+=== TEST 7: set route
+--- yaml_config
+plugin_attr:
+    prometheus:
+        default_buckets:
+            - 15
+            - 55
+            - 105
+            - 205
+            - 505
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/routes/1',
+                ngx.HTTP_PUT,
+                [[{
+                    "plugins": {
+                        "prometheus": {}
+                    },
+                    "upstream": {
+                        "nodes": {
+                            "127.0.0.1:1980": 1
+                        },
+                        "type": "roundrobin"
+                    },
+                    "uri": "/hello1"
+                }]]
+                )
+
+            if code >= 300 then
+                ngx.status = code
+            end
+            ngx.say(body)
+        }
+    }
+--- pipelined_requests eval
+["GET /t", "GET /hello1"]
+--- response_body eval
+["passed\n", "hello1 world\n"]
+
+
+
+=== TEST 8: fetch metrics
+--- request
+GET /apisix/prometheus/metrics
+--- response_body eval
+qr/apisix_http_latency_bucket\{type="upstream",route="1",service="",consumer="",node="127.0.0.1",le="15"\}
 \d+
+apisix_http_latency_bucket\{type="upstream",route="1",service="",consumer="",node="127.0.0.1",le="55"\}
 \d+
+apisix_http_latency_bucket\{type="upstream",route="1",service="",consumer="",node="127.0.0.1",le="105"\}
 \d+
+apisix_http_latency_bucket\{type="upstream",route="1",service="",consumer="",node="127.0.0.1",le="205"\}
 \d+
+apisix_http_latency_bucket\{type="upstream",route="1",service="",consumer="",node="127.0.0.1",le="505"\}
 \d+/

Reply via email to