(相关资料图)
本次示例以Windows示例推荐到官网去下载:Windows版的应用程序
下载最新版 prometheus-2.37.8.windows-amd64 压缩包:解压就行
准备一个Springboot的项目:下载最新版 grafana-9.5.2 压缩包:解压就行
导入相关的监控依赖
org.springframework.boot spring-boot-starter-actuator io.micrometer micrometer-registry-prometheus 1.10.5 org.springframework.boot spring-boot-starter-security
springSecurity的配置#springSecurity 配置spring.security.user.name=rootspring.security.user.password=rootspring.security.user.roles=ADMIN
spring-actuator配置#增加开启springboot actuator监控的配置management: endpoint: shutdown: enabled: true # 开启端点 health: show-details: always # 是否展示健康检查详情 endpoints: web: exposure: include: - prometheus - health metrics: tags: application: ${spring.application.name}
springSecurity的白名单接口配置-SecurityConfigpackage com.gton.config;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.builders.WebSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;/** * @description: * @author: GuoTong * @createTime: 2023-06-01 21:44:49 * @since JDK 1.8 OR 11 **/@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.formLogin().and().authorizeRequests() .antMatchers("/actuator/**", "/favicon.ico", "/doc.html").permitAll() .antMatchers("/static/**").permitAll() .antMatchers("/favicon.ico").permitAll() // swagger .antMatchers("/swagger**/**").permitAll() .antMatchers("/webjars/**").permitAll() .antMatchers("/v2/**").permitAll() .anyRequest().authenticated().and().csrf().disable(); //关闭csrf保护 } /** * Description: 忽略一些借口 * * @author: GuoTong * @date: 2023-06-01 21:44:49 * @return: */ @Override public void configure(WebSecurity web) throws Exception { web.ignoring() .antMatchers( "/doc.html", "/swagger-resources/configuration/ui", "/swagger*", "/swagger**/**", "/webjars/**", "/favicon.ico", "/**/*.css", "/**/*.js", "/**/*.png", "/**/*.gif", "/v2/**", "/**/*.ttf", "/actuator/**" ); }}
springboot的相关的配置@Value("${auth.global.enable:false}") private boolean enableGlobalAuth; @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } /** * Description: 添加全局跨域CORS处理 */ @Override public void addCorsMappings(CorsRegistry registry) { // 设置允许跨域的路径 registry.addMapping("/**") //设置允许跨域请求的域名 .allowedOrigins("http://127.0.0.1:8787") // 是否允许证书 .allowCredentials(true) // 设置允许的方法 .allowedMethods("GET", "POST", "DELETE", "PUT") // 设置允许的header属性 .allowedHeaders("*") // 跨域允许时间 .maxAge(3600); } /** * Description: 静态资源过滤 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //ClassPath:/Static/** 静态资源释放 registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); //释放swagger registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); //释放webjars registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } /** * 解决springboot升到2.6.x之后,knife4j报错 * * @param webEndpointsSupplier the web endpoints supplier * @param servletEndpointsSupplier the servlet endpoints supplier * @param controllerEndpointsSupplier the controller endpoints supplier * @param endpointMediaTypes the endpoint media types * @param corsEndpointProperties the cors properties * @param webEndpointProperties the web endpoints properties * @param environment the environment * @return the web mvc endpoint handler mapping */ @Bean public WebMvcEndpointHandlerMapping webMvcEndpointHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsEndpointProperties, WebEndpointProperties webEndpointProperties, Environment environment) { List> allEndpoints = new ArrayList<>(); Collection webEndpoints = webEndpointsSupplier.getEndpoints(); allEndpoints.addAll(webEndpoints); allEndpoints.addAll(servletEndpointsSupplier.getEndpoints()); allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints()); String basePath = webEndpointProperties.getBasePath(); EndpointMapping endpointMapping = new EndpointMapping(basePath); boolean shouldRegisterLinksMapping = shouldRegisterLinksMapping(webEndpointProperties, environment, basePath); return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsEndpointProperties.toCorsConfiguration(), new EndpointLinksResolver( allEndpoints, basePath), shouldRegisterLinksMapping, null); } /** * shouldRegisterLinksMapping * * @param webEndpointProperties * @param environment * @param basePath * @return */ private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) { return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT)); } /** * Description: 过滤器 * * @param registry * @author: GuoTong * @date: 2023-06-03 12:32:39 * @return:void */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MicrometerTPSInterceptor()).addPathPatterns("/**") .excludePathPatterns("/doc.html") .excludePathPatterns("/swagger-resources/**") .excludePathPatterns("/webjars/**") .excludePathPatterns("/v2/**") .excludePathPatterns("/favicon.ico") .excludePathPatterns("/sso/**") .excludePathPatterns("/swagger-ui.html/**"); } /** * Description: Bean 如下来监控 JVM 性能指标信息: * http://localhost:8889/actuator/prometheus 指标地址 * * @param applicationName * @author: GuoTong * @date: 2023-06-03 12:34:36 * @return:org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer */ @Bean MeterRegistryCustomizer configurer(@Value("${spring.application.name}") String applicationName) { return registry -> registry.config().commonTags("application", applicationName); }
启动访问监控-actuator的看板:http://localhost:port/actuator-prometheus的看板:http://localhost:port/actuator/prometheus配置Prometheus的对于本Springboot微服务站点的监控添加配置 以下内容为SpringBoot应用配置# Prometheus 启动完成之后 http://localhost:9090/targets# my global configglobal: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s).# Alertmanager configurationalerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093# Load rules once and periodically evaluate them according to the global "evaluation_interval".rule_files:# - "first_rules.yml"# - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:# Here it"s Prometheus itself.scrape_configs: - job_name: "prometheus" static_configs: - targets: ["127.0.0.1:9090"] ###以下内容为SpringBoot应用配置 - job_name: "BackStageApp" scrape_interval: 5s metrics_path: "/actuator/prometheus" static_configs: - targets: ["127.0.0.1:8889"] labels: instance: "BackStageApp-prometheus" service: "BackStageApp-8889-prometheus"
点击这个执行:prometheus的应用启动成功如下访问prometheus的应用:http://localhost:9090/可以点击链接跳转然后启动Grafana启动成功如下:初始化--启动有点久,耐性一点打开Grafana看板:http://localhost:3000/login显示的是:http://sky-20200720fyp:8889/actuator/prometheus说明Prometheus配置完成
第一次进入如下配置Prometheus的数据源第一步选这个管理配置菜单第二步选这个Datasorce第三步选这个添加新的Datasorce第四步选这个Prometheus数据源第五步配置Prometheus数据源的地址和名称,然后保存第六步配置Prometheus的看板导入对应的监控 JVM 的 Dashboard 模板,模板编号为 4701。,点击load填写这些必填项;导入自动加载后其他可以不用管,必须选择下面的刚刚配置的prometheus数据源,然后选择import第七步监控JVM首次登录使用 admin:admin 然后可以设置自己的账号密码,也可以跳过Skip
上一步点击然后选择import,会进入这个界面,什么都没有
选择自己项目的站点配置的application和instance就行了,刷新左上角的时间
创建文件组很多看板自己研究把
可以把监控看板移加入分类分组