[ https://issues.apache.org/jira/browse/HBASE-20654?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16493514#comment-16493514 ]
liubangchen commented on HBASE-20654: ------------------------------------- Expose metrics to tag of Hadoop:service=HBase,name=Master,sub=AssignmentManager: {code:json} "beans" : [ { "name" : "Hadoop:service=HBase,name=Master,sub=AssignmentManager", "modelerType" : "Master,sub=AssignmentManager", "tag.regionsOffline" : "Namespace_tablename_regionname,Namespace_tablename_regionname", "tag.regionsOpening" : "", "tag.regionsOpen" : "", "tag.regionsClosing" : "", "tag.regionsClosed" : "", "tag.regionsSplitting" : "", "tag.regionsSplit" : "", "tag.regionsFailedOpen" : "", "tag.regionsFailedClose" : "", "tag.regionsMerging" : "", "tag.regionsMerged" : "", "tag.regionsSplittingNew" : "", "ritCount" : 0 } ] } {code} 1. Add metrics tags, add attributes to interface MetricsAssignmentManagerSource {code:java} String REGIONS_STATE_OFFLINE="regionsOffline"; String REGIONS_STATE_OFFLINE_DESC="Regions with state OFFLINE"; String REGIONS_STATE_OPENING="regionsOpening"; String REGIONS_STATE_OPENING_DESC="Regions with state OPENING"; String REGIONS_STATE_OPEN="regionsOpen"; String REGIONS_STATE_OPEN_DESC="Regions with state OPEN"; String REGIONS_STATE_CLOSING="regionsClosing"; String REGIONS_STATE_CLOSING_DESC="Regions with state CLOSING"; String REGIONS_STATE_CLOSED="regionsClosed"; String REGIONS_STATE_CLOSED_DESC="Regions with state CLOSED"; String REGIONS_STATE_SPLITTING="regionsSplitting"; String REGIONS_STATE_SPLITTING_DESC="Regions with state SPLITTING"; String REGIONS_STATE_SPLIT="regionsSplit"; String REGIONS_STATE_SPLIT_DESC="Regions with state SPLIT"; String REGIONS_STATE_FAILED_OPEN="regionsFailedOpen"; String REGIONS_STATE_FAILED_OPEN_DESC="Regions with state failed open"; String REGIONS_STATE_FAILED_CLOSE="regionsFailedClose"; String REGIONS_STATE_FAILED_CLOSE_DESC="Regions with state failed close"; String REGIONS_STATE_MERGING="regionsMerging"; String REGIONS_STATE_MERGING_DESC="Regions with state merging"; String REGIONS_STATE_MERGED="regionsMerged"; String REGIONS_STATE_MERGED_DESC="Regions with state merged"; String REGIONS_STATE_SPLITTING_NEW="regionsSplittingNew"; String REGIONS_STATE_SPLITTING_NEW_DESC="Regions with state"; {code} 2. Modify class MetricsAssignmentManagerSourceImpl {code:java} @Override public void getMetrics(MetricsCollector metricsCollector, boolean all) { MetricsRecordBuilder metricsRecordBuilder = metricsCollector.addRecord(metricsName); if(metricsRecordBuilder!=null){ metricsRecordBuilder.tag(Interns.info(REGIONS_STATE_OFFLINE,REGIONS_STATE_OFFLINE_DESC),metricsAssignmentWrapper.getOfflineRegions()); .... metricsRegistry.snapshot(metricsRecordBuilder, all); } {code} 3. Add new config is to control the number of region names in each region state. How about naming the config: hbase.assignment.metric.maxmum.regions.in.each.state 4. Get metrics by class MetricsAssignmentWrapperImpl {code:java} private String getRegionsListByState(RegionState.State state) { List<String> regions = new LinkedList<String>(); RegionStates rstates = this.am.getRegionStates(); if (rstates == null) { return ""; } List<RegionStates.RegionStateNode> list = rstates.getRegionsInTransition(); if (list == null || list.isEmpty()) { return ""; } List<RegionStates.RegionStateNode> metalist = new LinkedList<RegionStates.RegionStateNode>(); List<RegionStates.RegionStateNode> datalist = new LinkedList<RegionStates.RegionStateNode>(); int i = 0; for (RegionStates.RegionStateNode rsn : list) { if (rsn.getTable().isSystemTable()) { metalist.add(rsn); } else { datalist.add(rsn); } } datalist.addAll(metalist); for (RegionStates.RegionStateNode rsn : datalist) { if (rsn.getState().equals(state)) { regions.add(String.format("%s_%s_%s", rsn.getTable().getNamespaceAsString(), rsn.getTable().getNameAsString(), rsn.getRegionInfo() == null ? "" : rsn.getRegionInfo().getEncodedName())); i++; } if (i > this.am.getMaxnumRegionInEachState()) { break; } } return StringUtils.join(regions, ","); } {code} [~yuzhih...@gmail.com] Can you give me some suggestions? Let me submit a patch. you can help me review it. thanks. > Expose regions in transition thru JMX > ------------------------------------- > > Key: HBASE-20654 > URL: https://issues.apache.org/jira/browse/HBASE-20654 > Project: HBase > Issue Type: Improvement > Reporter: Ted Yu > Assignee: liubangchen > Priority: Major > > Currently only the count of regions in transition is exposed thru JMX. > Here is a sample snippet of the /jmx output: > {code} > { > "beans" : [ { > ... > }, { > "name" : "Hadoop:service=HBase,name=Master,sub=AssignmentManager", > "modelerType" : "Master,sub=AssignmentManager", > "tag.Context" : "master", > ... > "ritCount" : 3 > {code} > It would be desirable to expose region name, state for the regions in > transition as well. > We can place configurable upper bound on the number of entries returned in > case there're a lot of regions in transition. -- This message was sent by Atlassian JIRA (v7.6.3#76005)