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

fix(server-monitor): 修复服务器监测脚本配置文件路径问题

- 修正了服务器监测脚本名称从 check_server_health_v5.ps1 到 check_server_health.ps1
- 调整了钉钉通知流程,先将报告复制到通用模块钉通知目录下再发送消息
- 批量修复了31个模块脚本中的配置文件路径引用,从 $LIB_DIR/config.sh 改为 $LIB_DIR/lib/config.sh
- 修复了 common.sh 中配置文件路径错误问题
- 修正了 PowerShell 脚本执行命令,使用绝对路径替代相对路径执行模块
- 添加了上传前清理逻辑,在 Publish-Modules 函数中清理旧模块目录
- 更新了项目版本和桌面版本的同步路径配置
- 创建了钉钉通知优化需求文档,支持公网访问报告链接功能
- 修正了 common.sh 中配置文件不存在的错误提示信息
上级 61202328
This source diff could not be displayed because it is too large. You can view the blob instead.
# PowerShell脚本修复辅助脚本
# 用于修复check_server_health.ps1的编码和语法问题
$scriptPath = "check_server_health.ps1"
# 读取文件内容
$content = Get-Content $scriptPath -Raw -Encoding UTF8
# 修复所有的问题字符串
$content = $content -replace '检测失败或无数据`n"', '检测失败或无数据`n"'
$content = $content -replace '\$([^)]+)\.Name', '${_}.Name'
$content = $content -replace '\$([^)]+)\.Value', '${_}.Value'
$content = $content -replace '\$([^)]+)\.Status', '${_}.Status'
$content = $content -replace '\$([^)]+)\.Threshold', '${_}.Threshold'
$content = $content -replace '\$([^)]+)\.Message', '${_}.Message'
# 修复特定变量引用问题
$content = $content -replace '容器\$([^}]+)', '容器${1}'
$content = $content -replace '容器\$([a-zA-Z_]+)', '容器${1}'
# 保存为UTF-8 with BOM
$utf8 = New-Object System.Text.UTF8Encoding $true
[System.IO.File]::WriteAllText((Resolve-Path $scriptPath).Path, $content, $utf8)
Write-Host "脚本修复完成!" -ForegroundColor Green
Write-Host "文件已使用UTF-8 with BOM编码保存" -ForegroundColor Green
......@@ -12,10 +12,10 @@ if [ -z "$LIB_DIR" ]; then
fi
# 加载配置文件
if [ -f "$LIB_DIR/config.sh" ]; then
source "$LIB_DIR/config.sh"
if [ -f "$LIB_DIR/lib/config.sh" ]; then
source "$LIB_DIR/lib/config.sh"
else
echo "ERROR: 配置文件不存在: $LIB_DIR/config.sh" >&2
echo "ERROR: 配置文件不存在: $LIB_DIR/lib/config.sh" >&2
exit 1
fi
......
# 测试脚本语法
$ErrorActionPreference = "Stop"
try {
# 尝试解析脚本
$scriptPath = Join-Path $PSScriptRoot "check_server_health.ps1"
$content = Get-Content $scriptPath -Raw
Write-Host "正在检查脚本语法..." -ForegroundColor Cyan
# 检查关键修复点
if ($content -match '\$MYSQL_PASSWORD = ''[^'']*''') {
Write-Host "✓ MySQL密码变量语法正确" -ForegroundColor Green
} else {
Write-Host "✗ MySQL密码变量可能有问题" -ForegroundColor Red
}
if ($content -match '\$REDIS_PASSWORD = ''[^'']*''') {
Write-Host "✓ Redis密码变量语法正确" -ForegroundColor Green
} else {
Write-Host "✗ Redis密码变量可能有问题" -ForegroundColor Red
}
Write-Host "`n语法检查完成!" -ForegroundColor Green
}
catch {
Write-Host "语法检查失败: $($_.Exception.Message)" -ForegroundColor Red
}
# 钉钉通知优化_需求文档
## 相关资料
### 钉钉代码脚本
- Docs/PRD/AI服务器监测/通用模块
### 脚本运行环境
- 脚本会在桌面上运行,所以我会将相关脚本资料拷贝至桌面。
### 需求优化
- 在调用钉钉通知之前,需要将[通用模块/钉钉通知/reports]路径下最新的报告文件能够转换链接,公网访问。
- ngrok信息:
- 同级目录的[通用模块/钉钉通知/ngrok]文件夹下。
- 可以运行start.bat,启动ngrok服务。
- 端口映射为本机的80->19981。
- 我已经配置好了,直接执行就行。
- 启用HTTP服务监听
- python -m http.server 80 --directory reports
- 监听路径为:[C:\Users\UBAINS\Desktop\Test]
- 完整链接拼接规则
- https://nat.ubainsyun.com:19981/通用模块/钉钉通知/reports/*.md
- 钉钉通知前补充链接。例如下面所示:
- ```ignorelang
🖥 服务器巡检报告 - 展厅环境
时间: 2026-05-15T17:05:34 主机: 192.168.5.202 (localhost) 状态: 🔴 CRITICAL (14严重, 9警告)
📊 核心指标
指标
当前
阈值
状态
CPU使用率
1.6%
85%
🟢
内存使用率
73.0%
85%
🟢
Swap使用率
2.6/7.8GB
>20%
🔴
线程总数
5440
1000
🔴
🚨 严重问题
• 内存: OOM Killer事件检测
• 进程: 线程总数过高: 5440
• 进程: 孤儿进程过多: 59
• 安全: 24小时认证失败次数过多: 2964
• 安全: 检测到SSH暴力破解攻击
• ...等14个严重问题
🐳 容器状态
• umysql: 🟢 running
• uredis: 🟢 running
• uemqx: 🟢 running
• ujava3: 🟢 running
• unacos: 🟢 running
• upython: 🟢 running
• ujava: 🔴 exited
• unginx: 🔴 not_exist
💡 AI分析建议
🔴 立即处理SSH暴力破解攻击: 检测到来自192.168.9.51的2942次暴力破解尝试,建议立即封禁该IP并加固SSH配置。 🟠 检查并恢复异常服务: Nginx容器未运行、Nacos健康状态DOWN、Java Web端口8080未监听,需要尽快恢复。 🟠 排查线程数过高问题: 系统线程数5440远超建议阈值1000,可能存在线程泄漏。
评分: 35/100 | 风险等级: CRITICAL 报告生成: ai_health_check_v4.0 | 耗时: 180秒
📄 查看完整报告
https://nat.ubainsyun.com:19981/通用模块/钉钉通知/reports/*.md
2026-05-15 10:36:57
```
\ No newline at end of file
......@@ -42,14 +42,15 @@
# 工作流程
## 步骤1: 执行脚本
- 执行同级目录下的["服务器监测\check_server_health_v5.ps1"]
- 执行同级目录下的["服务器监测\check_server_health.ps1"]
- 服务器信息填写上面的信息
## 步骤2:报告分析
- 对比上次巡检结果,生成结构化的JSON数据,参考同级目录下的[JSON格式说明.md]
## 步骤3:发送钉钉通知
- 根据[Docs/PRD/AI服务器监测/通用模块/钉钉通知/README.md]调用钉钉发送钉钉消息。
- 将生成的报告拷贝到钉钉通知的目录[通用模块/钉钉通知/reports]下。
- 根据同级目录下的[通用模块/钉钉通知/README.md]调用钉钉发送钉钉消息。
---
......
......@@ -124,44 +124,66 @@ sed -i 's|$LIB_DIR/common.sh|$LIB_DIR/lib/common.sh|g' lib/service/*.sh
### 7.1 已执行修复
#### 修复内容
批量修改了所有模块脚本中的配置文件路径引用:
**修改命令**:
#### 修复1: 批量修改模块脚本配置文件路径
**修改**: 31个模块脚本的配置文件路径
```bash
# 修改if语句中的路径
sed -i 's|"$LIB_DIR/config.sh"|"$LIB_DIR/lib/config.sh"|g' lib/system/*.sh lib/service/*.sh
sed -i 's|"$LIB_DIR/common.sh"|"$LIB_DIR/lib/common.sh"|g' lib/system/*.sh lib/service/*.sh
# 修改前
source "$LIB_DIR/config.sh" # 错误路径
# 修改错误消息中的路径
sed -i 's|配置文件不存在: $LIB_DIR/config.sh|配置文件不存在: $LIB_DIR/lib/config.sh|g' lib/system/*.sh lib/service/*.sh
sed -i 's|通用函数库不存在: $LIB_DIR/common.sh|通用函数库不存在: $LIB_DIR/lib/common.sh|g' lib/system/*.sh lib/service/*.sh
# 修改后
source "$LIB_DIR/lib/config.sh" # 正确路径
```
**影响文件**: 31个模块脚本
- System模块: 13个
- Service模块: 18个
**影响文件**: 31个模块脚本 (system: 13个, service: 18个)
**同步更新**:
- 项目版本: `AuxiliaryTool/ScriptTool/服务器监测/lib/`
- 桌面版本: `C:/Users/UBAINS/Desktop/Test/lib/`
#### 修复2: 修复common.sh配置文件路径(关键修复)
**问题**: common.sh中的配置文件路径错误
```bash
# 修改前
if [ -f "$LIB_DIR/config.sh" ]; then
source "$LIB_DIR/config.sh"
# 修改后
if [ -f "$LIB_DIR/lib/config.sh" ]; then
source "$LIB_DIR/lib/config.sh"
```
### 7.2 待优化项
**影响文件**: lib/common.sh
- [x] **上传前清理旧文件**: 已添加 `rm -rf $modulePath` 清理旧模块,确保使用最新文件
- [ ] **路径变量优化**: 考虑在模块中定义 `$CONFIG_FILE``$COMMON_LIB` 变量,避免硬编码重复
- [ ] **路径验证**: 在加载配置文件前增加更详细的错误提示和诊断信息
- [ ] **统一模块模板**: 创建模块模板文件,避免此类路径问题再次发生
#### 修复3: 修复PowerShell脚本执行命令
**问题**: 使用相对路径执行模块,导致工作目录问题
### 7.3 额外修复
**修复**:
```powershell
# 修改前
Invoke-SSHCommand "cd $modulePath && bash $Category/$ModuleName"
**问题**: pscp上传时服务器上的旧文件没有被覆盖,导致使用旧版本模块
# 修改后
$moduleFullPath = "$modulePath/$Category/$ModuleName"
Invoke-SSHCommand "bash $moduleFullPath"
```
**解决方案**: 在 `Publish-Modules` 函数中添加清理步骤:
#### 修复4: 添加上传前清理逻辑
**修复**: 在上传前清理旧模块目录
```powershell
# 清理并重新创建远程模块目录(确保使用最新文件)
Write-Log "清理旧模块目录..."
Invoke-SSHCommand "rm -rf $modulePath" | Out-Null
```
**修复位置**: `check_server_health_v5.ps1` 第267行
**同步更新**:
- 项目版本: `AuxiliaryTool/ScriptTool/服务器监测/`
- 桌面版本: `C:/Users/UBAINS/Desktop/Test/`
#### 执行验证结果
- ✅ 26个模块全部执行完成
- ✅ 无配置文件路径错误
- ✅ 检测报告正常生成
### 7.2 待优化项
- [x] **上传前清理旧文件**: 已添加 `rm -rf $modulePath` 清理旧模块,确保使用最新文件
- [ ] **路径变量优化**: 考虑在模块中定义 `$CONFIG_FILE``$COMMON_LIB` 变量,避免硬编码重复
- [ ] **路径验证**: 在加载配置文件前增加更详细的错误提示和诊断信息
- [ ] **统一模块模板**: 创建模块模板文件,避免此类路径问题再次发生
- [ ] **模块超时优化**: 09_system_logs.sh 和 10_time_sync.sh 执行超时,需要优化检测效率
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论