本文目录导读:

- 监控方案概览
- Prometheus + Grafana 对接方案(推荐)
- Prometheus 配置
- Grafana 仪表盘配置
- 告警规则配置
- Spring Boot Actuator 健康检查
- 日志监控集成
- 实战部署脚本
- 性能优化建议
我来详细介绍Java服务器监控的对接方法,包括多种主流方案和具体实现步骤。
监控方案概览
主流监控工具选择
- Prometheus + Grafana:最流行的开源方案
- JMX (Java Management Extensions):Java原生监控
- Spring Boot Actuator:Spring应用专用
- Zabbix:企业级监控
- Pinpoint/SkyWalking:APM类监控
Prometheus + Grafana 对接方案(推荐)
1 基础配置
<!-- pom.xml 依赖 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2 application.yml 配置
management:
endpoints:
web:
exposure:
include: health,info,prometheus,metrics
base-path: /actuator
metrics:
tags:
application: ${spring.application.name}
export:
prometheus:
enabled: true
step: 1m
descriptions: true
3 自定义监控指标
@Component
public class CustomMetrics {
@Autowired
private MeterRegistry meterRegistry;
// 计数器
private Counter requestCounter;
// 计时器
private Timer requestTimer;
// 仪表
private Gauge activeUsersGauge;
@PostConstruct
public void init() {
requestCounter = Counter.builder("api.requests.total")
.description("Total API requests")
.tag("service", "user-service")
.register(meterRegistry);
requestTimer = Timer.builder("api.requests.duration")
.description("API request duration")
.register(meterRegistry);
activeUsersGauge = Gauge.builder("users.active")
.description("Active users count")
.register(meterRegistry);
}
// 使用示例
public void recordRequest() {
requestCounter.increment();
}
public void recordRequestDuration(Runnable action) {
requestTimer.record(action);
}
}
4 JVM监控配置
@Configuration
public class JvmMetricsConfig {
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return registry -> registry.config()
.commonTags("application", "myapp");
}
@Bean
public JvmGcMetrics jvmGcMetrics() {
return new JvmGcMetrics();
}
@Bean
public JvmHeapMemoryMetrics jvmHeapMemoryMetrics() {
return new JvmHeapMemoryMetrics();
}
@Bean
public JvmThreadMetrics jvmThreadMetrics() {
return new JvmThreadMetrics();
}
}
Prometheus 配置
1 prometheus.yml
scrape_configs:
- job_name: 'java-apps'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8080', '192.168.1.100:8080']
labels:
group: 'production'
- job_name: 'jvm-metrics'
metrics_path: '/metrics'
static_configs:
- targets: ['localhost:12345'] # JMX Exporter端口
2 JMX Exporter配置
# 启动参数添加
java -javaagent:jmx_prometheus_javaagent-0.16.1.jar=12345:config.yaml \
-jar your-application.jar
config.yaml:
---
startDelaySeconds: 0
ssl: false
rules:
- pattern: "java.lang:type=Memory"
name: jvm_memory_usage
- pattern: "java.lang:type=Threading"
name: jvm_threads
Grafana 仪表盘配置
1 数据源配置
{
"datasources": [
{
"name": "Prometheus",
"type": "prometheus",
"url": "http://prometheus:9090",
"access": "proxy",
"isDefault": true
}
]
}
2 关键监控面板
// CPU使用率
rate(process_cpu_usage{application="$app"}[5m])
// 内存使用
jvm_memory_used_bytes{area="heap", application="$app"}
// GC次数
rate(jvm_gc_pause_seconds_count{application="$app"}[5m])
// 线程数
jvm_threads_live_threads{application="$app"}
// 请求QPS
rate(http_server_requests_seconds_count{application="$app"}[1m])
// 错误率
rate(http_server_requests_seconds_count{status=~"5..", application="$app"}[5m]) /
rate(http_server_requests_seconds_count{application="$app"}[5m])
告警规则配置
1 Prometheus告警规则
groups:
- name: java-alerts
rules:
- alert: HighCPUUsage
expr: process_cpu_usage > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
- alert: OutOfMemory
expr: jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"} > 0.9
for: 2m
labels:
severity: critical
- alert: HighGCFrequency
expr: rate(jvm_gc_pause_seconds_count[5m]) > 10
for: 5m
labels:
severity: warning
Spring Boot Actuator 健康检查
1 自定义健康指标
@Component
public class DatabaseHealthIndicator implements HealthIndicator {
@Autowired
private DataSource dataSource;
@Override
public Health health() {
try (Connection conn = dataSource.getConnection()) {
if (conn.isValid(1000)) {
return Health.up()
.withDetail("database", "MySQL")
.withDetail("version", conn.getMetaData().getDatabaseProductVersion())
.build();
}
return Health.down()
.withDetail("error", "Database connection failed")
.build();
} catch (SQLException e) {
return Health.down(e).build();
}
}
}
2 集成外部监控系统
@Component
public class MetricsPushGateway {
@Value("${pushgateway.url}")
private String pushgatewayUrl;
@Scheduled(fixedRate = 60000)
public void pushMetrics() {
Collecter collector = new Collecter();
// 收集自定义指标
collector.addMetric("custom_metric", 100);
// 推送到PushGateway
PushGateway pg = new PushGateway(pushgatewayUrl);
pg.pushAdd(collector, "custom_job");
}
}
日志监控集成
1 Logback配置
<configuration>
<appender name="METRICS" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="JSON" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="JSON"/>
</root>
</configuration>
实战部署脚本
1 Docker Compose部署
version: '3.8'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana_data:/var/lib/grafana
java-app:
build: .
ports:
- "8080:8080"
environment:
- JAVA_OPTS=-javaagent:/app/jmx_exporter.jar=12345:/app/config.yaml
性能优化建议
1 采样策略
- 核心指标:5s采样间隔
- 业务指标:30s-1min采样间隔
- JVM指标:15s采样间隔
2 数据存储
- 短期数据(<7天):Prometheus本地存储
- 长期数据:Thanos/Cortex
- 高基数指标:使用Histogram
3 关键监控指标
CPU: usage, load average
2. 内存: heap, non-heap, metaspace
3. GC: young/old GC frequency, pause time
4. 线程: active, blocked, waiting
5. 连接池: active, idle, pending
6. 请求: QPS, P99 latency, error rate
这套方案可以实现对Java服务器的全方位监控,包括性能、可用性、资源使用等维度,可根据实际需求灵活调整监控指标和告警阈值。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播