mirror of
https://gitee.com/san-bing/JChargePointProtocol
synced 2026-06-12 19:29:41 +08:00
19 KiB
19 KiB
JChargePointProtocol 监控与运维手册
**本文档中引用的文件** - [log4j2.xml](file://jcpp-app-bootstrap/src/main/resources/log4j2.xml) - [log4j2.xml](file://jcpp-protocol-bootstrap/src/main/resources/log4j2.xml) - [DefaultStatsFactory.java](file://jcpp-infrastructure-stats/src/main/java/sanbing/jcpp/infrastructure/stats/DefaultStatsFactory.java) - [DefaultCounter.java](file://jcpp-infrastructure-stats/src/main/java/sanbing/jcpp/infrastructure/stats/DefaultCounter.java) - [StatsTimer.java](file://jcpp-infrastructure-stats/src/main/java/sanbing/jcpp/infrastructure/stats/StatsTimer.java) - [MessagesStats.java](file://jcpp-infrastructure-stats/src/main/java/sanbing/jcpp/infrastructure/stats/MessagesStats.java) - [DefaultMessagesStats.java](file://jcpp-infrastructure-stats/src/main/java/sanbing/jcpp/infrastructure/stats/DefaultMessagesStats.java) - [KafkaConsumerStatsService.java](file://jcpp-infrastructure-queue/src/main/java/sanbing/jcpp/infrastructure/queue/kafka/KafkaConsumerStatsService.java) - [SystemUtil.java](file://jcpp-infrastructure-util/src/main/java/sanbing/jcpp/infrastructure/util/SystemUtil.java) - [app-service.yml](file://jcpp-app-bootstrap/src/main/resources/app-service.yml) - [protocol-service.yml](file://jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml) - [docker-compose.kafka.yml](file://docker/docker-compose.kafka.yml)目录
概述
JChargePointProtocol是一个高性能的充电站协议处理平台,采用微服务架构设计,支持多种充电设备协议的接入和处理。本手册详细介绍了系统的监控与运维机制,帮助运维人员有效监控系统状态、及时发现和解决问题。
日志管理系统
Log4j2配置详解
系统采用Log4j2作为日志框架,提供了灵活的日志配置和强大的日志管理能力。
配置结构分析
graph TD
A["Log4j2配置"] --> B["属性配置"]
A --> C["Appender配置"]
A --> D["Logger配置"]
B --> B1["LOG_DIR - 日志目录"]
B --> B2["LOG_PATTERN - 输出格式"]
C --> C1["Console - 控制台输出"]
C --> C2["RollingFile - 文件轮转"]
D --> D1["Root Logger"]
D --> D2["Async Logger"]
D --> D3["业务模块Logger"]
图表来源
日志级别配置
系统支持多层级的日志级别配置:
| Logger名称 | 默认级别 | 环境变量 | 用途 |
|---|---|---|---|
| Root Logger | INFO | - | 全局基础日志 |
| sanbing.jcpp | INFO | - | 核心框架日志 |
| sanbing.jcpp.app | TRACE | APP_LOG_LEVEL | 应用层详细日志 |
| sanbing.jcpp.protocol | TRACE | PROTOCOLS_LOG_LEVEL | 协议处理日志 |
输出格式配置
日志输出格式包含以下关键信息:
- 时间戳:精确到毫秒
- TraceId:分布式追踪标识
- 线程名:便于问题定位
- 日志级别:ERROR、WARN、INFO、DEBUG
- 类名:类的简短名称
- 日志消息:实际日志内容
- 异常堆栈:完整异常信息
日志轮转策略
系统采用复合轮转策略:
flowchart TD
A["日志文件"] --> B{"文件大小检查"}
B --> |超过1GB| C["触发SizeBasedTriggeringPolicy"]
B --> |时间检查| D{"时间轮转检查"}
D --> |超过24小时| E["触发TimeBasedTriggeringPolicy"]
C --> F["执行文件轮转"]
E --> F
F --> G["删除超过10GB历史日志"]
G --> H["保留最新日志文件"]
图表来源
章节来源
性能监控体系
StatsFactory核心架构
系统通过StatsFactory提供统一的性能指标收集机制,支持多种监控指标类型。
classDiagram
class StatsFactory {
<<interface>>
+createStatsCounter(key, statsName, tags) StatsCounter
+createDefaultCounter(key, tags) DefaultCounter
+createMessagesStats(key, tags) MessagesStats
+createTimer(key, tags) Timer
+createGauge(key, number, tags) T
}
class DefaultStatsFactory {
-MeterRegistry meterRegistry
-Boolean metricsEnabled
-Double[] timerPercentiles
+createStatsCounter() StatsCounter
+createDefaultCounter() DefaultCounter
+createMessagesStats() MessagesStats
+createTimer() Timer
+createGauge() T
}
class StatsCounter {
-AtomicInteger counter
-Counter micrometerCounter
+increment() void
+add(delta) void
+get() int
+clear() void
}
class MessagesStats {
<<interface>>
+incrementTotal() void
+incrementSuccessful() void
+incrementFailed() void
+getTotal() int
+getSuccessful() int
+getFailed() int
+reset() void
}
class StatsTimer {
-String name
-Timer timer
-int count
-long totalTime
+record(timeMs) void
+getAvg() double
+reset() void
}
StatsFactory <|-- DefaultStatsFactory
DefaultStatsFactory --> StatsCounter
DefaultStatsFactory --> MessagesStats
DefaultStatsFactory --> StatsTimer
MessagesStats <|-- DefaultMessagesStats
图表来源
关键性能指标
API请求监控
系统通过StatsTimer跟踪API请求的延迟性能:
| 指标名称 | 计算方式 | 用途 |
|---|---|---|
| 平均响应时间 | totalTime / count | 评估系统响应性能 |
| 请求总数 | 累计计数 | 监控系统负载 |
| 成功率 | successfulCount / totalCount | 评估系统稳定性 |
QPS监控
通过DefaultCounter实现每秒查询率统计:
sequenceDiagram
participant Client as 客户端
participant Controller as 控制器
participant StatsFactory as 统计工厂
participant Counter as 计数器
Client->>Controller : 发送请求
Controller->>StatsFactory : 创建计数器
StatsFactory->>Counter : increment()
Counter->>Counter : 原子递增
Controller->>Controller : 处理业务逻辑
Controller-->>Client : 返回响应
图表来源
缓存命中率监控
系统通过缓存访问统计计算命中率:
| 指标 | 计算公式 | 监控意义 |
|---|---|---|
| 命中率 | hitCount / (hitCount + missCount) | 缓存效率评估 |
| 命中次数 | hitCounter.get() | 缓存有效性 |
| 未命中次数 | missCounter.get() | 缓存优化方向 |
章节来源
- DefaultStatsFactory.java
- DefaultCounter.java
- StatsTimer.java
- MessagesStats.java
- DefaultMessagesStats.java
消息队列监控
Kafka消费者统计
系统提供详细的Kafka消费者组监控功能,实时跟踪消息处理状态。
flowchart TD
A["KafkaConsumerStatsService"] --> B["消费者组注册"]
B --> C["定时统计任务"]
C --> D["获取消费者偏移量"]
D --> E["获取主题末尾偏移量"]
E --> F["计算消息滞后量"]
F --> G{"存在滞后消息?"}
G --> |是| H["记录滞后统计"]
G --> |否| I["跳过统计"]
H --> J["输出日志"]
I --> K["等待下次调度"]
J --> K
图表来源
消息滞后监控指标
| 指标名称 | 含义 | 监控阈值建议 |
|---|---|---|
| 消费者组ID | Kafka消费者组标识 | 实时监控 |
| 主题名称 | 消息主题 | 按业务划分 |
| 分区编号 | Kafka分区标识 | 单分区监控 |
| 已消费偏移量 | 当前消费位置 | 跟踪消费进度 |
| 末尾偏移量 | 主题最新消息位置 | 监控消息增长 |
| 消息滞后量 | 未消费消息数量 | 超过1000需关注 |
消费者组健康检查
系统自动监控消费者组的健康状态:
sequenceDiagram
participant Scheduler as 统计调度器
participant AdminClient as Kafka管理客户端
participant Consumer as Kafka消费者
participant Logger as 日志系统
Scheduler->>AdminClient : 获取消费者组偏移量
AdminClient-->>Scheduler : 返回偏移量信息
Scheduler->>Consumer : 获取主题末尾偏移量
Consumer-->>Scheduler : 返回末尾偏移量
Scheduler->>Scheduler : 计算消息滞后量
alt 存在滞后消息
Scheduler->>Logger : 记录滞后统计
else 正常状态
Scheduler->>Scheduler : 跳过记录
end
图表来源
章节来源
系统资源监控
系统指标采集
系统通过SystemUtil类提供底层系统资源监控能力。
classDiagram
class SystemUtil {
-HardwareAbstractionLayer HARDWARE
+getMemoryUsage() Optional~Integer~
+getTotalMemory() Optional~Long~
+getCpuUsage() Optional~Integer~
+getCpuCount() Optional~Integer~
+getDiscSpaceUsage() Optional~Integer~
+getTotalDiscSpace() Optional~Long~
-toPercent(used, total) int
}
class ServiceInfoProvider {
<<interface>>
+getServiceInfo() ServiceInfo
+generateNewServiceInfoWithCurrentSystemInfo() ServiceInfo
+isMonolith() boolean
}
class DefaultServiceInfoProvider {
-String serviceId
-String serviceType
-ServiceInfo serviceInfo
-String hostAddress
-int restPort
-int grpcPort
+getServiceInfo() ServiceInfo
+generateNewServiceInfoWithCurrentSystemInfo() ServiceInfo
}
ServiceInfoProvider <|-- DefaultServiceInfoProvider
DefaultServiceInfoProvider --> SystemUtil
图表来源
资源监控指标
CPU监控
| 指标 | 获取方式 | 监控意义 |
|---|---|---|
| CPU使用率 | HARDWARE.getProcessor().getSystemCpuLoad() | 系统负载评估 |
| CPU核心数 | HARDWARE.getProcessor().getLogicalProcessorCount() | 并发能力参考 |
内存监控
| 指标 | 获取方式 | 监控意义 |
|---|---|---|
| 内存使用率 | (total - available) / total * 100 | 内存压力评估 |
| 总内存容量 | HARDWARE.getMemory().getTotal() | 内存资源配置 |
磁盘监控
| 指标 | 获取方式 | 监控意义 |
|---|---|---|
| 磁盘使用率 | (total - usable) / total * 100 | 磁盘空间压力 |
| 总磁盘容量 | Files.getFileStore().getTotalSpace() | 存储资源规划 |
章节来源
故障排查指南
常见故障场景
服务无法启动
症状表现:
- 应用启动失败
- 端口绑定错误
- 依赖服务不可用
排查步骤:
flowchart TD
A["服务启动失败"] --> B{"检查端口占用"}
B --> |端口被占用| C["修改端口配置"]
B --> |端口正常| D{"检查依赖服务"}
D --> |数据库不可用| E["检查数据库连接"]
D --> |Redis不可用| F["检查Redis连接"]
D --> |Kafka不可用| G["检查Kafka集群"]
D --> |依赖正常| H["检查配置文件"]
C --> I["重启服务"]
E --> I
F --> I
G --> I
H --> I
诊断命令:
# 检查端口占用
netstat -tlnp | grep :8080
# 检查进程状态
ps aux | grep jcpp
# 查看启动日志
tail -f logs/jcpp-app.log
消息积压问题
症状表现:
- Kafka消费者滞后增加
- 消息处理延迟
- 系统响应变慢
排查流程:
sequenceDiagram
participant Admin as 管理员
participant Monitor as 监控系统
participant Kafka as Kafka集群
participant Consumer as 消费者组
Admin->>Monitor : 触发积压检查
Monitor->>Kafka : 查询消费者偏移量
Kafka-->>Monitor : 返回偏移量信息
Monitor->>Kafka : 查询主题末尾偏移量
Kafka-->>Monitor : 返回末尾偏移量
Monitor->>Monitor : 计算滞后量
alt 滞后量过大
Monitor->>Admin : 发送告警通知
Admin->>Consumer : 检查消费者处理能力
Consumer-->>Admin : 返回处理状态
else 滞后量正常
Monitor->>Admin : 记录正常状态
end
解决措施:
- 增加消费者实例数量
- 优化消息处理逻辑
- 调整批处理大小
- 检查消费者组重新平衡
高延迟问题
症状表现:
- API响应时间增加
- 用户体验下降
- 系统吞吐量降低
分析方法:
| 排查维度 | 检查项目 | 解决方案 |
|---|---|---|
| 应用层 | GC日志分析 | 调整JVM参数 |
| 数据库层 | 慢SQL分析 | 添加索引优化 |
| 网络层 | 连接池配置 | 增加连接数 |
| 缓存层 | 缓存命中率 | 优化缓存策略 |
章节来源
运维最佳实践
日常维护任务
数据库备份策略
flowchart TD
A["数据库备份"] --> B["全量备份"]
A --> C["增量备份"]
B --> D["每周日执行"]
C --> E["每日凌晨执行"]
D --> F["保留4周"]
E --> G["保留7天"]
F --> H["归档存储"]
G --> H
H --> I["异地备份"]
I --> J["定期验证"]
系统健康检查清单
| 检查项目 | 检查频率 | 关注指标 | 告警阈值 |
|---|---|---|---|
| 服务可用性 | 实时 | 响应时间 | >1000ms |
| CPU使用率 | 5分钟 | 平均值 | >80% |
| 内存使用率 | 5分钟 | 平均值 | >85% |
| 磁盘使用率 | 1小时 | 占用比例 | >90% |
| 错误率 | 实时 | 错误数量/总请求数 | >5% |
配置管理规范
- 环境隔离:开发、测试、生产环境配置严格分离
- 版本控制:所有配置文件纳入版本控制系统
- 变更审批:重大配置变更需经过审批流程
- 回滚准备:每次配置变更都应准备回滚方案
性能优化建议
JVM调优参数
# 生产环境推荐配置
JAVA_OPTS: >
-Xms2g -Xmx4g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/logs/
-Djava.awt.headless=true
数据库连接池优化
| 参数 | 推荐值 | 说明 |
|---|---|---|
| maximumPoolSize | 64 | 最大连接数 |
| minimumIdle | 10 | 最小空闲连接 |
| connectionTimeout | 30000 | 连接超时时间 |
| idleTimeout | 600000 | 空闲连接超时 |
章节来源
监控集成方案
Prometheus集成
系统内置Prometheus指标导出功能,支持与主流监控系统集成。
指标暴露配置
management:
endpoints:
web:
exposure:
include: 'prometheus,health'
endpoint:
health:
show-details: always
关键监控指标
| 指标名称 | 类型 | 说明 |
|---|---|---|
| jcpp_api_requests_total | Counter | API请求总数 |
| jcpp_api_requests_duration_seconds | Histogram | API请求耗时分布 |
| jcpp_cache_hit_rate | Gauge | 缓存命中率 |
| jcpp_queue_lag | Gauge | 消息队列滞后量 |
| jcpp_system_cpu_usage | Gauge | CPU使用率 |
| jcpp_system_memory_usage | Gauge | 内存使用率 |
Grafana仪表板
系统概览面板
graph LR
A["Grafana仪表板"] --> B["系统资源监控"]
A --> C["应用性能监控"]
A --> D["业务指标监控"]
B --> B1["CPU使用率"]
B --> B2["内存使用率"]
B --> B3["磁盘空间"]
C --> C1["API响应时间"]
C --> C2["错误率"]
C --> C3["QPS"]
D --> D1["充电订单量"]
D --> D2["设备在线率"]
D --> D3["支付成功率"]
告警规则配置
groups:
- name: jcpp-alerts
rules:
- alert: HighCpuUsage
expr: jcpp_system_cpu_usage > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU使用率过高"
- alert: HighMemoryUsage
expr: jcpp_system_memory_usage > 85
for: 3m
labels:
severity: critical
annotations:
summary: "内存使用率过高"
Docker监控
容器化部署监控
graph TD
A["Docker Compose"] --> B["应用容器"]
A --> C["Kafka集群"]
A --> D["监控组件"]
B --> B1["JCPP应用"]
B --> B2["协议处理服务"]
C --> C1["Kafka Broker"]
C --> C2["Zookeeper"]
D --> D1["Prometheus"]
D --> D2["Grafana"]
D --> D3["Kafka Exporter"]
图表来源
章节来源