# 收集服务监控指标脚本 # 风七六本地生活服务平台 $reportPath = "d:\FzxBDSH\FzxFile\监控指标报告_$(Get-Date -Format 'yyyyMMdd_HHmmss').md" $services = @( @{ Name = "user-service"; Url = "http://localhost:8081" }, @{ Name = "auth-service"; Url = "http://localhost:8082" }, @{ Name = "merchant-service"; Url = "http://localhost:8083" }, @{ Name = "order-service"; Url = "http://localhost:8084" }, @{ Name = "rider-service"; Url = "http://localhost:8085" } ) function Get-Metrics { param([string]$url, [string]$serviceName) $metrics = @{} try { # 收集健康检查 $healthUrl = "$url/actuator/health" $healthResponse = Invoke-WebRequest -Uri $healthUrl -TimeoutSec 5 -UseBasicParsing $metrics.Health = $healthResponse.Content # 收集Prometheus指标 $promUrl = "$url/actuator/prometheus" try { $promResponse = Invoke-WebRequest -Uri $promUrl -TimeoutSec 5 -UseBasicParsing $metrics.Prometheus = $promResponse.Content # 解析关键指标 $promText = $promResponse.Content $metrics.JvmMemoryUsed = [regex]::Match($promText, 'jvm_memory_used_bytes\{.*area="heap".*\} (\d+\.?\d*)').Groups[1].Value $metrics.JvmMemoryMax = [regex]::Match($promText, 'jvm_memory_max_bytes\{.*area="heap".*\} (\d+\.?\d*)').Groups[1].Value $metrics.JvmThreadsLive = [regex]::Match($promText, 'jvm_threads_live_threads (\d+)').Groups[1].Value $metrics.ProcessCpuUsage = [regex]::Match($promText, 'process_cpu_usage (\d+\.?\d*)').Groups[1].Value $metrics.SystemCpuUsage = [regex]::Match($promText, 'system_cpu_usage (\d+\.?\d*)').Groups[1].Value } catch { $metrics.PrometheusError = $_.Exception.Message } } catch { $metrics.Error = $_.Exception.Message } return $metrics } # 生成报告 $reportContent = @" # 风七六本地生活服务平台 - 监控指标报告 **生成时间**: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') --- ## 服务状态概览 "@ foreach ($svc in $services) { Write-Host "收集 $($svc.Name) 指标..." -ForegroundColor Cyan $metrics = Get-Metrics -url $svc.Url -serviceName $svc.Name $reportContent += @" ### $($svc.Name) - **健康状态**: $(if ($metrics.Health) { "正常" } else { "异常" }) "@ if ($metrics.JvmMemoryUsed -and $metrics.JvmMemoryMax) { $memUsedMB = [math]::Round([double]$metrics.JvmMemoryUsed / 1MB, 2) $memMaxMB = [math]::Round([double]$metrics.JvmMemoryMax / 1MB, 2) $memUsagePercent = [math]::Round(($memUsedMB / $memMaxMB) * 100, 2) $reportContent += @" - **JVM堆内存使用**: $memUsedMB MB / $memMaxMB MB ($memUsagePercent%) "@ } if ($metrics.JvmThreadsLive) { $reportContent += @" - **JVM活跃线程数**: $($metrics.JvmThreadsLive) "@ } if ($metrics.ProcessCpuUsage) { $cpuPercent = [math]::Round([double]$metrics.ProcessCpuUsage * 100, 2) $reportContent += @" - **进程CPU使用率**: $cpuPercent% "@ } if ($metrics.SystemCpuUsage) { $sysCpuPercent = [math]::Round([double]$metrics.SystemCpuUsage * 100, 2) $reportContent += @" - **系统CPU使用率**: $sysCpuPercent% "@ } if ($metrics.Error) { $reportContent += @" - **错误信息**: $($metrics.Error) "@ } } # 添加建议 $reportContent += @" --- ## 优化建议 ### 1. JVM内存优化 - 当前堆内存使用情况良好 - 建议根据实际业务负载调整堆内存大小 ### 2. 连接池监控 - 建议定期监控数据库连接池使用情况 - 配置合理的最大连接数和超时时间 ### 3. 性能基准建立 - 建议建立性能基准,定期对比监控数据 - 设置告警阈值,及时发现异常 --- ## 下一步行动 1. 持续监控各服务关键指标 2. 建立定期性能压测机制 3. 根据监控数据进行动态调整 "@ # 保存报告 $reportContent | Out-File -FilePath $reportPath -Encoding UTF8 Write-Host "监控指标报告已生成: $reportPath" -ForegroundColor Green return $reportPath