企业级监控可视化系统 Prometheus + Grafana
警报(Alerting):使用 Prometheus 的 Alertmanager 或 Grafana 的内置告警功能,在指标异常时发送通知(邮件、Slack、钉钉等)。
服务发现:在云环境中(Kubernetes, Consul等),可以配置自动服务发现,无需手动修改配置文件来添加新目标。
认证与安全:为 Grafana 和 Prometheus 界面配置反向代理(Nginx)和 HTTPS。
一、为应用注入监控能力(埋点与暴露)
企业级 Java 项目(通常是 Spring Boot)需要暴露两类指标:JVM/系统级指标和自定义业务指标。
方法一:使用 Spring Boot Actuator + Micrometer(推荐,无需Agent)
①、依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Micrometer Prometheus 注册表 -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><version>1.11.5</version> <!-- 使用与你的Spring Boot版本兼容的版本 -->
</dependency>
②、配置应用属性(application.yml)
management:endpoints:web:exposure:include: health, info, prometheus # 关键:暴露prometheus端点metrics:tags:application: ${spring.application.name} # 为所有指标添加一个应用标签,便于区分export:prometheus:enabled: trueendpoint:prometheus:enabled: true
# 指定管理端口的常用方式(可选,避免与业务端口冲突)
server:port: 8080
management:server:port: 8081endpoints:web:base-path: /actuatorexposure:include: "*"
完成后,应用将在 http://<应用IP>:8081/actuator/prometheus 提供 Prometheus 格式的指标。
③、添加自定义指标
使用 Micrometer 的 MeterRegistry 在代码中创建自定义指标,例如统计订单创建数量:
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;@Component
public class OrderService {private final Counter ordersCreatedCounter;public OrderService(MeterRegistry registry) {ordersCreatedCounter = Counter.builder("orders.created").description("Total number of orders created").tag("application", "order-service") // 添加标签.register(registry);}public void createOrder(Order order) {// 业务逻辑...ordersCreatedCounter.increment(); // 指标计数}
}
方法二:使用 JMX Exporter(适用于传统/无法修改代码的应用)
①、下载jmx_prometheus_javaagent.jar
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar
②、创建配置文件 config.yml
lowercaseOutputName: true
lowercaseOutputLabelNames: true
rules:- pattern: '.*'
③、启动应用时添加 Java Agent
修改你的 Tomcat/JVM 启动脚本(如 catalina.sh 或 startup.sh):
JAVA_OPTS="$JAVA_OPTS -javaagent:/path/to/jmx_prometheus_javaagent-0.19.0.jar=9404:/path/to/config.yml"
验证: 使用 curl http://localhost:9404/metrics 或访问对应端点,检查是否能看到类似 jvm_memory_used_bytes 这样的指标。
二、安装与配置 Prometheus
①、下载并解压 Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.47.2/prometheus-2.47.2.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-*/
②、配置 prometheus.yml
修改 scrape_configs 部分,添加你的 Java 应用作为抓取目标
scrape_configs:- job_name: 'prometheus' # 监控自己static_configs:- targets: ['localhost:9090']- job_name: 'java-application' # 给你的Java应用起个名字metrics_path: '/actuator/prometheus' # 如果使用方法一# metrics_path: '/metrics' # 如果使用方法二static_configs:- targets: ['<你的Java应用服务器IP>:8081'] # 使用方法一,指向management.portlabels:group: 'spring-boot-apps'application: 'user-service-prod'# - targets: ['<另一个应用服务器IP>:9404'] # 可以添加多个实例# 对于企业级多实例,建议使用服务发现(如file_sd_configs),而不是静态配置
③、启动 Prometheus
./prometheus --config.file=prometheus.yml &
④、验证 Targets
访问 http://:9090/targets。确保你的 java-application 状态为 UP
三、安装与配置 Grafana
①、安装并启动 Grafana
# Ubuntu/Debian
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
②、登录并添加数据源
访问 http://:3000,默认账号密码 admin/admin。
添加 Data Source -> Prometheus。
URL 填写 http://:9090(确保网络连通)。
Save & Test
四、导入仪表板进行可视化
①、导入 JVM 监控仪表板
这是 Micrometer 官方推荐的仪表板,完美匹配 Spring Boot Actuator 暴露的指标。
在 Grafana 中,点击 Create -> Import。
输入 Dashboard ID: 4701,点击 Load。
选择你的 Prometheus 数据源,点击 Import。
一个详尽的 JVM 监控面板(包括内存、GC、线程、CPU等)就出现了。
②、创建自定义业务指标仪表板
点击 New Dashboard -> Add Visualization。
在 Query 框中,输入你的自定义指标名,例如 orders_created_total。
选择合适的可视化图表(如 Graph, Stat 等)。
设置标题、坐标轴等,保存面板
企业级考量:
服务发现(Service Discovery): 在生产环境中,手动写 IP 地址不可维护。应配置 Prometheus 使用 file_sd_configs, consul_sd_configs, kubernetes_sd_configs 等来自动发现目标。
告警(Alerting): 配置 Prometheus 的 Alertmanager 或 Grafana 告警规则,对 JVM 内存溢出、请求错误率飙升等异常情况设置告警。
高可用(HA): 对于关键业务,考虑 Prometheus 高可用方案或使用 Thanos/Cortex 等长期存储方案。
安全: 使用反向代理(Nginx)为 Grafana 和 Prometheus 配置 HTTPS 和基础认证。