50.8.1 示例: 导出到Redis

如果提供一个RedisMetricRepository类型的@Bean并注解@ExportMetricWriter,指标将导出到Redis缓存完成聚合。RedisMetricRepository有两个重要参数用于配置实现这样的目的:prefixkey(传递给构造器)。最好使用应用实例唯一的前缀(比如,使用一个随机值及应用的逻辑name,这样可以关联相同应用的其他实例)。“key”用来保持所有指标name的全局索引,所以它应该全局唯一,不管这对于你的应用意味着什么(比如,相同系统的两个实例可以共享一个Redis缓存,如果它们有不同的keys)。

示例:

  1. @Bean
  2. @ExportMetricWriter
  3. MetricWriter metricWriter(MetricExportProperties export) {
  4. return new RedisMetricRepository(connectionFactory,
  5. export.getRedis().getPrefix(), export.getRedis().getKey());
  6. }

application.properties

  1. spring.metrics.export.redis.prefix: metrics.mysystem.${spring.application.name:application}.${random.value:0000}
  2. spring.metrics.export.redis.key: keys.metrics.mysystem

前缀最后由应用名和id组成,所以它可以用来标识具有相同逻辑名的processes分组。

设置keyprefix都是非常重要的。key用于所有的仓库操作,并可以被多个仓库共享。如果多个仓库共享一个key(比如你需要聚合它们的时候),你通常有一个只读“master”仓库,它有一个简短的但可辨识的前缀(比如metrics.mysystem),还有很多只写的仓库,这些仓库以master前缀开头(比如以上示例中为metrics.mysystem.*)。这样从一个”master”仓库读取所有keys是相当高效的,但使用较长的前缀读取一个子集就比较低效了(比如使用一个写仓库)。

以上示例使用MetricExportProperties去注入和提取key和前缀,这是Spring Boot提供的便利设施,用于配置合适的默认值,你也可以自己设值。