diff --git a/apps/nodemetrics/mgr/src/main/java/org/onosproject/nodemetrics/cli/ShowNodeCpuUsageCommand.java b/apps/nodemetrics/mgr/src/main/java/org/onosproject/nodemetrics/cli/ShowNodeCpuUsageCommand.java
new file mode 100644
index 0000000..a122791
--- /dev/null
+++ b/apps/nodemetrics/mgr/src/main/java/org/onosproject/nodemetrics/cli/ShowNodeCpuUsageCommand.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed 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.onosproject.nodemetrics.cli;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.cluster.NodeId;
+import org.onosproject.nodemetrics.NodeCpu;
+import org.onosproject.nodemetrics.NodeMetricsService;
+
+import java.util.Collection;
+import java.util.Objects;
+
+/**
+ * Lists cpu usage across nodes.
+ */
+@Command(scope = "onos", name = "node-cpu",
+        description = "Lists all node cpu utilization")
+public class ShowNodeCpuUsageCommand extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "nodeId", description = "Node identity",
+            required = false, multiValued = false)
+    String nodeId = null;
+    private NodeMetricsService nodeService = AbstractShellCommand
+            .get(NodeMetricsService.class);
+
+    @Override
+    protected void execute() {
+        if (nodeId != null) {
+            NodeCpu cpu = nodeService.cpu(NodeId.nodeId(nodeId));
+            if (Objects.nonNull(cpu)) {
+                print("CPU usage : %s ", cpu);
+            } else {
+                print("Node %s doesn't exists", nodeId);
+            }
+        } else {
+            Collection<NodeCpu> cpu = nodeService.cpu().values();
+            printCpuUsage(cpu);
+        }
+    }
+
+    private void printCpuUsage(Collection<NodeCpu> cpuList) {
+        cpuList.forEach(cpu -> print("%s", cpu));
+    }
+}
+
