你懂集群monitoring么?(一)—— IDC机房有关技术指标获取

网友投稿 276 2022-11-27

你懂集群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().getExpression()); 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使用过程中的一个坑,目前仍在排查当中,具体表现形式为:

因此可以直接升级api的版本来解决该问题,但是随之带来的问题就是与线上运行的cm版本不一致(线上的版本为5.13.2),因此对于如何解决仍然需要思考;不过经过测试发现,使用cm 6.x版本的api,对于目前线上那套版本的相关指标并不影响

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:虚拟经纱张力的测试仪技术
下一篇:德国西克OD5000激光三角测量法位移传感器有什么特点和应用?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~