fluent-plugin-lm-logs 1.0.1 → 1.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
  SHA256:
3
- metadata.gz: 6ac69aa367c60b885d377a7c818fbfcb70c8af34d86315fee0d2b18778351a92
4
- data.tar.gz: b3cfdfbe4362b7f8d71a79d5aa34e92cc2b29c1a63b18a00b7aaa0cbe09cb14a
3
+ metadata.gz: 74ceac6a53b86efe8123cd6ec143d4839de6043815ebb10e763e2b3019122396
4
+ data.tar.gz: f72441fc5646c2cdc6f602f066fca505e1bb713371a90bdbf019ea6cf07c80b0
5
5
  SHA512:
6
- metadata.gz: aae1c2c44c9cc03c7256147322eb34d14eb551ea115a5befde0aa56903afb9a98e21d5670f0c253ac6fc7ef9a0be65ebd827ccc0581bda097597de77a1a5861f
7
- data.tar.gz: fb6d25f6b71ad3c30084840e145ec1e7c4d98d036773762babb3b9d18c8136f5f384f85f065c3758972448f861f4e5617a5d57a97efcb5e0d77f30c8a945b446
6
+ metadata.gz: ee9e805c8fe449abca81d6fdfff713130359c7b3cb5c246a48fc37e8f6a6a93ab25c2203c1aa5ecfb441ca0a3e7223373ebad31b2a5314660eba5ab5bb31ed0c
7
+ data.tar.gz: a910b4872388fade3cf044e7f2c9e2562a23d5730a2faffc4f4daa9f942220a44c02fa3daead5e078e662eaddb8ecb27c034f3bb190324267b0b4a04e953cd87
data/README.md CHANGED
@@ -6,8 +6,8 @@ This output plugin sends Fluentd records to the configured LogicMonitor account.
6
6
  ## Prerequisites
7
7
 
8
8
  Install the plugin:
9
- * With gem: `gem install fluent-plugin-lm-logs`
10
- * For deb packages: `td-agent-gem install fluent-plugin-lm-logs`
9
+ * With gem (if td-agent/fluentd is installed along with native ruby): `gem install fluent-plugin-lm-logs`
10
+ * For native td-agent/fluentd plugin handling: `td-agent-gem install fluent-plugin-lm-logs`
11
11
 
12
12
  Alternatively, you can add `out_lm.rb` to your Fluentd plugins directory.
13
13
 
@@ -69,3 +69,8 @@ See the [LogicMonitor Helm repository](https://github.com/logicmonitor/k8s-helm-
69
69
  | `flush_interval` | Defines the time in seconds to wait before sending batches of logs to LogicMonitor. Default is `60s`. |
70
70
  | `debug` | When `true`, logs more information to the fluentd console. |
71
71
  | `force_encoding` | Specify charset when logs contains invalid utf-8 characters. |
72
+ | `include_metadata` | When `true`, appends additional metadata to the log. default `false`. |
73
+ | `device_less_logs` | When `true`, do not map log with any resource. record must have `service` when `true`. default `false`. |
74
+
75
+
76
+
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+ task default: "test"
4
+
5
+ Rake::TestTask.new do |task|
6
+ task.pattern = "test/plugin/*.rb"
7
+ end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "fluent-plugin-lm-logs"
8
- spec.version = '1.0.1'
8
+ spec.version = '1.0.4'
9
9
  spec.authors = ["LogicMonitor"]
10
10
  spec.email = "rubygems@logicmonitor.com"
11
11
  spec.summary = "LogicMonitor logs fluentd output plugin"
@@ -15,6 +15,10 @@ module Fluent
15
15
  class LmOutput < BufferedOutput
16
16
  Fluent::Plugin.register_output('lm', self)
17
17
 
18
+ RESOURCE_MAPPING_KEY = "_lm.resourceId".freeze
19
+ DEVICELESS_KEY_SERVICE = "resource.service.name".freeze
20
+ DEVICELESS_KEY_NAMESPACE = "resource.service.namespace".freeze
21
+
18
22
  # config_param defines a parameter. You can refer a parameter via @path instance variable
19
23
 
20
24
  config_param :access_id, :string, :default => "access_id"
@@ -26,6 +30,8 @@ module Fluent
26
30
  config_param :resource_mapping, :hash, :default => {"host": "system.hostname", "hostname": "system.hostname"}
27
31
 
28
32
  config_param :debug, :bool, :default => false
33
+
34
+ config_param :include_metadata, :bool, :default => false
29
35
 
30
36
  config_param :force_encoding, :string, :default => ""
31
37
 
@@ -34,7 +40,9 @@ module Fluent
34
40
  config_param :log_source, :string, :default => "lm-logs-fluentd"
35
41
 
36
42
  config_param :version_id, :string, :default => "version_id"
37
-
43
+
44
+ config_param :device_less_logs, :bool, :default => false
45
+
38
46
  # This method is called before starting.
39
47
  # 'conf' is a Hash that includes configuration parameters.
40
48
  # If the configuration is invalid, raise Fluent::ConfigError.
@@ -71,7 +79,9 @@ module Fluent
71
79
  events = []
72
80
  chunk.msgpack_each do |(tag, time, record)|
73
81
  event = process_record(tag,time,record)
74
- events.push(event)
82
+ if event != nil
83
+ events.push(event)
84
+ end
75
85
  end
76
86
  send_batch(events)
77
87
  end
@@ -79,24 +89,37 @@ module Fluent
79
89
  def process_record(tag, time, record)
80
90
  resource_map = {}
81
91
  lm_event = {}
82
- lm_event["message"] = record["message"]
83
-
84
- if @force_encoding != ""
85
- lm_event["message"] = lm_event["message"].force_encoding(@force_encoding).encode("UTF-8")
92
+
93
+ if @include_metadata
94
+ lm_event = get_metadata(record)
86
95
  end
87
96
 
88
- if record["_lm.resourceId"] == nil
89
- @resource_mapping.each do |key, value|
90
- k = value
91
- nestedVal = record
92
- key.to_s.split('.').each { |x| nestedVal = nestedVal[x] }
93
- if nestedVal != nil
94
- resource_map[k] = nestedVal
97
+ if !@device_less_logs
98
+ # With devices
99
+ if record[RESOURCE_MAPPING_KEY] == nil
100
+ @resource_mapping.each do |key, value|
101
+ k = value
102
+ nestedVal = record
103
+ key.to_s.split('.').each { |x| nestedVal = nestedVal[x] }
104
+ if nestedVal != nil
105
+ resource_map[k] = nestedVal
106
+ end
95
107
  end
96
- end
97
- lm_event["_lm.resourceId"] = resource_map
108
+ lm_event[RESOURCE_MAPPING_KEY] = resource_map
109
+ else
110
+ lm_event[RESOURCE_MAPPING_KEY] = record[RESOURCE_MAPPING_KEY]
111
+ end
98
112
  else
99
- lm_event["_lm.resourceId"] = record["_lm.resourceId"]
113
+ # Device less
114
+ if record[DEVICELESS_KEY_SERVICE]==nil
115
+ log.error "When device_less_logs is set \'true\', record must have \'service\'. Ignoring this event #{lm_event}."
116
+ return nil
117
+ else
118
+ lm_event[DEVICELESS_KEY_SERVICE] = encode_if_necessary(record[DEVICELESS_KEY_SERVICE])
119
+ if record[DEVICELESS_KEY_NAMESPACE]!=nil
120
+ lm_event[DEVICELESS_KEY_NAMESPACE] = encode_if_necessary(record[DEVICELESS_KEY_NAMESPACE])
121
+ end
122
+ end
100
123
  end
101
124
 
102
125
  if record["timestamp"] != nil
@@ -105,9 +128,37 @@ module Fluent
105
128
  lm_event["timestamp"] = Time.at(time).utc.to_datetime.rfc3339
106
129
  end
107
130
 
131
+ lm_event["message"] = encode_if_necessary(record["message"])
132
+
108
133
  return lm_event
109
134
  end
110
135
 
136
+ def get_metadata(record)
137
+ #if encoding is not defined we will skip going through each key val
138
+ #and return the whole record for performance reasons in case of a bulky record.
139
+ if @force_encoding == ""
140
+ return record
141
+ else
142
+ lm_event = {}
143
+ record.each do |key, value|
144
+ lm_event["#{key}"] = get_encoded_string(value)
145
+ end
146
+ return lm_event
147
+ end
148
+ end
149
+
150
+ def encode_if_necessary(str)
151
+ if @force_encoding != ""
152
+ return get_encoded_string(str)
153
+ else
154
+ return str
155
+ end
156
+ end
157
+
158
+ def get_encoded_string(str)
159
+ return str.force_encoding(@force_encoding).encode("UTF-8")
160
+ end
161
+
111
162
  def send_batch(events)
112
163
  url = "https://#{@company_name}.logicmonitor.com/rest/log/ingest"
113
164
  body = events.to_json
@@ -159,4 +210,4 @@ module Fluent
159
210
  "LMv1 #{@access_id}:#{signature}:#{timestamp}"
160
211
  end
161
212
  end
162
- end
213
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-lm-logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - LogicMonitor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-15 00:00:00.000000000 Z
11
+ date: 2022-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -65,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
67
  requirements: []
68
- rubygems_version: 3.2.15
68
+ rubygems_version: 3.3.7
69
69
  signing_key:
70
70
  specification_version: 4
71
71
  summary: LogicMonitor logs fluentd output plugin