![使用数据湖工厂(DLF)搭建数据中心实时告警平台](https://static001.infoq.cn/resource/image/95/98/95ea1b4503793fba7fdd5432e8202098.jpeg)
场景
一个数据中心部署了很多应用,需要建立统一的运维系统,实时接收应用的告警信息,如果告警级别严重以上,给用户发送一条信息,同时每天出一个运维报表,统计各应用各个级别告警的数据。
实现方案
数据中心的告警数据通过 DIS 实时导入 CS 实时流处理,CS 对告警数据进行数据清洗和预处理,当告警级别超过一定级别时实时给用户发送短信。同时清洗过的数据进入 DIS 通道,DIS 根据导入时间将告警数据按日期目录存放到 OBS。
![](https://static001.infoq.cn/resource/image/6e/32/6e667b4b2d766610925f612b323b6c32.jpg)
执行 DLI SQL 按天建 DLI 告警表分区,分区添加后统计告警记录到告警统计表。DLI SQL 执行完成后,通过 CDM 统一导出到 MYSQL 数据库。以上操作过程在 DLF 服务上完成。DLF 脚本开发中完成 DLI SQL 的开发。开发完成以后,DLI SQL 节点关联开发的 DLI SQL 脚本。DLI SQL 节点后连接 CDM 节点将数据导出到 MYSQL 数据库。最后配置 DLF 作业的调度周期为天,调度时间为凌晨 2 点。
![](https://static001.infoq.cn/resource/image/44/15/4486f78ac1ea3b3ad2046732a79a4915.jpg)
实施步骤
1.创建 2 个 DIS 通道
①创建 2 个 OBS 目录,一个告警表目录 alarm_info,一个告警统计表目录 alarm_count_info。
②建立 2 个 DIS 通道,dis-alarm-input 和 dis-alarm-output。
![](https://static001.infoq.cn/resource/image/b1/9f/b13e699d9bfe92379d560f4893b0849f.jpg)
![](https://static001.infoq.cn/resource/image/6a/b1/6aaf2077500541e95a829a1c67841db1.jpg)
③dis-alarm-output 通道配置转储
![](https://static001.infoq.cn/resource/image/c2/07/c25f36d7c40ea164a959944e1d76c007.jpg)
2.创建 SMN
①创建一个 SMN 主题 alarm_over
![](https://static001.infoq.cn/resource/image/5e/3f/5e2407ffac33981415325ddd724a943f.jpg)
②添加订阅,在订阅终端输入要接收通知的手机号码
![](https://static001.infoq.cn/resource/image/79/a7/79ab3d46880a9f902ece07439fb715a7.jpg)
3.创建 CS 作业
创建一个 FLink SQL 作业,在 SQL 编辑器中输入如下:
提交购买,运行 CS 作业。
到这一步,使用 DIS 上传数据的工具上传数据,当告警超过级别可以收到短信,上传的全量告警数据在 OBS 上也看到了。OBS 上的转储目录为/alarm_info/2018/08/31/。
4.使用 DLF 创建周期调度任务
①新建 DLI 连接
点击数据管理,在数据连接管理页面创建数据连接,选择数据连接类型为 DLI。PS:已提前建好 DLI 集群。
![](https://static001.infoq.cn/resource/image/b9/85/b9adcc3fd72b8294c747c6bc9f26ef85.jpg)
②新建脚本
点击数据开发,新建脚本。输入脚本名称,脚本类型选择 SQL,数据连接类型选择 DLI。
![](https://static001.infoq.cn/resource/image/09/80/096fcba94b05b676a726d6c1aef67d80.jpg)
在左侧选择 DLI 数据连接,资源队列,数据库。在 SQL 编辑框输入 alarm_info 的建表 SQL 语句。
![](https://static001.infoq.cn/resource/image/a6/95/a66e0fa7bf5b49fc15ac56fb795d0695.jpg)
执行脚本,刷新表列表,可以在表列表中看到新建的 alarm_info 表。
同样,新建脚本,执行 alarm_count_info 表建表语句。
编写定时增加 alarm_info 表分区的 SQL。表分区的键值和 obs 路径目录根据加载日期来获取。DLF 脚本支持参数设置,在编写脚本的右侧点击参数设置,新增一个参数。输入 $联想出目前 DLF 支持的系统函数。
![](https://static001.infoq.cn/resource/image/94/a6/94f7d514356446d679cf4a5278d8f6a6.jpg)
选择 getCurrentTime 函数,getCurrentTime 函数联想出参数:
$getCurrentTime(@@yyyyMMddHHmmss@@,-246060)。第一个参数是输出的格式,第二个参数是当前时间的偏移量,-246060 为当前时间的前一天,60*60 为当前时间加 1 小时。
一个小技巧,保存好的参数,可以直接在 SQL 编辑框,直接 select 参数名,查看执行结果是否为用户想要的值。比如设置 aa=$getCurrentTime(@@yyyyMMdd@@,-246060)
![](https://static001.infoq.cn/resource/image/a8/8a/a86285139099e24c27e8f371615de08a.jpg)
根据用户场景,DIS 实时导入告警数据到 OBS 按天分目录/alarm_info/2018/08/31/。
新建一个周期调度脚本,每天凌晨 2 点在 DIS 导出到 OBS 目录上新建 DLI 分区。分区新增后,按照告警分区时间和告警类别进行统计,将统计结果插入 alarm_info_count 表。
新建两个参数,一个为 alarm_info 表分区值,一个为 OBS 分区目录路径。脚本参数和脚本内容如下:
③新建 CDM 作业
在 CDM 集群中新建 CDM 作业从将 OBS 数据迁移到 MYSQL。
![](https://static001.infoq.cn/resource/image/ca/9c/ca88bc0d9b22fa7f501bec6d187e119c.jpg)
④新建 DLF 作业
拖拉一个 DLI SQL 节点,选择要执行的 DLI SQL 脚本。再拖拉一个 CDM 节点,选择要执行的 CDM 作业。
![](https://static001.infoq.cn/resource/image/2d/e8/2d2deea43b48fb352b2ca379aec0bbe8.jpg)
将 DLI SQL 和 CDM 节点连接起来,执行完 DLI SQL 执行 CDM 作业。
![](https://static001.infoq.cn/resource/image/75/4a/75528f4e777a32946f35021e76e38f4a.jpg)
配置作业的调度周期,每天凌晨 2 点执行一次。
![](https://static001.infoq.cn/resource/image/cb/56/cb800c925350a4ae7e404f92ba254356.jpg)
保存启动调度。
⑤调度启动后,在运维调度的作业监控中可以看到作业正在运行中。
![](https://static001.infoq.cn/resource/image/61/ac/615d837263719e5e4a302152d88e87ac.jpg)
运行成功的作业可以在运行历史记录中看到。
![](https://static001.infoq.cn/resource/image/0a/12/0a0a886ec06c6ffc3ab59b5153d67712.jpg)
运行失败的作业可以重跑那天的批次作业,查看日志分析失败原因。
![](https://static001.infoq.cn/resource/image/6a/fe/6a29fff74ff15f02ae275627974d22fe.jpg)
一个简易的实时告警分析平台就构建完成了。
本文转载自 华为云产品与解决方案 公众号。
原文链接:https://mp.weixin.qq.com/s/Qw_UGDc7P2FVSvJPkWHZQQ
评论