我们有一个Google Cloud Platform项目,该项目的api部署到kubernetes集群上。该api是一个Java春季启动应用,正在使用Prometheus Java客户端来收集有关该api的指标。
然后,我们使用堆栈驱动程序来显示api性能的仪表板。问题在于,我们已达到500个自定义指标的堆栈驱动程序限制。如集群的GCP日志所示:
component=remote msg="Unrecoverable error sending samples to remote storage" err="rpc error: code = ResourceExhausted desc = Your metric descriptor quota has been exhausted."
似乎Prometheus客户端正在收集端点的度量标准,包括url中的任何参数。这里有几个例子:
# TYPE gauge_response_member_password_reset_b85f877ad38784686173f330045fd994d8b4c09a_37ef2f93_9ea4_4e28_b1cf_e6204ffce2fa gauge
gauge_response_member_password_reset_b85f877ad38784686173f330045fd994d8b4c09a_37ef2f93_9ea4_4e28_b1cf_e6204ffce2fa 1.0
# TYPE gauge_response_member_password_reset_passwordResetToken_clientId gauge
gauge_response_member_password_reset_passwordResetToken_clientId 290.0y
因此,它将为上面的端点创建一个日志,其中包括get url参数中提供的数据,这是对仅具有参数名称的同一端点的度量的补充。
如何配置spring以不收集包含参数数据的端点的度量?因为这就是我们达到堆栈驱动程序限制的原因。
我们使用的是Prometheus的simpleclient插件,目前仅使用现成的设置:
compile group: 'io.prometheus', name: 'simpleclient', version: '0.5.0'
compile group: 'io.prometheus', name: 'simpleclient_spring_boot', version: '0.5.0'