本页面由 AI 辅助从英文翻译而来。如两者存在差异,以英文版本为准。
由 StackQL 驱动的开源项目活动监控器
本指南演示如何自托管一套面向 GitHub 开源软件维护者的实时监控与告警系统。
stackql 是一款开源工具,用户可以通过 SQL 语言以及数据可视化和分析库与工具来查询云和 SaaS 资源并与之交互。如果喜欢,请给我们点个 ⭐!
在 Slack 和 Discord 中实时收到这样的告警:

测试环境:嵌入式 SQL 后端 docker linux
概述
我在寻找用于监控我们开源项目的工具时,发现其中大多数并不像宣传的那样好用,或者根本无法使用(GitHub 中的第三方应用就是如此),于是我自己构建了一个,你也可以在自己的 GitHub 开源项目上启动并使用它……
oss-activity-monitor 项目使用 stackql 对开源项目活动进行实时监控,包括以下内容的实时通知:
- ⭐ GitHub 仓库的新 stargazer
- 👀 GitHub 仓库的新 watcher
- 🍴 GitHub 仓库的新 fork
- 📊 GitHub 仓库的新 issue
- 🙋 GitHub 组织的新 follower
- 📦 GitHub 发布版本资产的新下载
- 🍺 新的 homebrew 下载
工作原理
该项目部署在容器中(使用 docker 或其他容器部署平台),使用 python 和 pystackql 包构建,并使用 stackql 的 github 和 homebrew Provider。物化视图和 SELECT 语句用于捕获并比较 GitHub 和 Homebrew 受监控端点的当前指标与先前指标之间的状态,如下图所示:
例如,给定下面这个使用 stackql 创建并填充的物化视图:
CREATE OR REPLACE MATERIALIZED VIEW mvw_github_repo_stargazers AS
SELECT login FROM github.activity.repo_stargazers
WHERE owner = 'your-org' and repo = 'your-repo'
下面的 stackql 查询会轮询 GitHub 以获取新的 stargazer……
SELECT c.login
FROM github.activity.repo_stargazers c
LEFT JOIN mvw_github_repo_stargazers mvw
ON c.login = mvw.login
WHERE mvw.login IS NULL
AND c.owner = 'your-org' AND c.repo = 'your-repo'
然后使用以下语句刷新状态……
REFRESH MATERIALIZED VIEW mvw_github_repo_stargazers
仓库 watcher、issue、组织 follower、发布版本资产下载和 homebrew 下载都重复类似的模式。
运行项目
按照以下步骤,在本地或你首选的云平台上启动并运行该项目。
1. 克隆仓库
git clone https://github.com/stackql/oss-activity-monitor.git
# or
git clone git@github.com:stackql/oss-activity-monitor.git
2. 配置环境变量
配置该项目需要以下环境变量(通过环境变量提供,下面的示例中使用 .env 文件):
| 变量 | 说明 | 示例值 |
|---|---|---|
LOG_LEVEL | 日志级别(INFO 为常规日志;DEBUG 为详细日志) | INFO |
SLEEP_INTERVAL | 请求循环之间的延迟时间(秒) | 5 |
GITHUB_REPO | GitHub 仓库名称 | stackql |
GITHUB_REPO_OWNER | GitHub 组织或所有者名称 | stackql |
HOMEBREW_FORMULA_NAME | Homebrew formula 名称(如有) | stackql |
STACKQL_GITHUB_USERNAME | 你的 GitHub 用户名 | jeffreyaven |
STACKQL_GITHUB_PASSWORD | 你的 GitHub 个人访问令牌 | ghp_yourpersonalaccesstoken |
SLACK_WEBHOOK_URL | 用于发送通知的 Slack webhook URL | https://hooks.slack.com/services/... |
DISCORD_WEBHOOK_URL | 用于发送通知的 Discord webhook URL | https://discord.com/api/webhooks/... |
3. 构建容器
docker build --no-cache -t oss-activity-monitor .
4. 运行容器
docker run --env-file .env oss-activity-monitor
就这样!现在,当你的开源项目有活动时,你会收到实时告警。要停止容器,请使用:
docker stop $(docker ps -a -q --filter ancestor=oss-activity-monitor)
在 GitHub 上给我们点个 ⭐