cloudwatch-metrics-linux 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -1
- data/docker/Gemfile.lock +1 -1
- data/lib/cloud_watch_metrics/base.rb +2 -0
- data/lib/cloud_watch_metrics/linux.rb +26 -6
- data/lib/cloud_watch_metrics/linux/builder.rb +44 -25
- data/lib/cloud_watch_metrics/linux/version.rb +1 -1
- data/lib/cloud_watch_metrics/util.rb +16 -2
- 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: 6594499ef6096ad115765e158314e3a08335c617
|
4
|
+
data.tar.gz: 3511cb052b53c85e6c11365211a475cc5d4dea85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fddf3eea38c07fcbec608deafca3ffa0ceaa8f1d65d7b63eed7322236b9af08d0e753f9b07976630662a05acdf44cdd7f43a764f674778badd1988682a953ca
|
7
|
+
data.tar.gz: 85415ec8297e2eebe4a73ee4f57758cdf40dd1756705c5764f0c0b612b25386f5824172f9d8bc4a87e80c01aa46786187e29e1ebce7db4ae057b4e9d4e352b07
|
data/README.md
CHANGED
@@ -32,8 +32,15 @@ Or use Docker:
|
|
32
32
|
Usage: cloudwatch-metrics-linux [options]
|
33
33
|
--namespace <namespace>
|
34
34
|
--dimensions <name1=value1,name2=value2,...>
|
35
|
+
--[no-]memory-used
|
36
|
+
--[no-]memory-utilization
|
37
|
+
--[no-]swap-used
|
38
|
+
--[no-]swap-utilization
|
39
|
+
--[no-]load-average-1min
|
40
|
+
--[no-]load-average-5min
|
41
|
+
--[no-]load-average-15min
|
35
42
|
--interval <seconds>
|
36
|
-
--
|
43
|
+
--dry-run
|
37
44
|
```
|
38
45
|
|
39
46
|
## Development
|
data/docker/Gemfile.lock
CHANGED
@@ -14,12 +14,25 @@ module CloudWatchMetrics
|
|
14
14
|
include Base
|
15
15
|
|
16
16
|
DEFAULT_NAMESPACE = 'System/Linux'
|
17
|
+
DEFAULT_METRICS = {
|
18
|
+
memory_used: true,
|
19
|
+
memory_utilization: true,
|
20
|
+
swap_used: true,
|
21
|
+
swap_utilization: true,
|
22
|
+
load_average_1min: false,
|
23
|
+
load_average_5min: true,
|
24
|
+
load_average_15min: false,
|
25
|
+
}.freeze
|
17
26
|
|
18
27
|
class << self
|
19
28
|
private
|
20
29
|
|
21
30
|
def parse_arguments(args)
|
22
|
-
{}.tap
|
31
|
+
{}.tap do |options|
|
32
|
+
option_parser.parse(args, into: options)
|
33
|
+
Util.convert_symbol_keys_from_dash_to_underscore!(options)
|
34
|
+
options[:metrics] = Util.delete_keys!(options, DEFAULT_METRICS.keys)
|
35
|
+
end
|
23
36
|
end
|
24
37
|
|
25
38
|
def option_parser
|
@@ -27,8 +40,13 @@ module CloudWatchMetrics
|
|
27
40
|
Util.accept_hash(opt)
|
28
41
|
opt.on('--namespace <namespace>', String)
|
29
42
|
opt.on('--dimensions <name1=value1,name2=value2,...>', Hash)
|
43
|
+
|
44
|
+
DEFAULT_METRICS.each_key do |key|
|
45
|
+
opt.on("--[no-]#{key.to_s.tr('_', '-')}", TrueClass)
|
46
|
+
end
|
47
|
+
|
30
48
|
opt.on('--interval <seconds>', Float)
|
31
|
-
opt.on('--
|
49
|
+
opt.on('--dry-run', TrueClass)
|
32
50
|
end
|
33
51
|
end
|
34
52
|
end
|
@@ -36,24 +54,26 @@ module CloudWatchMetrics
|
|
36
54
|
def initialize(
|
37
55
|
namespace: DEFAULT_NAMESPACE,
|
38
56
|
dimensions: {},
|
57
|
+
metrics: {},
|
39
58
|
interval: nil,
|
40
|
-
|
59
|
+
dry_run: false
|
41
60
|
)
|
42
61
|
@namespace = namespace
|
43
62
|
@dimensions = dimensions
|
63
|
+
@metrics = DEFAULT_METRICS.merge(metrics)
|
44
64
|
@interval = interval
|
45
|
-
@
|
65
|
+
@dry_run = dry_run
|
46
66
|
end
|
47
67
|
|
48
68
|
private
|
49
69
|
|
50
70
|
def run_once
|
51
71
|
metric_data = builder.build(MemInfo.new, LoadAvg.new)
|
52
|
-
Util.put_metric_data(@namespace, metric_data,
|
72
|
+
Util.put_metric_data(@namespace, metric_data, dry_run: @dry_run)
|
53
73
|
end
|
54
74
|
|
55
75
|
def builder
|
56
|
-
@_builder ||= Builder.new(@dimensions)
|
76
|
+
@_builder ||= Builder.new(@dimensions, @metrics)
|
57
77
|
end
|
58
78
|
end
|
59
79
|
end
|
@@ -3,13 +3,18 @@
|
|
3
3
|
module CloudWatchMetrics
|
4
4
|
class Linux
|
5
5
|
class Builder
|
6
|
-
def initialize(dimensions)
|
6
|
+
def initialize(dimensions, metrics)
|
7
7
|
@dimensions_array = [Dimensions.new(InstanceId: MetaData.instance_id)]
|
8
8
|
@dimensions_array << Dimensions.new(dimensions) unless dimensions.empty?
|
9
|
+
|
10
|
+
@metric_names = metrics.select { |_, v| v }.keys
|
9
11
|
end
|
10
12
|
|
11
13
|
def build(meminfo, loadavg)
|
12
|
-
|
14
|
+
@meminfo = meminfo
|
15
|
+
@loadavg = loadavg
|
16
|
+
|
17
|
+
build_without_dimensions.flat_map do |metric_datum|
|
13
18
|
@dimensions_array.map do |dimensions|
|
14
19
|
metric_datum.merge(dimensions: dimensions.to_cloudwatch)
|
15
20
|
end
|
@@ -18,57 +23,71 @@ module CloudWatchMetrics
|
|
18
23
|
|
19
24
|
private
|
20
25
|
|
21
|
-
def build_without_dimensions
|
22
|
-
|
23
|
-
|
24
|
-
if meminfo.swap?
|
25
|
-
metric_data << swap_used(meminfo) << swap_utilization(meminfo)
|
26
|
-
end
|
27
|
-
|
28
|
-
metric_data << load_average_1min(loadavg)
|
26
|
+
def build_without_dimensions
|
27
|
+
@metric_names.map { |key| __send__(key) }.compact
|
29
28
|
end
|
30
29
|
|
31
|
-
def memory_used
|
30
|
+
def memory_used
|
32
31
|
{
|
33
32
|
metric_name: 'MemoryUsed',
|
34
|
-
timestamp: meminfo.time,
|
35
|
-
value: meminfo.mem_used / 1024,
|
33
|
+
timestamp: @meminfo.time,
|
34
|
+
value: @meminfo.mem_used / 1024,
|
36
35
|
unit: 'Megabytes',
|
37
36
|
}
|
38
37
|
end
|
39
38
|
|
40
|
-
def memory_utilization
|
39
|
+
def memory_utilization
|
41
40
|
{
|
42
41
|
metric_name: 'MemoryUtilization',
|
43
|
-
timestamp: meminfo.time,
|
44
|
-
value: (meminfo.mem_util * 100).round(3),
|
42
|
+
timestamp: @meminfo.time,
|
43
|
+
value: (@meminfo.mem_util * 100).round(3),
|
45
44
|
unit: 'Percent',
|
46
45
|
}
|
47
46
|
end
|
48
47
|
|
49
|
-
def swap_used
|
48
|
+
def swap_used
|
49
|
+
return unless @meminfo.swap?
|
50
50
|
{
|
51
51
|
metric_name: 'SwapUsed',
|
52
|
-
timestamp: meminfo.time,
|
53
|
-
value: meminfo.swap_used / 1024,
|
52
|
+
timestamp: @meminfo.time,
|
53
|
+
value: @meminfo.swap_used / 1024,
|
54
54
|
unit: 'Megabytes',
|
55
55
|
}
|
56
56
|
end
|
57
57
|
|
58
|
-
def swap_utilization
|
58
|
+
def swap_utilization
|
59
|
+
return unless @meminfo.swap?
|
59
60
|
{
|
60
61
|
metric_name: 'SwapUtilization',
|
61
|
-
timestamp: meminfo.time,
|
62
|
-
value: (meminfo.swap_util * 100).round(3),
|
62
|
+
timestamp: @meminfo.time,
|
63
|
+
value: (@meminfo.swap_util * 100).round(3),
|
63
64
|
unit: 'Percent',
|
64
65
|
}
|
65
66
|
end
|
66
67
|
|
67
|
-
def load_average_1min
|
68
|
+
def load_average_1min
|
68
69
|
{
|
69
70
|
metric_name: 'LoadAverage1Min',
|
70
|
-
timestamp: loadavg.time,
|
71
|
-
value: loadavg.loadavg1,
|
71
|
+
timestamp: @loadavg.time,
|
72
|
+
value: @loadavg.loadavg1,
|
73
|
+
unit: 'Count',
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
def load_average_5min
|
78
|
+
{
|
79
|
+
metric_name: 'LoadAverage5Min',
|
80
|
+
timestamp: @loadavg.time,
|
81
|
+
value: @loadavg.loadavg5,
|
82
|
+
unit: 'Count',
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
def load_average_15min
|
87
|
+
{
|
88
|
+
metric_name: 'LoadAverage15Min',
|
89
|
+
timestamp: @loadavg.time,
|
90
|
+
value: @loadavg.loadavg15,
|
72
91
|
unit: 'Count',
|
73
92
|
}
|
74
93
|
end
|
@@ -10,6 +10,20 @@ module CloudWatchMetrics
|
|
10
10
|
MAX_METRIC_DATA_PER_PUT = 20
|
11
11
|
|
12
12
|
class << self
|
13
|
+
def convert_symbol_keys_from_dash_to_underscore!(hash)
|
14
|
+
hash.keys.each do |key|
|
15
|
+
if key.match?('-')
|
16
|
+
hash[key.to_s.tr('-', '_').to_sym] = hash.delete(key)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def delete_keys!(hash, keys)
|
22
|
+
hash
|
23
|
+
.select { |key,| keys.include?(key) }
|
24
|
+
.each_key { |key| hash.delete(key) }
|
25
|
+
end
|
26
|
+
|
13
27
|
def accept_hash(option_parser)
|
14
28
|
option_parser.accept(Hash) do |s,|
|
15
29
|
break s unless s
|
@@ -21,8 +35,8 @@ module CloudWatchMetrics
|
|
21
35
|
end
|
22
36
|
|
23
37
|
# @return [void]
|
24
|
-
def put_metric_data(namespace, metric_data,
|
25
|
-
return dump_metric_data(namespace, metric_data) if
|
38
|
+
def put_metric_data(namespace, metric_data, dry_run: false)
|
39
|
+
return dump_metric_data(namespace, metric_data) if dry_run
|
26
40
|
|
27
41
|
metric_data.each_slice(MAX_METRIC_DATA_PER_PUT).map do |data|
|
28
42
|
Thread.start(data, cloudwatch) do |data_, cloudwatch_|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudwatch-metrics-linux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masaki Takeuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|