你懂集群monitoring么?(一)—— IDC机房有关技术指标获取
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,背景:公司自建IDC机房,基于IDC机房构建大数据集群;需要对集群资源进行监控,集群采用的是CDH集群,采集主要分两块进行:HDFS和YARN相关的指标进行采集IDC机器自身的指标进行采集注意: 也许
千家信息网最后更新 2025年02月02日你懂集群monitoring么?(一)—— IDC机房有关技术指标获取
背景:
公司自建IDC机房,基于IDC机房构建大数据集群;需要对集群资源进行监控,集群采用的是CDH集群,采集主要分两块进行:HDFS和YARN相关的指标进行采集
IDC机器自身的指标进行采集
注意: 也许有人会有疑惑,CM界面已经提供了监控的图表,为什么还需要自己进行展示。原因在于,这些信息需要集成到内部的数据平台上面去,做成对应的数据报表,可视化的方式展示在自己的数据平台上实现思路大致可以分为两种:
使用CM所提供的Java API去获取 使用CM提供的REST API去获取
其实两者本质上是一样的,CM所提供的Java API也是按照REST API那套来实现的,两者是保持一致的
核心代码如下:
public class IdcHostResource { private static final Logger LOGGER = LoggerFactory.getLogger(IdcHostResource.class);static RootResourceV18 apiRoot;// TODO... 写死了,需要改进static { apiRoot = new ClouderaManagerClientBuilder() .withHost("cm ip") .withPort(7180) .withUsernamePassword("user", "passwd") .build() .getRootV18();}/** * 固定获取Host的基本资源信息 */public static List getAllHostResource() { List hosts = new ArrayList(); HostsResourceV10 hostsResourceV10 = apiRoot.getHostsResource(); List hostLists = hostsResourceV10.readHosts(DataView.SUMMARY).getHosts(); LOGGER.info("Total" + hostLists.size() + "Host"); for (ApiHost hostList : hostLists) { IdcHostBasicInfo host = formatHost(hostsResourceV10.readHost(hostList.getHostId())); LOGGER.info("Host Name:" + host.getHostName()); LOGGER.info("Host Health Summary:" + host.gethostHealthSummary()); LOGGER.info("Host Physical Memory:" + host.getTotalPhysMemBytes()); hosts.add(host); } return hosts;}public static IdcHostBasicInfo formatHost(ApiHost apiHost) { IdcHostBasicInfo idcHostBasicInfo = new IdcHostBasicInfo(); idcHostBasicInfo.sethostHealthSummary(apiHost.getHealthSummary().toString()); idcHostBasicInfo.setHostName(apiHost.getHostname()); idcHostBasicInfo.setTotalPhysMemBytes(apiHost.getTotalPhysMemBytes()); return idcHostBasicInfo;}/** * 通过tsquery来动态获取对应的metrics info * * @param query * @param startTime * @param endTime * @return */public static List getHostMetrics(String query, String startTime, String endTime) throws ParseException { TimeSeriesResourceV11 timeSeriesResourceV11 = apiRoot.getTimeSeriesResource(); ApiTimeSeriesResponseList responseList = timeSeriesResourceV11.queryTimeSeries(query, startTime, endTime); List apiTimeSeriesResponseList = responseList.getResponses(); List metrics = formatApiTimeSeriesResponseList(apiTimeSeriesResponseList); return metrics;}public static List formatApiTimeSeriesResponseList(List apiTimeSeriesResponseList) throws ParseException { List metrics = new ArrayList(); DateUtils dateUtils = new DateUtils(); for (ApiTimeSeriesResponse apiTimeSeriesResponse : apiTimeSeriesResponseList) { List dataList = new ArrayList(); List apiTimeSeriesResponseLists = apiTimeSeriesResponse.getTimeSeries(); for (ApiTimeSeries apiTimeSeries : apiTimeSeriesResponseLists) { LOGGER.info("query sql is: " + apiTimeSeries.getMetadata().get_Expression()); IdcMetricInfo metric = new IdcMetricInfo(); metric.setMetricName(apiTimeSeries.getMetadata().getMetricName()); metric.setEntityName(apiTimeSeries.getMetadata().getEntityName()); metric.setStartTime(apiTimeSeries.getMetadata().getStartTime().toString()); metric.setEndTime(apiTimeSeries.getMetadata().getEndTime().toString()); for (ApiTimeSeriesData apiTimeSeriesData : apiTimeSeries.getData()) { MetricData data = new MetricData(); // 在Data中插入EntityName,避免重复数据的产生 data.seHostname(apiTimeSeries.getMetadata().getEntityName()); // CM默认得到的时间格式为 EEE MMM dd HH:mm:ss 'CST' yyyy,转换时间格式为 yyyy-MM-dd HH:mm:ss data.setTimestamp(dateUtils.parse(apiTimeSeriesData.getTimestamp().toString())); data.setType(apiTimeSeriesData.getType()); data.setValue(apiTimeSeriesData.getValue()); dataList.add(data); } metric.setData(dataList); metrics.add(metric); } } return metrics;}
注意:
代码中涉及到的DateUtils需要自己去进行实现
通过这部分代码可以通过传入tsquery的方式去获取对应的idc集群的metric信息;接下来的代码我们只需要通过ServiceImpl去实现对应的监控指标的获取代码即可
如果想通过cm api与spring boot整合的,这其中还会遇到2个问题:
依赖冲突问题,主要表现在jackson与cxf的冲突;通过排jar包的方式可以解决正则解析错误,该问题为cm使用过程中的一个坑,目前仍在排查当中,具体表现形式为:
这里面有个空格,因此在编译的过程中直接会报正则解析的错误;但是我们可以发现在cm 6.x的api版本中已经没有这个问题了:
因此可以直接升级api的版本来解决该问题,但是随之带来的问题就是与线上运行的cm版本不一致(线上的版本为5.13.2),因此对于如何解决仍然需要思考;不过经过测试发现,使用cm 6.x版本的api,对于目前线上那套版本的相关指标并不影响
问题
集群
代码
数据
版本
指标
信息
方式
监控
机房
一致
平台
时间
格式
正则
资源
过程
错误
冲突
接下来
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数字媒体网络技术专业
网络安全和文明上网的海报
数据库维护公司
政法委十九的网络安全总结
群英云服务器初始密码
软件开发集成化
计算机网络技术能力是什么
长春浩瀚星辰网络技术有限公司
软件开发电脑的cpu
mac怎么装数据库
php数据库取值重复
计算机三级网络技术讲解
红客网络技术有限公司
浪潮5270m5服务器管理地址
关服务器吗
网络安全手抄报字少一点的
沈阳国安网络技术有限公司
联想收购服务器
软件开发 咨询
西藏聚酒缘互联网科技有限公司
绚奕网络技术有限公司
空客导航数据库升级
魔兽世界玛维影歌服务器地址
手机软件开发用什么笔记本电脑
tcga数据库写论文
网络安全的宣传词
办公用品管理系统服务器版
连云港网络安全工程师
pc代理服务器出现
数据库的安全检查表