本文介绍了如何使用Quicknode Console API构建一个主动预警系统,该系统可以监控RPC credit的使用情况,并在达到限制之前发送多渠道通知。该系统通过抓取API数据、计算使用趋势和预测何时达到信用额度,从而让你能够及时优化使用情况或升级计划,同时还支持集成Prometheus监控和构建Grafana仪表板。
管理 RPC 使用情况对于维持可预测的成本和避免服务中断至关重要。默认情况下,Quicknode 发送使用情况通知邮件,但许多团队需要更高的灵活性:向 Slack 频道发出警报、与 PagerDuty 等事件管理工具集成、同时向多个团队成员发送通知,或在现有监控仪表板中提供可见性。
本指南向你展示如何构建一个主动警报系统,该系统监控你的 RPC 信用使用情况并在你达到限制之前发送多渠道通知。该系统会计算使用趋势并预测你何时会达到信用额度,从而让你有时间优化使用情况或升级你的套餐。

CONSOLE_REST 权限的 Quicknode API 密钥注意: 控制台 API 适用于所有付费帐户。有关详细信息,请查看定价。
基于控制台 API 构建的自定义警报解决方案为你提供强大的功能:
Quicknode 控制台 API 提供了 v0/usage/rpc 端点 来检索你的 RPC 信用使用情况数据。此端点返回有关你正在查询的时间段的信息。
curl -X GET "https://api.quicknode.com/v0/usage/rpc?start_time=START_TIMESTAMP&end_time=END_TIMESTAMP" \
-H "x-api-key: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json"
参数:
start_time:周期开始的 Unix 时间戳(以秒为单位)(默认为当前结算周期的开始)end_time:周期结束的 Unix 时间戳(以秒为单位)(默认为当前时间)该端点返回一个 JSON 对象,其中包含以下字段:
{
"start_time": 1704067200,
"end_time": 1705363200,
"credits_used": 1000000,
"credits_remaining": 4000000,
"limit": 5000000,
"overages": null
}
| 字段 | 描述 |
|---|---|
start_time |
周期开始的 Unix 时间戳 |
end_time |
周期结束的 Unix 时间戳 |
credits_used |
结算周期内消耗的总 RPC 信用 |
credits_remaining |
达到套餐限制之前的可用信用 |
limit |
你的套餐在结算周期内的总信用分配 |
overages |
超出你限制的信用(会产生额外费用) |
借助这些数据,警报系统可以计算你的使用百分比,预测你何时会达到限制,并将警报发送到你配置的渠道。让我们设置项目并探讨每个组件的工作原理。
git clone https://github.com/quiknode-labs/qn-guide-examples.git
cd qn-guide-examples/console-api/usage-alerting
npm install
这将安装所需的软件包:
dotenv:从 .env 文件加载环境变量typescript:TypeScript 编译器ts-node:直接运行 TypeScript 文件复制示例环境文件并添加你的配置:
cp .env.example .env
打开 .env 并配置你的设置:
## Quicknode API 密钥(必需)
## 从以下位置获取你的 API 密钥:https://dashboard.quicknode.com/api-keys
## 所需权限:CONSOLE_REST
QUICKNODE_API_KEY=your_api_key_here
## 警报阈值(限制的百分比)
## 当使用量 >= 阈值时触发警报
ALERT_THRESHOLD_WARNING=80
ALERT_THRESHOLD_CRITICAL=95
## 警报通道(配置你要使用的通道)
## 有关每个通道的设置说明,请参见下面的部分
SLACK_WEBHOOK_URL=
PAGERDUTY_ROUTING_KEY=
DISCORD_WEBHOOK_URL=
OPSGENIE_API_KEY=
SENDGRID_API_KEY=
SENDGRID_FROM_EMAIL=
ALERT_EMAIL_RECIPIENTS=
GENERIC_WEBHOOK_URL=
至少,你需要设置 QUICKNODE_API_KEY 并配置至少一个警报通道。为了进行测试,你可以对 GENERIC_WEBHOOK_URL 使用 Webhook.site 或 TypedWebhook 等在线 webhook 测试器。
警报系统由三个主要组件组成:获取使用情况数据、计算预测和发送警报。每个组件都作为代码库中的一个单独函数实现,从而使其易于理解和修改。你可以在项目的 src/index.ts 文件中找到这些函数。
fetchUsage 函数从控制台 API 检索你当前结算周期的使用情况数据。它接受可选的 startTime 和 endTime 参数来查询特定时间范围,并返回使用情况响应,包括已用信用、剩余信用和你的套餐限制。如果未提供时间参数,则默认为你当前的结算周期。
calculatePrediction 函数分析你当前的使用率并预测你是否会超出限制。它从 API 获取使用情况响应并计算几个有用的指标:
该函数使用基于你的平均每日消耗量的简单线性预测,对于大多数具有相对一致的使用模式的用例来说,效果良好。
determineAlertLevel 函数使用可配置的阈值来确定何时发出警报以及以什么严重程度发出警报。它同时考虑你当前的使用百分比和上面计算的预测:
| 条件 | 严重程度 |
|---|---|
| 已经产生超额费用 | 严重 |
| 使用量 >= 严重阈值(默认 95%) | 严重 |
| 预计在 3 天或更短时间内达到限制 | 严重 |
| 使用量 >= 警告阈值(默认 80%) | 警告 |
| 预计本月将超出限制 | 警告 |
该项目包括六个预构建的警报通道。根据你的团队的需求配置一个或多个。这些集成作为示例,你可以轻松地扩展代码库以添加其他渠道,如 Microsoft Teams、Datadog 或接受 webhook 有效负载的任何其他服务。
Slack 集成使用传入的 webhook 将格式化的消息发布到频道。
设置:
.env 文件:SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
警报格式:
Slack 警报包括颜色编码的附件,其中包含以结构化布局显示的使用情况统计信息和预测。
PagerDuty 集成使用 Events API v2 触发事件。
设置:
.env 文件:PAGERDUTY_ROUTING_KEY=your_routing_key_here
警报行为:
Discord 集成将嵌入的消息发布到频道。
设置:
.env 文件:DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/000000000000000000/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Opsgenie 集成创建具有适当优先级级别的警报。
设置:
.env 文件:OPSGENIE_API_KEY=your_api_key_here
警报行为:
quicknode、usage 和严重级别电子邮件集成通过 SendGrid 发送 HTML 格式的警报。
设置:
.env 文件:SENDGRID_API_KEY=SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SENDGRID_FROM_EMAIL=alerts@yourdomain.com
ALERT_EMAIL_RECIPIENTS=team@yourdomain.com,oncall@yourdomain.com
多个收件人以逗号分隔。
对于自定义集成,通用 webhook 将 JSON 有效负载发送到任何 HTTP 端点。
设置:
GENERIC_WEBHOOK_URL=https://your-service.com/webhook/quicknode-alerts
有效负载格式:
{
"timestamp": "2024-01-15T12:00:00.000Z",
"source": "quicknode-usage-monitor",
"severity": "warning",
"title": "Quicknode RPC Usage Warning",
"message": "Your Quicknode RPC usage has reached 82.5% of your limit...",
"data": {
"usage_percent": 82.5,
"credits_used": 4125000,
"credits_remaining": 875000,
"limit": 5000000,
"overages": 0
},
"prediction": {
"daily_average": 275000,
"projected_monthly": 8250000,
"projected_percent": 165.0,
"days_until_limit": 3,
"projected_overages": 3250000
}
}
在检查模式下运行以查看你的使用情况和预测,而不发送警报:
npm run check
示例输出:
在检查模式下运行(不会发送警报)
正在获取 Quicknode RPC 使用情况...
=== Quicknode RPC 使用情况报告 ===
周期:2024 年 1 月 1 日 - 2024 年 1 月 15 日
周期天数:已用 15 天,剩余 16 天
----------------------------------
已用信用:4,125,000
剩余信用:875,000
限制:5,000,000
当前使用量:82.5%
----------------------------------
预测
每日平均:275,000 信用/天
预计每月:8,525,000 信用 (170.5%)
达到限制前的天数:约 3 天
预计超额:3,525,000 信用
==================================
阈值:警告=80%,严重=95%
将触发:警告警报
此示例显示了一种情况,你已使用 82.5% 的信用,已过去 15 天。按照当前速率,预计你将在大约 3 天内超出限制。
在警报模式下运行以检查使用情况,如果超过阈值则发送警报:
npm run dev
或者用于生产环境:
npm run build
npm start
发送警报时的示例输出:
正在获取 Quicknode RPC 使用情况...
=== Quicknode RPC 使用情况报告 ===
周期:2024 年 1 月 1 日 - 2024 年 1 月 15 日
周期天数:已用 15 天,剩余 16 天
----------------------------------
已用信用:4,125,000
剩余信用:875,000
限制:5,000,000
当前使用量:82.5%
----------------------------------
预测
每日平均:275,000 信用/天
预计每月:8,525,000 信用 (170.5%)
达到限制前的天数:约 3 天
预计超额:3,525,000 信用
==================================
警报级别:警告
正在向 2 个渠道发送警报...
[确定] slack
[确定] pagerduty
由于控制台 API 是一种 REST 服务,因此警报是在你查询它时生成的,而不是自动推送的。这使得安排对于主动监控至关重要。如果没有定期检查,你将不会收到警报,直到你手动运行脚本。
安排脚本以与你的使用模式和响应需求相匹配的间隔运行。更频繁的检查(每隔几个小时)可以及早发现使用高峰,而不太频繁的检查(每天)对于可预测的工作负载可能就足够了。
添加一个 cron 作业以每 6 小时运行一次检查:
crontab -e
添加以下行(调整你安装的路径):
0 */6 * * * cd /path/to/usage-alerting && npm start >> /var/log/quicknode-alerts.log 2>&1
在 .github/workflows/usage-alerts.yml 创建一个工作流程文件:
name: Quicknode Usage Alerts
on:
schedule:
# Run every 6 hours
- cron: '0 */6 * * *'
workflow_dispatch: # Allow manual triggers
jobs:
check-usage:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
working-directory: console-api/usage-alerting
run: npm install
- name: Run usage check
working-directory: console-api/usage-alerting
env:
QUICKNODE_API_KEY: ${{ secrets.QUICKNODE_API_KEY }}
ALERT_THRESHOLD_WARNING: '80'
ALERT_THRESHOLD_CRITICAL: '95'
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: npm run dev
设置密钥:
QUICKNODE_API_KEY:你的 Quicknode API 密钥SLACK_WEBHOOK_URL:你的 Slack webhook URL(或其他渠道密钥)如果你的团队已经使用 Prometheus,你可以完全跳过基于 cron 的安排。相反,使用本项目中包含的 Prometheus 导出器,并配置 AlertManager 以根据指标阈值处理通知。这种方法将警报逻辑集中在你现有的监控基础设施中。
对于使用 Prometheus 和 Grafana 进行监控的团队,本项目包含一个自定义 Prometheus 导出器,用于公开 Quicknode 使用情况指标。此导出器将 v0/usage/rpc API 数据转换为 Prometheus 格式,允许你:
注意: Quicknode 还为企业客户提供 Prometheus Exporter,该导出器公开了其他指标,如 RPC 请求、端点响应状态和延迟。请按照该指南了解 Prometheus 的基础知识并构建全面的 Grafana 仪表板。本项目中的导出器专门关注所有付费计划可用的账单和使用情况指标。

该导出器遵循标准的 Prometheus 模式。它运行一个简单的 HTTP 服务器,该服务器按需响应抓取请求:
被动操作:导出器运行一个 HTTP 服务器并等待请求。它不会按照自己的计划获取数据或运行后台作业。
Prometheus 控制计时:Prometheus 被配置为以你指定的间隔(例如,每五分钟)抓取 /metrics 端点。
按需获取:当 Prometheus 访问 /metrics 端点时,导出器会调用 Quicknode API,将响应格式化为 Prometheus 指标,然后返回它。
无状态设计:导出器不会在请求之间缓存或存储数据。每次抓取都会从 API 返回新数据。
这意味着你可以通过 Prometheus 配置完全控制抓取频率。根据你需要更新指标的频率调整 scrape_interval。
npm run exporter
这会在端口 9091 上启动一个指标服务器(可以通过 EXPORTER_PORT 配置):
Quicknode Prometheus Exporter 正在 http://localhost:9091 上运行
指标端点:http://localhost:9091/metrics
运行状况端点:http://localhost:9091/health
| 指标 | 类型 | 描述 |
|---|---|---|
quicknode_credits_used |
gauge | 当前结算周期内使用的总 RPC 信用 |
quicknode_credits_remaining |
gauge | 当前结算周期内剩余的 RPC 信用 |
quicknode_credits_limit |
gauge | 结算周期的总 RPC 信用限制 |
quicknode_usage_percent |
gauge | 已使用的 RPC 信用限制的百分比 |
quicknode_overages |
gauge | 超出限制使用的 RPC 信用 |
quicknode_exporter_scrape_success |
gauge | 上次抓取是否成功 |
在你的 prometheus.yml 中将导出器添加为抓取目标:
scrape_configs:
- job_name: 'quicknode-usage'
scrape_interval: 5m
static_configs:
- targets: ['localhost:9091']
如果你在 Docker 中运行 Prometheus 并在你的主机上运行导出器,请更新目标以使用 host.docker.internal:9091,并将以下 extra_hosts 添加到你的 Docker Compose 文件:
services:
prometheus:
image: prom/prometheus:latest
extra_hosts:
- "host.docker.internal:host-gateway"
有关使用 Quicknode 指标构建 Grafana 仪表板的完整指南,请参阅我们的指南:如何构建 Grafana 仪表板来监控你的 RPC 基础设施。
该配套存储库包括预构建的仪表板配置:
console-api/usage-alerting/dashboards/quicknode-usage-alerting-grafana.json 中找到 Grafana 仪表板 JSON。将此直接导入到你的 Grafana 实例中,或将其放置在你的预配文件夹中。console-api/grafana-dashboard 目录包括一个 Docker Compose 设置,用于完整的 Prometheus 和 Grafana 监控堆栈。你现在已经为你的 Quicknode RPC 使用情况设置了一个主动警报系统。借助此系统,你可以:
多渠道警报和使用情况预测的结合使你能够获得有效管理 RPC 基础设施所需的可见性。
既然你已经设置了使用情况警报,请考虑以下增强功能:
如何以编程方式检查我当前的 Quicknode RPC 信用使用情况?
使用 Console API,对 https://api.quicknode.com/v0/usage/rpc 发出 GET 请求,包括你的 API 密钥,以检索当前结算周期的 credits_used、credits_remaining 和 limit。
Console API 在 Quicknode 中用于什么?
Console API 允许以编程方式管理 Quicknode 中的所有操作,包括创建、更新和删除端点、设置速率限制以及获取详细的使用情况数据,如按端点、方法或区块链划分的信用额度。
如何将 Quicknode 使用情况指标与 Prometheus 和 Grafana 集成?
该项目包括一个自定义 Prometheus 导出器,用于在 /metrics 端点上公开 Quicknode 使用情况指标。使用 npm run exporter 运行导出器,配置 Prometheus 来抓取它,并导入提供的 Grafana 仪表板 JSON 以可视化已用信用、剩余信用、使用百分比和超额费用。
此使用情况监控系统支持哪些警报通道?
该系统支持六个预构建的通道:Slack、Discord、PagerDuty、Opsgenie、电子邮件(通过 SendGrid)和通用 webhook。你可以配置一个或多个通道,并扩展代码库以添加其他集成。
我可以按端点或方法细分 RPC 信用使用情况吗?
可以,使用对 /v0/usage/rpc/by-endpoint 或类似端点的 GET 请求,以查看跨端点、方法或区块链的信用消耗的详细细分。
如果你有疑问或遇到问题,请在我们的 Discord 中联系。通过在 Twitter (@Quicknode) 或我们的 Telegram 公告频道 上关注我们,了解最新信息。
如果你有任何反馈或对新主题的请求,请告诉我们。我们很乐意听取你的意见。
- 原文链接: quicknode.com/guides/qui...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!