你懂集群monitoring么?(一)—— IDC机房有关技术指标获取
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,背景:公司自建IDC机房,基于IDC机房构建大数据集群;需要对集群资源进行监控,集群采用的是CDH集群,采集主要分两块进行:HDFS和YARN相关的指标进行采集IDC机器自身的指标进行采集注意: 也许
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
Q绑查询16e数据库 网盘
蜀山深信服网络安全认证
数据库主机怎么填
顺义区技术软件开发服务咨询报价
软件开发工作日报模板
简普科技和中国互联网
驱动开发和软件开发的不同
中企动力邮箱服务器
网络安全人人有责的顺口溜
网络安全属于什么管理
我的世界速建服务器ip
虹口区网络技术开发质量保证
炫我集群管理软件的服务器
数据库视图题库
禄劝专业性软件开发价格信息
网络技术的技术开发发展现状
网络安全实践活动家长体会
网络技术哪种最好
广州天迹网络技术有限公司
网络安全大事件 2021 新民
软件开发质量评估系统
大学招聘软件开发人员
外国资源数据库有哪些
深圳华宇互联网科技贵阳分公司
云数据库rds的低性能模式
脱产网络安全专业硕士
三级小说软件开发
我的世界怎么转让服务器地皮
服务器硬盘主流容量
吴忠科技型网站服务器