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

  
  

<强>背景:
公司自建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 ();
  ListhostLists=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
  */公共静态ListgetHostMetrics(开始时间查询字符串,字符串,字符串endTime)抛出ParseException {
  TimeSeriesResourceV11 TimeSeriesResourceV11=apiRoot.getTimeSeriesResource ();
  ApiTimeSeriesResponseList responseList=timeSeriesResourceV11。queryTimeSeries(查询、开始时间endTime);
  ListapiTimeSeriesResponseList=responseList.getResponses ();
  List指标=formatApiTimeSeriesResponseList (apiTimeSeriesResponseList);
  回报指标;
  }
  
  公共静态ListformatApiTimeSeriesResponseList (ListapiTimeSeriesResponseList)抛出ParseException {
  List指标=new ArrayList ();
  DateUtils DateUtils=new DateUtils ();
  (ApiTimeSeriesResponse ApiTimeSeriesResponse: apiTimeSeriesResponseList) {
  ListdataList=new ArrayList ();
  ListapiTimeSeriesResponseLists=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机房有关技术指标获取