presto-metrics 0.3.8 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +30 -3
- data/lib/presto/metrics/client.rb +64 -5
- data/lib/presto/metrics/query.rb +9 -10
- data/lib/presto/metrics/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3c3d3f74169faa3e4cae0abe8eeb502faea7585
|
4
|
+
data.tar.gz: f2284da30958c56c7c23924379b159660a4c9e23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fafeb893d3f45120d0ad23a27359be2df3ebdc74d1dbe982c2f5a97c04c0ac43868032ee499e0ac29e4ba66f0b819d8e140544c4e1348ea4c66f889d7871643
|
7
|
+
data.tar.gz: eba6f37b29ccc3f3e2eca0967c28ec70d4b25a3c2cf3aab8f78dbc5d9eb89fc2e76934ca5c5dcdec0bf444dd6091f84e9f4dc4a3ad6e62dc0f529f8edc903284
|
data/README.md
CHANGED
@@ -32,7 +32,6 @@ client = Presto::Metrics::Client.new # Access to http://localhost:8080 in defau
|
|
32
32
|
client = Presto::Metrics::Client.new(:host => "localhost", :port=>8080)
|
33
33
|
|
34
34
|
|
35
|
-
|
36
35
|
client.os_metrics
|
37
36
|
# => {:open_file_descriptor_count=>360, :max_file_descriptor_count=>10240, :committed_virtual_memory_size=>18683629568, :total_swap_space_size=>2147483648, :free_swap_space_size=>1132986368, :process_cpu_time=>240244441000, :free_physical_memory_size=>2088931328, :total_physical_memory_size=>17179869184, :system_cpu_load=>0.044989775051124746, :process_cpu_load=>0.002293214043176635, :name=>"Mac OS X", :version=>"10.9.4", :available_processors=>8, :arch=>"x86_64", :system_load_average=>2.0537109375, :object_name=>"java.lang:type=OperatingSystem"}
|
38
37
|
|
@@ -61,13 +60,25 @@ client.memory_usage_metrics # java.lang:Type=Memory
|
|
61
60
|
client.os_metrics # java.lang:type=OperatingSystm
|
62
61
|
client.gc_cms_metrics # java.lang:type=GarbageCollector,name=ConcurrentMarkSweep
|
63
62
|
client.gc_parnew_metrics # java.lang:type=GarbageCollector,name=ParNew
|
64
|
-
client.gc_g1_metrics # java.lang:type=GarbageCollector,name=G1
|
63
|
+
client.gc_g1_metrics # java.lang:type=GarbageCollector,name=G1 Young Generation and G1 Old Genration
|
65
64
|
client.query_manager_metrics # com.facebook.presto.execution:name=QueryManager
|
66
65
|
client.query_execution_metrics # com.facebook.presto.execution:name=QueryExecution
|
67
66
|
client.node_scheduler_metrics # com.facebook.presto.execution:name=NodeScheduler
|
68
67
|
client.task_executor_metrics # com.facebook.presto.execution:name=TaskExecutor
|
69
68
|
client.task_manager_metrics # com.facebook.presto.execution:name=TaskManager
|
70
69
|
|
70
|
+
|
71
|
+
# Memory resource manager metrics (since Presto 0.103)
|
72
|
+
```ruby
|
73
|
+
client.memory_pool_metrics
|
74
|
+
=> {"general"=>{"free_bytes"=>59700045415, "max_bytes"=>59700045415}, "reserved"=>{"free_bytes"=>2147483648, "max_bytes"=>2147483648}}
|
75
|
+
|
76
|
+
client.cluster_memory_pool_metrics
|
77
|
+
=> {"general"=>{"blocked_nodes"=>0, "free_distributed_bytes"=>116833832981, "nodes"=>4, "queries"=>8, "total_distributed_bytes"=>131855495989},
|
78
|
+
"reserved"=>{"blocked_nodes"=>0, "free_distributed_bytes"=>15032385536, "nodes"=>4, "queries"=>0, "total_distributed_bytes"=>15032385536}}
|
79
|
+
```
|
80
|
+
|
81
|
+
|
71
82
|
# Retrieve presto worker metrics
|
72
83
|
pp client.node_metrics
|
73
84
|
[{"host"=>"xxx.xxx.xxx.xxx",
|
@@ -93,7 +104,7 @@ pp client.node_metrics
|
|
93
104
|
|
94
105
|
|
95
106
|
# Retrieve the JSON representation of JMX properties
|
96
|
-
client.
|
107
|
+
client.get_mbean_json("java.lang:Type=Memory")
|
97
108
|
|
98
109
|
# Pretty print
|
99
110
|
require 'pp'
|
@@ -125,3 +136,19 @@ pp c.memory_usage_metrics
|
|
125
136
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
126
137
|
4. Push to the branch (`git push origin my-new-feature`)
|
127
138
|
5. Create a new Pull Request
|
139
|
+
|
140
|
+
|
141
|
+
## For developers
|
142
|
+
|
143
|
+
To develop presto-metrics
|
144
|
+
|
145
|
+
```
|
146
|
+
$ bundle exec irb -I lib -r presto/metrics.rb
|
147
|
+
|
148
|
+
irb> client = Presto::Metrics::Client.new(:host => "ec2-54-205-192-36.compute-1.amazonaws.com", :port=>8080)
|
149
|
+
|
150
|
+
# reload modified code
|
151
|
+
irb> load "presto/metrics/client.rb"
|
152
|
+
|
153
|
+
```
|
154
|
+
|
@@ -7,6 +7,7 @@ module Presto
|
|
7
7
|
require 'json'
|
8
8
|
require 'set'
|
9
9
|
require 'time'
|
10
|
+
require 'uri'
|
10
11
|
|
11
12
|
@host = opts[:host] || 'localhost'
|
12
13
|
@port = opts[:port] || '8080'
|
@@ -26,7 +27,12 @@ module Presto
|
|
26
27
|
'query_execution' => 'com.facebook.presto.execution:name=QueryExecution',
|
27
28
|
'node_scheduler' => 'com.facebook.presto.execution:name=NodeScheduler',
|
28
29
|
'task_executor' => 'com.facebook.presto.execution:name=TaskExecutor',
|
29
|
-
'task_manager' => 'com.facebook.presto.execution:name=TaskManager'
|
30
|
+
'task_manager' => 'com.facebook.presto.execution:name=TaskManager',
|
31
|
+
'memory_pool_general' => 'com.facebook.presto.memory:type=MemoryPool,name=general',
|
32
|
+
'memory_pool_reserved' => 'com.facebook.presto.memory:type=MemoryPool,name=reserved',
|
33
|
+
'cluster_memory_manager' => 'com.facebook.presto.memory:name=ClusterMemoryManager',
|
34
|
+
'cluster_memory_pool_general' => 'com.facebook.presto.memory:type=ClusterMemoryPool,name=general',
|
35
|
+
'cluster_memory_pool_reserved' => 'com.facebook.presto.memory:type=ClusterMemoryPool,name=reserved',
|
30
36
|
}
|
31
37
|
|
32
38
|
def path(path)
|
@@ -71,7 +77,7 @@ module Presto
|
|
71
77
|
end
|
72
78
|
|
73
79
|
def get(path, default='{}')
|
74
|
-
resp = HTTParty.get("#{@endpoint}#{path}")
|
80
|
+
resp = HTTParty.get(URI.encode("#{@endpoint}#{path}"))
|
75
81
|
if resp.code == 200
|
76
82
|
resp.body
|
77
83
|
else
|
@@ -112,6 +118,7 @@ module Presto
|
|
112
118
|
str.gsub(/::/, '/').
|
113
119
|
gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
|
114
120
|
gsub(/([a-z\d])([A-Z])/, '\1_\2').
|
121
|
+
gsub(/ +/,'_').
|
115
122
|
tr('-', '_').
|
116
123
|
downcase
|
117
124
|
end
|
@@ -132,20 +139,55 @@ module Presto
|
|
132
139
|
kv
|
133
140
|
end
|
134
141
|
|
142
|
+
def sanitize_key(k)
|
143
|
+
@caml_case ? k : underscore(k)
|
144
|
+
end
|
145
|
+
|
146
|
+
def extract_value(v)
|
147
|
+
if v.is_a?(Hash)
|
148
|
+
if v.has_key?('key') && v.has_key?('value')
|
149
|
+
{sanitize_key(v['key']) => extract_value(v['value']) }
|
150
|
+
else
|
151
|
+
v.each_with_object({}) {|(k1, v1), h2|
|
152
|
+
h2[sanitize_key(k1)] = extract_value(v1)
|
153
|
+
}
|
154
|
+
end
|
155
|
+
elsif v.is_a?(Array) && v.all?{|e| e.is_a?(Hash) }
|
156
|
+
v.each_with_object({}){|e, h| h.merge!(extract_value(e)) }
|
157
|
+
else
|
158
|
+
v
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def get_gc_metrics(mbean, target_attr=[])
|
163
|
+
h = {}
|
164
|
+
get_attributes(mbean)
|
165
|
+
.reject { |attr| attr['name'].nil? || attr['value'].nil? }
|
166
|
+
.each { |attr|
|
167
|
+
key = sanitize_key(attr['name'])
|
168
|
+
v = attr['value']
|
169
|
+
h[key] = extract_value(v)
|
170
|
+
}
|
171
|
+
h
|
172
|
+
end
|
173
|
+
|
174
|
+
|
135
175
|
def memory_usage_metrics(target_attr=[])
|
136
176
|
get_metrics('java.lang:type=Memory', target_attr)
|
137
177
|
end
|
138
178
|
|
139
179
|
def gc_cms_metrics(target_attr=[])
|
140
|
-
|
180
|
+
get_gc_metrics('java.lang:type=GarbageCollector,name=ConcurrentMarkSweep', target_attr)
|
141
181
|
end
|
142
182
|
|
143
183
|
def gc_parnew_metrics(target_attr=[])
|
144
|
-
|
184
|
+
get_gc_metrics('java.lang:type=GarbageCollector,name=ParNew', target_attr)
|
145
185
|
end
|
146
186
|
|
147
187
|
def gc_g1_metrics(target_attr=[])
|
148
|
-
|
188
|
+
['G1 Old Generation', 'G1 Young Generation'].each_with_object({}){|gen, h|
|
189
|
+
h[sanitize_key(gen)] = get_gc_metrics("java.lang:type=GarbageCollector,name=#{gen}", target_attr)
|
190
|
+
}
|
149
191
|
end
|
150
192
|
|
151
193
|
def os_metrics(target_attr=[])
|
@@ -172,6 +214,23 @@ module Presto
|
|
172
214
|
get_metrics('com.facebook.presto.execution:name=TaskManager', target_attr)
|
173
215
|
end
|
174
216
|
|
217
|
+
def memory_pool_metrics(target_attr=[])
|
218
|
+
['general', 'reserved'].each_with_object({}) {|type, hash|
|
219
|
+
hash[type] = get_metrics("com.facebook.presto.memory:type=MemoryPool,name=#{type}", target_attr)
|
220
|
+
}
|
221
|
+
end
|
222
|
+
|
223
|
+
def cluster_memory_pool_metrics(target_attr=[])
|
224
|
+
['general', 'reserved'].each_with_object({}) {|type, hash|
|
225
|
+
hash[type] = get_metrics("com.facebook.presto.memory:type=ClusterMemoryPool,name=#{type}", target_attr)
|
226
|
+
}
|
227
|
+
end
|
228
|
+
|
229
|
+
def cluster_memory_manager_metrics(target_attr=[])
|
230
|
+
get_metrics("com.facebook.presto.memory:name=ClusterMemoryManager", target_attr)
|
231
|
+
end
|
232
|
+
|
233
|
+
|
175
234
|
def node_metrics(target_attr=[])
|
176
235
|
p = URI::Parser.new
|
177
236
|
node_state = JSON.parse(get_node_json)
|
data/lib/presto/metrics/query.rb
CHANGED
@@ -59,11 +59,10 @@ module Presto
|
|
59
59
|
[q['queryId'], q['elapsedTime'], q['state'], q['runningDrivers'], q['completedDrivers'], q['totalDrivers'], s['user'], s['catalog'], s['schema'], s['source'], query]
|
60
60
|
}.sort_by{|row| row[0]}.reverse
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
:sep => ' '
|
62
|
+
format_table(tbl,
|
63
|
+
%w|query time state r f t user catalog schema source sql|,
|
64
|
+
%w|r r r r r r l l r l l |,
|
65
|
+
' '
|
67
66
|
)
|
68
67
|
end
|
69
68
|
|
@@ -73,9 +72,9 @@ module Presto
|
|
73
72
|
|
74
73
|
def task_list(queryId)
|
75
74
|
qj = find(queryId) || {}
|
76
|
-
root_stage = qj['outputStage'] ||
|
75
|
+
root_stage = qj['outputStage'] || {}
|
77
76
|
tasks = root_stage['tasks'] || []
|
78
|
-
tasks << find_tasks(root_stage['subStages'])
|
77
|
+
tasks << find_tasks(root_stage['subStages'] || [])
|
79
78
|
tasks.flatten
|
80
79
|
end
|
81
80
|
|
@@ -87,9 +86,9 @@ module Presto
|
|
87
86
|
[t['taskId'], host, t['state'], s['rawInputPositions'], s['rawInputDataSize'], s['queuedDrivers'], s['runningDrivers'], s['completedDrivers']]
|
88
87
|
}
|
89
88
|
format_table(stats,
|
90
|
-
|
91
|
-
|
92
|
-
|
89
|
+
%w|task_id host state processed_rows size|,
|
90
|
+
%w|l l l r r|,
|
91
|
+
' '
|
93
92
|
)
|
94
93
|
end
|
95
94
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: presto-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taro L. Saito
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|