HOOOS

别再瞎猜了!Druid 监控微服务订单和用户服务就这么简单(Java 开发者实战)

0 72 爱吃鱼的猫 Druid微服务数据库监控
Apple

别再瞎猜了!Druid 监控微服务订单和用户服务就这么简单(Java 开发者实战)

“哎,最近微服务老出问题,查日志查到头秃,要是能有个监控就好了...”

你是不是也经常遇到这样的烦恼?微服务架构下,服务数量众多,相互调用关系复杂,一旦出现问题,排查起来就像大海捞针。别担心,今天我就来给你支个招,用 Druid 来监控你的微服务,让问题无处遁形!

什么是 Druid?它能干啥?

Druid,可不是魔兽世界里的德鲁伊,而是一个强大的数据库连接池,同时也是一个优秀的监控工具。它能帮你监控 SQL 的执行情况、连接池状态、数据库性能等等,简直就是 Java 开发者的福音!

在微服务架构中,每个服务通常都有自己的数据库,Druid 可以帮你监控每个服务的数据库连接情况,让你对整个系统的健康状况了如指掌。

为什么选择 Druid?

  • 功能强大:Druid 提供了丰富的监控指标,包括 SQL 执行时间、TPS、QPS、连接池状态、数据库连接泄露检测等等。
  • 易于集成:Druid 与 Spring Boot、Spring Cloud 等主流框架无缝集成,配置简单。
  • 性能优秀:Druid 本身性能优异,对应用性能影响很小。
  • 可视化界面:Druid 提供了直观的监控界面,方便你查看监控数据和分析问题。

实战:用 Druid 监控订单服务和用户服务

接下来,我们就以一个电商场景为例,演示如何使用 Druid 监控订单服务和用户服务。假设你已经搭建好了 Spring Cloud 微服务架构,并且订单服务和用户服务都使用了 MySQL 数据库。

1. 环境准备

  • JDK 1.8+
  • Maven 3.6+
  • Spring Boot 2.x+
  • Spring Cloud 2.x+
  • MySQL 5.7+

2. 添加 Druid 依赖

在订单服务和用户服务的 pom.xml 文件中,添加 Druid Starter 依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>  <!-- 建议使用最新稳定版本 -->
</dependency>

3. 配置 Druid

在订单服务和用户服务的 application.yml 文件中,添加 Druid 相关配置:

spring:
  datasource:
    druid:
      # 基本配置
      driver-class-name: com.mysql.cj.jdbc.Driver
      # ... 其他数据库连接配置 ...
      # Druid 连接池配置
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      # Druid 监控配置
      filters: stat,wall  # 开启 StatFilter 和 WallFilter
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: true  # 允许清空统计数据
        login-username: admin # 监控界面登录用户名
        login-password: admin # 监控界面登录密码
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # 忽略静态资源

配置说明:

  • driver-class-name:数据库驱动类名。
  • initial-size:初始化连接数。
  • min-idle:最小空闲连接数。
  • max-active:最大活跃连接数。
  • max-wait:获取连接的最大等待时间。
  • filters:配置 Druid 的过滤器,stat 用于统计监控信息,wall 用于 SQL 防火墙。
  • stat-view-servlet:配置 Druid 监控界面的访问路径、登录用户名和密码。
  • web-stat-filter:配置 Web 应用监控,可以监控 URL、Session 等信息。

4. 启动服务并访问 Druid 监控界面

启动订单服务和用户服务,然后在浏览器中访问 http://localhost:{port}/druid/,例如 http://localhost:8080/druid/(假设订单服务端口为 8080),输入用户名和密码(admin/admin),即可进入 Druid 监控界面。

5. 查看监控指标

Druid 监控界面提供了丰富的监控指标,主要包括:

  • 数据源:查看数据库连接池的状态,包括连接数、活跃连接数、空闲连接数等。
  • SQL 监控:查看 SQL 的执行情况,包括执行时间、TPS、QPS、错误次数等。
  • Web 应用监控:查看 Web 请求的 URL、响应时间、Session 信息等。
  • SQL 防火墙:查看 SQL 注入攻击拦截情况。
  • Spring 监控: 如果你使用了 Spring,能看到Spring Bean 的执行情况。

你可以根据这些指标,分析系统的性能瓶颈和潜在问题。

6. 问题定位与解决

假设你发现某个 SQL 的执行时间很长,可以点击该 SQL 的详情,查看具体的 SQL 语句、执行计划、参数等信息,然后进行优化。

例如,你可以:

  • 优化 SQL 语句:避免使用全表扫描、使用索引、减少不必要的查询等。
  • 调整数据库连接池参数:根据实际情况,调整连接池的大小、最大等待时间等参数。
  • 升级数据库配置:如果数据库负载过高,可以考虑升级数据库硬件配置。
  • 检查是否连接泄露: 在“数据源”标签页,观察“活跃连接数”是否持续增长,而“空闲连接数”持续减少,甚至为0。如果是,那很可能发生了数据库连接泄露。

进阶:Druid 高级特性

除了基本的监控功能,Druid 还提供了一些高级特性,可以帮助你更好地监控和管理数据库连接。

  • SQL 防火墙:Druid 内置了 SQL 防火墙(WallFilter),可以防止 SQL 注入攻击。
  • 自定义监控指标:你可以通过 Druid 提供的 API,自定义监控指标,并将这些指标暴露到监控界面。
  • 报警功能:你可以配置 Druid 的报警功能,当某些指标超过阈值时,自动发送邮件或短信通知。
  • 与其他监控系统集成:Druid 可以与 Prometheus、Grafana 等监控系统集成,实现更强大的监控和可视化功能。

总结

Druid 是一个功能强大、易于使用、性能优秀的数据库连接池和监控工具,非常适合用于监控微服务架构中的数据库连接。通过 Druid,你可以轻松地了解每个服务的数据库连接情况,及时发现和解决问题,保障系统的稳定运行。

“用了 Druid 之后,再也不用担心数据库连接的问题了,感觉整个世界都清净了!”

希望这篇文章能帮助你更好地理解和使用 Druid,让你的微服务监控更上一层楼!如果你有任何问题或建议,欢迎在评论区留言。

点评评价

captcha
健康