feat: add service config templates and extraction script

Former-commit-id: 1de24b7eb79676d1aba9d799a58c5a753290cf52
This commit is contained in:
反编译工作区
2026-05-01 19:38:01 +08:00
parent 3175b7074b
commit 8b15445328
2433 changed files with 8322164 additions and 1604 deletions
@@ -0,0 +1,117 @@
# 星中心日志分析
**Generated:** 2026-04-30
**Type:** Log collection workspace (not a code repo)
## OVERVIEW
Production log collection for Cloudwalk elevator access-control system (`elevator-app`) — a Java Spring Boot + Spring Cloud (Consul) microservice backed by MySQL (MyBatis + ShardingSphere), Redis, and Kafka. Logs captured from 3 servers on 2026-04-30.
## STRUCTURE
```
日志分析/
├── 10.0.22.207/ # Server 207, collected 17:11
│ └── 202604301711/
│ └── logs-207/
│ ├── elevator-app.log (116K lines, 16MB)
│ └── elevator-app-probe.log (15K lines, 3MB)
├── 10.0.22.208/ # Server 208, collected 17:12
│ └── 202604301712/
│ └── logs/
│ ├── elevator-app.log (198K lines, 31MB)
│ └── elevator-app-probe.log (14K lines, 2.9MB)
└── 10.0.22.209/ # Server 209, collected 17:13
└── 202604301713/
└── logs/
├── elevator-app.log (215K lines, 31MB)
└── elevator-app-probe.log (5.6K lines, 1.1MB)
```
**Naming convention**: `{IP}/{YYYYMMDDHHMM}/logs[-N]/` — IP-based server identification with collection timestamp. Server 207 uses `logs-207` subdirectory (non-standard naming, probable manual renaming).
## WHERE TO LOOK
| Task | Location | Notes |
|------|----------|-------|
| Application startup / bootstrap | `elevator-app.log` lines ~1-100 | Spring Boot startup, profile activation, bean registration |
| Face recognition events | `elevator-app.log` grep `PERSON_RECORD_UPLOAD` | Person entry/exit with face match scores |
| Door open events | `elevator-app.log` grep `OPENDOOR_RECORD_UPLOAD` | Door access records with face/token type |
| Database errors | `elevator-app.log` grep `ERROR` | ~4,200 total ERRORs across all servers |
| PERSON_LABEL_IDS truncation | `elevator-app.log` grep `Data too long for column` | ~2,200 occurrences — primary blocker |
| Service discovery / health | `elevator-app-probe.log` | Consul registration, config probes, ribbon status |
| Elevator dispatch failures | `elevator-app.log` grep `派梯记录推送失败` | Elevator record send failures |
## TECH STACK (inferred from logs)
| Component | Evidence |
|-----------|----------|
| Java / Spring Boot | `ElevatorApplication`, `AnnotationConfigEmbeddedWebApplicationContext` |
| Tomcat Embedded | `TomcatEmbeddedServletContainer: Tomcat started on port 16112` |
| Spring Cloud Consul | `ConsulServiceRegistry`, `spring.cloud.consul.host` |
| MySQL + MyBatis | `AcsRecogRecordMapper`, `it_acs_recog_record`, `SqlSessionTemplate` |
| ShardingSphere | `ShardingJDBC` references in log |
| Kafka | Kafka consumer/producer log entries |
| Redis | Dependency references in bean wiring logs |
| Spring Cloud Feign | `AcsFeignConfiguration`, Feign client beans |
## KEY ERROR PATTERNS
### PERSON_LABEL_IDS truncation (2,200+ occurrences)
```
MySQL Data truncation: Data too long for column 'PERSON_LABEL_IDS' at row 1
→ table: it_acs_recog_record
→ source: AcsRecogRecordDaoImpl.add() → AcsRecogRecordMapper.add
→ impact: recognition records with many label IDs fail to persist
→ suggestion: increase column size (VARCHAR → TEXT) or normalize into junction table
```
### Recognition record save failures
```
c.c.elevator.record.impl.AcsRecogRecordDaoImpl:40 - 保存识别记录失败
→ same root cause (PERSON_LABEL_IDS truncation)
```
### Elevator dispatch failures
```
cn.cloudwalk.elevator.task.ElevatorRecordSendTask:134 - 派梯记录推送失败
→ ~468 occurrences across all servers
→ "失败原因是:{}" — error message is empty, root cause masked
```
## EVENT TYPES OBSERVED
| Event Type | Handler | Description |
|------------|---------|-------------|
| `PERSON_RECORD_UPLOAD` | `PersonRecordEventHandler` | Face capture → recognition → person record |
| `OPENDOOR_RECORD_UPLOAD` | `OpenDoorRecordEventHandler` | Door access granted/denied record |
## SERVER-SPECIFIC NOTES
- **10.0.22.207** — appears to have restarted (2 Tomcat startups in log). Profile: `access-control`
- **10.0.22.208** — device: `1F高区闸机-右出-134-新`, threshold: 60.0
- **10.0.22.209** — device: `B1F监控中心`, threshold: 0.9 (much more permissive than 208)
## COMMANDS
```bash
# Error count per server
grep -c "ERROR" */20260430*/logs*/elevator-app.log
# Top error types across all servers
grep -h "ERROR" */20260430*/logs*/elevator-app.log | \
sed 's/\[.*\] \[.*\] ERROR //' | sort | uniq -c | sort -rn | head -20
# Extract all PERSON_LABEL_IDS failures
grep "Data too long for column 'PERSON_LABEL_IDS'" */20260430*/logs*/elevator-app.log
```
## NOTES
- All logs are from 2026-04-30, collected in ~1-hour windows per server
- `.DS_Store` files present in every directory — macOS artifacts, safe to ignore
- No code, configs, tests, or build scripts exist in this workspace — this is a data directory only
- Server 207 subdirectory named `logs-207` instead of `logs` (deviation from 208/209 pattern)
@@ -0,0 +1,238 @@
# 访客调用楼层放开接口 日志分析
**分析日期:** 2026-04-30
**数据来源:** 3 台服务器(10.0.22.207~209elevator-app 生产日志
**日志范围:** 2026-04-30 全天
---
## 一、接口识别
| 属性 | 值 |
|------|-----|
| **接口名称** | 访客派梯接口(Visitor Elevator Dispatch |
| **入口 Controller** | `cn.cloudwalk.elevator.person.controller.AcsPersonController` |
| **核心 Service** | `cn.cloudwalk.elevator.person.impl.PersonRuleServiceImpl` |
| **线程模型** | `http-nio-16112-exec-*`Tomcat 嵌入式 HTTP |
| **协议** | HTTP REST(直接请求,非 Feign 内部调用) |
| **端口** | 16112 |
| **Spring Profile** | `access-control` |
---
## 二、接口调用完整流程
```
Step 1 AcsPersonController:59 → INFO 访客派梯接口请求开始
参数: businessId, personId, visitorId, requestFloorSize, beginTime, endTime
Step 2 PersonRuleServiceImpl:176/196 → INFO 根据被访人添加访客派梯权限开始
参数: AcsPersonAddVisitorParam (floorIds[], timeRange)
Step 3 PersonRuleServiceImpl:180 → INFO 访客派梯楼层决策开始
callerProvidedFloors=true/false
Step 4 PersonRuleServiceImpl:279 → INFO 访客派梯权限写入准备
imageStoreId, floorSize
Step 5 PersonRuleServiceImpl:239/303 → INFO 访客添加派梯权限开始
写入规则数据 (zoneId, zoneName, parentRule)
Step 6 PersonRuleServiceImpl:321 → INFO 访客派梯权限绑定图库成功
Step 7 PersonRuleServiceImpl:329 → INFO 访客派梯权限更新规则引用成功
Step 8 PersonRuleServiceImpl:331 → INFO 访客派梯权限处理完成
Step 9 AcsPersonController:65 → INFO 访客派梯接口请求结束
success=true/false, code, message
```
**总日志条目数:** 86 条(完整流程跟踪)
---
## 三、HTTP 接口调用清单(7 次)
> 来源:`AcsPersonController:59` → `AcsPersonController:65`(通过 HTTP nio 线程的完整调用链)
| # | 请求时间 | 响应时间 | 耗时 | 服务器 | 线程 | 被访人(personId) | 访客(visitorId) | 楼层 | 到访时段 | 调用方 | 结果 |
|---|----------|----------|------|--------|------|------------------|----------------|------|----------|--------|------|
| 1 | 13:23:19.846 | 13:23:20.229 | ~383ms | **208** | exec-8 | 1084108444947398656 | 1102223662662270976 | 38F | 13:23~14:23 | zhongjian | ✅ success |
| 2 | 14:10:38.996 | 14:10:39.206 | ~210ms | **208** | exec-5 | 823973510593769472 | 1102235571215421440 | 20F | 00:00~23:59 | username | ✅ success |
| 3 | 16:03:36.857 | 16:03:37.307 | ~450ms | **208** | exec-6 | 964454497399468032 | 1102263999044743168 | 1F | 16:03~20:03 | zhongjian | ✅ success |
| 4 | 16:17:47.011 | 16:17:47.177 | ~166ms | **208** | exec-6 | 1087071519357636608 | 1102267565343846400 | 7F | 16:17~次日06:17 | zhongjian | ✅ success |
| 5 | 16:18:31.111 | 16:18:31.259 | ~148ms | **209** | exec-1 | 1087071519357636608 | 1102267749385883648 | 7F | 16:18~次日09:18 | zhongjian | ✅ success |
| 6 | 17:08:03.211 | 17:08:03.361 | ~150ms | **207** | exec-4 | 835608431162683392 | 1102280216649682944 | 7F | 00:00~23:59 | username | ✅ success |
| 7 | 17:10:58.602 | 17:10:58.953 | ~351ms | **207** | exec-5 | 883307982669344768 | 1102280951930654720 | 37F | 00:00~23:59 | username | ✅ success |
### HTTP 调用汇总
| 维度 | 统计 |
|------|------|
| 总调用数 | 7 |
| 成功 | 7100% |
| 失败 | 0 |
| 平均耗时 | ~265ms |
| 最快 | ~148ms#5 |
| 最慢 | ~450ms#3 |
| 服务器 | 调用数 |
|--------|--------|
| 10.0.22.207 | 2 |
| 10.0.22.208 | 4 |
| 10.0.22.209 | 1 |
| 楼层 | 次数 |
|------|------|
| 7F | 3 |
| 38F | 1 |
| 20F | 1 |
| 1F | 1 |
| 37F | 1 |
---
## 四、平台端直接授权清单(30 次)
> 来源:`PersonRuleServiceImpl:196`(不经过 HTTP 接口,通过平台/JWT 直接调用,可能为批量操作或定时任务触发)
| # | 时间 | 服务器 | 被访人 | 访客 | 楼层 | 调用方 | 鉴权方式 |
|---|------|--------|--------|------|------|--------|----------|
| 1 | 08:49:44.060 | 207 | 835608431162683392 | 1102154810462326784 | 17F | username | 无鉴权 |
| 2 | 08:59:00.006 | 209 | 835608431162683392 | 1102157142243692544 | 7F | username | 无鉴权 |
| 3 | 09:13:47.733 | 207 | 835608431162683392 | 1102160865632194560 | 7F | username | 无鉴权 |
| 4 | 09:26:57.215 | 207 | 835608431162683392 | 1102164176997470208 | 7F | username | 无鉴权 |
| 5 | 09:50:11.318 | 209 | 1058698682545074176 | 1102170024296157184 | 14F | username | 无鉴权 |
| 6 | 09:53:41.314 | 209 | 835608431162683392 | 1102170905011916800 | 7F | username | 无鉴权 |
| 7 | 10:42:11.685 | 207 | 835608431162683392 | 1102183111996837888 | 7F | username | 无鉴权 |
| 8 | 10:55:14.487 | 209 | 835608431162683392 | 1102186395370803200 | 16F | username | 无鉴权 |
| 9 | 11:19:35.648 | 209 | 1080078783668654080 | 1102192523495063552 | 16F | zhongjian | JWT |
| 10 | 11:20:15.413 | 207 | 1080078783668654080 | 1102192690361233408 | 16F | zhongjian | JWT |
| 11 | 11:51:49.813 | 209 | 835608431162683392 | 1102200636407123968 | 16F | username | 无鉴权 |
| 12 | 13:32:35.431 | 209 | 1082635377371615232 | 1102225992925278208 | 17F | zhongjian | JWT |
| 13 | 13:34:25.367 | 209 | 1082635377371615232 | 1102226454357291008 | 17F | zhongjian | JWT |
| 14 | 13:36:46.368 | 209 | 1082635377371615232 | 1102227045766737920 | 17F | zhongjian | JWT |
| 15 | 14:15:24.063 | 209 | 1053987768004349952 | 1102236766301306880 | 1F,28~38F(11层) | zhongjian | JWT |
| 16 | 14:18:34.671 | 209 | 823973510593769472 | 1102237566549200896 | 20F | username | 无鉴权 |
| 17 | 14:30:51.910 | 209 | 835608431162683392 | 1102240658717429760 | 7F | username | 无鉴权 |
| 18 | 14:34:55.732 | 209 | 823973510593769472 | 1102241681473294336 | 20F | username | 无鉴权 |
| 19 | 14:58:21.864 | 208 | 1084107118220513280 | 1102247578667565056 | 1F,28F,31F | zhongjian | JWT |
| 20 | 14:59:05.419 | 209 | 1084107118220513280 | 1102247761727963136 | 1F,31F,28F | zhongjian | JWT |
| 21 | 14:59:43.580 | 208 | 1084107118220513280 | 1102247921828720640 | 1F,31F,30F,28F | zhongjian | JWT |
| 22 | 15:00:19.291 | 209 | 1084107118220513280 | 1102248071548596224 | 1F,28F,31F | zhongjian | JWT |
| 23 | 15:00:51.443 | 209 | 1084107118220513280 | 1102248206227550208 | 1F,28F,30F,31F | zhongjian | JWT |
| 24 | 15:01:22.837 | 209 | 1084107118220513280 | 1102248338054692864 | 1F,28F,30F,31F | zhongjian | JWT |
| 25 | 15:02:28.670 | 209 | 1084107118220513280 | 1102248614014709760 | 1F,28F,30F,31F | zhongjian | JWT |
| 26 | 15:06:33.007 | 208 | 835608431162683392 | 1102249639376605184 | 7F | username | 无鉴权 |
| 27 | 15:20:23.153 | 208 | 835608431162683392 | 1102253117473837056 | 17F | username | 无鉴权 |
| 28 | 15:36:54.278 | 208 | 823973510593769472 | 1102257278244376576 | 20F | username | 无鉴权 |
| 29 | 16:16:54.653 | 209 | 1087071519357636608 | 1102267345675710464 | 7F | zhongjian | JWT |
| 30 | 16:29:26.678 | 208 | 964454497399468032 | 1102270499947507712 | 1F | zhongjian | JWT |
---
## 五、全量统计分析
### 服务器分布(总计 37 次)
| 服务器 | HTTP 接口 | 平台直接 | 合计 |
|--------|----------|----------|------|
| 10.0.22.207 | 2 | 5 | 7 |
| 10.0.22.208 | 4 | 8 | 12 |
| 10.0.22.209 | 1 | 17 | 18 |
### 被访人 TOP 10(总计 37 次)
| 被访人(personId) | 次数 |
|------------------|------|
| 835608431162683392 | 12 |
| 1084107118220513280 | 7 |
| 823973510593769472 | 4 |
| 1087071519357636608 | 3 |
| 1082635377371615232 | 3 |
| 964454497399468032 | 2 |
| 1080078783668654080 | 2 |
| 1084108444947398656 | 1 |
| 883307982669344768 | 1 |
| 1058698682545074176 | 1 |
| 1053987768004349952 | 1 |
### 楼层分布(总计 37 次)
| 楼层 | 次数 | 占比 |
|------|------|------|
| 7F | 11 | 29.7% |
| 1F | 10 | 27.0% |
| 28F | 8 | 21.6% |
| 31F | 8 | 21.6% |
| 30F | 5 | 13.5% |
| 16F | 4 | 10.8% |
| 17F | 5 | 13.5% |
| 20F | 4 | 10.8% |
| 37F | 2 | 5.4% |
| 38F | 2 | 5.4% |
| 14F | 1 | 2.7% |
| 32F | 1 | 2.7% |
| 33F | 1 | 2.7% |
| 34F | 1 | 2.7% |
| 35F | 1 | 2.7% |
| 36F | 1 | 2.7% |
> 注:一次请求可包含多楼层,故楼层计数 > 请求总数
### 调用方分布
| 调用方 | 次数 | 鉴权方式 |
|--------|------|----------|
| zhongjian(认证用户) | 19 | JWT Bearer Token |
| username(平台匿名) | 18 | 无额外鉴权 |
### 成功率
| 类型 | 总数 | 成功 | 失败 | 成功率 |
|------|------|------|------|--------|
| HTTP 接口 | 7 | 7 | 0 | 100% |
| 平台直接 | 30 | 30 | 0 | 100% |
| **合计** | **37** | **37** | **0** | **100%** |
---
## 六、关键发现
1. **全部成功** — 该时段内 37 次访客楼层授权操作全部成功,无任何失败/异常
2. **两条路径并存** — 系统提供两种访客派梯方式:
- HTTP API`AcsPersonController`):响应式,单次处理,平均耗时 ~265ms
- 平台端直接调用(`PersonRuleServiceImpl:196`):批量/间隔式触发,可能来自管理后台或定时任务
3. **高频被访人**`835608431162683392``1084107118220513280` 合计被访问 19 次(占 51%),可能是公共区域/前台员工
4. **热门楼层** — 7F、1F、28F、31F 占据前四,1F 可能为大厅/入口层
5. **JWT 鉴权**`zhongjian` 用户的操作均携带 JWT Bearer Token`username` 的操作无 Authorization header,可能通过网关统一鉴权
6. **未观察到"放开"术语** — 日志中未出现"楼层放开"关键词,系统使用"派梯"elevator dispatch)表示楼层权限
7. **阈值差异** — 服务器 208 设备阈值 60.0,209 设备阈值 0.9(差异显著,可能为不同安全等级场景)
---
## 七、附:日志搜索命令
```bash
# HTTP 接口调用(请求开始 + 响应结束)
grep -h "访客派梯接口请求" */20260430*/logs*/elevator-app.log
# 平台端直接授权
grep -h "根据被访人添加访客派梯权限开始" */20260430*/logs*/elevator-app.log
# 楼层决策详情
grep -h "访客派梯楼层决策" */20260430*/logs*/elevator-app.log
# 权限写入确认
grep -h "访客派梯权限处理完成" */20260430*/logs*/elevator-app.log
# 统计每台服务器调用量
grep -c "根据被访人添加访客派梯权限开始" */20260430*/logs*/elevator-app.log
# 统计楼层分布
grep -h "根据被访人添加访客派梯权限开始" */20260430*/logs*/elevator-app.log | \
grep -o '"zoneName":"[^"]*"' | sort | uniq -c | sort -rn
# 统计被访人分布
grep -h "根据被访人添加访客派梯权限开始" */20260430*/logs*/elevator-app.log | \
grep -o '"personId":"[^"]*"' | sort | uniq -c | sort -rn
```