以下是基于 Prometheus + Grafana 监控微服务和数据库的详细指南,包含架构设计、安装配置及验证步骤:
一、整体架构设计
二、监控微服务
1. 微服务指标暴露
- Spring Boot 应用:
xml
<!-- 添加 Micrometer 依赖 --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
- 配置文件 (
application.yml
):yaml
management: endpoints: web: exposure: include: prometheus metrics: tags: application: your-service-name
- 访问指标:
http://<微服务IP>:端口/actuator/prometheus
- 配置文件 (
2. Prometheus 配置
修改 prometheus.yml
添加微服务监控:
yaml
scrape_configs:
- job_name: 'microservices'
static_configs:
- targets: ['ms1:8080', 'ms2:8080'] # 微服务实例地址
三、监控数据库
1. MySQL 监控
- 安装 mysqld_exporter:
bash
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz tar -zxvf mysqld_exporter-0.15.0.linux-amd64.tar.gz
- 配置数据库权限:
sql
CREATE USER 'exporter'@'%' IDENTIFIED BY 'password'; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
- 启动 Exporter:
bash
./mysqld_exporter --config.my-cnf=~/.my.cnf
2. Oracle 监控
- 安装 oracledb_exporter:
bash
wget https://github.com/iamseth/oracledb_exporter/releases/download/v0.2.8/oracledb_exporter.linux-amd64 chmod +x oracledb_exporter.linux-amd64
- 配置连接信息:
yaml
# config.yml data_source: system/password@//localhost:1521/orcl
- 启动 Exporter:
bash
./oracledb_exporter --config.path=config.yml
3. Prometheus 配置
yaml
scrape_configs:
- job_name: 'mysql'
static_configs:
- targets: ['mysql-server:9104'] # mysqld_exporter 默认端口 9104
- job_name: 'oracle'
static_configs:
- targets: ['oracle-server:9182'] # oracledb_exporter 默认端口 9182
四、Grafana 配置
1. 添加数据源
- 登录 Grafana(
http://<服务器IP>:3000
),进入 Configuration → Data Sources。 - 选择 Prometheus,填写 URL(如
http://prometheus-server:9090
),保存并测试连接。
2. 导入仪表盘
- 微服务监控:
- 模板 ID:
13978
(Spring Boot 监控)
- 模板 ID:
- MySQL 监控:
- 模板 ID:
7362
(MySQL Overview)
- 模板 ID:
- Oracle 监控:
- 模板 ID:
15222
(Oracle Database Monitoring)
- 模板 ID:
3. 自定义告警规则
在 Grafana 中创建告警规则(如数据库连接数阈值):
- 进入 Alerting → Rules,选择数据源。
- 编写 PromQL 查询,设置阈值和通知渠道(邮件 / Slack / 钉钉)。
五、验证与调优
Prometheus 验证:
- 访问
http://prometheus-server:9090/targets
,确保所有 Exporter 状态为UP
。 - 使用 PromQL 查询指标(如
node_cpu_seconds_total
)。
- 访问
Grafana 验证:
- 检查仪表盘数据是否实时更新。
- 测试告警规则是否触发通知。
性能优化:
- 调整
scrape_interval
(默认 15s)以平衡数据密度和性能。 - 配置
storage.tsdb.retention.time
控制数据保留时长(默认 15 天)。
- 调整
六、扩展方案
- 动态服务发现:
- 使用 Kubernetes DNS 或 Consul 自动发现微服务实例。
- 修改 Prometheus 配置为:
yaml
scrape_configs: - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod
- 高可用部署:
- 使用 Prometheus Operator 在 Kubernetes 中部署集群。
- 配置 Grafana 主从节点和持久化存储。
案例:
下面将详细介绍如何使用 Prometheus 和 Grafana 对 Spring Boot 应用以及 MySQL、Redis、MongoDB 数据库进行监控。
1. 监控 Spring Boot 应用
1.1 暴露 Spring Boot 应用指标
在 Spring Boot 项目的 pom.xml
中添加以下依赖:
xml
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
在 application.yml
或 application.properties
中进行如下配置:
yaml
management:
endpoints:
web:
exposure:
include: prometheus
metrics:
tags:
application: your-application-name
配置完成后,Spring Boot 应用会在 /actuator/prometheus
端点暴露 Prometheus 格式的指标。
1.2 配置 Prometheus 监控 Spring Boot 应用
在 prometheus.yml
中添加如下配置:
yaml
scrape_configs:
- job_name: 'spring-boot-app'
static_configs:
- targets: ['your-spring-boot-app-ip:port']
2. 监控 MySQL 数据库
2.1 安装并配置 mysqld_exporter
从 mysqld_exporter 发布页面 下载适合你系统的版本并解压。
为 mysqld_exporter
创建 MySQL 用户并授予必要的权限:
sql
CREATE USER 'exporter'@'%' IDENTIFIED BY 'password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
启动 mysqld_exporter
:
bash
./mysqld_exporter --config.my-cnf=~/.my.cnf
2.2 配置 Prometheus 监控 MySQL
在 prometheus.yml
中添加以下配置:
yaml
scrape_configs:
- job_name: 'mysql'
static_configs:
- targets: ['your-mysql-server-ip:9104']
3. 监控 Redis 数据库
3.1 安装并配置 redis_exporter
从 redis_exporter 发布页面 下载适合你系统的版本并解压。
启动 redis_exporter
:
bash
./redis_exporter --redis.addr redis://your-redis-server-ip:port
3.2 配置 Prometheus 监控 Redis
在 prometheus.yml
中添加以下配置:
yaml
scrape_configs:
- job_name: 'redis'
static_configs:
- targets: ['your-redis-exporter-ip:9121']
4. 监控 MongoDB 数据库
4.1 安装并配置 mongodb_exporter
从 mongodb_exporter 发布页面 下载适合你系统的版本并解压。
启动 mongodb_exporter
:
bash
./mongodb_exporter --mongodb.uri mongodb://your-mongodb-server-ip:port
4.2 配置 Prometheus 监控 MongoDB
在 prometheus.yml
中添加以下配置:
yaml
scrape_configs:
- job_name: 'mongodb'
static_configs:
- targets: ['your-mongodb-exporter-ip:9216']
5. 配置 Grafana
5.1 添加 Prometheus 数据源
登录 Grafana(http://your-grafana-server-ip:3000
),进入 Configuration
-> Data Sources
,选择 Prometheus
,填写 Prometheus 的 URL(如 http://your-prometheus-server-ip:9090
),然后保存并测试连接。
5.2 导入仪表盘
你可以从 Grafana 的 仪表盘库 导入预定义的仪表盘:
- Spring Boot 应用:可以使用 ID 为
13978
的仪表盘。 - MySQL 数据库:使用 ID 为
7362
的仪表盘。 - Redis 数据库:使用 ID 为
11835
的仪表盘。 - MongoDB 数据库:使用 ID 为
10577
的仪表盘。
在 Grafana 中点击 +
-> Import
,输入相应的仪表盘 ID,选择数据源后导入即可。
6. 验证与优化
6.1 验证 Prometheus 采集
访问 http://your-prometheus-server-ip:9090/targets
,确保所有监控目标的状态为 UP
。
6.2 验证 Grafana 展示
在 Grafana 中查看导入的仪表盘,确认数据正常展示。
6.3 优化建议
- 调整
scrape_interval
以平衡数据采集频率和性能开销。 - 配置
storage.tsdb.retention.time
控制数据保留时长。