数据预处理-系统监控web界面-系统运行情况数据来源|学习笔记

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 快速学习数据预处理-系统监控web界面-系统运行情况数据来源

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop框架搭建)第四阶段数据预处理-系统监控web界面-系统运行情况数据来源】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/672/detail/11679


数据预处理-系统监控web界面-系统运行情况数据来源


系统功能运行情况

实时流量转发情况,系统功能运行情况出现,个链路流量转发情况这几个模块数据如何得来。首先是系统功能运行情况:

如图所示:

image.png

运行正常为蓝色,异常为红色。

数据如何传输,如何判别是否正常,过程如下:

找到 function 。代码如下:

image.png

其中调用 ajax 调后台:systemMonitoring,找到该 controller

如下图所示位置

image.png

双击打开,找到其中发现如下图所示:

image.png

发现 systemMonitoring ,找到 systemFunctionInfo 。如下:

image.png

这里获取系统功能运行情况。

实例 list  systemFunctionInfo , 点击 list :

List<systemFunctionInfo> systemFunctionInfos=new ArrayList<~>();

其中为展示前端用到的数据:ID  state(状态)  modelName  recordTime

第二行代码:

Map<string,object> map =new HashMap<string,object>();这行代码后续了解。

List<Jsonvo> jVos = Trafficutil.getTrafficInfobyMinute( minutes: -2,

Constants.CSANTI_MONITOR_DP);

//Trafficutil里有 getTrafficInfobyMinute 方法。传递两个参数,一个是-2,一个是 CSANTI_MONITOR_DP(读取数据时 key 的前缀)。进入数据写入程序:key 是 DP ,值为 value。

点击 getTrafficInfobyMinute:

Public static List<JsonVO>getTrafficInfobyMinute(int minutes,String key){

//redis内所有的匹配上的数据

List<JsonVO> jsonVOs = trafficInfo(key);

List<JsonVO> sList=new ArrayList<~>();

minutes 中是一个-2,key 是前缀,第一个 key 的前缀到第二个 key 中,key又传到 trafficInfo 方法中。

点击进入 trafficInfo 方法中:

Public static List<JsonVO>trafficInfo(String strFlage){

Jediscluster jediscluster =JedisConnectionUtil.getJediscluster();

//strFlage就是刚才传递的前缀,实例化jediscluster 的JedisConnectionUtil.getJediscluster,获得一个集群

Set<string> keyset = JedisConnectionUtil.keys(jediscluster, pattern: strFlage + "*");

//加一个"*"组成前缀,把 jediscluster 集群传递到 JedisConnectionUtil.keys 中,传递两个参数:jediscluster, pattern: strFlage + "*"。

点击 keys,显示代码:

DUOIIC SLdLL c ireesetestring> keys jedisciuster jc, string pattern)   //jedisciuster jc为集群,pattern 为前缀。

Treeset<string> keys=new Treeset<>(();Map<string,JedisPool> clusterNodes=jcgetclusterNodes(); for(string k :clusterNodes.keyset()){

JedisPool jp=clusterNodes.get(k);

Jedis jedis =jp.getResource();

try {

keys.addAll(jedis.keys(pattern));

} catch(Exception e){

e.printstackTrace();

} finally{

//用完一定要close链接!!! jedis.close();

}

return keys;

代码表示:代集群实例了一个集群的所有节点,遍历了每一个节点拿到 clusterNodes,实例 jedis,去 jediskeys 找到 pattern(刚刚传入的前缀),所有就拿到了以 pattern 为节点的所有 key。

如下图所示:就拿到了 DP 开头的所有 key,

image.png

然后 keys.addAll(jedis.keys(pattern))。将拿到的所有 DP 开头的 key 添加到 keys 里。最后 return 返回。

trafficutil.java 中:

public static List<Jsonvo> trafficInfo(string strFlage){

JedisCluster jedisCluster=JedisConnectionUtil.getJediscluster();

Set<string> keyset =JedisConnectionUtil.keys(iedisCluster, pattern: strFlage +“*") List<Jsonvo> isonVOs=new ArrayList<~>();

//Keyset 返回的所有DP 开头的 key 。

for(string str : keyset){  

//keyset为刚才读取的所有DP 开头的前缀

Jsonvo jsonvo=new JsonVO();

string value=jediscluster.get(str);

//jedis的集群节点,str 其中的某个key。集群 get  key 就拿到这个 key 的值:value

jsonvo=JsonResolveUtil.resolveJson(value);

//JsonResolveUtil.resolveJson方法将 value 字符串转化为 jsonvo 类型

if(null != jsonVO){

jsonvo.setkey(str);

jsonVOs.add(jsonVo);

}

点击 jsonvo:

public class JsonVO implements Comparable<Jsonvo>java.io.Serializable{

private string  key;       //redis 系统内的key

private string costtime;    //时间差任务运行时间(endrstart)

private Map<string,object> serversCountMap;//链路统计中的结果

private string applicationId;  //appID

private string countperMillis;   //speed

private string applicationUniqueName;  //appname

private string endtime;   //任务运行结尾时间

private string sourceCount;    //一批次数据数据总量

上述代码即写入数据,就是前端需要的数据,后端准备前端需要的数据。后端和前端约定,要用哪些数据,组装需要的数据,上述代码封装数据。

以下代码为写入数据:

val Maps = Map(

"costTime" -> runTime.tostring,

"serverscountMap" -> serverCount,

"applicationId" -> appid.tostring,

"countperMillis"-> runspeed.tostring,

"applicationUniqueName"-> appName.tostring,

"endTime" -> endTimes,

"sourceCount" -> dataCount.tostring

其中 costTime 是 kry,runTime 是 value,将这些数据左侧的作为 key,而它把这些读的时候以 key 作为读的数据,

回到 jsonvo=JsonResolveUtil.resolveJson(value);

if(null != jsonVO){

jsonvo.setkey(str);

jsonVOs.add(jsonVo);

}

value 是字符串,jsonVO 是接收 jsonVO 的 class,

JsonResolveUtil.resolveJson方法的作用是,输入一个字符串输出是 jsonVO,所以这个方法一定是将字符串转化成了 jsonVO 类型。

jsonVOs 不空,走代码jsonvo.setkey(str)   , jsonVO需要用 key 。进行设置后,jsonVOs 用来接收,存储jsonVo 的例子。

到目前为止,在 key 中获取了所有以 DP 开头的前缀数据。

public static List<JsonVO> getTrafficInfoByMinute(int

minutes,string key){

//redis 内所有的匹配上的数据,

List<Jonvo> jsonVOs=trafficInfo(key); //返回的所有的数据库的value 值。 转化为 Jsonvo 的结果。

List<]sonVo> sList = new ArrayList<~>();//获取当前时间

string timeE =Timeutil.getCurrTime();

//获取 minutes 分钟前的时间,获取-2。//timeE 当前系统时间。

string timeS =TimeUtil.getTimeByMinute(TimeUtil.yyyy MM DDHH24miss(timeE), minutes)

//选取 minutes 分钟内的数据

//获取一个时间范围,开始时间和结束时间,2分钟之前和当前时间。

for(Jsonvo jsonvo :jsonVOs){

//比较时间大小,并对返回的int值做判断

Int i =jsonvo.getEndTime().compareTo(times);

//getEndTime 当前结束时间,转化为 jsonvo , 即获取到的数据结束时间,times 为2分钟之前,compareTo 方法将数据时间与2分钟之前的时间点进行对比。返回的结果前面的值大就大于0,小就小于0。

int j=timeE.compareTo(jsonvo.getEndTime());

//将当前时间与数据结束时间对比,结束时间大就大于0,小就小于0。

if(i>0 && j>0){

//数据时间大于开始时间,结束时间大于数据时间。

sList.add(jsonVO);}

//时间大于数据时间,数据的时间是大约两分钟之前,小于当前时间,如果数据在最近的两分钟之内,以当地时间为准,在最近的两分钟时间之内,把 jsonVO 的 class 这个对象,添加到 sList。

//sList是添加或者存储两分钟时间之内的 jsonVO 值。

}

return slist;

}

回到最初打开的 controller 中,代码如下:

List<Jsonvo> jVos = Trafficutil.getTrafficInfobyMinute( minutes: -2,

Constants.CSANTI_MONITOR_DP);

//List存储的所有DP 开头的所有数据。然后判断在2分钟内有没有数据。

if(nu]l==jvos || o==jvos.size()){ //如果等于空或者大小等于0

map.put("sign",1);  //则map.put 一个 key ,值为1 ,map存储两分钟内的数据。

}

else{  

map.put("sign", 0);    //2分钟之内有数据就为0

}

catch(Exception e) {

logger.info(e.getMessage());

map.put("result","失败");

map.put("sign",1);

return map;

}

然后返回到ajax调用的 systemMonitoring 的方法,代码如下:

loadsystemFunctionInfo:function(){

var content ='';

$.ajax({

url :ctx+'/systemMonitoring/getsystemFunctionInfo'

type : 'get',

dataType : 'json'

success:function(data){

if(data.sign == 1){

//2分钟内没有数据就是异常css styIe="background:#f94325;"。

document.getElementById( elementld:dataHandl').style.background="#f94325";  

//数据处理模块的唯一标识,颜色设为"#f94325";

}

else if(data.sign==0)

{

//2分钟内有数据就是正常css style="background:#58aea5;"

document.getElementById( elementld:'dataHandl').style.background="#58aea5";  

//数据处理模块的唯一标识,颜色设为"#58aea5"。

}

}

});

即先拿到所有的 DP 数据,然后传入2分钟时间范围,

即2分钟内有这个数据,值为1,颜色为"#f94325",没有,值为0 ,颜色为"#58aea5"。

image.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
42 3
|
18天前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
如何构建一个优秀的高性能、高可靠的应用系统对每一个开发者至关重要
23 2
|
21天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
35 2
|
25天前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
39 3
|
1月前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
构建互联网高性能WEB系统经验总结
58 16
|
1月前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
64 2
|
2月前
|
前端开发 开发者 容器
构建响应式Web界面:Flexbox与Grid布局的深度解析
【10月更文挑战第11天】本文深入解析了CSS3中的Flexbox和Grid布局,探讨了它们的特点、应用场景及使用方法。Flexbox适用于一维布局,如导航栏;Grid布局则适用于二维布局,如复杂网格。通过示例代码和核心属性介绍,帮助开发者灵活构建响应式Web界面。
58 5
|
1月前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
45 0
|
2月前
|
存储 前端开发 API
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
108 0
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
147 3