提交 a05e0b83 authored 作者: 陈泽健's avatar 陈泽健

fix(script): 修复服务器健康检查脚本中的配置和日志问题

- 修复 hashtable 中裸字符串配置,为域名添加 DnsTestDomain 键值
- 统一数组元素间的逗号分隔符格式
- 修复容器名称获取的空值处理,添加 ToString() 类型转换
- 修复 MQTT 日志消息中的变量插值语法
- 修复 Redis、MySQL、FastDFS 容器名称获取的空值处理
- 修复 FastDFS 文件创建命令中的引号转义问题
- 添加中间件检测优化需求文档
上级 05ae4064
......@@ -220,8 +220,10 @@ $MiddlewareConfig = @{
ContainerName = "ustorage"
Description = "FastDFS 文件存储服务"
}
"www.aliyun.com"
)
# ✅ 修复:不要在 hashtable 里写裸字符串。若你需要把域名放进配置,请给它一个 Key
DnsTestDomain = "www.aliyun.com"
}
# ================================
# 日志导出配置
......@@ -229,14 +231,14 @@ $MiddlewareConfig = @{
# 新统一平台日志路径配置
$NewPlatformLogs = @(
@{ Name = "auth_log.out"; RemotePath = "/data/services/api/auth/auth-sso-auth/log.out" }
@{ Name = "gatway_log.out"; RemotePath = "/data/services/api/auth/auth-sso-gatway/log.out" }
@{ Name = "system_log.out"; RemotePath = "/data/services/api/auth/auth-sso-system/log.out" }
@{ Name = "对内2.0_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-meeting2.0/logs/ubains-INFO-AND-ERROR.log" }
@{ Name = "对内3.0_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-meeting3.0/logs/ubains-INFO-AND-ERROR.log" }
@{ Name = "对外服务_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-meeting-extapi/logs/ubains-INFO-AND-ERROR.log" }
@{ Name = "信息调度_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-message-scheduling/logs/ubains-INFO-AND-ERROR.log" }
@{ Name = "MQTT_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-mqtt/logs/ubains-INFO-AND-ERROR.log" }
@{ Name = "auth_log.out"; RemotePath = "/data/services/api/auth/auth-sso-auth/log.out" },
@{ Name = "gatway_log.out"; RemotePath = "/data/services/api/auth/auth-sso-gatway/log.out" },
@{ Name = "system_log.out"; RemotePath = "/data/services/api/auth/auth-sso-system/log.out" },
@{ Name = "对内2.0_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-meeting2.0/logs/ubains-INFO-AND-ERROR.log" },
@{ Name = "对内3.0_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-meeting3.0/logs/ubains-INFO-AND-ERROR.log" },
@{ Name = "对外服务_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-meeting-extapi/logs/ubains-INFO-AND-ERROR.log" },
@{ Name = "信息调度_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-message-scheduling/logs/ubains-INFO-AND-ERROR.log" },
@{ Name = "MQTT_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-mqtt/logs/ubains-INFO-AND-ERROR.log" },
@{ Name = "定时任务_ubains-INFO-AND-ERROR.log"; RemotePath = "/data/services/api/java-meeting/java-quartz/logs/ubains-INFO-AND-ERROR.log" }
)
......@@ -2028,7 +2030,7 @@ function Test-MQTTConnection {
return $results
}
$actualContainer = ($containerCheck.Output[0].Trim() -replace "`r","")
$actualContainer = (@($containerCheck.Output)[0].ToString().Trim() -replace "`r","")
Write-Log -Level "INFO" -Message "[MQTT] 检测到容器: $actualContainer"
# 2. 多层级降级检测
......@@ -2064,7 +2066,7 @@ function Test-MQTTConnection {
$isConnected = $true
$detectionMethod = "TCP端口连通性"
$detailMsg = "MQTT端口 $mqttPort 可访问"
Write-Log -Level "SUCCESS" -Message "[MQTT] TCP端口检测成功: $actualContainer:$mqttPort"
Write-Log -Level "SUCCESS" -Message "[MQTT] TCP端口检测成功: ${actualContainer}:$mqttPort"
}
} catch {
Write-Log -Level "DEBUG" -Message "[MQTT] TCP端口检测失败: $($_.Exception.Message)"
......@@ -2131,7 +2133,7 @@ function Test-RedisConnection {
return $results
}
$actualContainer = ($containerCheck.Output[0].Trim() -replace "`r","")
$actualContainer = (@($containerCheck.Output)[0].ToString().Trim() -replace "`r","")
Write-Log -Level "INFO" -Message "[Redis] 检测到容器: $actualContainer"
# 2. 执行redis-cli ping测试
......@@ -2193,7 +2195,7 @@ function Test-MySQLConnection {
return $results
}
$actualContainer = ($containerCheck.Output[0].Trim() -replace "`r","")
$actualContainer = (@($containerCheck.Output)[0].ToString().Trim() -replace "`r","")
Write-Log -Level "INFO" -Message "[MySQL] 检测到容器: $actualContainer"
# 2. 执行连接测试
......@@ -2263,7 +2265,7 @@ function Test-FastDFSConnection {
return $results
}
$actualContainer = ($containerCheck.Output[0].Trim() -replace "`r","")
$actualContainer = (@($containerCheck.Output)[0].ToString().Trim() -replace "`r","")
Write-Log -Level "INFO" -Message "[FastDFS] 检测到容器: $actualContainer"
# 2. 执行文件上传测试
......@@ -2276,7 +2278,7 @@ function Test-FastDFSConnection {
$remoteTestFile = "/tmp/$testFileName"
# 在容器内创建测试文件
$createCmd = "docker exec $actualContainer bash -c 'echo \"FastDFS test file\" > $remoteTestFile 2>&1'"
$createCmd = "docker exec $actualContainer bash -c 'echo ''FastDFS test file'' > $remoteTestFile 2>&1'"
$createResult = Invoke-SSHCommand -HostName $Server.IP -User $Server.User -Pass $Server.Pass -Port $Server.Port -Command $createCmd
if ($createResult.ExitCode -eq 0) {
......
# _PRD_服务自检需求文档_中间件检测优化
> 版本:V1.0
> 更新日期:2026-02-02
> 适用范围:服务自检脚本 - 中间件连接检测功能
> 来源:提取自《服务自检需求文档》4.18节
## 1. 背景与目标
### 1.1 背景
从服务自检需求文档中独立提取中间件连接检测需求,形成专门的优化文档。中间件连接检测是服务自检脚本中的核心功能之一,用于验证各类中间件服务的可用性和连接状态。
### 1.2 目标
实现对MQTT、Redis、MySQL、FastDFS等各类中间件服务的连接状态检测功能,确保服务器中间件服务正常运行,及时发现并预警中间件连接异常。
---
## 2. 功能需求
### 2.1 MQTT主题连接检测
**检测目标:** 验证MQTT服务的连接状态及主题订阅功能
**功能要求:**
| 检测项 | 详细说明 |
|--------|----------|
| 连接检测 | 连接当前服务器的MQTT服务 |
| 主题订阅 | 订阅标准版主题信息 |
| 消息推送监测 | 每个主题订阅后补充消息推送监测 |
**标准版主题列表:**
| 主题路径 | 说明 |
|----------|------|
| `/androidPanel/` | 安卓面板主题 |
| `/iot/v1/conference/service/request/` | 会议服务请求主题 |
| `message/paperLessService/callService` | 无纸化服务调用主题 |
| `message/paperLessAuthor/onthewall` | 无纸化上墙主题 |
| `/meeting/message/` | 会议消息主题 |
| `/iot/v1/device/event/request/` | 设备事件请求主题 |
| `/iot/v1/device/service/request/` | 设备服务请求主题 |
| `/iot/v1/conference/service/request/` | 会议服务请求主题 |
**检测流程:**
1. 建立MQTT连接
2. 依次订阅上述主题
3. 监测消息推送状态
4. 记录订阅和推送结果
---
### 2.2 Redis连接检测
**检测目标:** 验证Redis服务的连接状态
**功能要求:**
| 配置项 | 值 |
|--------|-----|
| 服务类型 | Redis |
| 端口 | 6379 |
| 账号 | root |
| 密码 | dNrprU&2S |
**检测流程:**
1. 使用指定账号密码连接Redis服务
2. 验证连接状态
3. 记录连接结果
---
### 2.3 MySQL连接检测
**检测目标:** 验证MySQL服务的连接状态
**功能要求:**
| 配置项 | 值 |
|--------|-----|
| 服务类型 | MySQL |
| 端口 | 8306 |
| 账号 | root |
| 密码 | dNrprU&2S |
**检测流程:**
1. 使用指定账号密码连接MySQL服务
2. 验证连接状态
3. 记录连接结果
---
### 2.4 FastDFS连接检测
**检测目标:** 验证FastDFS服务的连接状态及文件上传功能
**功能要求:**
| 检测项 | 说明 |
|--------|------|
| 服务连接 | 连接当前FastDFS服务 |
| 文件上传测试 | 测试文件上传功能 |
| 测试文件 | test.png(固定文件名称) |
**执行指令:**
```bash
# 1. 复制测试文件到容器
docker cp ./test.png ustorage:/home
# 2. 进入容器
docker exec -it ustorage bash
# 3. 切换到工作目录
cd /home/
# 4. 执行上传测试
fdfs_test /etc/fdfs/client.conf upload test.png
# 5. 检查返回结果
```
**检测流程:**
1. 准备测试文件 test.png
2. 复制文件到FastDFS容器
3. 执行文件上传测试命令
4. 检查并验证返回结果
5. 记录上传状态
---
## 3. 验收标准
### 3.1 MQTT检测验收标准
| 标准 | 说明 |
|------|------|
| 连接成功 | 成功建立MQTT连接 |
| 订阅成功 | 所有主题订阅成功 |
| 推送监测 | 能够接收到推送消息或确认推送通道正常 |
### 3.2 Redis检测验收标准
| 标准 | 说明 |
|------|------|
| 连接成功 | 使用指定凭据成功连接Redis |
| 响应正常 | 能够执行基本命令并得到正常响应 |
### 3.3 MySQL检测验收标准
| 标准 | 说明 |
|------|------|
| 连接成功 | 使用指定凭据成功连接MySQL |
| 查询正常 | 能够执行基本查询并得到正常响应 |
### 3.4 FastDFS检测验收标准
| 标准 | 说明 |
|------|------|
| 容器连接 | 成功连接到ustorage容器 |
| 文件上传 | test.png文件上传成功 |
| 返回结果 | 返回文件URL且无错误信息 |
---
## 4. 异常处理
### 4.1 连接失败处理
| 中间件 | 失败处理 |
|--------|----------|
| MQTT | 记录失败原因,检查MQTT服务状态 |
| Redis | 记录失败原因,检查Redis服务状态 |
| MySQL | 记录失败原因,检查MySQL服务状态 |
| FastDFS | 记录失败原因,检查容器状态和网络 |
### 4.2 超时处理
所有中间件连接检测应设置合理的超时时间,避免检测脚本长时间挂起。
---
## 5. 输出格式
### 5.1 检测报告格式
检测完成后应输出结构化的检测结果,包含:
| 字段 | 说明 |
|------|------|
| 中间件类型 | MQTT/Redis/MySQL/FastDFS |
| 检测时间 | 检测执行的时间戳 |
| 检测状态 | 成功/失败/超时 |
| 详细信息 | 连接参数、错误信息等 |
### 5.2 日志记录
所有检测过程应记录详细日志,便于问题排查和历史追溯。
---
## 6. 附录
### 6.1 相关文档
- 源文档:《服务自检需求文档》4.18节
- 相关脚本:`check_server_health.ps1`
### 6.2 版本历史
| 版本 | 日期 | 说明 |
|------|------|------|
| V1.0 | 2026-02-02 | 初始版本,从服务自检需求文档提取 |
---
*文档结束*
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论