Class: HBaseMonitor
- Inherits:
-
Rubix::ClusterMonitor
- Object
- Rubix::Monitor
- Rubix::ChefMonitor
- Rubix::ClusterMonitor
- HBaseMonitor
- Defined in:
- lib/rubix/examples/hbase_monitor.rb
Constant Summary collapse
- CLUSTER_HOSTGROUPS =
Hostgroups for clusters & hosts that need to be created.
'HBase clusters'
- CLUSTER_TEMPLATES =
Templates for any hosts that need to be created.
'Template_HBase_Cluster'
- NODE_TEMPLATES =
'Template_HBase_Node'
- CLUSTER_APPLICATIONS =
Applications for items that are written
'_cluster'
- NODE_APPLICATIONS =
"Hbase"
Instance Attribute Summary
Attributes inherited from Rubix::ClusterMonitor
#nodes_by_cluster, #private_ips_by_cluster
Attributes inherited from Rubix::Monitor
Instance Method Summary collapse
- #matching_chef_nodes ⇒ Object
- #measure_cluster(cluster_name) ⇒ Object
- #measure_cluster_nodes(cluster_name, live_nodes) ⇒ Object
-
#measure_cluster_status(cluster_name, private_ip) ⇒ Object
Measure the cluster health metrics – /status/cluster.
- #measure_cluster_tables(cluster_name, data) ⇒ Object
Methods inherited from Rubix::ClusterMonitor
#clusters, #group_nodes_by_cluster, #initialize, #measure, #node_query
Methods inherited from Rubix::ChefMonitor
#chef_node_from_node_name, #chef_node_name_from_ip, default_settings, #initialize, #search_nodes, #set_chef_credentials
Methods inherited from Rubix::Monitor
#close, default_settings, #fifo?, #file?, #initialize, #loop?, #loop_period, #measure, #output, #output_path, #run, run, #stdout?, #write
Constructor Details
This class inherits a constructor from Rubix::ClusterMonitor
Instance Method Details
#matching_chef_nodes ⇒ Object
23 24 25 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 23 def matching_chef_nodes Chef::Search::Query.new.search('node', 'provides_service:*hbase-stargate AND facet_name:alpha') end |
#measure_cluster(cluster_name) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 27 def measure_cluster cluster_name measured_cluster_status = false private_ips_by_cluster[cluster_name].each do |private_ip| measured_cluster_status = measure_cluster_status(cluster_name, private_ip) unless measured_cluster_status break if measured_cluster_status end end |
#measure_cluster_nodes(cluster_name, live_nodes) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 74 def measure_cluster_nodes cluster_name, live_nodes live_nodes.each do |live_node| next unless live_node ip = (live_node['name'] || '').split(':').first node_name = chef_node_name_from_ip(ip) next unless node_name write({ :hostname => node_name, :application => self.class::NODE_APPLICATIONS, :templates => self.class::NODE_TEMPLATES }) do |d| d << ['hbase.regions', (live_node['Region'] || []).size] d << ['hbase.heap_size', live_node['heapSizeMB']] d << ['hbase.requests', live_node['requests']] end end end |
#measure_cluster_status(cluster_name, private_ip) ⇒ Object
Measure the cluster health metrics – /status/cluster
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 36 def measure_cluster_status cluster_name, private_ip begin connection = Net::HTTP.new(private_ip, 8080) # FIXME port request = Net::HTTP::Get.new('/status/cluster', 'Accept' => 'text/xml') response = connection.request(request) return false unless response.code.to_i == 200 data = Crack::XML.parse(response.body) cluster_status = data['ClusterStatus'] dead_nodes = cluster_status['DeadNodes'] ? cluster_status['DeadNodes']['Node'] : [] live_nodes = cluster_status['LiveNodes']['Node'] rescue NoMethodError, SocketError, REXML::ParseException, Errno::ECONNREFUSED => e # puts "#{e.class} -- #{e.message}" # puts e.backtrace return false end write({ :hostname => "#{cluster_name}-hbase", :hostgroup => self.class::CLUSTER_HOSTGROUPS, :application => self.class::CLUSTER_APPLICATIONS, :templates => self.class::CLUSTER_TEMPLATES }) do |d| d << ['requests', cluster_status['requests']] d << ['regions', cluster_status['regions']] d << ['load', cluster_status['averageLoad']] d << ['nodes.dead', dead_nodes.size] d << ['nodes.alive', live_nodes.size] end measure_cluster_tables(cluster_name, data) measure_cluster_nodes(cluster_name, live_nodes) true end |
#measure_cluster_tables(cluster_name, data) ⇒ Object
70 71 72 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 70 def measure_cluster_tables cluster_name, data # FIXME...not sure how best to get information about "tables" in HBase... end |