fluent-plugin-node-exporter-metrics 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5783b3b581c87d3e305da625e7cb9dabf63aee126bc2f23ca889a553906c131
4
- data.tar.gz: da252aa8bf053fd1fdbe0fb5111804d6865a9f16dbd78527d8fa13ccb2ffbb10
3
+ metadata.gz: a62cd74f3d7cf5b3e1dbca91ddf364d74ef624f5bbbf7fc4c433cb01fe0fe395
4
+ data.tar.gz: ef90042396cde24e70b97238ce3bf9d1d477f60ccada8e387c750edc13904976
5
5
  SHA512:
6
- metadata.gz: 782fb7e500cb04da57373ba18fa2da26a54c25f4fb9951dacad0ee073c74af1c5010de907ea532ad46c6b2f98564524d589a5bc213cd80545d883ad2d86e99c0
7
- data.tar.gz: d930fe4fd9b378535af2c3a977441a61fa9a703ddb2d101217494fad91b9cf2a0b1cb0d3584721e2def4bee69e5d09e0ca7dcdafdc652527e68fd7f7a98e2598
6
+ metadata.gz: fe568aa876e4f02e8c2ad36a89e41f6499c3fc6cbd7c0bb048c7e1f889e87e2b4deb6cfc1cbd3d952c1dd69423912d804203e8e0f9e245d75204583cf972ed91
7
+ data.tar.gz: 64aa9bb65c333d5add6fcad002da4225977b766b6bec9bea0f8f8bbfbe26e8761a432cf6fe5ce52f1a3bc40c92c9ff0b6b9a07413a59fa1308681b1ed28f6730
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # 0.2.0
2
+
3
+ ## Release v0.2.0 - 2021/09/22
4
+
5
+ * Fixed memory leaks with meminfo, netdev and vmstat collectors
6
+ * Fixed a bug that raising wrong exception with CMetricsDataSchemaParser.
7
+ * Added a FAQ for cpufreq configuration
8
+ * Updated missing cmake 3.x install instruction for CentOS 7/RHEL 7
9
+
1
10
  # 0.1.0
2
11
 
3
12
  ## Release v0.1.0 - 2021/09/21
data/README.md CHANGED
@@ -22,13 +22,14 @@ Note that CMake 3.13 or later must be installed.
22
22
  ### CentOS 7/RHEL 7
23
23
 
24
24
  ```
25
- $ sudo yum install libcap-ng-devel gcc cmake3
25
+ $ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
26
+ $ sudo yum install libcap-ng-devel gcc cmake3 make
26
27
  ```
27
28
 
28
29
  ### CentOS 8/RHEL 8
29
30
 
30
31
  ```
31
- $ sudo dnf install libcap-ng-devel gcc cmake
32
+ $ sudo dnf install libcap-ng-devel gcc cmake make
32
33
  ```
33
34
 
34
35
 
@@ -160,6 +161,12 @@ Here is the result.
160
161
  2021-09-21 10:57:48.015023773 +0900 node_metrics: [{"name":"node_time_seconds","value":1.632189468,"desc":"System time in seconds since epoch (1970).","ts":1632189468014812147}]
161
162
  ```
162
163
 
164
+ ## FAQ
165
+
166
+ ### Why is error_class=Fluent::ConfigError error="Linux capability CAP_DAC_READ_SEARCH must be enabled" happen?
167
+
168
+ See [Prerequisite for cpufreq](docs/cpufreq.md#prerequisite) section for enabling cpufreq collector.
169
+
163
170
  ## Copyright
164
171
 
165
172
  * Copyright(c) 2021- Kentaro Hayashi
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-node-exporter-metrics"
6
- spec.version = "0.1.0"
6
+ spec.version = "0.2.0"
7
7
  spec.authors = ["Kentaro Hayashi"]
8
8
  spec.email = ["hayashi@clear-code.com"]
9
9
 
@@ -110,20 +110,21 @@ module Fluent
110
110
 
111
111
  def refresh_watchers
112
112
  begin
113
- @serde = CMetrics::Serde.new
113
+ serde = CMetrics::Serde.new
114
114
  @collectors.each do |collector|
115
115
  begin
116
116
  collector.run
117
117
  collector.cmetrics.each do |key, cmetric|
118
- @serde.concat(cmetric) if cmetric
118
+ serde.concat(cmetric) if cmetric
119
119
  end
120
120
  rescue => e
121
121
  $log.error(e.message)
122
122
  end
123
123
  end
124
124
  record = {
125
- "cmetrics" => @serde.to_msgpack
125
+ "cmetrics" => serde.to_msgpack
126
126
  }
127
+ serde = nil
127
128
  es = OneEventStream.new(Fluent::EventTime.now, record)
128
129
  router.emit_stream(@tag, es)
129
130
  end
@@ -28,7 +28,7 @@ module Fluent
28
28
  data << to_readable_hash(metric)
29
29
  end
30
30
  rescue => e
31
- raise Fluent::ParserError.new(e.message)
31
+ raise Fluent::Plugin::Parser::ParserError.new(e.message)
32
32
  end
33
33
  data.flatten
34
34
  end
@@ -26,29 +26,37 @@ module Fluent
26
26
  super(config)
27
27
 
28
28
  @metrics = {}
29
+ meminfo_path = File.join(@procfs_path, "meminfo")
30
+ File.readlines(meminfo_path).each do |line|
31
+ metric_name, name, _ = parse_meminfo_line(line)
32
+ @gauge = CMetrics::Gauge.new
33
+ @gauge.create("node", "memory", name, "Memory information field #{metric_name}.")
34
+ @metrics[metric_name.intern] = @gauge
35
+ end
29
36
  end
30
37
 
31
38
  def run
32
39
  meminfo_update
33
40
  end
34
41
 
42
+ def parse_meminfo_line(line)
43
+ name, value, unit = line.split
44
+ name.delete!(":")
45
+ if name.end_with?("(anon)") or name.end_with?("(file)")
46
+ name.sub!(/\((anon)\)|\((file)\)/, "_\\1\\2")
47
+ end
48
+ if unit
49
+ name << "_bytes"
50
+ value = value.to_f * 1024
51
+ end
52
+ ["node_memory_#{name}", name, value]
53
+ end
54
+
35
55
  def meminfo_update
36
56
  meminfo_path = File.join(@procfs_path, "meminfo")
37
57
  File.readlines(meminfo_path).each do |line|
38
- name, value, unit = line.split
39
- name.delete!(":")
40
- if name.end_with?("(anon)") or name.end_with?("(file)")
41
- name.sub!(/\((anon)\)|\((file)\)/, "_\\1\\2")
42
- end
43
- if unit
44
- name << "_bytes"
45
- value = value.to_f * 1024
46
- end
47
- metric_name = "node_memory_#{name}"
48
- @gauge = CMetrics::Gauge.new
49
- @gauge.create("node", "memory", name, "#{name}.")
50
- @gauge.set(value.to_f)
51
- @metrics[metric_name.intern] = @gauge
58
+ metric_name, _, value = parse_meminfo_line(line)
59
+ @metrics[metric_name.intern].set(value.to_f)
52
60
  end
53
61
  end
54
62
 
@@ -26,6 +26,18 @@ module Fluent
26
26
  super(config)
27
27
 
28
28
  @metrics = {}
29
+ RECEIVE_FIELDS.each_with_index do |field, index|
30
+ metric_name = "receive_#{field}_total"
31
+ @counter = CMetrics::Counter.new
32
+ @counter.create("node", "network", metric_name, "Network device statistic #{metric_name}.", ["device"])
33
+ @metrics[metric_name.intern] = @counter
34
+ end
35
+ TRANSMIT_FIELDS.each_with_index do |field, index|
36
+ metric_name = "transmit_#{field}_total"
37
+ @counter = CMetrics::Counter.new
38
+ @counter.create("node", "network", metric_name, "Network device statistic #{metric_name}.", ["device"])
39
+ @metrics[metric_name.intern] = @counter
40
+ end
29
41
  end
30
42
 
31
43
  def run
@@ -49,18 +61,6 @@ module Fluent
49
61
 
50
62
  def netdev_update
51
63
  netdev_path = File.join(@procfs_path, "net/dev")
52
- RECEIVE_FIELDS.each_with_index do |field, index|
53
- metric_name = "receive_#{field}_total"
54
- @counter = CMetrics::Counter.new
55
- @counter.create("node", "network", metric_name, "Network device statistic #{metric_name}.", ["device"])
56
- @metrics[metric_name.intern] = @counter
57
- end
58
- TRANSMIT_FIELDS.each_with_index do |field, index|
59
- metric_name = "transmit_#{field}_total"
60
- @counter = CMetrics::Counter.new
61
- @counter.create("node", "network", metric_name, "Network device statistic #{metric_name}.", ["device"])
62
- @metrics[metric_name.intern] = @counter
63
- end
64
64
  File.readlines(netdev_path).each_with_index do |line, index|
65
65
  # net/dev must be 3 columns
66
66
  if index == 0 and line.split("|").size != 3
@@ -28,6 +28,15 @@ module Fluent
28
28
  super(config)
29
29
 
30
30
  @metrics = {}
31
+ vmstat_path = File.join(@procfs_path, "vmstat")
32
+ File.readlines(vmstat_path).each do |line|
33
+ if VMSTAT_ENTRIES_REGEX.match?(line)
34
+ key, _ = line.split(' ', 2)
35
+ @untyped = CMetrics::Untyped.new
36
+ @untyped.create("node", "vmstat", key, "#{vmstat_path} information field #{key}.")
37
+ @metrics[key.intern] = @untyped
38
+ end
39
+ end
31
40
  end
32
41
 
33
42
  def run
@@ -39,10 +48,7 @@ module Fluent
39
48
  File.readlines(vmstat_path).each do |line|
40
49
  if VMSTAT_ENTRIES_REGEX.match?(line)
41
50
  key, value = line.split(' ', 2)
42
- @untyped = CMetrics::Untyped.new
43
- @untyped.create("node", "vmstat", key, "#{vmstat_path} information field #{key}.")
44
- @untyped.set(value.to_f)
45
- @metrics[key.intern] = @untyped
51
+ @metrics[key.intern].set(value.to_f)
46
52
  end
47
53
  end
48
54
  end
@@ -391,7 +391,7 @@ class NodeExporterMetricsInputTest < Test::Unit::TestCase
391
391
  ))
392
392
  opts = []
393
393
  fields.each do |field|
394
- opts << {"ns"=>"node", "ss"=>"memory", "name"=>field, "desc"=>"#{field}."}
394
+ opts << {"ns"=>"node", "ss"=>"memory", "name"=>field, "desc"=>"Memory information field node_memory_#{field}."}
395
395
  end
396
396
  assert_equal([
397
397
  fields.size,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-node-exporter-metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kentaro Hayashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-21 00:00:00.000000000 Z
11
+ date: 2021-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmetrics