使用 Prometheus 和 Grafana 监控报警
StarRocks 支持基于 Prometheus 和 Grafana 实现可视化监控。该方式允许您可视化集群的运行情况,便于监控和故障排除。
概述
StarRocks 提供了兼容 Prometheus 的信息采集接口,Prometheus 可以通过连接 BE 和 FE 节点的 HTTP 端口来获取集群监控指标的指标信息,存储在自身的时序数据库中。Grafana 则可以将 Prometheus 作为数据源将指标信息可视化。搭配 StarRocks 提供的 Dashboard 模板,您可以便捷的实现 StarRocks 集群监控指标的统计展示和阈值报警。
具体操作按照以下步骤展开:
- 安装监控组件
- 理解核心监控项
- 配置邮件报警
一、安装监控组件
默认情况下,Prometheus 和 Grafana 的端口不与 StarRocks 的端口冲突,但建议您将生产集群的监控组件单独部署,以此减少服务资源占用冲突,同时规避混合部署导致当前服务器异常宕机而外部无法及时感知的风险。
此外,Prometheus 和 Grafana 是无法监控自身服务的存活状态的,因此生产环境中建议您搭配 Supervisor 设置心跳服务,以下不做展开。
以下教程在监控节点(IP:192.168.110.23)使用操作系统 root 用户部署监控组件,对以下 StarRocks 集群进行监控(StarRocks 集群使用默认端口)。您在参考该指南为自己的集群配置监控时,通常只需替换 IP。
Host | IP | 操作系统用户 | 部署服务 |
---|---|---|---|
node01 | 192.168.110.101 | root | 1 FE + 1 BE |
node02 | 192.168.110.102 | root | 1 FE + 1 BE |
node03 | 192.168.110.103 | root | 1 FE + 1 BE |
说明
Prometheus+Grafana 当前只能监控 StarRocks 的 FE、BE 和 CN 节点,不能监控 Broker 节点。
1.1 部署 Prometheus
1.1.1 下载 Prometheus
StarRocks 的监控报警服务只需要使用 Prometheus 的 Server 安装包。您只需将安装包下载至监控节点。
以 LTS 版本 v2.45.0 为例,直接点击下载。
您也可以运行以下命令通过 wget
下载 Prometheus:
# 此处以 LTS 版本 v2.45.0 为例。您也可以替换命令行中的版本号下载其他版本。
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
在下载完成后,将安装包上传或拷贝至监控节点的 /opt 路径下。
1.1.2 安装 Prometheus
-
进入 /opt 路径下,解压 Prometheus 安装包。
cd /opt
tar xvf prometheus-2.45.0.linux-amd64.tar.gz -
为方便后续管理,将解压缩后的路径重命名为 prometheus:
mv prometheus-2.45.0.linux-amd64 prometheus
-
为 Prometheus 创建数据存储路径。
mkdir prometheus/data
-
由于 Prometheus 官方只提供了二进制文件压缩包,为了方便管理,您可以为 Prometheus 创建系统服务启动文件。
vim /etc/systemd/system/prometheus.service
在文件中添加以下内容:
[Unit]
Description=Prometheus service
After=network.target
[Service]
User=root
Type=simple
ExecReload=/bin/sh -c "/bin/kill -1 `/usr/bin/pgrep prometheus`"
ExecStop=/bin/sh -c "/bin/kill -9 `/usr/bin/pgrep prometheus`"
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data --storage.tsdb.retention.time=30d --storage.tsdb.retention.size=30GB
[Install]
WantedBy=multi-user.target添加完成后保存退出。
说明
如果您使用其他路径部署 Prometheus,请注意同步修改以上文件中 ExecStart 命令的路径。此外,以上文件在启动参数中还配置了 Prometheus 中数据存储的过期条件为 “30 天以上” 或 “大于 30 GB”,您可以按需修改。
-
修改 Prometheus 配置文件 prometheus/prometheus.yml。由于该文件对于配置内容的格式要求严格,请在修改时特别注 意空格和缩进。
vim prometheus/prometheus.yml
在文件中添加以下内容:
global:
scrape_interval: 15s # 全局的采集间隔,默认是 1 min,此处设置为 15 sec。
evaluation_interval: 15s # 全局的规则触发间隔,默认是 1 min,此处设置为 15 sec。
scrape_configs:
- job_name: 'StarRocks_Cluster01' # 监控每一个集群称之为一个 job,您可以在此自定义 StarRocks 集群名。
metrics_path: '/metrics' # 指定获取监控项目的 Restful API。
static_configs:
# 当前部分配置了 FE 群组,其中包含了 3 个 FE 节点,您需填写各个 FE 对应的 IP 和 HTTP 端口。
# 如果您在部署集群时修改过 HTTP 端口,请注意进行调整。
- targets: ['192.168.110.101:8030','192.168.110.102:8030','192.168.110.103:8030']
labels:
group: fe
# 当前部分配置了 BE 群组,其中包含了 3 个 BE 节点,您需填写各个 BE 对应的 IP 和 HTTP 端口。
# 如果您在部署集群时修改过 HTTP 端口,请注意进行调整。
- targets: ['192.168.110.101:8040','192.168.110.102:8040','192.168.110.103:8040']
labels:
group: be配置文件修改完成后,您可以使用
promtool
检查配置文件语法是否合规。./prometheus/promtool check config prometheus/prometheus.yml
当看到以下提示,确认检查通过后,再执行后续操作。
SUCCESS: prometheus/prometheus.yml is valid prometheus config file syntax
-
启动 Prometheus。
systemctl daemon-reload
systemctl start prometheus.service -
查看服务状态。
systemctl status prometheus.service
如果显示
Active: active (running)
即表明 Prometheus 启动 成功。您还可以通过
netstat
命令查看 Prometheus 默认端口(9090)的状态。netstat -nltp | grep 9090
-
为 Prometheus 设置开机启动。
systemctl enable prometheus.service
其他相关命令:
-
停止 Prometheus。
systemctl stop prometheus.service
-
重启 Prometheus。
systemctl restart prometheus.service
-
热加载配置。
systemctl reload prometheus.service
-
禁用开机启动。
systemctl disable prometheus.service
1.1.3 访问 Prometheus
您可以通过浏览器访问 Prometheus 的 Web UI,默认端口为 9090。以本教程中的监控节点为例,您需要访问192.168.110.23:9090
。
在 UI 主页的导航栏中选择 Status-->Targets,您可以看到配置文件 prometheus.yml 中所有分组 Job 的监控主机节点。正常情况下,所有节点都应为 UP,表示服务通信正常。
至此,Prometheus 配置完成。详细信息可以参阅 Prometheus 官方文档。
1.2 部署 Grafana
1.2.1 下载 Grafana
您也可以运行以下命令通过 wget
下载 Grafana 的 RPM 安装包。
# 此处以 LTS 版本 v10.0.3 为例。您也可以替换命令行中的版本号下载其他版本。
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.0.3-1.x86_64.rpm
1.2.2 安装 Grafana
-
使用
yum
命令安装 Grafana,该命令将自动安装 Grafana 所需依赖。yum -y install grafana-enterprise-10.0.3-1.x86_64.rpm
-
启动 Grafana。
systemctl start grafana-server.service
-
查看运行状态。
systemctl status grafana-server.service
如果显示
Active: active (running)
,即表明 Grafana 启动成功。您还可以通过
netstat
命令查看 Grafana 默认端口(3000)的状态。netstat -nltp | grep 3000
-
为 Grafana 设置开机启动。
systemctl enable grafana-server.service
其他相关命令:
-
停止 Grafana。
systemctl stop grafana-server.service
-
重启 Grafana。
systemctl restart grafana-server.service
-
禁用开机启动。
systemctl disable grafana-server.service
更多信息,请参阅 Grafana 官方文档。
1.2.3 登录 Grafana
您可以通过浏览器访问 Grafana Web UI,默认端口为 3000。以本教程中的监控节点为例,您需要访问 192.168.110.23:3000
。登录所需的用户名密码默认均为 admin
。初次登录时,Grafana 会提示您修改默认的登录密码,若暂时不希望修改密码,可以点击 Skip 跳过。然后即可进入到 Grafana Web UI 主页。
1.2.4 配置数据源
点击左上角菜单按钮,展开 Administration,然后选择 Data sources。
在出现的页面中点击 Add data source,然后选择 Prometheus。
为了将 Grafana 与您的 Prometheus 服务集成,您需要修改以下配置:
-
Name:数据源的名称。您可以为数据源自定义名称。
-
Prometheus Server URL:Prometheus 服务器的 URL,此教程中为
http://192.168.110.23:9090
。
配置完成后,点击 Save & test 保存并测试配置项。如果显示 Successfully queried the Prometheus API,即表明数据源可用。
1.2.5 配置 Dashboard
-
请根据您的 StarRocks 版本下载对应的 Dashboard 模板。
注意
由于模板文件需要通过 Grafana Web UI 上传,所以请将模板文件下载至您用于访问 Grafana 的机器上,而非监控节点本身。
-
配置 Dashboard 模板。
点击左上角菜单按钮,选择 Dashboards。
在出现的页面上,展开 New 按钮,选择 Import。
在新页面上点击 Upload Dashboard JSON file,上传先前下载的模板文件。
导入后,您可以重新命名 Dashboard,默认是
StarRocks Overview
。然后需要选择数据源,即之前创建的starrocks_monitor
。点击 Import 即可完成导入。导入完成后,您可以看到 StarRocks 的 Dashboard 展示。
1.2.6 通过 Grafana 监控 StarRocks
登录 Grafana Web UI,点击左上角菜单按钮,选择 Dashboards。
在出现的页面上,从 General 目录中选择 StarRocks Overview。
进入 StarRocks 的监控 Dashboard 后,您可以在页面右上方手动刷新或设置 Dashboard 的自动刷新间隔来观测 StarRocks 集群状态。
二、核心监控项
为了同时满足开发、运维和 DBA 等需求,StarRocks 提供了大量监控指标。本章节仅介绍部分业务常用的重要报警指标,以及它们的报警规则。其他指标内容,请参考 监控指标。
2.1 FE/BE状态监控
报警项 | 说明 | 报警规则 | 备注 |
---|---|---|---|
Frontends Status | FE 节点状态。存活(alive)的节点状态为 1 ,宕机(DEAD)的节点会显示为 0 。 | 所有 FE 节点状态需均为alive,任一 FE 节点状态为 DEAD 都应触发报警。 | FE 或 BE 宕机都属于异常行为,需要及时排查宕机原因。 |
Backends Status | BE 节点状态。存活(alive)的节点状态为 1 ,宕机(DEAD)的节点会显示为 0 。 | 所有 BE 节点状态需均为 alive,任一 BE 节点状态为 DEAD 都应触发报警。 |
2.2 查询失败监控
报警项 | 说明 | 报警规则 | 备注 |
---|---|---|---|
Query Error | 一分钟内失败的查询率(包括 Timeout)。其值即为一分钟内失败的查询条数除以 60 秒。 | 您可以结合业务实际的 QPS 来配置。初步可将该项报警阈值设置在 5% 左右,后续再调整。 | 正常情况下,查询失败率不应太高。将阈值设为 5% 表示每分钟最多允许 3 条查询失败。如果该项报警,您可以排查资源占用情况或合理配置查询超时时间。 |
2.3 外部感知失败监控
报警项 | 说明 | 报警规则 | 备注 |
---|---|---|---|
Schema Change | Schema Change 操作失败率。 | 由于 Schema Change 是较低频的操作,建议您将该项配置为出现失败立即报警。 | 正常情况下,Schema Change 操作不应该失败。如果该项报警,您可以调大变更表操作可用的内存上限,默认为 2G。 |
2.4 内部操作失败监控
报警项 | 说明 | 报警规则 | 备注 |
---|---|---|---|
BE Compaction Score | 所有 BE 最大的Compaction Score,表示当前 Compaction 压力。 | 通常离线场景下,该值小于 100。但当有大量导入任务存在时,Compaction Score 会有明显增高。通常当该值大于 800 的时候需要干预。 | 通常,Compaction Score大于 1000 时就会报错,StarRocks 会报错 “Too many versions”。您可以调低导入并发和导入频率。 |
Clone | BE 的 Clone 任务失败率。 | 建议您将该项配置为出现失败立即报警。 | 如果该项报警,您可以检查 BE 状态、磁盘状态和网络状态。 |
2.5 服务可用性监控
报警项 | 说明 | 报警规则 | 备注 |
---|---|---|---|
Meta Log Count | FE 节点 BDB 元数据 Log 条数。 | 建议您将该项配置为大于 100000 立即报警。 | Leader FE 节点的 Log 数量默认超过 50000 条会触发 CheckPoint 进行落盘。如果该值远超 50000,通常代表 CheckPoint 失败。您可以排查 fe.conf 中的 Xmx 堆内存配置是否合理。 |
2.6 机器过载监控项
报警项 | 说明 | 报警规则 | 备注 |
---|---|---|---|
BE CPU Idle | BE CPU 空闲率。 | 建议您将该项配置为空闲率小于 10% 持续30 秒则报警。 | 该项主要用于监测 CPU 资源瓶颈。CPU 占用率的波动性比较大,如果统计间隔太小会导致误报。所以您需要结合业务实际情况调整该项,如果确实存在多个大任务的批量处理或较多的查询,可调低该阈值。 |
BE Mem | 各个 BE 节点的内存使用情况。 | 建议您将该项配置为各个 BE 可用内存大小的90%。 | 该值与 Process Mem 取值相同,BE 默认内存上限为 be.conf 中的mem_limit=90% ,即 BE 所在服务器内存的 90%。如果您同时在该服务器上混部其他服务,请注意调整该值,避免 OOM。而该项的报警阈值则需要设为该上限的 90%,以确认 BE 内存资源是否已达到瓶颈。 |
Disks Avail Capacity | 各 BE 节点本地磁盘容量可用比例(百分比)。 | 建议您将该项配置为小于 20% 立即报警。 | 建议您根据业务需求为集群保留充足可用空间。 |
FE JVM Heap Stat | StarRocks 集群各个 FE 的 JVM 堆内存使用百分比。 | 建议您将该项配置为大于等于 80% 立即报警。 |