7 监控和报警(扩展了解)
Doris 可以使用 Prometheus 和 Grafana 进行监控和采集,官网下载最新版即可。
Prometheus 官网下载:https://prometheus.io/download/ Grafana 官网下载:https://grafana.com/grafana/download |
Doris 的监控数据通过 FE 和 BE 的 http 接口向外暴露。监控数据以 key-value 的文本形式对外展现。每个 key 还可能有不同的 Label 加以区分。当用户搭建好 Doris 后,可以在浏览器,通过以下接口访问监控数据.
Frontend: fe_host:fe_http_port/metrics,如 http://doitedu01:8030/metrics
Backend: be_host:be_web_server_port/metrics,如 http://doitedu01:8040/metrics
整个监控架构如下图

7.1 prometheus
- 上传 prometheus-2.26.0.linux-amd64.tar.gz,并进行解压
SQL tar -zxvf prometheus-2.26.0.linux-amd64.tar.gz |
配置两个 targets 分别配置 FE 和 BE,并且定义 labels 和 groups 指定组。如果有多个集群则再加 -job_name 标签,进行相同配置
SQL vi prometheus.yml scrape_configs: - job_name: 'prometheus_doris' static_configs: - targets: ['doitedu01:8030','doitedu02:8030','doitedu03:8030'] labels: group: fe - targets: ['doitedu01:8040','doitedu02:8040','doitedu03:8040'] labels: group: be |
SQL nohup /opt/app/prometheus-2.26.0.linux-amd64/prometheus --web.listen-address="0.0.0.0:8181" & |
该命令将后台运行 Prometheus,并指定其 web 端口为 8181。启动后,即开始采集数据,并将数据存放在 data 目录中。
点击导航栏中,Status -> Targets,可以看到所有分组 Job 的监控主机节点。正常情况下,所有节点都应为 UP,表示数据采集正常。点击某一个 Endpoint,即可看到当前的监控数值。
- 停止 prometheus,直接 kill -9 即可
7.2 grafana
- 上传 grafana-7.5.2.linux-amd64.tar.gz,并进行解压
SQL tar -zxvf grafana-7.5.2.linux-amd64.tar.gz |
SQL vi defaults.ini http_addr = doitedu01 http_port = 8182 |
SQL nohup /opt/app/grafana-7.5.2/bin/grafana-server & |
- 通过浏览器访问http://doitedu01:8182,配置数据源 Prometheus 账号密码都是 admin
点击进入面板

进入到这个页面:

官网地址:https://grafana.com
添加数据源:在齿轮那边

添加普罗米修斯:

模板下载地址:https://grafana.com/grafana/dashboards/9734/revisions
上传准备好的 doris-overview_rev4.json
找到manager

导入下载得doris模板


至此就已经完成,能够看到所有得指标页面了

8.集成其他系统 (后续学习)
doris可以与hive、kafka、hudi、flink等各种大数据组件进行整合
这部分知识,待我们掌握了相关组件后再来学习
9.备份和恢复(扩展了解)
Doris 支持将当前数据以文件的形式,通过 broker 备份到远端存储系统中。之后可以通过恢复命令,从远端存储系统中将数据恢复到任意 Doris 集群。通过这个功能,Doris支持将数据定期的进行快照备份。也可以通过这个功能,在不同集群间进行数据迁移
9.1简要原理说明
9.1.1备份(Backup)
备份操作是将指定表或分区的数据,直接以 Doris 存储的文件的形式,上传到远端仓库中进行存储。当用户提交 Backup 请求后,系统内部会做如下操作:

- 快照及快照上传
快照阶段会对指定的表或分区数据文件进行快照。之后,备份都是对快照进行操作。在快照之后,对表进行的更改、导入等操作都不再影响备份的结果。快照只是对当前数据文件产生一个硬链,耗时很少。快照完成后,会开始对这些快照文件进行逐一上传。快照上传由各个 Backend 并发完成。
- 元数据准备及上传
数据文件快照上传完成后,Frontend 会首先将对应元数据写成本地文件,然后通过broker 将本地元数据文件上传到远端仓库。完成最终备份作业。
9.1.2 恢复(Restore)
恢复操作需要指定一个远端仓库中已存在的备份数据,然后将这个备份的内容恢复到本地集群中。当用户提交 Restore 请求后,系统内部会做如下操作:

- 在本地创建对应的元数据
这一步首先会在本地集群中,创建恢复对应的表分区等结构。创建完成后,该表可见,但是不可访问。
- 本地 snapshot
这一步是将上一步创建的表做一个快照。这其实是一个空快照(因为刚创建的表是没有数据的),其目的主要是在 Backend 上产生对应的快照目录,用于之后接收从远端仓库下载的快照文件。
- 下载快照
远端仓库中的快照文件,会被下载到对应的上一步生成的快照目录中。这一步由各个Backend 并发完成。
- 生效快照
快照下载完成后,我们要将各个快照映射为当前本地表的元数据。然后重新加载这些快照,使之生效,完成最终的恢复作业。
重点说明
- 备份恢复相关的操作目前只允许拥有 ADMIN 权限的用户执行。
- 一个 Database 内,只允许有一个正在执行的备份或恢复作业。
- 备份和恢复都支持最小分区(Partition)级别的操作,当表的数据量很大时,建议按分区分别执行,以降低失败重试的代价。
|
9.2备份
9.2.1 创建一个远端仓库路径
SQL -- 1.启动hdfs -- 2.启动broker
CREATE REPOSITORY `hdfs_test_backup` -- 远端仓库的名字 WITH BROKER `broker_name` ON LOCATION "hdfs://linux01:8020/tmp/doris_backup" -- 存储的路径 PROPERTIES ( "username" = "root", "password" = "" ) ; |
9.2.2执行备份
SQL BACKUP SNAPSHOT [db_name].{snapshot_name} TO `repository_name` ON ( -- 表里面的哪些数据 `table_name` [PARTITION (`p1`, ...)], ... ) PROPERTIES ("key"="value", ...); |
示例:
SQL BACKUP SNAPSHOT test.event_info_log_snapshot TO hdfs_test_backup ON ( event_info_log ); |
9.2.3 查看备份任务
SQL SHOW BACKUP from test \G;
mysql> SHOW BACKUP from test \G; *************************** 1. row *************************** JobId: 13300 SnapshotName: event_info_log_snapshot DbName: test State: FINISHED BackupObjs: [default_cluster:test.event_info_log] CreateTime: 2022-11-27 21:29:56 SnapshotFinishedTime: 2022-11-27 21:30:00 UploadFinishedTime: 2022-11-27 21:30:06 FinishedTime: 2022-11-27 21:30:13 UnfinishedTasks: Progress: TaskErrMsg: Status: [OK] Timeout: 86400 1 row in set (0.02 sec) |
9.2.4查看远端仓库镜像
语法:
SQL SHOW SNAPSHOT ON `repo_name` [WHERE SNAPSHOT = "snapshot" [AND TIMESTAMP = "backup_timestamp"]]; |
示例一:查看仓库 hdfs_test_backup 中已有的备份:
SQL mysql> SHOW SNAPSHOT ON hdfs_test_backup; +-------------------------+---------------------+--------+ | Snapshot | Timestamp | Status | +-------------------------+---------------------+--------+ | event_info_log_snapshot | 2022-11-27-21-29-56 | OK | +-------------------------+---------------------+--------+ |
示例二:仅查看仓库 hdfs_test_backup 中名称为 event_info_log_snapshot的备份:
SQL mysql> SHOW SNAPSHOT ON hdfs_test_backup WHERE SNAPSHOT = "event_info_log_snapshot" and TIMESTAMP = '2022-11-27-21-29-56'; +-------------------------+---------------------+--------+ | Snapshot | Timestamp | Status | +-------------------------+---------------------+--------+ | event_info_log_snapshot | 2022-11-27-21-29-56 | OK | +-------------------------+---------------------+--------+ |
9.2.5取消备份
取消一个正在执行的备份作业语法:
SQL CANCEL BACKUP FROM test; |
9.3恢复
将之前通过 BACKUP 命令备份的数据,恢复到指定数据库下。该命令为异步操作。提交成功后,需通过 SHOW RESTORE 命令查看进度。
- 支持一次恢复多张表,这个需要和你对应的备份里的表一致
说明:
- 同一数据库下只能有一个正在执行的 BACKUP 或 RESTORE 任务。
- ON 子句中标识需要恢复的表和分区。如果不指定分区,则默认恢复该表的所有分区。所指定的表和分区必须已存在于仓库备份中
- 可以通过 AS 语句将仓库中备份的表名恢复为新的表。但新表名不能已存在于数据库中。分区名称不能修改。
- 可以将仓库中备份的表恢复替换数据库中已有的同名表,但须保证两张表的表结构完全一致。表结构包括:表名、列、分区、Rollup 等等。
- 可以指定恢复表的部分分区,系统会检查分区 Range 或者 List 是否能够匹配。
- PROPERTIES 目前支持以下属性:
- "backup_timestamp" = "2018-05-04-16-45-08":指定了恢复对应备份的哪个时间版本,必填。该信息可以通过 SHOW SNAPSHOT ON 仓库名称; 语句获得。
- "replication_num" = "3":指定恢复的表或分区的副本数。默认为 3。若恢复已存在的表或分区,则副本数必须和已存在表或分区的副本数相同。同时,必须有足够的host 容纳多个副本。
- "timeout" = "3600":任务超时时间,默认为一天。单位秒。
|
9.3.2使用示例
示例一
从 example_repo 中恢复备份 snapshot_1 中的表 backup_tbl 到数据库 example_db1,时间版本为 "2021-05-04-16-45-08"。恢复为 1 个副本:
SQL -- 创建表: create table event_info ( user_id varchar(20), event_id varchar(20), event_action varchar(20), event_time datetime ) DUPLICATE KEY(user_id) DISTRIBUTED BY HASH(user_id) BUCKETS 1;
-- 指定哪个数据库里面的哪一个快招表的名字 RESTORE SNAPSHOT test.event_info_log_snapshot -- 从哪个仓库中的哪一个快照中 FROM `hdfs_test_backup` -- 仓库名字 ON ( `event_info_log` ) -- 对应需要的那一张表 PROPERTIES ( -- 指定时间版本 "backup_timestamp"='2022-11-27-21-29-56' ); |
9.3.3查看恢复任务
可以通过下面的语句查看数据恢复的情况
SQL mysql> SHOW RESTORE from test \G; *************************** 1. row *************************** JobId: 13316 Label: event_info_log_snapshot Timestamp: 2022-11-27-21-29-56 DbName: default_cluster:test State: FINISHED AllowLoad: false ReplicationNum: 3 ReplicaAllocation: tag.location.default: 3 ReserveReplica: false ReserveDynamicPartitionEnable: false RestoreObjs: { "name": "event_info_log_snapshot", "database": "test", "backup_time": 1669555796781, "content": "ALL", "olap_table_list": [ { "name": "event_info_log", "partition_names": [ "event_info_log" ] } ], "view_list": [], "odbc_table_list": [], "odbc_resource_list": [] } CreateTime: 2022-11-27 21:55:27 MetaPreparedTime: 2022-11-27 21:55:28 SnapshotFinishedTime: 2022-11-27 21:55:31 DownloadFinishedTime: 2022-11-27 21:55:37 FinishedTime: 2022-11-27 21:55:43 UnfinishedTasks: Progress: TaskErrMsg: Status: [OK] Timeout: 86400 1 row in set (0.01 sec) |
9.3.4取消恢复
下面的语句用于取消一个正在执行数据恢复的作业
SQL CANCEL RESTORE FROM db_name; |
当取消处于 COMMIT 或之后阶段的恢复左右时,可能导致被恢复的表无法访问。此时只能通过再次执行恢复作业进行数据恢复
示例:取消 example_db 下的 RESTORE 任务。
SQL CANCEL RESTORE FROM example_db; |
9.3.5删除远端仓库
该语句用于删除一个已创建的仓库。仅 root 或 superuser 用户可以删除仓库。这里的用户是指 Doris 的用户 语法:
SQL DROP REPOSITORY `repo_name`; |
说明: 删除仓库,仅仅是删除该仓库在 Doris 中的映射,不会删除实际的仓库数据。删除后,可以再次通过指定相同的 broker 和 LOCATION 映射到该仓库。 |