fluent-plugin-nostat 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd29b9aae14064c027767a9f27d9012ee7d811bd
4
- data.tar.gz: cafc6d0346c83f591b05f229a3dd80f4b640451c
3
+ metadata.gz: b677505412349ce2ed445ba002eb0c1de72ef4eb
4
+ data.tar.gz: 476324af36df2f7568245244782367661e137363
5
5
  SHA512:
6
- metadata.gz: 2644490f692a735634fbe12b71d120b81e4204e81976ef5464f931095308bf4de130cf2854c8c0d3e353f7578973efc3b500b5ced474e97d3d02b7856100f0be
7
- data.tar.gz: f516112e839b9cf2e4339d28f1f1e354afc4420414e68aca51df0ff634a0e745f9bddd8f8c2b12a5423094fddb06311c1267e6a0b140e0216f35486aa59ad771
6
+ metadata.gz: fff9be0487e8eccf175fc5f86fab0dfc5330f499f0868c591184f6d48a7688ece921fa155400305194f793ecf8199c673b1b456ba0d596c6310d66dd8e26c391
7
+ data.tar.gz: 4bfc7624620b4a0366c4057d89aff5db30cf31a798709abcaac192187af33f258405abe733661089bb8bcc79a18cdb2545215d2376d14123c58585e665be31f7
data/README.md CHANGED
@@ -14,8 +14,12 @@ $ gem install fluent-plugin-nostat
14
14
  <source>
15
15
  type nostat
16
16
  run_interval 1
17
+ mode dstat # raw or dstat
17
18
  </source>
18
19
  ```
20
+ * **mode** : raw or dstat.
21
+ **raw** : just get the values from /proc/{STATS}.
22
+ **dstat** : modify the values as dstat.
19
23
 
20
24
  ## output
21
25
  the raw stats from /proc directory.
@@ -24,9 +28,15 @@ the raw stats from /proc directory.
24
28
  * disk : sector - https://www.kernel.org/doc/Documentation/ABI/testing/procfs-diskstats
25
29
  * network : bytes - http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html
26
30
 
31
+ ### raw mode
27
32
  ```
28
33
  cpu={"usr"=>52773, "sys"=>28330, "idl"=>2217987, "wai"=>1995, "siq"=>4112, "hiq"=>0} disk={"sda"=>{"read"=>"9786551", "write"=>"29250018"}} net={"enp0s3"=>{"recv"=>8940623796, "send"=>383889456}, "enp0s8"=>{"recv"=>8940623796, "send"=>383889456}} mem={"total"=>1884188, "free"=>67968, "buff"=>0, "cach"=>1546820, "used"=>269400}
29
34
  ```
30
35
 
36
+ ### dstat mode
37
+ ```
38
+ cpu={"usr"=>0, "sys"=>0, "idl"=>100, "wai"=>0, "siq"=>0, "hiq"=>0} mem={"free"=>1693290496, "buff"=>0, "cach"=>60887040, "used"=>175230976} disk={"sda"=>{"read"=>0, "write"=>0}} net={"enp0s3"=>{"recv"=>344, "send"=>1668}, "enp0s8"=>{"recv"=>344, "send"=>1668}}
39
+ ```
40
+
31
41
  ## it was tested on
32
42
  . CentOS 7.x (kernel 3.10.x)
@@ -1,19 +1,13 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: fluent-plugin-nostat 0.0.1 ruby lib
2
+ # stub: fluent-plugin-nostat 0.0.4 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "fluent-plugin-nostat"
6
- s.version = "0.0.3"
6
+ s.version = "0.0.4"
7
7
 
8
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
8
  s.require_paths = ["lib"]
10
9
  s.authors = ["No JinHo"]
11
- s.date = "2016-03-15"
12
10
  s.email = "nozino@gmail.com"
13
- s.extra_rdoc_files = [
14
- "LICENSE.txt",
15
- "README.md"
16
- ]
17
11
  s.files = [
18
12
  "Gemfile",
19
13
  "LICENSE.txt",
@@ -23,27 +17,8 @@ Gem::Specification.new do |s|
23
17
  "lib/fluent/plugin/in_nostat.rb",
24
18
  ]
25
19
  s.homepage = "http://github.com/nozino/fluent-plugin-nostat"
26
- s.rubygems_version = "2.0.14"
27
- s.summary = "Linux Resource Monitoring Input plugin for Fluent event collector"
28
-
29
- if s.respond_to? :specification_version then
30
- s.specification_version = 4
20
+ s.description = "Linux Resource Monitoring Input plugin for Fluent event collector"
21
+ s.summary = s.description
31
22
 
32
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
33
- s.add_runtime_dependency(%q<fluent-mixin-rewrite-tag-name>, [">= 0"])
34
- s.add_runtime_dependency(%q<fluentd>, [">= 0.10.7", "< 2"])
35
- s.add_runtime_dependency(%q<rdoc>, [">= 0"])
36
- s.add_development_dependency(%q<bundler>, ["~> 1.0"])
37
- else
38
- s.add_runtime_dependency(%q<fluent-mixin-rewrite-tag-name>, [">= 0"])
39
- s.add_runtime_dependency(%q<fluentd>, [">= 0.10.7", "< 2"])
40
- s.add_runtime_dependency(%q<rdoc>, [">= 0"])
41
- s.add_dependency(%q<bundler>, ["~> 1.0"])
42
- end
43
- else
44
- s.add_runtime_dependency(%q<fluent-mixin-rewrite-tag-name>, [">= 0"])
45
- s.add_runtime_dependency(%q<fluentd>, [">= 0.10.7", "< 2"])
46
- s.add_runtime_dependency(%q<rdoc>, [">= 0"])
47
- s.add_dependency(%q<bundler>, ["~> 1.0"])
48
- end
49
- end
23
+ s.add_runtime_dependency "fluentd", [">= 0.10.7", "< 2"]
24
+ end
@@ -1,5 +1,5 @@
1
1
  module Fluent
2
- class NostatInput < Input
2
+ n class NostatInput < Input
3
3
  Plugin.register_input('nostat', self)
4
4
 
5
5
  @@CPU_STAT = "/proc/stat"
@@ -13,22 +13,26 @@ module Fluent
13
13
  @@CPU_WAI = 5
14
14
  @@CPU_HIQ = 6
15
15
  @@CPU_SIQ = 7
16
-
16
+
17
+ @@LINUX_SECTOR_SIZE_BYTE = 512
18
+
19
+ @@history = {}
20
+
17
21
  def initialize
18
22
  super
19
23
  require 'fluent/timezone'
20
24
  end
21
- n
25
+
22
26
  config_param :tag_prefix, :string, :default => nil
23
27
  config_param :tag, :string, :default => nil
24
28
  config_param :run_interval, :time, :default => nil
29
+ config_param :mode, :string, :default => "raw"
25
30
 
26
31
  def configure(conf)
27
32
  super
28
33
 
29
34
  if !@tag
30
35
  @tag = @tag_prefix + `hostname`.strip.split('.')[0].strip + ".nostat"
31
- log.info "tag=", @tag
32
36
  end
33
37
  if !@run_interval
34
38
  raise ConfigError, "'run_interval' option is required on df input"
@@ -36,6 +40,11 @@ n
36
40
  end
37
41
 
38
42
  def start
43
+ if ( @mode == "dstat" )
44
+ @@history = get_stats
45
+ sleep @run_interval
46
+ end
47
+
39
48
  @finished = false
40
49
  @thread = Thread.new(&method(:run_periodic))
41
50
  end
@@ -50,12 +59,12 @@ n
50
59
 
51
60
  first = File.foreach(@@CPU_STAT).first.split
52
61
 
53
- res["usr"] = first[@@CPU_USR].strip.to_i
54
- res["sys"] = first[@@CPU_SYS].strip.to_i
55
- res["idl"] = first[@@CPU_IDL].strip.to_i
56
- res["wai"] = first[@@CPU_WAI].strip.to_i
57
- res["siq"] = first[@@CPU_SIQ].strip.to_i
58
- res["hiq"] = first[@@CPU_HIQ].strip.to_i
62
+ res["usr"] = first[@@CPU_USR].strip.to_f
63
+ res["sys"] = first[@@CPU_SYS].strip.to_f
64
+ res["idl"] = first[@@CPU_IDL].strip.to_f
65
+ res["wai"] = first[@@CPU_WAI].strip.to_f
66
+ res["siq"] = first[@@CPU_SIQ].strip.to_f
67
+ res["hiq"] = first[@@CPU_HIQ].strip.to_f
59
68
 
60
69
  res
61
70
  end
@@ -63,14 +72,17 @@ n
63
72
  def get_mem_stat
64
73
  res = {}
65
74
  used = 0
75
+ total = 0
66
76
 
67
77
  File.foreach(@@MEM_STAT) do |line|
68
78
  items = line.split
69
79
  name = items[0].split(':').first
70
80
 
81
+
71
82
  case name
72
83
  when "MemTotal"
73
- res["total"] = items[1].strip.to_i
84
+ # res["total"] = items[1].strip.to_i
85
+ total = items[1].strip.to_i
74
86
  when "MemFree"
75
87
  res["free"] = items[1].strip.to_i
76
88
  when "Buffers"
@@ -81,7 +93,7 @@ n
81
93
  end
82
94
  end
83
95
 
84
- res["used"] = res["total"] - res["free"] - res["buff"] - res["cach"]
96
+ res["used"] = total - res["free"] - res["buff"] - res["cach"]
85
97
  res
86
98
  end
87
99
 
@@ -93,8 +105,8 @@ n
93
105
  if ( items[2] =~ /^[hsv]d[a-z]$/ )
94
106
  disk = {}
95
107
 
96
- disk["read"] = items[5]
97
- disk["write"] = items[9]
108
+ disk["read"] = items[5].strip.to_i
109
+ disk["write"] = items[9].strip.to_i
98
110
 
99
111
  res[items[2]] = disk
100
112
  end
@@ -128,17 +140,95 @@ n
128
140
  res
129
141
  end
130
142
 
143
+ def get_dstat_cpu (cpu_stat)
144
+ res = {}
145
+ total = 0
146
+ cpu_stat.each do |key, value|
147
+ res[key] = value - @@history["cpu"][key]
148
+ total += res[key]
149
+ end
150
+
151
+ res.each do |key,value|
152
+ if ( key == "idl" )
153
+ res[key] = (res[key] / total * 100).floor
154
+ else
155
+ res[key] = (res[key] / total * 100).ceil
156
+ end
157
+ end
158
+
159
+ res
160
+ end
161
+
162
+ def get_dstat_mem (mem_stat)
163
+ res = {}
164
+ mem_stat.each do |key, value|
165
+ res[key] = value * 1024
166
+ end
167
+
168
+ res
169
+ end
170
+
171
+ def get_dstat_disk (disk_stat)
172
+ res = {}
173
+ disk = {}
174
+
175
+ disk_stat.each do |key, value|
176
+ disk["read"] = (value["read"] - @@history["disk"][key]["read"]) * @@LINUX_SECTOR_SIZE_BYTE
177
+ disk["write"] = (value["write"] - @@history["disk"][key]["write"]) * @@LINUX_SECTOR_SIZE_BYTE
178
+ res[key] = disk
179
+ end
180
+
181
+ res
182
+ end
183
+
184
+ def get_dstat_net (net_stat)
185
+ res = {}
186
+ net = {}
187
+
188
+ net_stat.each do |key, value|
189
+ net["recv"] = (value["recv"] - @@history["net"][key]["recv"])
190
+ net["send"] = (value["send"] - @@history["net"][key]["send"])
191
+ res[key] = net
192
+ end
193
+
194
+ res
195
+ end
196
+
197
+ def get_dstat_record (stat)
198
+ record = {}
199
+ record["cpu"] = get_dstat_cpu (stat["cpu"])
200
+ record["mem"] = get_dstat_mem (stat["mem"])
201
+ record["disk"] = get_dstat_disk (stat["disk"])
202
+ record["net"] = get_dstat_net (stat["net"])
203
+
204
+ @@history = stat
205
+
206
+ record
207
+ end
208
+
209
+ def get_stats
210
+ stat = {}
211
+
212
+ stat["cpu"] = get_cpu_stat
213
+ stat["disk"] = get_disk_stat
214
+ stat["net"] = get_net_stat
215
+ stat["mem"] = get_mem_stat
216
+
217
+ stat
218
+ end
219
+
131
220
  def run_periodic
132
221
  until @finished
133
222
  begin
134
223
  sleep @run_interval
135
224
 
136
- record = {}
225
+ stat = get_stats
137
226
 
138
- record["cpu"] = get_cpu_stat
139
- record["disk"] = get_disk_stat
140
- record["net"] = get_net_stat
141
- record["mem"] = get_mem_stat
227
+ if (mode == "dstat")
228
+ record = get_dstat_record (stat)
229
+ else
230
+ record = stat
231
+ end
142
232
 
143
233
  emit_tag = @tag.dup
144
234
  time = Engine.now
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-nostat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - No JinHo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-15 00:00:00.000000000 Z
11
+ date: 2016-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: fluent-mixin-rewrite-tag-name
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: fluentd
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -44,41 +30,11 @@ dependencies:
44
30
  - - <
45
31
  - !ruby/object:Gem::Version
46
32
  version: '2'
47
- - !ruby/object:Gem::Dependency
48
- name: rdoc
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - '>='
59
- - !ruby/object:Gem::Version
60
- version: '0'
61
- - !ruby/object:Gem::Dependency
62
- name: bundler
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ~>
66
- - !ruby/object:Gem::Version
67
- version: '1.0'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - ~>
73
- - !ruby/object:Gem::Version
74
- version: '1.0'
75
- description:
33
+ description: Linux Resource Monitoring Input plugin for Fluent event collector
76
34
  email: nozino@gmail.com
77
35
  executables: []
78
36
  extensions: []
79
- extra_rdoc_files:
80
- - LICENSE.txt
81
- - README.md
37
+ extra_rdoc_files: []
82
38
  files:
83
39
  - Gemfile
84
40
  - LICENSE.txt