报警管理
本文从业务持续性、集群可用性、机器负载等多个维度介绍需要关注的报警项及其处理办法。
以下示例中,所有变量均以 $
为前缀,请自行根据业务环境自行替换。例如,$job_name
需替换为 Prometheus 配置中对应的 Job Name,$fe_leader
需替换为对应 Leader FE 的 IP 地址。
服务挂起报警
FE 服务挂起
PromSQL
count(up{group="fe", job="$job_name"}) >= 3
报警描述
当存活的 FE 节点个数小于该值时发送报警。您可以根据实际 FE 节点个数调整。
处理办法
尝试拉起挂掉的 FE 节点。
BE 服务挂起
PromSQL
node_info{type="be_node_num", job="$job_name",state="dead"} > 1
报警描述
当挂起的 BE 节点个数大于 1 时发送报警。
处理办法
尝试拉起挂掉的 BE 节点。问题排查参考 BE Crash 问题排查。
机器负载报警
BE CPU 报警
PromSQL
(1-(sum(rate(starrocks_be_cpu{mode="idle", job="$job_name",instance=~".*"}[5m])) by (job, instance)) / (sum(rate(starrocks_be_cpu{job="$job_name",host=~".*"}[5m])) by (job, instance))) * 100 > 90
报警描述
当 BE CPU Utilization 超过 90% 时发送报警。
处理办法
查看当下是否有大查询或者进行过大量数据导入,并发送给支持人员进行定位。
-
通过
top
命令查看进程的资源占用状况。top -Hp $be_pid
-
通过
perf
命令收集分析性能数据。# 建议执行以下命令 1-2 分钟,然后通过 CTRL+C 终止。
sudo perf top -p $be_pid -g >/tmp/perf.txt
紧急情况下,为尽快恢复服务,可尝试在保留 Stack 后重启对应的 BE 节点。此处紧急情况是指 BE 节点进程 CPU 监控持续异常打满,无法通过有效手段定位异常并降低 CPU 使用率。
内存报警
PromSQL
(1-node_memory_MemAvailable_bytes{instance=~".*"}/node_memory_MemTotal_bytes{instance=~".*"})*100 > 90
报警描述
当内存使用率超过 90% 时发送报警。
处理办法
您可以参考 内存问题排查 或者 获取 Heap Profile 排查。
- 紧急情况下,为尽快恢复服务,可尝试重启对应的 BE 服务。此处紧急情况是指 BE 节点进程内存监控持续异常打满,无法通过有效手段定位异常并降低内存使用。
- 如果是其他混合部署的服务影响了系统,紧急情况下可优先考虑终止其他服务。
磁盘报警
磁盘负载报警
PromSQL
rate(node_disk_io_time_seconds_total{instance=~".*"}[1m]) * 100 > 90
报警描述
当磁盘负载超过 90% 时发送报警。
处理办法
如果集群发送了 node_disk_io_time_seconds_total
的报警,首先需要确认业务是否存在变更。如果存在变更,需考虑能否回滚变更,维持先前的资源平衡条件。如果不存在变更或不能回滚,则需考虑是否是正常的业务增长导致需要扩容资源。您可以使用 iotop
工具分析监视磁盘 I/O 使用状况,iotop
具有与 top
相似的 UI,其中包括 pid
、user
、I/O
、进程等相关信息。除此之外,您也可以通过以下 SQL 语句获取当前系统中耗费 I/O 的 Tablet,进而定位到具体的任务和表。
-- all 表示所有服务,10 表示采集过程持续 10 秒,3 表示获取 top3 结果。
ADMIN EXECUTE ON $backend_id 'System.print(ExecEnv.io_profile_and_get_topn_stats("all", 10, 3))';
根目录空间容量报警
PromSQL
node_filesystem_free_bytes{mountpoint="/"} /1024/1024/1024 < 5
报警描述
当根目录空间容量剩余不足 5GB 时发送报警。
处理办法
通常情况下,可能占用较大空间的目录包括 /var、/opt 以及 /tmp。
您可以使用以下命令分析查看占用较多空间,并及时清理不需要的文件。
du -sh / --max-depth=1
数据盘磁盘容量报警
PromSQL
(SUM(starrocks_be_disks_total_capacity{job="$job"}) by (host, path) - SUM(starrocks_be_disks_avail_capacity{job="$job"}) by (host, path)) / SUM(starrocks_be_disks_total_capacity{job="$job"}) by (host, path) * 100 > 90
报警描述
当磁盘容量使用率超过 90% 时发送报警。
处理办法
-
查看导入数据量是否有变化。
可以关注 Grafana 监控中的
load_bytes
监控项,如果新增大量数据导入,建议您扩容系统资源。 -
查看是否有 DROP 操作。
如果数据导入量没有发生太大变化,可在系统中运行
SHOW BACKENDS
。如果返回的磁盘使用量和实际不一致,您可以通过 FE Audit Log 查看近期是否进行过 DROP DATABASE、TABLE 或者 PARTITION 的操作。这些操作涉及的元数据信息会在 FE 内存中保留 1 天,因此您一天之内可以通过 RECOVER 语句恢复数据,避免误操作。RECOVER 操作后可能会出现实际磁盘占用大于
SHOW BACKENDS
中显示的已用空间的情况。被删除数据保留在内存中的时间可通过 FE 动态参数
catalog_trash_expire_second
(默认值:86400)调整:ADMIN SET FRONTEND CONFIG ("catalog_trash_expire_second"="86400");
如需持久化该修改,需要在 FE 配置文件 fe.conf 中添加该配置项。
此后,被删除数据将被转移至 BE 节点的 trash 目录下(
$storage_root_path/trash
)。默认设置下,被删除数据会在 trash 目录中保留 1 天。该情况也导致实际磁盘占用大 于SHOW BACKENDS
中显示的已用空间的情况。被删除数据保留在 trash 目录中保留时间可通过 BE 动态参数
trash_file_expire_time_sec
(默认值:86400)调整:curl http://$be_ip:$be_http_port/api/update_config?trash_file_expire_time_sec=86400
FE 元数据磁盘容量报警
PromSQL
node_filesystem_free_bytes{mountpoint="${meta_path}"} /1024/1024/1024 < 10
报警描述
FE 元数据磁盘容量剩余不足 10GB 时发送报警。
处理办法
您可以使用以下命令分析空间占用较多的目录,并及时清理不需要的文件。元数据路径为 fe.conf 中配置项 meta_dir
指定的路径。
du -sh /${meta_dir} --max-depth=1
如果元数据目录占用空间比较大,通常是因为 bdb 目录占用比较大,可能是由于 CheckPoint 失败导致。您可以参考 CheckPoint 失败报警排查。如果该方式仍然无法解决,请联系支持人员。
集群服务异常报警
Compaction 失败报警
Cumulative Compaction 失败报警
PromSQL
increase(starrocks_be_engine_requests_total{job="$job_name" ,status="failed",type="cumulative_compaction"}[1m]) > 3
increase(starrocks_be_engine_requests_total{job="$job_name" ,status="failed",type="base_compaction"}[1m]) > 3
报警描述
最近 1 分钟内有三次 Cumulative Compaction 失败或三次 Base Compaction 失败时发送报警。
处理办法
在对应 BE 节点日志中搜索以下关键字,确定失败涉及的 Tablet。
grep -E 'compaction' be.INFO | grep failed
如果有如下日志,则表示存在 Compaction 失败。
W0924 17:52:56:537041 123639 comaction_task_cpp:193] compaction task:8482. tablet:8423674 failed.
您可以获取该 Tablet 对应日志的上下文排查失败原因。通常情况下,失败可能是在 Compaction 过程中进行了 DROP TABLE 或 PARTITION 操作导致。系统内部有 Compaction 重试策略,您也可以手动设置 Tablet 状态为 BAD 并触发重新 Clone 任务以修复。
进行以下操作前需保证当前表至少有三个副本完整。
ADMIN SET REPLICA STATUS PROPERTIES("tablet_id" = "$tablet_id", "backend_id" = "$backend_id", "status" = "bad");
Compaction 压力大报警
PromSQL
starrocks_fe_max_tablet_compaction_score{job="$job_name",instance="$fe_leader"} > 100
报警描述
当最大 Compaction Score 超过 100,即 Compaction 压力较大时发送报警。
处理办法
该报警通常是由于发起了高频率(每秒 1 次)的导入、INSERT INTO VALUES 或 DELETE 任务所导致。建议为导入或 DELETE 任务设置 5 秒以上的间隔。不建议高并发提交 DELETE 任务。
版本个数超限制报警
PromSQL
starrocks_be_max_tablet_rowset_num{job="$job_name"} > 700
报警描述
当有 BE 节点中 Tablet 最大的版本个数超过 700 时发送报警。
处理办法
通过以下语句查看版本数过多的 Tablet:
SELECT BE_ID,TABLET_ID FROM information_schema.be_tablets WHERE NUM_ROWSET>700;
以下以 ID 为 2889156
的 Tablet 为例:
SHOW TABLET 2889156;