fluent-plugin-lm-logs 0.0.12 → 1.0.2

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: c930b2614b184eeba146418a22a10d732b8fd7aa57aabc8db45ec6d9e8608f0a
4
- data.tar.gz: 6ced74d3ff2e35a3771b63d7f88572c2ebfd4e3dccd23e7a450a5bce6b7a22f7
3
+ metadata.gz: 1c2298de6fe81e9eb49052ee49d55180193d254fee912339b9c8f6fad6c7aea1
4
+ data.tar.gz: 0a64fdb982ca4d8768175db534198b942d96fdcb22519913c5c077b7201bb6ea
5
5
  SHA512:
6
- metadata.gz: dd6ecf139c62cfba239000b45f134bd5c162ea773112438223fcbc20291ddaf97aebc3dec7aca2469639160f585baa2af628b94d445cee01dcb10d5bea7ffc31
7
- data.tar.gz: e4e97f690c535f223b8c934bcdcf03cf3821f799f6018520ea8c2400eeb726b75de98d7eefa52ab80abf679ec85cc8941123596275f964755b4751372ffc1daf
6
+ metadata.gz: 95fe45b670b97925e672ecad76a724ed9eef24fd1e1685a131a4375ac7e662161aa5612ec34f3fc99e0f5817b24e7d640481b457bd466f2d2b3455f8e004e394
7
+ data.tar.gz: c69f47a5aad81cb1fbf778f14bc3238ee0271cb9530516a31120e46829aa7cf28336d509f9d6be2ddb155794ec9926896b2fc9738f524a30cf222f31013e322c
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
 
2
2
  [![Gem Version](https://badge.fury.io/rb/fluent-plugin-lm-logs.svg)](http://badge.fury.io/rb/fluent-plugin-lm-logs)
3
- # lm-logs-fluentd (beta)
3
+ # lm-logs-fluentd
4
4
  This output plugin sends Fluentd records to the configured LogicMonitor account.
5
5
 
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
 
@@ -68,4 +68,9 @@ See the [LogicMonitor Helm repository](https://github.com/logicmonitor/k8s-helm-
68
68
  | `access_key` | LM API Token access key. |
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
- | `force_encoding` | Specify charset when logs contains invalid utf-8 characters. |
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` and `namespace` when `true`. default `false`. |
74
+ | `metadata_to_exclude` | `String array` of keys of metadata to exclude. default `empty` |
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 = '0.0.12'
8
+ spec.version = '1.0.2'
9
9
  spec.authors = ["LogicMonitor"]
10
10
  spec.email = "rubygems@logicmonitor.com"
11
11
  spec.summary = "LogicMonitor logs fluentd output plugin"
@@ -26,11 +26,21 @@ module Fluent
26
26
  config_param :resource_mapping, :hash, :default => {"host": "system.hostname", "hostname": "system.hostname"}
27
27
 
28
28
  config_param :debug, :bool, :default => false
29
+
30
+ config_param :include_metadata, :bool, :default => false
29
31
 
30
32
  config_param :force_encoding, :string, :default => ""
31
33
 
32
34
  config_param :compression, :string, :default => ""
33
35
 
36
+ config_param :log_source, :string, :default => "lm-logs-fluentd"
37
+
38
+ config_param :version_id, :string, :default => "version_id"
39
+
40
+ config_param :device_less_logs, :bool, :default => false
41
+
42
+ config_param :metadata_to_exclude, :array, default: [], value_type: :string
43
+
34
44
  # This method is called before starting.
35
45
  # 'conf' is a Hash that includes configuration parameters.
36
46
  # If the configuration is invalid, raise Fluent::ConfigError.
@@ -67,7 +77,9 @@ module Fluent
67
77
  events = []
68
78
  chunk.msgpack_each do |(tag, time, record)|
69
79
  event = process_record(tag,time,record)
70
- events.push(event)
80
+ if event != nil
81
+ events.push(event)
82
+ end
71
83
  end
72
84
  send_batch(events)
73
85
  end
@@ -75,24 +87,20 @@ module Fluent
75
87
  def process_record(tag, time, record)
76
88
  resource_map = {}
77
89
  lm_event = {}
78
- lm_event["message"] = record["message"]
79
-
80
- if @force_encoding != ""
81
- lm_event["message"] = lm_event["message"].force_encoding(@force_encoding).encode("UTF-8")
82
- end
83
-
84
- if record["_lm.resourceId"] == nil
85
- @resource_mapping.each do |key, value|
86
- k = value
87
- nestedVal = record
88
- key.to_s.split('.').each { |x| nestedVal = nestedVal[x] }
89
- if nestedVal != nil
90
- resource_map[k] = nestedVal
90
+ if !@device_less_logs
91
+ if record["_lm.resourceId"] == nil
92
+ @resource_mapping.each do |key, value|
93
+ k = value
94
+ nestedVal = record
95
+ key.to_s.split('.').each { |x| nestedVal = nestedVal[x] }
96
+ if nestedVal != nil
97
+ resource_map[k] = nestedVal
98
+ end
91
99
  end
92
- end
93
- lm_event["_lm.resourceId"] = resource_map
94
- else
95
- lm_event["_lm.resourceId"] = record["_lm.resourceId"]
100
+ lm_event["_lm.resourceId"] = resource_map
101
+ else
102
+ lm_event["_lm.resourceId"] = record["_lm.resourceId"]
103
+ end
96
104
  end
97
105
 
98
106
  if record["timestamp"] != nil
@@ -101,6 +109,34 @@ module Fluent
101
109
  lm_event["timestamp"] = Time.at(time).utc.to_datetime.rfc3339
102
110
  end
103
111
 
112
+ if @include_metadata
113
+ record.each do |key, value|
114
+ case key
115
+ when *@metadata_to_exclude.concat(["timestamp","_lm.resourceId","log","message"])
116
+ else
117
+ lm_event["#{key}"] = value
118
+
119
+ if @force_encoding != ""
120
+ lm_event["#{key}"] = lm_event["#{key}"].force_encoding(@force_encoding).encode("UTF-8")
121
+ end
122
+ end
123
+ end
124
+ end
125
+ lm_event["message"] = record["message"]
126
+
127
+ if @force_encoding != ""
128
+ lm_event["message"] = lm_event["message"].force_encoding(@force_encoding).encode("UTF-8")
129
+ end
130
+
131
+ if @device_less_logs
132
+ if record["service"]==nil || record["namespace"] == nil
133
+ log.error "When device_less_logs is set \'true\', record must have \'service\' and \'namespace\'. Ignoring this event #{lm_event}."
134
+ return nil
135
+ else
136
+ lm_event["service"] = record["service"]
137
+ lm_event["namespace"] = record["namespace"]
138
+ end
139
+ end
104
140
  return lm_event
105
141
  end
106
142
 
@@ -120,6 +156,7 @@ module Fluent
120
156
  request = Net::HTTP::Post.new(uri.request_uri)
121
157
  request['authorization'] = generate_token(events)
122
158
  request['Content-type'] = "application/json"
159
+ request['User-Agent'] = log_source + "/" + version_id
123
160
 
124
161
  if @compression == "gzip"
125
162
  request['Content-Encoding'] = "gzip"
@@ -130,6 +167,11 @@ module Fluent
130
167
  request.body = body
131
168
  end
132
169
 
170
+ if @debug
171
+ log.info "Sending the below request headers to logicmonitor:"
172
+ request.each_header {|key,value| log.info "#{key} = #{value}" }
173
+ end
174
+
133
175
  resp = http.request(request)
134
176
  if @debug || (!resp.kind_of? Net::HTTPSuccess)
135
177
  log.info "Status code:#{resp.code} Request Id:#{resp.header['x-request-id']}"
@@ -149,4 +191,4 @@ module Fluent
149
191
  "LMv1 #{@access_id}:#{signature}:#{timestamp}"
150
192
  end
151
193
  end
152
- end
194
+ 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: 0.0.12
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - LogicMonitor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-25 00:00:00.000000000 Z
11
+ date: 2022-03-02 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.1.4
68
+ rubygems_version: 3.3.7
69
69
  signing_key:
70
70
  specification_version: 4
71
71
  summary: LogicMonitor logs fluentd output plugin