Skip to main content
本指南介绍如何使用 Tenderly 的 API 设置简单和复杂的告警规则。我们将逐一探讨每种表达式类型,然后将它们组合成复杂的监控方案。

Alerting API 参考

简介

Tenderly 的 Alert API 允许您创建简单和复杂的 Alerts。 简单告警由一条规则组成,例如 method_call 会在事务调用您的 public 或 external 方法时触发。复杂告警可包含多个条件,只有当所有条件都满足时才会触发。例如,同时包含 method_callstate_change 的告警,会在事务调用指定方法并更新指定存储槽时触发。 使用 API 定义 Alert 时,您需要指定以下内容:
  • 投递渠道(delivery channels):当告警规则触发时,会通知这些渠道。详见 Delivery Channels
  • 表达式(expressions)数组:当数组中每个表达式所代表的所有条件都被满足时,告警将被触发。
email、Discord 和 Sentry 投递渠道可以通过 API(POST /api/v1/account/{accountId}/delivery-channel)创建。Slack、Telegram 和 PagerDuty 渠道需要 OAuth/bot 连接流程,只能通过 Dashboard 创建。所有渠道都可以使用 API 获取。

身份验证

在创建告警之前,您需要设置身份验证并标识您的项目:

表达式类型

您可以使用不同的表达式类型来指定 Alerts 的触发规则。

说明

  • 以上是 API 接受的全部表达式类型。任何其他 type 值的负载都会被拒绝并返回 400(“Expressions are not in the right format”)。
  • 告警内的所有表达式都是 AND 关系:只有当每个表达式都匹配同一笔事务时,告警才会触发。要监控相互独立的条件,请为每个条件创建单独的告警。
  • 比较运算符(operator)的有效取值:>>=<<===!=containsnotContains
  • 参数类型(parameter_type)包括:uintintbooladdressstringslicearraytuplefixed_bytesbyteshashfunction
  • 表达式类型 emitted_logerc20_transfer_matchereth_balancetx_valuemethod_callstate_changetx_statusview_function 支持可选的 not: true 字段来对匹配取反
  • eth_balance 仅在事务使余额跨越阈值(从不满足变为满足)时触发,而不是在条件持续满足期间的每笔事务上触发
  • 所有地址必须是有效的 Ethereum 地址(以 0x 开头,40 个十六进制字符)
  • Wei 值应作为字符串传入以处理大数
  • 网络 ID 应与目标区块链一致(例如 Ethereum 主网为 “1”)
更多详情请参阅 Alerting API 参考

简单表达式示例

以下示例展示如何设置简单表达式规则。

1. 方法调用监控

使用场景:监控智能合约中的特定函数调用。

2. 状态变化监控

使用场景:监控合约状态变量的变化,特别适用于跟踪关键参数,例如暂停状态或余额阈值。

3. 事件监控

使用场景:监控您的合约发出的特定事件,并支持参数过滤。

4. 原生 ETH 余额监控

使用场景:当某个地址的原生 ETH 余额低于阈值时告警,例如必须保持有充足资金的中继器或运营钱包。将告警范围限定到某个网络和地址,然后将原生余额与阈值(以 wei 表示)进行比较。

复杂告警示例

以下示例展示复杂的表达式规则。只有当 expressions 数组中的每个表达式都被满足时,告警才会触发。

1. 安全监控系统

使用场景:结合多个条件的全面安全监控:
  • 监控管理员函数调用
  • 跟踪大额转账
  • 监视黑名单地址
  • 对关键参数的状态变化进行告警

2. DeFi 协议监控

用例:监控 DeFi 池的以下情况:
  • 大额交易/兑换
  • 流动性变化
  • 失败的事务
由于告警内的表达式是 AND 关系,每个条件都是一个单独的告警。下面的示例一次性创建三个告警。

3. ERC20 代币监控

用例:代币监控,包括:
  • Transfer 一致性检查
  • 大额转账监控
  • 总供应量变化
与上一个示例一样,每个条件都是各自独立的告警。