presto-metrics 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +36 -3
- data/lib/presto/metrics.rb +76 -8
- data/lib/presto/metrics/version.rb +1 -1
- data/presto-metrics.gemspec +3 -1
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a43804112e1f231ae1f0385b6d4c23909d4b0c37
|
4
|
+
data.tar.gz: ee961aa3796169912449f4db7c4fac1870dd8362
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac35fadd641b03a7609d3067bef8b0fbca98e8869c9130f0a6ac19aba5c1c3e0675da3788572ff3cf2eb5b223822f4c895955d5dd2c5b44e053189923281ccd0
|
7
|
+
data.tar.gz: c6856141ac447e3b2eed0b07025ad5856e5f64ba6e75e1806598ea3a0730387c4d5069010210d9f706cc19e8ab95355b1437e37cc934865a2e0c07b348edde81
|
data/README.md
CHANGED
@@ -29,7 +29,8 @@ require 'presto/metrics'
|
|
29
29
|
client = Presto::Metrics::Client.new # Access to http://localhost:8080 in default
|
30
30
|
|
31
31
|
# Alternatively, you can specify the host name and port number to use
|
32
|
-
client = Presto::Metrics::Client.new(:host => "localhost", :port=>
|
32
|
+
client = Presto::Metrics::Client.new(:host => "localhost", :port=>8080)
|
33
|
+
|
33
34
|
|
34
35
|
|
35
36
|
client.os_metrics
|
@@ -38,12 +39,23 @@ client.os_metrics
|
|
38
39
|
# This is equivalent to write as follows
|
39
40
|
client.get_metrics("java.lang:type=OperatingSystem")
|
40
41
|
|
41
|
-
# Retrieve a set of parameters
|
42
|
+
# Retrieve a specific set of parameters
|
42
43
|
client.query_manager_metrics(["executor.active_count", "executor.completed_task_count"])
|
43
44
|
# => {:"executor.active_count"=>0, :"executor.completed_task_count"=>0}
|
45
|
+
|
44
46
|
client.os_metrics([:system_load_average, :free_physical_memory_size])
|
45
47
|
#=> {:free_physical_memory_size=>3690512384, :system_load_average=>2.33056640625}
|
46
48
|
|
49
|
+
|
50
|
+
# Path queries
|
51
|
+
client.path("os:physical_memory_size")
|
52
|
+
# => {"os.free_physical_memory_size"=>55034294272}
|
53
|
+
|
54
|
+
# You can use comma-separated list of path queries
|
55
|
+
client.path("memory:heap_memory_usage.used,non_heap_memory_usage.used")
|
56
|
+
# => {"heap_memory_usage.used"=>926714864, "non_heap_memory_usage.used"=>108948488}
|
57
|
+
|
58
|
+
|
47
59
|
# Retrieve standard metrics
|
48
60
|
client.memory_usage_metrics # java.lang:Type=Memory
|
49
61
|
client.os_metrics # java.lang:type=OperatingSystm
|
@@ -58,11 +70,32 @@ client.task_manager_metrics # com.facebook.presto.execution:name=TaskManage
|
|
58
70
|
# Retrieve the JSON representation of JMX properties
|
59
71
|
client.get_json("java.lang:Type=Memory")
|
60
72
|
|
73
|
+
# Pretty print
|
74
|
+
require 'pp'
|
75
|
+
pp c.memory_usage_metrics
|
76
|
+
#{
|
77
|
+
# "verbose": false,
|
78
|
+
# "object_pending_finalization_count": 0,
|
79
|
+
# "heap_memory_usage": {
|
80
|
+
# "committed": 259522560,
|
81
|
+
# "init": 268435456,
|
82
|
+
# "max": 14962655232,
|
83
|
+
# "used": 84478072
|
84
|
+
# },
|
85
|
+
# "non_heap_memory_usage": {
|
86
|
+
# "committed": 163250176,
|
87
|
+
# "init": 159842304,
|
88
|
+
# "max": 471859200,
|
89
|
+
# "used": 53369528
|
90
|
+
3 },
|
91
|
+
# "object_name": "java.lang:type=Memory"
|
92
|
+
#}
|
93
|
+
|
61
94
|
```
|
62
95
|
|
63
96
|
## Contributing
|
64
97
|
|
65
|
-
1. Fork it ( https://github.com/
|
98
|
+
1. Fork it ( https://github.com/xerial/presto-metrics/fork )
|
66
99
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
67
100
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
68
101
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/presto/metrics.rb
CHANGED
@@ -1,30 +1,97 @@
|
|
1
1
|
require "presto/metrics/version"
|
2
2
|
require 'httparty'
|
3
3
|
require 'json'
|
4
|
+
require 'jsonpath'
|
4
5
|
|
5
6
|
module Presto
|
6
7
|
module Metrics
|
7
8
|
|
9
|
+
class Query
|
10
|
+
def initialize(client)
|
11
|
+
@client = client
|
12
|
+
end
|
13
|
+
|
14
|
+
def list
|
15
|
+
query_list().each {|q|
|
16
|
+
s = q['session'] || {}
|
17
|
+
query = q['query'].gsub(/[\r\n]/, " ")[0..50]
|
18
|
+
c = [q['queryId'], s['user'], s['catalog'], s['schema'], s['source'], query]
|
19
|
+
puts c.join("\t")
|
20
|
+
}
|
21
|
+
0
|
22
|
+
end
|
23
|
+
|
24
|
+
def find(id)
|
25
|
+
@client.get_query_json(id)
|
26
|
+
end
|
27
|
+
|
28
|
+
def query_list(path="")
|
29
|
+
JSON.parse(@client.get_query_json(path))
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
8
34
|
class Client
|
9
35
|
def initialize(opts={})
|
10
36
|
@host = opts[:host] || "localhost"
|
11
37
|
@port = opts[:port] || "8080"
|
12
38
|
@endpoint = opts[:endpoint] || "http://#{@host}:#{@port}"
|
13
|
-
@mbean_path = opts[:mbean_path] || "/v1/jmx/mbean
|
39
|
+
@mbean_path = opts[:mbean_path] || "/v1/jmx/mbean"
|
40
|
+
@query_path = opts[:query_path] || "/v1/query"
|
14
41
|
@caml_case = opts[:caml_case] || false
|
15
42
|
end
|
16
43
|
|
17
|
-
|
18
|
-
|
44
|
+
@@MBEAN_ALIAS = {
|
45
|
+
"memory" => "java.lang:type=Memory",
|
46
|
+
"gc_cms" => "java.lang:type=GarbageCollector,name=ConcurrentMarkSweep",
|
47
|
+
"gc_parnew" => "java.lang:type=GarbageCollector,name=ParNew",
|
48
|
+
"os" => "java.lang:type=OperatingSystem",
|
49
|
+
"query_manager" => "com.facebook.presto.execution:name=QueryManager",
|
50
|
+
"query_execution" => "com.facebook.presto.execution:name=QueryExecution",
|
51
|
+
"node_scheduler" => "com.facebook.presto.execution:name=NodeScheduler",
|
52
|
+
"task_executor" => "com.facebook.presto.execution:name=TaskExecutor",
|
53
|
+
"task_manager" => "com.facebook.presto.execution:name=TaskManager"
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
def path(path)
|
58
|
+
c = path.split(/:/)
|
59
|
+
target = c[0]
|
60
|
+
mbean = @@MBEAN_ALIAS[target] || target
|
61
|
+
json = get_metrics(mbean)
|
62
|
+
return json if c.size <= 1
|
63
|
+
query_list = (c[1] || "").split(/,/)
|
64
|
+
result = {}
|
65
|
+
query_list.each{|q|
|
66
|
+
json_path = JsonPath.new(q)
|
67
|
+
result[q] = json_path.first(json)
|
68
|
+
}
|
69
|
+
result
|
70
|
+
end
|
71
|
+
|
72
|
+
def query
|
73
|
+
Query.new(self)
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_mbean(mbean)
|
77
|
+
JSON.parse(get_mbean_json(mbean))
|
78
|
+
end
|
79
|
+
|
80
|
+
def get(path)
|
81
|
+
resp = HTTParty.get("#{@endpoint}#{path}")
|
82
|
+
resp.body
|
19
83
|
end
|
20
84
|
|
21
|
-
def
|
22
|
-
|
23
|
-
resp.body
|
85
|
+
def get_mbean_json(mbean)
|
86
|
+
get("#{@mbean_path}/#{mbean}")
|
24
87
|
end
|
25
88
|
|
89
|
+
def get_query_json(path="")
|
90
|
+
get("#{@query_path}/#{path}")
|
91
|
+
end
|
92
|
+
|
26
93
|
def get_attributes(mbean)
|
27
|
-
json =
|
94
|
+
json = get_mbean(mbean)
|
28
95
|
json['attributes'] || []
|
29
96
|
end
|
30
97
|
|
@@ -57,13 +124,14 @@ module Presto
|
|
57
124
|
.each {|attr|
|
58
125
|
c_name = to_canonical_name(attr['name'])
|
59
126
|
if c_target_attr.empty? || c_target_attr.include?(c_name)
|
60
|
-
key = @caml_case ? attr['name'] : underscore(attr['name'])
|
127
|
+
key = @caml_case ? attr['name'] : underscore(attr['name'])
|
61
128
|
kv[key] = attr['value']
|
62
129
|
end
|
63
130
|
}
|
64
131
|
kv
|
65
132
|
end
|
66
133
|
|
134
|
+
|
67
135
|
def memory_usage_metrics(target_attr=[])
|
68
136
|
get_metrics("java.lang:type=Memory", target_attr)
|
69
137
|
end
|
data/presto-metrics.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Taro L. Saito"]
|
10
10
|
spec.email = ["leo@xerial.org"]
|
11
11
|
spec.summary = "A library for collecting metrics of Presto, a distributed SQL engine"
|
12
|
-
spec.description = "Monitoring
|
12
|
+
spec.description = "Monitoring Presto coordinator and worker processes through JMX REST API (/v1/jmx/mbean)"
|
13
13
|
spec.homepage = "https://github.com/xerial/presto-metrics"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "rspec"
|
24
24
|
|
25
25
|
spec.add_runtime_dependency "httparty"
|
26
|
+
spec.add_runtime_dependency "jsonpath"
|
27
|
+
|
26
28
|
end
|
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.1.
|
4
|
+
version: 0.1.1
|
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: 2014-
|
11
|
+
date: 2014-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,8 +66,22 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
|
70
|
-
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jsonpath
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Monitoring Presto coordinator and worker processes through JMX REST API
|
84
|
+
(/v1/jmx/mbean)
|
71
85
|
email:
|
72
86
|
- leo@xerial.org
|
73
87
|
executables: []
|
@@ -113,3 +127,4 @@ summary: A library for collecting metrics of Presto, a distributed SQL engine
|
|
113
127
|
test_files:
|
114
128
|
- spec/presto/metrics_spec.rb
|
115
129
|
- spec/spec_helper.rb
|
130
|
+
has_rdoc:
|