在本地搭建wordpress,优化怎么做,太原seo关键词排名优化,php 手机网站 上传图片1. Micrometer简介Micrometer为Java平台上的性能数据收集提供了一个通用的API#xff0c;它提供了多种度量指标类型#xff08;Timers、Guauges、Counters等#xff09;#xff0c;同时支持接入不同的监控系统#xff0c;例如Influxdb、Graphite、Prometheus等。可以通过M…1. Micrometer简介Micrometer为Java平台上的性能数据收集提供了一个通用的API它提供了多种度量指标类型Timers、Guauges、Counters等同时支持接入不同的监控系统例如Influxdb、Graphite、Prometheus等。可以通过Micrometer收集Java性能数据配合Prometheus监控系统实时获取数据并最终在Grafana上展示出来从而很容易实现应用的监控。Micrometer中有两个最核心的概念分别是计量器Meter和计量器注册表MeterRegistry。计量器用来收集不同类型的性能指标信息Micrometer提供了如下几种不同类型的计量器计数器Counter: 表示收集的数据是按照某个趋势增加减少一直变化的也是最常用的一种计量器例如接口请求总数、请求错误总数、队列数量变化等。计量仪Gauge: 表示搜集的瞬时的数据可以任意变化的例如常用的CPU Load、Memory使用量、Network使用量、实时在线人数统计等计时器Timer: 用来记录事件的持续时间这个用的比较少。分布概要Distribution summary: 用来记录事件的分布情况表示一段时间范围内对数据进行采样可以用于统计网络请求平均延迟、请求延迟占比等。springboot集成Micrometerpom.xml依赖project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.olive/groupIdartifactIdprometheus-demo/artifactIdversion0.0.1-SNAPSHOT/versionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.7.RELEASE/versionrelativePath //parentpropertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-boot.version2.3.7.RELEASE/spring-boot.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!-- Micrometer Prometheus registry --dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-registry-prometheus/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement
/projectapplication.yml配置#添加以下配置用于暴露指标
management:endpoints:web:exposure:# 所有端点都对外暴露可访问到include: *metrics:tags:application: ${spring.application.name}spring:application:name: prometheus-demomanagement.endpoints.web.exposure.include配置为开启Actuator服务因为Spring Boot Actuator会自动配置一个URL为/actuator/Prometheus的HTTP服务来供Prometheus抓取数据不过默认该服务是关闭的该配置将打开所有的Actuator服务。management.metrics.tags.application配置会将该工程应用名称添加到计量器注册表的tag中去方便后边 Prometheus 根据应用名称来区分不同的服务。springboot启动引导类package com.olive;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}注册MeterRegistryCustomizer其实引入了依赖通过Actuator暴露你需要暴露的端点之后对应的Micrometer就会自动配置。但是为了方便监控建议我们对应用服务配置一些特殊的tag来更加准确的描述我们的监控实例package com.olive.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import io.micrometer.core.instrument.MeterRegistry;Configuration
public class MicrometerConfig {Value(${spring.application.name})private String applicationName;Beanpublic MeterRegistryCustomizer configurer(MeterRegistry meterRegistry) {return registry - meterRegistry.config().commonTags(application, applicationName, instance, applicationName _instance);}}以上的tag组合可以更好的来标识你的应用特别在集群当中。定义测试接口package com.olive.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class TestController {Logger logger LoggerFactory.getLogger(TestController.class);GetMapping(/test)public String test() {logger.info(test);return ok;}GetMapping(/)public String home() {logger.info(home);return ok;}
}启动服务并访问http://localhost:8080/actuator/prometheus访问以下接口http://localhost:8080/
http://localhost:8080/test再次访问http://localhost:8080/actuator/prometheus安全措施如果上述请求接口不做任何安全限制安全隐患显而易见。实际上Spring Boot也提供了安全限制功能。比如要禁用/env接口则可设置如下endpoint:env:enabled: false另外也可以引入spring-boot-starter-security依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactId
/dependency在application.properties中开启security功能配置访问权限验证这时再访问actuator功能时就会弹出登录窗口需要输入账号密码验证后才允许访问。spring:security:user:name: adminpassword: abc321为了只对actuator功能做权限验证其他应用接口不做认证需要可以重新定制下SpringSecurity。import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.util.StringUtils;Configuration
EnableWebSecurity
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {Autowiredprivate Environment env;Overrideprotected void configure(HttpSecurity security) throws Exception {String monitorBasePath env.getProperty(management.endpoints.web.base-path);String contextPath env.getProperty(server.servlet.context-path);if(contextPathnull) {contextPath ;}if(contextPath.endsWith(/)) {contextPath contextPath.substring(0, contextPath.length()-1);}if (!StringUtils.isEmpty(monitorBasePath)) {if(!monitorBasePath.startsWith(/)) {monitorBasePath / monitorBasePath;}contextPath contextPath monitorBasePath /prometheus;}else {contextPath contextPath /actuator/prometheus;}security.csrf().disable();security.authorizeRequests().antMatchers(contextPath, monitorBasePath /prometheus).authenticated().anyRequest().permitAll().and().httpBasic();}
}management.endpoints.web.base-path与server.servlet.context-path对应配置再次访问此时需要进行权限验证。最终配置#添加以下配置用于暴露指标
management:endpoints:web:exposure:include: *# actuator的访问路径替换默认/actuatorbase-path: /monitormetrics:tags:application: ${spring.application.name}server:#新开监控端口不和应用用同一个端口 port: 9595spring:application:name: prometheus-demosecurity:user:password: 123456name: adminserver:port: 8090servlet:context-path: /prometheus-demo