从头开始开发一个java后端项目:9普罗米修斯监控springboot、spring boot项目部署

1,158 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

前言

今天是除夕,祝大家新年快乐。昨天想要引入amis低代码,但是使用Vue3的解决方案没找到。自己集成了一会,但是遇到了很多问题,到最后也没有集成成功,暂时搁浅了。今天来讲一下项目部署和集成普罗米修斯。

普罗米修斯集成到项目中

  • 我们在pom.xml中添加依赖如下
<!-- prometheus -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
  • 在我们的Application启动类中,添加一个bean,全部代码如下
package code.liang.top.admin.boot;

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
 * @author lmh
 */
@SpringBootApplication
public class AdminBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdminBootApplication.class, args);
    }

    @Bean
    MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name:Default}") String applicationName) {
        return (registry) -> registry.config().commonTags("application", applicationName);
    }

}

至此我们就集成了普罗米修斯

spring boot 部署到docker

我们这里使用docker部署一下我们的后端项目

  • 开放自己服务器的2375端口 这里建议不要再正式的服务器中开启2375端口,防止恶意入侵
    我们打开下边这个文件
 vi /usr/lib/systemd/system/docker.service

然后将这一行的配置

ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock \

替换为

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \

然后我们执行下列命令重启docker

systemctl daemon-reload
systemctl restart docker
  • 通过idea连接docker 我们在idea插件市场中搜素并安装docker插件,然后添加一个docker的配置如下 idea docker 配置 -编写Dockerfile 在项目根目录下新建Dockerfile文件,内容如下
FROM openjdk:17-slim
ADD /target/*.jar /starter/app.jar
ENTRYPOINT ["java","-jar","/starter/app.jar"]

这里我们是简单的部署,所以先编写能让项目启动起来的配置就行了
第一行我们指定jdk的镜像为openjdk17
第二行我们把target下的所有以.jar结束的文件复制到容器的start目录下命名为app.jar 第三行我们就直接执行 java -jar /start/app.jar

  • 编译项目 我们执行mvn的打包方法,生成项目的jar包
  • 启动项目 我们新建一个docker的idea启动配置,如下所示 docker start 我们在最后直接点击idea的运行按钮即可自动发布到对应的docker服务器上去

druid问题修复

在发布完项目后,我们发现如果访问服务器上的druid会报错,经过查询我们发现是没有设置信任ip,我们可以直接添加一下,添加后druid的配置如下

spring:
  datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:mysql://???:3306/xxx?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: supporter
    type: com.alibaba.druid.pool.DruidDataSource
    #   数据源其他配置
    druid:
      #     配置初始化大小、最小、最大线程数
      initialSize: 5
      minIdle: 5
      #     CPU核数+1,也可以大些但不要超过20,数据库加锁时连接过多性能下降
      maxActive: 20
      #     最大等待时间,内网:800,外网:1200(三次握手1s)
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      #     配置一个连接在池中最大空间时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1
      testWhileIdle: true
      #     设置从连接池获取连接时是否检查连接有效性,true检查,false不检查
      testOnBorrow: true
      #     设置从连接池归还连接时是否检查连接有效性,true检查,false不检查
      testOnReturn: true
      #     可以支持PSCache(提升写入、查询效率)
      poolPreparedStatements: true
      #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,slf4j
      #     保持长连接
      keepAlive: true
      maxPoolPreparedStatementPerConnectionSize: 20
      useGlobalDataSourceStat: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
      db-type: mysql
      stat-view-servlet: #配置监控页功能
        enabled: true  #默认开启,这里显示说明
        login-username: root #登录名
        login-password: supporter #登录密码
        reset-enable: false #禁用重置按钮
        allow:
      web-stat-filter: #监控web
        enabled: true
        url-pattern: /* #监控所有
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'  #放行
      filter:
        stat: #对上面filters里的stat的详细配置
          slow-sql-millis: 1000 #慢sql时间是毫秒单位的  执行时间1秒以上的为慢SQL
          log-slow-sql: true #日志记录
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false #禁用删除表的SQL

此时重启项目并重新发布的话,任意IP都可以访问我们的druid监控

结语

更文挑战已经写了20天了,以后可能会更新的慢一点大家多谅解。本篇文章集成了普罗米修斯,下篇文章我们介绍一下使用grafna可视化
本文所有代码已上传的gitee,欢迎有兴趣的掘友们startgitee.com/liangminghu…
欢迎关注我的掘金账号:juejin.cn/user/261290…
下期预告:grafna可视化普罗米修斯数据的docker部署