micrometer
Micrometer为最流行的监控系统提供了一个简单的仪表客户端外观,允许仪表化JVM应用,而无需关心是哪个供应商提供的指标。它的作用和SLF4J类似,只不过它关注的不是Logging(日志),而是application metrics(应用指标)。简而言之,它就是应用监控界的SLF4J。
官网:http://micrometer.io/
springboot配置
在SpringBoot中使用Prometheus其实很简单,不需要配置太多的东西,在pom文件中加入依赖,完整内容如下所示。
- 步骤
- 添加pom依赖
<!--保证web引入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--prometheus-->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.2.0</version>
</dependency>
- 添加yml文件配置
#监控相关
management:
metrics:
tags:
application: ${spring.application.name}
export:
simple:
enabled: false
endpoints:
web:
exposure:
include: "*"
exclude: env, beans
endpoint:
shutdown:
enabled: true
- 修改启动类,添加micrometer ,MeterRegistry configurer
@EnableCaching
public class CmsBootApp {
private static Logger logger = LogManager.getLogger(CmsBootApp.class);
public static void main(String[] args) {
SpringApplication.run(CmsBootApp.class, args);
logger.info("CmsBootApp 启动成功!");
}
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer(
@Value("${spring.application.name}") String applicationName) {
return (registry) -> registry.config().commonTags("application", applicationName);
}
}
- 如果系统存在拦截器,修改拦截器,允许prometheus接口采集
@Configuration
public class SecurityConfig {
/**
* 先走 filter ,然后 filter 如果检测到请求头存在 token,则用 token 去 login,走 Realm 去验证
*/
@Bean
public ShiroFilterFactoryBean factory(SecurityManager securityManager) {
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
// 添加自己的过滤器并且取名为jwt
Map<String, Filter> filterMap = new LinkedHashMap<>();
//设置我们自定义的JWT过滤器
filterMap.put("jwt", new JWTFilter());
factoryBean.setFilters(filterMap);
factoryBean.setSecurityManager(securityManager);
// 设置无权限时跳转的 url;
factoryBean.setUnauthorizedUrl("/auth/unauthorized/");
Map<String, String> filterRuleMap = new HashMap<>();
// 所有请求通过我们自己的JWT Filter
filterRuleMap.put("/**", "jwt");
// 访问 /unauthorized/** 不通过JWTFilter
filterRuleMap.put("/auth/**", "anon");
filterRuleMap.put("/actuator/**", "anon"); //保证不拦截接口,才能被prometheus采集数据
filterRuleMap.put("/api/**", "anon");//保证不拦截接口,才能被prometheus采集数据
factoryBean.setFilterChainDefinitionMap(filterRuleMap);
return factoryBean;
}
- 新增prometheus.yml增加节点配置
- job_name: 'CMS-BOOT'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['192.168.1.128:8091']
网友评论