news 2026/7/4 6:24:20

如何扩展Statsig Status Page:添加数据库监控和API检测的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何扩展Statsig Status Page:添加数据库监控和API检测的完整指南

如何扩展Statsig Status Page:添加数据库监控和API检测的完整指南

【免费下载链接】statuspageA simple, zero-dependency, pure js/html status page based on GitHub Pages and Actions.项目地址: https://gitcode.com/gh_mirrors/sta/statuspage

Statsig Status Page是一个基于GitHub Pages和Actions的轻量级状态监控工具,它通过简单的配置就能监控网站和API的健康状态。本文将为你展示如何扩展这个开源状态页,添加数据库监控和API检测功能,打造一个全面的系统健康监控平台。🚀

为什么需要扩展Statsig Status Page?

Statsig Status Page的核心功能是监控HTTP服务的可用性,但现代应用通常包含数据库、API接口、消息队列等多种组件。通过扩展监控功能,你可以:

  • 实时监控数据库连接状态🗄️
  • 检测API接口的响应时间和正确性⏱️
  • 构建完整的系统健康视图📊
  • 提前发现潜在的性能问题🔍

扩展前的准备工作

在开始扩展之前,确保你已经完成了基本配置:

  1. 克隆仓库
git clone https://gitcode.com/gh_mirrors/sta/statuspage cd statuspage
  1. 配置基础监控: 编辑 urls.cfg 文件,添加要监控的URL地址

  2. 设置GitHub Actions: 检查 .github/workflows/health-check.yml 确保健康检查工作流正常运行

添加数据库监控功能

1. 创建数据库健康检查脚本

首先,在项目根目录创建一个新的数据库检查脚本database-check.sh

#!/bin/bash # PostgreSQL数据库检查 check_postgresql() { psql "$1" -c "SELECT 1;" > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "success" else echo "failed" fi } # MySQL/MariaDB数据库检查 check_mysql() { mysql --host="$2" --user="$3" --password="$4" --database="$1" -e "SELECT 1;" > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "success" else echo "failed" fi } # MongoDB数据库检查 check_mongodb() { mongo "$1" --eval "db.stats()" > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "success" else echo "failed" fi }

2. 扩展健康检查脚本

修改 health-check.sh 脚本,添加数据库检查逻辑:

# 在现有检查循环后添加数据库检查 echo "***********************" echo "Starting database health checks..." # 数据库配置数组 DATABASE_KEYS=("main_db" "analytics_db" "cache_db") DATABASE_TYPES=("postgresql" "mysql" "redis") DATABASE_URLS=("postgresql://localhost:5432/main" "mysql://user:pass@localhost:3306/analytics" "redis://localhost:6379") for (( index=0; index < ${#DATABASE_KEYS[@]}; index++)) do key="${DATABASE_KEYS[index]}" db_type="${DATABASE_TYPES[index]}" url="${DATABASE_URLS[index]}" echo " Checking $key ($db_type)..." case $db_type in "postgresql") check_postgresql "$url" ;; "mysql") check_mysql "$url" ;; "redis") # Redis检查逻辑 redis-cli -u "$url" PING > /dev/null 2>&1 if [ $? -eq 0 ]; then result="success" else result="failed" fi ;; esac dateTime=$(date +'%Y-%m-%d %H:%M') echo $dateTime, $result >> "logs/${key}_report.log" done

添加API接口检测

1. 创建API检测配置文件

创建api-endpoints.cfg文件来管理API端点:

# API端点配置 user_api=https://api.example.com/users/health payment_api=https://api.example.com/payments/status auth_api=https://api.example.com/auth/ping notification_api=https://api.example.com/notifications/health

2. 扩展API响应时间监控

修改健康检查脚本,添加响应时间监控:

# API响应时间检查函数 check_api_with_latency() { local url=$1 local key=$2 # 测量响应时间 start_time=$(date +%s%N) response=$(curl --write-out '%{http_code}' --silent --output /dev/null $url) end_time=$(date +%s%N) latency_ms=$(( (end_time - start_time) / 1000000 )) if [ "$response" -eq 200 ] || [ "$response" -eq 201 ]; then result="success" # 记录响应时间 echo "$(date +'%Y-%m-%d %H:%M'), success, $latency_ms ms" >> "logs/${key}_latency.log" else result="failed" echo "$(date +'%Y-%m-%d %H:%M'), failed, $latency_ms ms" >> "logs/${key}_latency.log" fi echo $result } # 在现有检查中添加API端点检查 echo "***********************" echo "Starting API endpoint checks..." apiConfig="./api-endpoints.cfg" if [ -f "$apiConfig" ]; then while read -r line do IFS='=' read -ra TOKENS << "$line" key="${TOKENS[0]}" url="${TOKENS[1]}" echo " Checking API: $key" result=$(check_api_with_latency "$url" "$key") dateTime=$(date +'%Y-%m-%d %H:%M') echo $dateTime, $result >> "logs/${key}_report.log" done < "$apiConfig" fi

增强状态页面显示

1. 扩展状态页面显示逻辑

修改 index.js 文件,添加数据库和API的专用显示模板:

// 在constructStatusStream函数后添加 function constructDatabaseStatus(key, url, uptimeData) { const container = templatize("databaseStatusTemplate", { title: key, url: url, color: getColor(uptimeData[0]), status: getStatusText(getColor(uptimeData[0])), upTime: uptimeData.upTime, type: getDatabaseType(url) // 新增:显示数据库类型 }); return container; } function constructAPIStatus(key, url, uptimeData) { const container = templatize("apiStatusTemplate", { title: key, url: url, color: getColor(uptimeData[0]), status: getStatusText(getColor(uptimeData[0])), upTime: uptimeData.upTime, avgLatency: getAverageLatency(key) // 新增:显示平均响应时间 }); return container; }

2. 添加HTML模板

在 index.html 的模板部分添加新的模板:

<!-- 数据库状态模板 --> <div id="databaseStatusTemplate" class="databaseStatusContainer"> <div class="statusHeader"> <h6 class="statusTitle">$title (Database)&nbsp;</h6> <div class="$color statusHeadline">$status</div> </div> <div class="statusSubtitle"> <div class="sectionUrl">Type: $type</div> <div class="statusUptime">$upTime uptime</div> </div> </div> <!-- API状态模板 --> <div id="apiStatusTemplate" class="apiStatusContainer"> <div class="statusHeader"> <h6 class="statusTitle">$title (API)&nbsp;</h6> <div class="$color statusHeadline">$status</div> </div> <div class="statusSubtitle"> <div class="sectionUrl"><a href="$url">$url</a></div> <div class="statusUptime">$upTime uptime | Avg: $avgLatency</div> </div> </div>

配置GitHub Actions自动监控

1. 扩展工作流配置

编辑 .github/workflows/health-check.yml,添加数据库连接和必要的工具:

name: Health Check on: schedule: - cron: '0 * * * *' # 每小时运行一次 workflow_dispatch: # 允许手动触发 jobs: health-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup database clients run: | sudo apt-get update sudo apt-get install -y postgresql-client mysql-client redis-tools - name: Run health checks run: | chmod +x health-check.sh chmod +x database-check.sh ./health-check.sh - name: Commit and push if changes run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add -A git diff --quiet && git diff --staged --quiet || git commit -m "Update health check logs" git push

高级监控功能扩展

1. 添加性能指标收集

创建metrics-collector.js来收集和展示性能指标:

// 性能指标收集器 class MetricsCollector { constructor() { this.metrics = { databases: {}, apis: {}, services: {} }; } // 收集数据库连接池状态 collectDatabaseMetrics(dbName, connectionCount, queryCount) { this.metrics.databases[dbName] = { connections: connectionCount, queries: queryCount, timestamp: new Date().toISOString() }; } // 收集API响应时间分布 collectAPIMetrics(apiName, responseTimes) { const avg = responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length; const p95 = this.calculatePercentile(responseTimes, 95); this.metrics.apis[apiName] = { average: avg.toFixed(2), p95: p95.toFixed(2), samples: responseTimes.length }; } }

2. 创建监控仪表板

扩展状态页面,添加性能仪表板:

<!-- 在index.html中添加性能仪表板 --> <div class="metricsDashboard"> <h3>📊 性能指标</h3> <div class="metricsGrid"> <div class="metricCard"> <h4>数据库连接</h4> <div id="databaseMetrics"></div> </div> <div class="metricCard"> <h4>API响应时间</h4> <div id="apiMetrics"></div> </div> <div class="metricCard"> <h4>系统资源</h4> <div id="systemMetrics"></div> </div> </div> </div>

最佳实践和优化建议

1. 安全性考虑 🔒

  • 使用环境变量存储数据库凭据:不要在配置文件中硬编码密码
  • 限制监控频率:避免对生产系统造成压力
  • 实施访问控制:确保监控端点有适当的认证

2. 性能优化 ⚡

  • 批量检查:将相似的服务分组检查,减少网络开销
  • 缓存结果:对于不频繁变化的服务,可以缓存检查结果
  • 异步检查:使用并行检查提高效率

3. 告警集成 🚨

  • 集成Slack/Teams通知:当服务出现问题时发送即时通知
  • 设置阈值告警:当响应时间超过特定阈值时触发告警
  • 分级告警:根据问题严重程度使用不同的告警级别

总结

通过扩展Statsig Status Page,你可以构建一个功能完整的系统监控平台。从简单的HTTP监控扩展到数据库连接检查、API响应时间监控、性能指标收集,这个轻量级工具可以满足大多数中小型项目的监控需求。

记住,监控系统的价值在于提前发现问题,而不是事后分析。通过本文介绍的方法,你可以:

  1. 实时监控数据库健康状态🗄️
  2. 跟踪API性能和可用性📈
  3. 构建全面的系统健康视图👁️
  4. 实施智能告警机制🔔

开始扩展你的Statsig Status Page,打造一个真正适合你项目需求的监控系统吧!🎯

提示:所有扩展代码都可以在项目的 logs/ 目录中找到历史记录,方便追踪问题发生的时间点和模式。

【免费下载链接】statuspageA simple, zero-dependency, pure js/html status page based on GitHub Pages and Actions.项目地址: https://gitcode.com/gh_mirrors/sta/statuspage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 6:22:35

如何快速入门httpcache:5分钟实现Go HTTP客户端缓存

如何快速入门httpcache&#xff1a;5分钟实现Go HTTP客户端缓存 【免费下载链接】httpcache A Transport for http.Client that will cache responses according to the HTTP RFC 项目地址: https://gitcode.com/gh_mirrors/ht/httpcache httpcache是一个简单高效的Go语…

作者头像 李华
网站建设 2026/7/4 6:22:22

内容变更追踪:Instatic修改历史与恢复功能全解析

内容变更追踪&#xff1a;Instatic修改历史与恢复功能全解析 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为现代自托管视觉CMS&#x…

作者头像 李华
网站建设 2026/7/4 6:21:40

hashdeep编译与定制指南:从源代码到自定义功能的完整流程

hashdeep编译与定制指南&#xff1a;从源代码到自定义功能的完整流程 【免费下载链接】hashdeep 项目地址: https://gitcode.com/gh_mirrors/ha/hashdeep hashdeep是一款强大的文件哈希计算工具&#xff0c;支持多种哈希算法&#xff0c;能够帮助用户快速验证文件完整性…

作者头像 李华
网站建设 2026/7/4 6:20:50

OpenAI大模型选型指南:GPT-4系列与o系列核心差异与场景匹配

1. 这不是参数表&#xff0c;是OpenAI大模型的“产品说明书”你是不是也这样&#xff1a;刷技术资讯时看到GPT-4、GPT-4 Turbo、GPT-4o、o1、o1-mini、o3-mini……名字一个比一个短&#xff0c;参数一个比一个模糊&#xff0c;功能一个比一个玄乎&#xff1f;点开官网文档&…

作者头像 李华
网站建设 2026/7/4 6:20:08

如何在Rust中优雅处理多行字符串?indoc宏完全指南

如何在Rust中优雅处理多行字符串&#xff1f;indoc宏完全指南 【免费下载链接】indoc Indented document literals for Rust 项目地址: https://gitcode.com/gh_mirrors/in/indoc 在Rust开发中&#xff0c;处理多行字符串时常常会遇到缩进混乱的问题。indoc宏作为一款强…

作者头像 李华