Prometheus如何缓存OAuth2.0访问令牌实现每小时刷新一次
Prometheus OAuth2 令牌1小时缓存配置实现
Prometheus 内置的 OAuth2 客户端默认自带令牌缓存逻辑,不会每次15秒抓取指标都重新申请令牌:
- 正常场景下,客户端会自动读取令牌接口返回的
expires_in字段作为令牌有效期,在距离过期还有10秒时自动触发刷新,其余抓取请求直接复用内存中缓存的令牌 - 只有当令牌接口不返回
expires_in字段,或是你需要强制固定令牌刷新周期为1小时、忽略授权服务器返回的有效期时,才需要手动添加缓存配置
具体配置方法
在现有配置的oauth2配置块下添加validity_duration参数,指定值为3600s(即1小时)即可,该参数会强制覆盖授权服务器返回的令牌过期时间,让Prometheus将获取到的令牌缓存满1小时后再重新申请。
注意:
validity_duration参数要求Prometheus版本 >= 2.44.0,低版本无该配置项,需先升级到对应版本以上。
修改后的完整配置如下:
global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: [] rule_files: [] scrape_configs: - job_name: "prometheus" metrics_path: "/actuator/prometheus" static_configs: - targets: ["localhost:8080"] oauth2: client_id: "实际业务的客户端ID" client_secret_file: "客户端密钥对应的本地文件路径" scopes: [] token_url: "OAuth2服务的令牌申请接口地址" # 强制令牌缓存1小时,到期后才重新申请 validity_duration: 3600s
效果验证
配置生效后,可以通过两个方式验证缓存是否正常:
- 查看Prometheus服务日志,正常情况下仅每小时会出现一次向token_url发起请求的记录,不会每15秒抓取时都产生令牌申请日志
- 查看OAuth2授权服务侧的访问日志,令牌接口的调用频率为1小时1次,和配置的缓存周期一致
内容的提问来源于stack exchange,提问作者Arnav Mehta
相关产品推荐
相关产品推荐

