有没有办法使用
catalina_globalrequestprocessor_requestcount
指标(或另一个 MBean 指标)来跟踪请求作为速率(例如,每秒请求数)以与 HPA 一起使用?
我们在 GKE 上运行的 Java 应用程序中使用具有自定义指标的 HPA(水平 Pod 自动缩放器)。设置如下:
到目前为止,此设置运行良好,并且我们已经使用堆大小和线程计数等指标看到了积极的结果。
我们希望根据传入请求的数量进行扩展,因此我们尝试使用
catalina_globalrequestprocessor_requestcount
指标作为阈值。
但是,这种方法不起作用,因为该指标是累积的——它从一开始就跟踪请求总数,并随着时间的推移不断增加。这种单调增加意味着即使在没有任何实际流量峰值的正常负载水平下,指标最终也会超过阈值。
下面是来自 Google Cloud Metrics Explorer 的图表,显示了
catalina_globalrequestprocessor_requestcount
指标的持续上升趋势:
我们尝试了以下指标配置:
prometheus.googleapis.com/catalina_globalrequestprocessor_requestcount/unknown
prometheus.googleapis.com/catalina_globalrequestprocessor_requestcount/unknown:counter
两种配置都表现出相同的增加行为。
有没有办法使用此指标(或另一个 MBean 指标)来跟踪请求作为与 HPA 一起使用的速率(例如,每秒请求数)?
这是我们使用的 HPA 对象的示例:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-autoscale
namespace: my-ns
spec:
maxReplicas: 3
metrics:
- pods:
metric:
name: prometheus.googleapis.com|catalina_globalrequestprocessor_requestcount|unknown:counter
target:
averageValue: 200
type: AverageValue
type: Pods
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-deployment
您是否已经尝试过使用普罗米修斯的速率指标?
率(catalina_globalrequestprocessor_requestcount[1m])
该指标根据 1 分钟窗口内的变化计算每秒的请求数。该比率适合捕捉近期变化,而不会对短期波动过于敏感。
在Prometheus中定义Rate:首先,根据rate()函数配置一个新的Prometheus指标。您想要基于 1 分钟间隔的每秒速率,因此在 Prometheus 中使用以下查询:
确保 Prometheus 将此新速率指标导出到 Google Cloud Managed Prometheus。
修改 HPA YAML 配置,即更新您的 HPA 以引用此基于速率的指标。