告警类型
1. 搜索告警
2
创建告警
在告警创建面板中,你可以:- 为与该告警关联的已保存搜索指定名称。
- 设置阈值,并指定在给定周期内达到该阈值多少次。阈值也可作为上限或下限。这里的周期还将决定告警触发的频率。
- 指定一个
grouped by值。这样可按某个字段对搜索进行聚合,例如ServiceName,从而基于同一个搜索触发多个告警。 - 为通知选择一个 webhook 目标端。你也可以直接在此视图中添加新的 webhook。详情请参见添加 webhook。
2. 仪表板图表告警
要为仪表板上的可视化创建告警,必须先保存该仪表板。
1
打开图表编辑对话框
打开图表的配置菜单,然后选择告警按钮。此时会显示图表编辑对话框。2
添加告警
选择 Add Alert。3
定义告警条件
定义条件 (>=、>、<=、<、=、!=、<= x >=、> or <) 、阈值、持续时间和 webhook。这里的持续时间也会决定告警的触发频率。你可以直接在此视图中添加新的 webhook。详见添加 webhook。添加 webhook
Add New Webhook。
这会打开 webhook 创建对话框,您可以在其中创建新的 webhook:
webhook 名称为必填项,描述为可选项。其他需要填写的设置取决于服务类型。
请注意,ClickStack 开源版与 ClickStack Cloud 提供的服务类型有所不同。请参阅服务类型集成。
服务类型集成
- Slack:通过 webhook 或 API 直接向频道发送通知。
- PagerDuty:通过 PagerDuty API 将事件路由给值班团队。
- Webhook:通过通用 webhook 将告警连接到任何自定义系统或工作流。
仅 ClickHouse Cloud 支持的集成Slack API 和 PagerDuty 集成仅在 ClickHouse Cloud 中受支持。
- Webhook URL。例如:
https://hooks.slack.com/services/<unique_path>。更多详情请参阅 Slack 文档。
- Slack bot token。更多详情请参阅 Slack 文档。
- PagerDuty 集成密钥。更多详情请参阅 PagerDuty 文档。
- Webhook URL
- Webhook 请求头 (可选)
- Webhook 请求体 (可选) 。请求体当前支持模板变量
{{title}}、{{body}}和{{link}}。
管理告警
- 红条:本次评估满足了阈值条件,告警已触发 (已发送通知)
- 绿条:告警已完成评估,但未满足阈值条件 (未发送通知)
删除告警
Remove Alert 按钮会删除该图表上的告警。
基于 SQL 的图表告警
支持的图表类型
其他基于 SQL 的图表类型 (表、饼图、热力图等) 不支持告警。
创建 SQL 告警
1
2
添加告警
在图表编辑器的告警部分中,选择 Add Alert。配置以下内容:- 阈值类型:
>=(大于等于) 、>(大于) 、<=(小于等于) 、<(小于) 、=(等于) 、!=(不等于) 、<= x >=(介于两者之间) 或> or <(超出范围) - 阈值:用于比较的数值
- 间隔:告警的评估频率 (1m、5m、15m、30m、1h、6h、12h 或 1d) 。这也定义了每次评估的时间窗口。
- Webhook:告警触发时使用的通知通道。请参阅添加 webhook。
3
保存仪表板
保存仪表板以激活告警。告警将按照配置的间隔开始评估。如何解读查询结果
- 值列:
SELECT子句中的最后一个数值列会被用作告警值。如果查询返回多个数值列 (例如count, avg_latency, p99_latency) ,则只有最后一列 (p99_latency) 会与阈值比较。 - 时间戳列:对于时间序列图表 (折线图 和 堆叠条形图) ,系统会将结果中的 Date/DateTime 列识别为时间桶 (即时间序列图表的 x 轴) 。系统会针对每个时间桶分别评估其值列是否超过阈值;如果任意时间桶的值突破已配置的阈值,就会触发告警。
- 分组列:任何非数值、非时间戳列 (例如
ServiceName、Environment) 都会被视为分组维度。存在分组时,系统会分别跟踪每个唯一的分组值组合,并单独触发告警。对于每个值超过已配置阈值的分组,ClickStack 都会发送一条告警。分组仅适用于时间序列图表。
查询参数和宏
必需参数与推荐参数
{intervalSeconds:Int64}、{intervalMilliseconds:Int64}、$__timeInterval(col) 或 $__timeInterval_ms(col)) 。告警执行时,该参数会被替换为告警配置的周期。
用于告警的查询应当包含时间范围过滤器 ({startDateMilliseconds:Int64} 和 {endDateMilliseconds:Int64},或 $__timeFilter(col) 等) 。无论查询中是否包含时间范围过滤器,告警查询都会基于告警配置的周期运行。如果没有时间范围过滤器,则查询每次执行时都会读取源表中当前可用的整个时间范围。
告警查询示例
每个服务的错误率 (时间序列)
>= 5 (错误率达到 5% 时触发)
在此查询中,ServiceName 是一个非数值、非时间戳列,因此每个服务都会被作为独立的告警组进行跟踪。告警会针对每个服务分别独立触发。
使用滞后平均值进行异常检测 (时间序列)
> 0 (检测到超出滚动基线的额外错误时触发)
请注意,该查询会在日期范围开始前拉取 30 个时间间隔的数据,为滚动窗口计算提供初始值,然后再将最终输出过滤为仅包含评估窗口的数据。
常见告警场景
All Error Events 和 HTTP Status >= 400 已保存搜索设置告警,以便在
错误数量过多时收到通知。
慢操作: 你可以为慢操作设置一个搜索 (例如
duration:>5000) ,然后在慢操作出现过多时
触发告警。
用户事件: 你还可以为面向客户的团队设置告警,以便在有新用户注册或发生关键用户操作时收到通知。