소스 검색

AMBARI-7922 Ambari Kafka charts on service page. (ababiichuk)

aBabiichuk 10 년 전
부모
커밋
2b48d33ed2

+ 11 - 1
ambari-web/app/data/service_graph_config.js

@@ -89,5 +89,15 @@ App.service_graph_config = {
 		'STORM_Executors',
 		'STORM_Executors',
 		'STORM_Topologies',
 		'STORM_Topologies',
 		'STORM_Tasks'
 		'STORM_Tasks'
-	]
+	],
+
+  'kafka': [
+    'Kafka_BrokerTopicMetrics',
+    'Kafka_Controller',
+    'Kafka_ControllerStatus',
+    'Kafka_ReplicaManager',
+    'Kafka_LogFlush',
+    'Kafka_ReplicaFetcher'
+  ]
+
 };
 };

+ 18 - 0
ambari-web/app/messages.js

@@ -1381,6 +1381,24 @@ Em.I18n.translations = {
   'services.service.info.metrics.yarn.apps.states.running': 'Running',
   'services.service.info.metrics.yarn.apps.states.running': 'Running',
   'services.service.info.metrics.yarn.apps.states.submitted': 'Submitted',
   'services.service.info.metrics.yarn.apps.states.submitted': 'Submitted',
 
 
+  'services.service.info.metrics.kafka.server.brokerTopic.title': 'Broker Topics',
+  'services.service.info.metrics.kafka.server.brokerTopic.displayNames.AllTopicsBytesOutPerSec': 'Bytes Out',
+  'services.service.info.metrics.kafka.server.brokerTopic.displayNames.AllTopicsBytesInPerSec': 'Bytes In',
+  'services.service.info.metrics.kafka.server.brokerTopic.displayNames.AllTopicsMessagesInPerSec': 'Messages In',
+  'services.service.info.metrics.kafka.server.ReplicaManager.title': 'Replica Manager',
+  'services.service.info.metrics.kafka.server.ReplicaManager.displayNames.PartitionCount': 'Partiotions count',
+  'services.service.info.metrics.kafka.server.ReplicaManager.displayNames.UnderReplicatedPartitions': 'Under Replicated Partiotions',
+  'services.service.info.metrics.kafka.server.ReplicaManager.displayNames.LeaderCount': 'Leader Count',
+  'services.service.info.metrics.kafka.controller.ControllerStats.title': 'Controller Status',
+  'services.service.info.metrics.kafka.controller.ControllerStats.displayNames.LeaderElectionRateAndTimeMs': 'Leader Election Rate And Time',
+  'services.service.info.metrics.kafka.controller.ControllerStats.displayNames.UncleanLeaderElectionsPerSec': 'Unclean Leader Election',
+  'services.service.info.metrics.kafka.controller.KafkaController.title': 'Active Controller Count',
+  'services.service.info.metrics.kafka.controller.KafkaController.displayNames.ActiveControllerCount': 'Active Controller Count',
+  'services.service.info.metrics.kafka.log.LogFlushStats.title': 'Log Flush Status',
+  'services.service.info.metrics.kafka.log.LogFlushStats.displayNames.LogFlushRateAndTimeMs': 'Log Flush Rate amd Time',
+  'services.service.info.metrics.kafka.server.ReplicaFetcherManager.title': 'Replica MaxLag',
+  'services.service.info.metrics.kafka.server.ReplicaFetcherManager.displayNames.Replica-MaxLag': 'Replica MaxLag',
+
   'services.service.info.menu.summary':'Summary',
   'services.service.info.menu.summary':'Summary',
   'services.service.info.menu.configs':'Configs',
   'services.service.info.menu.configs':'Configs',
   'services.service.info.summary.hostsRunningMonitor':'{0}/{1}',
   'services.service.info.summary.hostsRunningMonitor':'{0}/{1}',

+ 24 - 0
ambari-web/app/utils/ajax/ajax.js

@@ -855,6 +855,30 @@ var urls = {
     'mock': '',
     'mock': '',
     'testInProduction': true
     'testInProduction': true
   },
   },
+  'service.metrics.kafka.broker.topic' : {
+    'real': '/clusters/{clusterName}/services/KAFKA/components/KAFKA_BROKER?fields=metrics/kafka/server/BrokerTopicMetrics/AllTopicsBytesInPerSec/1MinuteRate[{fromSeconds},{toSeconds},{stepSeconds}],metrics/kafka/server/BrokerTopicMetrics/AllTopicsBytesOutPerSec/1MinuteRate[{fromSeconds},{toSeconds},{stepSeconds}],metrics/kafka/server/BrokerTopicMetrics/AllTopicsMessagesInPerSec/1MinuteRate[{fromSeconds},{toSeconds},{stepSeconds}]',
+    'mock': ''
+  },
+  'service.metrics.kafka.controller.KafkaController' : {
+    'real': '/clusters/{clusterName}/services/KAFKA/components/KAFKA_BROKER?fields=metrics/kafka/controller/KafkaController/ActiveControllerCount[{fromSeconds},{toSeconds},{stepSeconds}]',
+    'mock': ''
+  },
+  'service.metrics.kafka.controller.ControllerStats' : {
+    'real': '/clusters/{clusterName}/services/KAFKA/components/KAFKA_BROKER?fields=metrics/kafka/controller/ControllerStats/LeaderElectionRateAndTimeMs/1MinuteRate[{fromSeconds},{toSeconds},{stepSeconds}],metrics/kafka/controller/ControllerStats/UncleanLeaderElectionsPerSec/1MinuteRate[{fromSeconds},{toSeconds},{stepSeconds}]',
+    'mock': ''
+  },
+  'service.metrics.kafka.log.LogFlushStats' : {
+    'real': '/clusters/{clusterName}/services/KAFKA/components/KAFKA_BROKER?fields=metrics/kafka/log/LogFlushStats/LogFlushRateAndTimeMs/1MinuteRate[{fromSeconds},{toSeconds},{stepSeconds}]',
+    'mock': ''
+  },
+  'service.metrics.kafka.server.ReplicaManager' : {
+    'real': '/clusters/{clusterName}/services/KAFKA/components/KAFKA_BROKER?fields=metrics/kafka/server/ReplicaManager/PartitionCount[{fromSeconds},{toSeconds},{stepSeconds}],metrics/kafka/server/ReplicaManager/UnderReplicatedPartitions[{fromSeconds},{toSeconds},{stepSeconds}],metrics/kafka/server/BrokerTopicMetrics/ReplicaManager/LeaderCount[{fromSeconds},{toSeconds},{stepSeconds}]',
+    'mock': ''
+  },
+  'service.metrics.kafka.server.ReplicaFetcherManager' : {
+    'real': '/clusters/{clusterName}/services/KAFKA/components/KAFKA_BROKER?fields=metrics/kafka/server/ReplicaFetcherManager/Replica-MaxLag[{fromSeconds},{toSeconds},{stepSeconds}]',
+    'mock': ''
+  },
   'service.metrics.storm.nimbus': {
   'service.metrics.storm.nimbus': {
     'real': '/clusters/{clusterName}/services/STORM/components/NIMBUS?fields={metricsTemplate}',
     'real': '/clusters/{clusterName}/services/STORM/components/NIMBUS?fields={metricsTemplate}',
     'mock': ''
     'mock': ''

+ 6 - 0
ambari-web/app/views.js

@@ -221,6 +221,12 @@ require('views/main/service/info/metrics/storm/slots_number_metric');
 require('views/main/service/info/metrics/storm/executors_metric');
 require('views/main/service/info/metrics/storm/executors_metric');
 require('views/main/service/info/metrics/storm/tasks_metric');
 require('views/main/service/info/metrics/storm/tasks_metric');
 require('views/main/service/info/metrics/storm/topologies_metric');
 require('views/main/service/info/metrics/storm/topologies_metric');
+require('views/main/service/info/metrics/kafka/broker_topic');
+require('views/main/service/info/metrics/kafka/kafka_controller');
+require('views/main/service/info/metrics/kafka/controller_status');
+require('views/main/service/info/metrics/kafka/replica_manager');
+require('views/main/service/info/metrics/kafka/replica_fetcher');
+require('views/main/service/info/metrics/kafka/kafka_log_flush');
 
 
 require('views/main/service/add_view');
 require('views/main/service/add_view');
 require('views/main/service/reassign_view');
 require('views/main/service/reassign_view');

+ 61 - 0
ambari-web/app/views/main/service/info/metrics/kafka/broker_topic.js

@@ -0,0 +1,61 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+/**
+ * @class
+ *
+ * This is a view for showing Kafka_BrokerTopicMetrics
+ *
+ * @extends App.ChartLinearTimeView
+ * @extends Ember.Object
+ * @extends Ember.View
+ */
+App.ChartServiceMetricsKafka_BrokerTopicMetrics = App.ChartLinearTimeView.extend({
+  id: "service-metrics-kafka-broker-topic-metrics",
+  title: Em.I18n.t('services.service.info.metrics.kafka.server.brokerTopic.title'),
+  renderer: 'line',
+  ajaxIndex: 'service.metrics.kafka.broker.topic',
+
+  transformToSeries: function (jsonData) {
+    var seriesArray = [];
+    if (Em.get(jsonData, 'metrics.kafka.server.BrokerTopicMetrics')) {
+      for (var name in Em.get(jsonData, 'metrics.kafka.server.BrokerTopicMetrics')) {
+        var displayName = null;
+        var seriesData = Em.get(jsonData, 'metrics.kafka.server.BrokerTopicMetrics.' + name + '.1MinuteRate');
+        switch (name) {
+          case "AllTopicsBytesOutPerSec":
+            displayName = Em.I18n.t('services.service.info.metrics.kafka.server.brokerTopic.displayNames.AllTopicsBytesOutPerSec');
+            break;
+          case "AllTopicsBytesInPerSec":
+            displayName = Em.I18n.t('services.service.info.metrics.kafka.server.brokerTopic.displayNames.AllTopicsBytesInPerSec');
+            break;
+          case "AllTopicsMessagesInPerSec":
+            displayName = Em.I18n.t('services.service.info.metrics.kafka.server.brokerTopic.displayNames.AllTopicsMessagesInPerSec');
+            break;
+          default:
+            break;
+        }
+        if (seriesData != null && displayName) {
+          seriesArray.push(this.transformData(seriesData, displayName));
+        }
+      }
+    }
+    return seriesArray;
+  }
+});

+ 58 - 0
ambari-web/app/views/main/service/info/metrics/kafka/controller_status.js

@@ -0,0 +1,58 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+/**
+ * @class
+ *
+ * This is a view for showing Kafka_ControllerStatus
+ *
+ * @extends App.ChartLinearTimeView
+ * @extends Ember.Object
+ * @extends Ember.View
+ */
+App.ChartServiceMetricsKafka_ControllerStatus = App.ChartLinearTimeView.extend({
+  id: "service-metrics-kafka-controler-status-metrics",
+  title: Em.I18n.t('services.service.info.metrics.kafka.controller.ControllerStats.title'),
+  renderer: 'line',
+  ajaxIndex: 'service.metrics.kafka.controller.ControllerStats',
+
+  transformToSeries: function (jsonData) {
+    var seriesArray = [];
+    if (Em.get(jsonData, 'metrics.kafka.controller.ControllerStats')) {
+      for (var name in Em.get(jsonData, 'metrics.kafka.controller.ControllerStats')) {
+        var displayName = null;
+        var seriesData = Em.get(jsonData, 'metrics.kafka.controller.ControllerStats.' + name + '.1MinuteRate');
+        switch (name) {
+          case "LeaderElectionRateAndTimeMs":
+            displayName = Em.I18n.t('services.service.info.metrics.kafka.controller.ControllerStats.displayNames.LeaderElectionRateAndTimeMs');
+            break;
+          case "UncleanLeaderElectionsPerSec":
+            displayName = Em.I18n.t('services.service.info.metrics.kafka.controller.ControllerStats.displayNames.UncleanLeaderElectionsPerSec');
+            break;
+          default:
+            break;
+        }
+        if (seriesData != null && displayName) {
+          seriesArray.push(this.transformData(seriesData, displayName));
+        }
+      }
+    }
+    return seriesArray;
+  }
+});

+ 44 - 0
ambari-web/app/views/main/service/info/metrics/kafka/kafka_controller.js

@@ -0,0 +1,44 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+/**
+ * @class
+ *
+ * This is a view for showing Kafka_Controller
+ *
+ * @extends App.ChartLinearTimeView
+ * @extends Ember.Object
+ * @extends Ember.View
+ */
+App.ChartServiceMetricsKafka_Controller = App.ChartLinearTimeView.extend({
+  id: "service-metrics-kafka-controller-metrics",
+  title: Em.I18n.t('services.service.info.metrics.kafka.controller.KafkaController.title'),
+  renderer: 'line',
+  ajaxIndex: 'service.metrics.kafka.controller.KafkaController',
+
+  transformToSeries: function (jsonData) {
+    var seriesArray = [];
+    var seriesData = Em.get(jsonData, 'metrics.kafka.controller.KafkaController.ActiveControllerCount');
+    if (seriesData != null) {
+      var displayName = Em.I18n.t('services.service.info.metrics.kafka.controller.KafkaController.displayNames.ActiveControllerCount');
+      seriesArray.push(this.transformData(seriesData, displayName));
+    }
+    return seriesArray;
+  }
+});

+ 44 - 0
ambari-web/app/views/main/service/info/metrics/kafka/kafka_log_flush.js

@@ -0,0 +1,44 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+/**
+ * @class
+ *
+ * This is a view for showing Kafka_LogFlush
+ *
+ * @extends App.ChartLinearTimeView
+ * @extends Ember.Object
+ * @extends Ember.View
+ */
+App.ChartServiceMetricsKafka_LogFlush = App.ChartLinearTimeView.extend({
+  id: "service-metrics-kafka-log-metrics",
+  title: Em.I18n.t('services.service.info.metrics.kafka.log.LogFlushStats.title'),
+  renderer: 'line',
+  ajaxIndex: 'service.metrics.kafka.log.LogFlushStats',
+
+  transformToSeries: function (jsonData) {
+    var seriesArray = [];
+    var seriesData = Em.get(jsonData, 'metrics.kafka.log.LogFlushStats.LogFlushRateAndTimeMs.1MinuteRate');
+    if (seriesData != null) {
+      var displayName = Em.I18n.t('services.service.info.metrics.kafka.log.LogFlushStats.displayNames.LogFlushRateAndTimeMs');
+      seriesArray.push(this.transformData(seriesData, displayName));
+    }
+    return seriesArray;
+  }
+});

+ 44 - 0
ambari-web/app/views/main/service/info/metrics/kafka/replica_fetcher.js

@@ -0,0 +1,44 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+/**
+ * @class
+ *
+ * This is a view for showing Kafka_ReplicaFetcher
+ *
+ * @extends App.ChartLinearTimeView
+ * @extends Ember.Object
+ * @extends Ember.View
+ */
+App.ChartServiceMetricsKafka_ReplicaFetcher = App.ChartLinearTimeView.extend({
+  id: "service-metrics-kafka-replica-fetcher-metrics",
+  title: Em.I18n.t('services.service.info.metrics.kafka.server.ReplicaFetcherManager.title'),
+  renderer: 'line',
+  ajaxIndex: 'service.metrics.kafka.server.ReplicaFetcherManager',
+
+  transformToSeries: function (jsonData) {
+    var seriesArray = [];
+    var seriesData = Em.get(jsonData, 'metrics.kafka.server.ReplicaFetcherManager.Replica-MaxLag');
+    if (seriesData != null) {
+      var displayName = Em.I18n.t('services.service.info.metrics.kafka.server.ReplicaFetcherManager.displayNames.Replica-MaxLag');
+      seriesArray.push(this.transformData(seriesData, displayName));
+    }
+    return seriesArray;
+  }
+});

+ 61 - 0
ambari-web/app/views/main/service/info/metrics/kafka/replica_manager.js

@@ -0,0 +1,61 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+/**
+ * @class
+ *
+ * This is a view for showing Kafka_BrokerTopicMetrics
+ *
+ * @extends App.ChartLinearTimeView
+ * @extends Ember.Object
+ * @extends Ember.View
+ */
+App.ChartServiceMetricsKafka_ReplicaManager = App.ChartLinearTimeView.extend({
+  id: "service-metrics-kafka-replica-manager-metrics",
+  title: Em.I18n.t('services.service.info.metrics.kafka.server.ReplicaManager.title'),
+  renderer: 'line',
+  ajaxIndex: 'service.metrics.kafka.server.ReplicaManager',
+
+  transformToSeries: function (jsonData) {
+    var seriesArray = [];
+    if (Em.get(jsonData, 'metrics.kafka.server.ReplicaManager')) {
+      for (var name in Em.get(jsonData, 'metrics.kafka.server.ReplicaManager')) {
+        var displayName = null;
+        var seriesData = Em.get(jsonData, 'metrics.kafka.server.ReplicaManager.' + name);
+        switch (name) {
+          case "LeaderCount":
+            displayName = Em.I18n.t('services.service.info.metrics.kafka.server.ReplicaManager.displayNames.LeaderCount');
+            break;
+          case "UnderReplicatedPartitions":
+            displayName = Em.I18n.t('services.service.info.metrics.kafka.server.ReplicaManager.displayNames.UnderReplicatedPartitions');
+            break;
+          case "PartitionCount":
+            displayName = Em.I18n.t('services.service.info.metrics.kafka.server.ReplicaManager.displayNames.PartitionCount');
+            break;
+          default:
+            break;
+        }
+        if (seriesData != null && displayName) {
+          seriesArray.push(this.transformData(seriesData, displayName));
+        }
+      }
+    }
+    return seriesArray;
+  }
+});