Class: HBaseMonitor
- Inherits:
-
ZabbixClusterMonitor
- Object
- ZabbixClusterMonitor
- HBaseMonitor
- Defined in:
- lib/rubix/examples/hbase_monitor.rb
Constant Summary collapse
- CLUSTER_HOSTGROUP =
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'
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
Instance Method Details
#matching_chef_nodes ⇒ Object
16 17 18 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 16 def matching_chef_nodes Chef::Search::Query.new.search('node', 'provides_service:*hbase-stargate AND facet_name:alpha') end |
#measure_cluster(cluster_name) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 20 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
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 67 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 => "HBase", :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
29 30 31 32 33 34 35 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 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 29 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", :application => '_cluster', :hostgroup => 'HBase Clusters', :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
63 64 65 |
# File 'lib/rubix/examples/hbase_monitor.rb', line 63 def measure_cluster_tables cluster_name, data # FIXME...not sure how best to get information about "tables" in HBase... end |