Syntax
创建 Trigger
创建 Trigger 的语法:
CREATE TRIGGER [IF NOT EXISTS] <trigger_name>
ON (<query_expression>) EVERY <interval_expression>
[LABELS (<label_name>=<label_val>, ...)]
[ANNOTATIONS (<annotation_name>=<annotation_val>, ...)]
NOTIFY (
WEBHOOK <notify_name1> URL '<url1>' [WITH (<parameter1>=<value1>, ...)],
WEBHOOK <notify_name2> URL '<url2>' [WITH (<parameter2>=<value2>, ...)]
);
Trigger name
- Trigger name:Trigger 在 catalog 级别的唯一标识符。
- IF NOT EXISTS:阻止 Trigger 已经存在时的报错。
On 子句
Query expression
指定的 SQL 查询会被定期执行。若查询结果非空,则触发通知;若查询结果包含多行,则 每一行都会触发一条独立通知。
此外,Trigger 会从查询结果中提取 labels 与 annotations,并与 LABELS
和 ANNOTATIONS
子句中指定的键值对一起附加到通知消息中。
提取规则如下:
- 若列名(或别名)以
label_
开头,则将该列提取到 LABELS 中,键名为去掉label_
前缀后的列名(或别名)。 - 其余所有列均提取到 ANNOTATIONS 中,键名即为列名(或别名)。
例如,查询表达式如下:
SELECT collect as label_collector, host as label_host, val
FROM host_load1
WHERE val > 10 and ts >= now() - '1 minutes'::INTERVAL
假设查询结果非空,且如下所示:
label_collector | label_host | val |
---|---|---|
collector1 | host1 | 12 |
collector2 | host2 | 15 |
这将产生两条通知。
第一条通知的 labels 与 annotations 如下:
- Labels:
- collector: collector1
- host: host1
- 以及
LABELS
子句中定义的 labels
- Annotations:
- val: 12
- 以及
ANNOTATIONS
子句中定义的 annotations
第二条通知的 labels 与 annotations 如下:
- Labels:
- collector: collector2
- host: host2
- 以及
LABELS
子句中定义的 labels
- Annotations:
- val: 15
- 以及
ANNOTATIONS
子句中定义的 annotations
Interval expression
指定查询的执行间隔。它表示查询的执行频率。例如,INTERVAL '1 minute'
、
INTERVAL '1 hour'
等。更多细节,请参见
interval-type。
Labels 和 Annotations 子句
LABELS 和 ANNOTATIONS 子句用于在 Trigger 发送的通知消息中附加静态的键值对,以提 供有关该 Trigger 的额外上下文或元数据。
- LABELS:可用于 Alertmanager 的路由、分组与抑制规则等。
- ANNOTATIONS:通常用于存放供人类阅读的描述信息。
Notify 子句
NOTIFY 子句允许指定一个或多个通知通道。目前,GreptimeDB 支持以下通道类型:
Webhook
当 Trigger 触发时,Webhook 通道会向指定的 URL 发送 HTTP 请求。请求的 payload 与 Prometheus Alertmanager 兼容,因此我们可以复用 Alertmanager 的分组、抑制、静默和路由功能,而无需任何 额外的胶水代码。
可选的 WITH 子句允许指定额外的参数:
- timeout:HTTP 请求的超时时间,例如
timeout='1m'
。
Show Triggers
列出所有的 Triggers:
SHOW TRIGGERS;
当然,它也支持 LIKE
查询:
SHOW TRIGGERS LIKE '<pattern>';
例如:
SHOW TRIGGERS LIKE 'load%';
以及 WHERE
条件:
SHOW TRIGGERS WHERE <condition>;
例如:
SHOW TRIGGERS WHERE name = 'load1_monitor';
Drop Trigger
请使用以下 DROP TRIGGER
语句删除 Trigger:
DROP TRIGGER [IF EXISTS] <trigger-name>;
For example:
DROP TRIGGER IF EXISTS load1_monitor;