网站建设业动态,网站建设构造学习,做利基网站用备案,做产品封面的网站项目上线后#xff0c;除了能保障正常运行以外#xff0c;也需要服务运行的各个指标进行监控#xff0c;例如 服务器CPU、内存使用占比#xff0c;Full GC 执行时间等#xff0c;针对一些指标出现异常#xff0c;可以加入一些报警机制能及时反馈给开发运维。这样#xf…项目上线后除了能保障正常运行以外也需要服务运行的各个指标进行监控例如 服务器CPU、内存使用占比Full GC 执行时间等针对一些指标出现异常可以加入一些报警机制能及时反馈给开发运维。这样对于一些突发异常能提前预知、并及时修复避免服务宕机造成的损失。
针对 SpringBoot 项目Spring 团队提供了对应 stater spring-boot-actuator 模块通过 HTTP endpoints 来获取 SpringBoot 项目中的审计、健康状况以及一些配置项、容器注册 bean 以及heapdump 等信息
actuator 通过开放 http 接口方式来表示各个指标详情但这种方式并不直观并且针对一些指标阈值并没有提供一些报警规则因此需要引入另外一个服务Prometheus 专用于事件监视以及报警的开源工具。
Prometheus 指标是基于事件戳方式进行记录的通过 key、value 方式存储记录指标在时间维度方面颗粒度更小除了Prometheus 外针对指标可视化还需要一个工具Grafana专用于数据查询、以及指标可视化
SpringBoot
创建一个 SpringBoot 项目加入 spring-boot-starter-actuator 以及 micrometer-registry-prometheus 依赖对外暴露 /actuator/permetheus 端口服务让Prometheus 用于数据抓取
项目 pom 依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.1.8.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.example/groupIdartifactIddemo/artifactIdversion0.0.1-SNAPSHOT/versionnamedemo/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.17/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.15/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependencydependencygroupIdio.micrometer/groupIdartifactIdmicrometer-registry-prometheus/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion2.1.8.RELEASE/versionconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project
服务 yml 配置项除了将 actuator 的 metrics、health 等接口暴露给 prometheus 服务外服务还加入了 druid 数据连接池监控 MYSQL数据库的运行密码是经过 Druid 加密后处理的。
server:port: 8082spring:application:name: metricsLocalAppredis:host: localhostport: 6379password: 123456datasource:url: jdbc:mysql://localhost:3306/xxx?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/ShanghaiuseSSLfalseusername: rootpassword: YjHh36LKJ62yxE9RhYVQLDDWK2QseZ/S7OgtBC7sv1Yzi6YLUOZMN8BcFrAbzLJmjXtmXW2f9nISSReTobqZQdriver-class-name: com.mysql.cj.jdbc.Driver# 开启druid驱动type: com.alibaba.druid.pool.DruidDataSourcedruid:filter:config:enabled: true# 初始化建立物理连接个数initial-size: 3# 最凶奥连接池min-idle: 3# 连接池最大连接数max-active: 20# 获取连接时最大等待时间单位毫秒max-wait: 60000# 申请连接的时候检测如果空闲时间大于timeBetweenEvictionRunsMillis执行validationQuery检测连接是否有效。test-while-idle: true# 既作为检测的间隔时间又作为testWhileIdel执行的依据time-between-connect-error-millis: 60000# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时关闭当前连接min-evictable-idle-time-millis: 30000# 用来检测连接是否有效的sql 必须是一个查询语句# mysql中为 select x# oracle中为 select 1 from dualvalidation-query: select x# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-borrow: false# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-return: false# 是否缓存preparedStatement,mysql5.5建议开启pool-prepared-statements: true# 当值大于0时poolPreparedStatements会自动修改为truemax-pool-prepared-statement-per-connection-size: 20# 合并多个DruidDataSource的监控数据use-global-data-source-stat: false# 配置扩展插件filters: stat,wall,slf4j# 通过connectProperties属性来打开mergeSql功能慢SQL记录connect-properties: druid.stat.mergeSqltrue;druid.stat.slowSqlMillis2000# 定时输出统计信息到日志中并每次输出日志会导致清零reset连接池相关的计数器。time-between-log-stats-millis: 300000# 配置DruidStatFilterweb-stat-filter:enabled: trueurl-pattern: /*exclusions: *.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*# 配置DruidStatViewServletstat-view-servlet:# 是否启用StatViewServlet监控页面默认值为false考虑到安全问题默认并未启动如需启用建议设置密码或白名单以保障安全url-pattern: /druid/*# 禁用HTML页面上的“Reset All”功能reset-enable: false
# # druid登录名login-username: admin# 登录密码login-password: adminenabled: trueconnection-properties: config.decrypttrue;config.decrypt.keyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOuIUu/iVnxlfq9EYCmu9CVVEYrjwMjI8/DZ7zMwVnLov9cNxRnK3TV94SDL6p5C0EjFx1NKW5ntJwVoe8jZxV8CAwEAAQmanagement:server:port: 9001
# 开启 actator 服务endpoints:web:exposure:include: *
# 暴露 metrics 端口endpoint:metrics:enabled: true
# 配置 prometheus 服务prometheus:enabled: truemetrics:export:prometheus:enabled: truetags:application: ${spring.application.name}
此外SpringBoot启动入口将服务名注册到 micrometer 中的 application用于prometheus 数据抓取
SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}BeanMeterRegistryCustomizerMeterRegistry configurer(Value(${spring.application.name}) String applicationName){return (registry) - registry.config().commonTags(application,applicationName);}
}项目启动浏览器输入 http://localhost:9001/actuator/prometheus就可以看到如下基本指标包含jvm、tomcat 以及 系统cpu、线程及内存信息 Prometheus 配置
以下操作都以假设你的电脑已经安装好 Docker 工具为前提
本机环境 OS Windows10
1从dockerhub 拉取 prometheus 镜像
docker pull prom/prometheus:v2.37.52在合适文件中创建 prometheus.yml 配置文件
global:
# 数据抓取频率scrape_interval: 60s# 数据评估频率evaluation_interval: 60s# 抓取配置项
scrape_configs:# 指定 springboot name标签- job_name: metricsLocalApp# 设定metrics 的路径metrics_path: /actuator/prometheusstatic_configs:# 配置目标关联 host如果是本机的话建议用 内网ip而不用 localhost- targets: [192.168.0.108:9001]3打开 terminal启动刚刚拉取的 permetheus 镜像注意 D:/programCoding/Docker/permetheus/config/prometheus.yml 为我的电脑中 permetheus 的安装路径这里目的是要挂载到镜像中的配置文件夹中
docker run -d -p 9090:9090 -v D:/programCoding/Docker/permetheus/config/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:v2.37.5镜像启动成功后浏览器输入http://localhost:9090点击上方菜单栏中的 status 下选框点击 Targets就能看到类似于下面的页面效果第一个对应上文中的 SpringBoot 项目 Grafana 安装
prometheus 配置完成之后下面需要配置 Grafana 这里也是借助 Docker 镜像
docker 拉取 grafana 镜像
docker pull grafana/grafana:9.2.13运行镜像
docker run -d -p 3000:3000 --namegrafana -v D:/programCoding/Docker/grafana/storage:/var/lib/grafana grafana/grafana:9.2.13启动成功后浏览器输入http://localhost:3000Grafana 初始账号和密码都为 admin 首先创建数据源 然后创建dashboard 选取数据源指定metrics 指标 然后 Grafana 就能根据你的设置生成N个可视化面板。