<强>背景:强>
公司自建IDC机房,基于IDC机房构建大数据集群;需要对集群资源进行监控,集群采用的是鼎晖集群,采集主要分两块进行:HDFS和纱相关的指标进行采集
IDC机器自身的指标进行采集
<强>注意强>:也许有人会有疑惑,CM界面已经提供了监控的图表,为什么还需要自己进行展示。原因在于,这些信息需要集成到内部的数据平台上面去,做成对应的数据报表,可视化的方式展示在自己的数据平台上实现思路大致可以分为两种:
<代码>使用厘米所提供的Java API去获取 使用厘米提供的REST API去获取代码>其实两者本质上是一样的,厘米所提供的Java API也是按照REST API那套来实现的,两者是保持一致的
引用>核心代码如下:
<代码类="语言java ">公共类IdcHostResource { 私有静态最终日志记录器=LoggerFactory.getLogger (IdcHostResource.class); 静态RootResourceV18 apiRoot;//TODO……写死了,需要改进 静态{ apiRoot=new ClouderaManagerClientBuilder () .withHost(“厘米ip”) .withPort (7180) .withUsernamePassword(“用户”、“passwd”) .build () .getRootV18 (); }/* * *固定获取主机的基本资源信息 */公共静态ListgetAllHostResource () { List 主机=new ArrayList (); HostsResourceV10 HostsResourceV10=apiRoot.getHostsResource (); List hostLists=hostsResourceV10.readHosts (DataView.SUMMARY) .getHosts (); LOGGER.info(“总”+ hostLists.size() +“主机”); (ApiHost hostList: hostLists) { IdcHostBasicInfo主机=formatHost (hostsResourceV10.readHost (hostList.getHostId ())); LOGGER.info(“主机名:”+ host.getHostName ()); LOGGER.info(“宿主健康总结:”+ host.gethostHealthSummary ()); LOGGER.info(“主机物理内存:”+ host.getTotalPhysMemBytes ()); hosts.add(主机); } 返回的主机; } 公共静态IdcHostBasicInfo formatHost (ApiHost ApiHost) { IdcHostBasicInfo IdcHostBasicInfo=new IdcHostBasicInfo (); .toString idcHostBasicInfo.sethostHealthSummary (apiHost.getHealthSummary () ()); idcHostBasicInfo.setHostName (apiHost.getHostname ()); idcHostBasicInfo.setTotalPhysMemBytes (apiHost.getTotalPhysMemBytes ()); 返回idcHostBasicInfo; }/* * *通过tsquery来动态获取对应的指标信息 * * @param查询 * @param开始时间 * @param endTime * @return */公共静态List getHostMetrics(开始时间查询字符串,字符串,字符串endTime)抛出ParseException { TimeSeriesResourceV11 TimeSeriesResourceV11=apiRoot.getTimeSeriesResource (); ApiTimeSeriesResponseList responseList=timeSeriesResourceV11。queryTimeSeries(查询、开始时间endTime); List apiTimeSeriesResponseList=responseList.getResponses (); List 指标=formatApiTimeSeriesResponseList (apiTimeSeriesResponseList); 回报指标; } 公共静态List formatApiTimeSeriesResponseList (List apiTimeSeriesResponseList)抛出ParseException { List 指标=new ArrayList (); DateUtils DateUtils=new DateUtils (); (ApiTimeSeriesResponse ApiTimeSeriesResponse: apiTimeSeriesResponseList) { List dataList=new ArrayList (); List apiTimeSeriesResponseLists=apiTimeSeriesResponse.getTimeSeries (); (ApiTimeSeries ApiTimeSeries: apiTimeSeriesResponseLists) { LOGGER.info(“查询sql是:”+ apiTimeSeries.getMetadata () .getExpression ()); IdcMetricInfo指标=new IdcMetricInfo (); .getMetricName metric.setMetricName (apiTimeSeries.getMetadata () ()); .getEntityName metric.setEntityName (apiTimeSeries.getMetadata () ()); .toString .getStartTime metric.setStartTime (apiTimeSeries.getMetadata () () ()); .toString .getEndTime metric.setEndTime (apiTimeSeries.getMetadata () () ()); (ApiTimeSeriesData ApiTimeSeriesData: apiTimeSeries.getData ()) { MetricData data=https://www.yisu.com/zixun/new MetricData ();//在数据中插入EntityName,避免重复数据的产生 .getEntityName data.seHostname (apiTimeSeries.getMetadata () ());//CM默认得到的时间格式为EEE嗯dd HH: mm: ss 'CST yyyy,转换时间格式为yyyy-MM-dd HH: mm: ss .toString data.setTimestamp (dateUtils.parse (apiTimeSeriesData.getTimestamp () ())); data.setType (apiTimeSeriesData.getType ()); data.setValue (apiTimeSeriesData.getValue ()); dataList.add(数据); } metric.setData (dataList); metrics.add(指标); } } 回报指标; } 你懂集群监控么?(一)——IDC机房有关技术指标获取