Apache ShenYu监控告警系统:Prometheus+Grafana
系统架构概述
Apache ShenYu网关的监控告警系统基于InfluxDB时序数据库构建核心数据存储层,通过Prometheus+Grafana实现指标收集与可视化展示。系统采用插件化设计,通过MonitorPlugin拦截所有API请求,采集关键性能指标并存储至InfluxDB,最终通过Prometheus适配层对接Grafana实现监控面板与告警规则配置。
核心监控模块
1. 数据采集层
监控数据采集由两大核心组件协同完成:
- MonitorPlugin:作为后置插件拦截请求,生成包含响应时间、状态码、调用量等指标的MonitorDO实体
- InfluxDbService:提供时序数据写入能力,通过writeData方法将指标点(Point)持久化
关键指标定义:
// 核心监控实体定义
public class MonitorDO {
private String host; // 网关主机名
private String ip; // 网关IP地址
private String method; // HTTP方法
private String module; // 业务模块
private String resultType; // 调用结果状态
private String rpcType; // 协议类型(HTTP/Dubbo)
private long count; // 调用耗时(ms)
}
2. 存储配置
InfluxDB集成通过Spring Boot自动配置实现,核心配置类InfluxDbConfiguration提供数据源管理:
@Configuration
@ConditionalOnProperty(prefix = "spring.influxdb", name = "url")
public class InfluxDbConfiguration {
@Bean
public InfluxDBTemplate influxDBTemplate(final InfluxDBConnectionFactory connectionFactory) {
return new InfluxDBTemplate<>(connectionFactory, new PointConverter());
}
}
3. 数据流转流程
- 请求经过网关时触发MonitorPlugin
- 通过Disruptor高性能队列异步处理指标数据
- SoulDataHandler调用InfluxDB服务写入数据
- Prometheus通过自定义Exporter采集InfluxDB指标
- Grafana读取Prometheus数据源展示监控面板并触发告警
Prometheus集成方案
1. 指标暴露配置
需添加Prometheus Java客户端依赖并配置指标采集端点:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2. 关键监控指标
| 指标名称 | 类型 | 描述 | 来源 |
|---|---|---|---|
| soul_request_total | Counter | 总请求数 | MonitorPlugin |
| soul_request_latency_ms | Histogram | 请求延迟分布 | MonitorDO |
| soul_request_error_rate | Gauge | 错误率 | InfluxDbService |
Grafana监控面板
1. 面板配置
推荐导入官方提供的ShenYu监控模板,包含以下核心视图:
- 全局请求流量监控
- 协议类型分布(HTTP/Dubbo)
- 服务响应时间分位数
- 错误码统计分析
2. 告警规则配置
针对关键指标设置告警阈值:
groups:
- name: soul_alerts
rules:
- alert: HighErrorRate
expr: soul_request_error_rate > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: "网关错误率过高"
description: "错误率持续5分钟超过5% (当前值: {{ $value }})"
部署与验证
1. 环境配置
修改application.yml启用InfluxDB存储:
spring:
influxdb:
url: http://influxdb:8086
username: admin
password: admin
database: soul_monitor
2. 功能验证
通过InfluxDbServiceTest单元测试验证数据写入功能,或执行以下curl命令检查指标暴露端点:
curl http://localhost:9090/actuator/prometheus | grep soul_
扩展建议
- 指标增强:扩展MonitorDO添加JVM指标(内存/线程)
- 告警渠道:集成AlertManager实现邮件、钉钉等多渠道通知
- 历史数据:配置InfluxDB数据保留策略,实现长期趋势分析
完整监控方案实现可参考官方文档README.md及监控模块源码soul-web/src/main/java/org/dromara/soul/web/influxdb/。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




