/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.yarn.server.nodemanager.metrics; import org.apache.hadoop.metrics2.MetricsSystem; import org.apache.hadoop.metrics2.annotation.Metric; import org.apache.hadoop.metrics2.annotation.Metrics; import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.metrics2.lib.MutableCounterInt; import org.apache.hadoop.metrics2.lib.MutableGaugeInt; import org.apache.hadoop.metrics2.source.JvmMetrics; import org.apache.hadoop.yarn.api.records.Resource; @Metrics(about="Metrics for node manager", context="yarn") public class NodeManagerMetrics { @Metric MutableCounterInt containersLaunched; @Metric MutableCounterInt containersCompleted; @Metric MutableCounterInt containersFailed; @Metric MutableCounterInt containersKilled; @Metric("# of initializing containers") MutableGaugeInt containersIniting; @Metric MutableGaugeInt containersRunning; @Metric("Current allocated memory in GB") MutableGaugeInt allocatedGB; @Metric("Current # of allocated containers") MutableGaugeInt allocatedContainers; @Metric MutableGaugeInt availableGB; public static NodeManagerMetrics create() { return create(DefaultMetricsSystem.instance()); } static NodeManagerMetrics create(MetricsSystem ms) { JvmMetrics.create("NodeManager", null, ms); return ms.register(new NodeManagerMetrics()); } // Potential instrumentation interface methods public void launchedContainer() { containersLaunched.incr(); } public void completedContainer() { containersCompleted.incr(); } public void failedContainer() { containersFailed.incr(); } public void killedContainer() { containersKilled.incr(); } public void initingContainer() { containersIniting.incr(); } public void endInitingContainer() { containersIniting.decr(); } public void runningContainer() { containersRunning.incr(); } public void endRunningContainer() { containersRunning.decr(); } public void allocateContainer(Resource res) { allocatedContainers.incr(); allocatedGB.incr(res.getMemory() / 1024); availableGB.decr(res.getMemory() / 1024); } public void releaseContainer(Resource res) { allocatedContainers.decr(); allocatedGB.decr(res.getMemory() / 1024); availableGB.incr(res.getMemory() / 1024); } public void addResource(Resource res) { availableGB.incr(res.getMemory() / 1024); } }