influxdb-logger 1.0.3 → 2.0.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 +43 -40
- data/lib/influxdb-logger/logger.rb +14 -17
- data/lib/influxdb-logger/version.rb +1 -1
- data/spec/logger_spec.rb +5 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e56aa8636f81b07f6f8ba75b534ac4165b190ef1
|
4
|
+
data.tar.gz: bc744b3cb2fd91cc6ebaa3735ab5d02bc1252ffc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f1fc696deec683e26159b0993771d61762cbf372640ec6c082852905dff18f956e147fb84bb29aa5d5f52cba66861be129a15cb04b3201108cc45b18caceb4e
|
7
|
+
data.tar.gz: 16f960d5c0315cf0bc24762974611811fad31faebe69b3e8efdfa98f216a52ee6ccd14984093b6bdf2d824c050a9cf1ef7eff7fa4f04c3faaf6df6dc99b586a5
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
Add this line to your application's Gemfile:
|
12
12
|
|
13
|
-
gem 'influxdb-logger', '
|
13
|
+
gem 'influxdb-logger', '2.0.0'
|
14
14
|
|
15
15
|
And then execute:
|
16
16
|
|
@@ -20,42 +20,56 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
$ gem install influxdb-logger
|
22
22
|
|
23
|
-
## Usage
|
23
|
+
## Basic Usage
|
24
24
|
|
25
25
|
In `config/environments/production.rb`(`test.rb`, `development.rb`)
|
26
26
|
|
27
27
|
```ruby
|
28
|
-
config.logger = InfluxdbLogger::Logger.new(
|
28
|
+
config.logger = InfluxdbLogger::Logger.new(influxdb_tags: ... tags: ... settings: ... batch_size: ..., interval: ..., async: ...)
|
29
29
|
|
30
30
|
```
|
31
31
|
|
32
|
-
|
32
|
+
By default, influxdb-logger will log
|
33
|
+
`duration, db, format, location, message, message_type, method, params, path, severity, status, view` as [fields](https://docs.influxdata.com/influxdb/v1.7/concepts/key_concepts/#field-key) into specified
|
34
|
+
[series](https://docs.influxdata.com/influxdb/v1.7/concepts/key_concepts/#series).
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
+
Which means, your `influxdb-logger` is good to go with configuration only about how to talk to influxdb:
|
37
|
+
```ruby
|
38
|
+
config.logger = InfluxdbLogger::Logger.new(settings: {
|
39
|
+
database: ENV['INFLUXDB_DB_NAME'],
|
40
|
+
series: ENV['INFLUXDB_SERIES'],
|
41
|
+
username: ENV['INFLUXDB_USER'],
|
42
|
+
password: ENV['INFLUXDB_USER_PASSWORD']
|
43
|
+
})
|
44
|
+
```
|
36
45
|
|
46
|
+
## Advanced Usage
|
47
|
+
|
48
|
+
* `influxdb_tags`[Array]: This argument specifies [tag-set](https://docs.influxdata.com/influxdb/v1.7/concepts/key_concepts/#tag-set) of series.
|
49
|
+
If we need to constantly checkout influxdb logs about specific `controller` or `action`, the best way is to tag both fields to speed up any query on them utilizing `influxdb_tags`:
|
37
50
|
```ruby
|
38
|
-
|
39
|
-
|
40
|
-
ua: :user_agent,
|
41
|
-
device_type: -> request { request.params[:DEVICE_TYPE] },
|
42
|
-
version: -> request { request.params[:VERSION] },
|
43
|
-
session_id: -> request { request.params[:session_id] }
|
44
|
-
}, settings: ...})
|
51
|
+
config.logger = InfluxdbLogger::Logger.new(infludb_tags: [:controller, :action], settings: ...)
|
52
|
+
```
|
45
53
|
|
54
|
+
* `tags`[Hash]: If extra fields are required to be sent to influxdb, `tags` could be utilized, e.g., ip info of agents:
|
55
|
+
```ruby
|
56
|
+
config.logger = InfluxdbLogger::Logger.new(tags: {
|
57
|
+
remote_ip: -> request { request.remote_ip }
|
58
|
+
}, settings: ...)
|
46
59
|
```
|
60
|
+
Passed `tags` can be a `Hash` consisting values of any basic ruby type or a `lambda`.
|
47
61
|
|
48
|
-
* `settings`:
|
49
|
-
```ruby
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
62
|
+
* `settings`: Which defines how our `influxdb-logger` connects to influxdb database. Detailed doc about it is here: [influxdb-ruby](https://github.com/influxdata/influxdb-ruby).
|
63
|
+
```ruby
|
64
|
+
InfluxdbLogger::Logger.new(settings: {
|
65
|
+
host: 'influxdb',
|
66
|
+
retry: 3,
|
67
|
+
time_precision: 'ms',
|
68
|
+
database: ENV['INFLUXDB_DB_NAME'],
|
69
|
+
series: ENV['INFLUXDB_SERIES'],
|
70
|
+
username: ENV['INFLUXDB_USER'],
|
71
|
+
password: ENV['INFLUXDB_USER_PASSWORD']
|
72
|
+
})
|
59
73
|
```
|
60
74
|
|
61
75
|
* `batch_size`, `interval`: Since logging is a high frequncy job for any application with large user base in production environment. These two parameters
|
@@ -64,28 +78,17 @@ Supported parameters for `InfluxdbLogger::Logger.new`:
|
|
64
78
|
For example, you can tell the logger to log when size of logging actions hits `1000` or that the last logging action is `1000`ms later than the first one in the queue by:
|
65
79
|
|
66
80
|
```ruby
|
67
|
-
|
68
|
-
ip: :ip,
|
69
|
-
ua: :user_agent,
|
70
|
-
device_type: -> request { request.params[:DEVICE_TYPE] },
|
71
|
-
version: -> request { request.params[:VERSION] },
|
72
|
-
session_id: -> request { request.params[:session_id] }
|
73
|
-
}, settings: {
|
74
|
-
host: 'influxdb',
|
75
|
-
database: 'rallets',
|
76
|
-
series: series,
|
77
|
-
retry: 3,
|
78
|
-
username: 'user',
|
79
|
-
password: 'password',
|
80
|
-
time_precision: 'ms'
|
81
|
-
})
|
81
|
+
InfluxdbLogger::Logger.new(batch_size: 1000, interval: 1000, settings: ...)
|
82
82
|
```
|
83
83
|
|
84
84
|
* `async`: Determines whether the logger write asynchronously to influxdb, default to `false`. Read code [here](https://github.com/influxdata/influxdb-ruby/blob/master/lib/influxdb/writer/async.rb#L48) to know how it works.
|
85
85
|
```ruby
|
86
|
-
|
86
|
+
InfluxdbLogger::Logger.new(async: false, settings: ...)
|
87
87
|
```
|
88
88
|
|
89
|
+
## License
|
90
|
+
|
91
|
+
MIT
|
89
92
|
|
90
93
|
## Contributing
|
91
94
|
|
@@ -44,11 +44,11 @@ module InfluxdbLogger
|
|
44
44
|
# Severity label for logging. (max 5 char)
|
45
45
|
SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY)
|
46
46
|
|
47
|
-
def self.new(
|
48
|
-
|
49
|
-
Rails.application.config.log_tags =
|
47
|
+
def self.new(influxdb_tags: [], tags: {}, settings: {}, batch_size: 1000, interval: 1000, async: true)
|
48
|
+
log_tags = tags.values
|
49
|
+
Rails.application.config.log_tags = log_tags
|
50
50
|
if Rails.application.config.respond_to?(:action_cable)
|
51
|
-
Rails.application.config.action_cable.log_tags =
|
51
|
+
Rails.application.config.action_cable.log_tags = log_tags.map do |x|
|
52
52
|
case
|
53
53
|
when x.respond_to?(:call)
|
54
54
|
x
|
@@ -69,8 +69,8 @@ module InfluxdbLogger
|
|
69
69
|
settings[:async] = async
|
70
70
|
|
71
71
|
level = SEV_LABEL.index(Rails.application.config.log_level.to_s.upcase)
|
72
|
-
|
73
|
-
logger = ActiveSupport::TaggedLogging.new(
|
72
|
+
inner_logger = InfluxdbLogger::InnerLogger.new(settings, level, tags, influxdb_tags)
|
73
|
+
logger = ActiveSupport::TaggedLogging.new(inner_logger)
|
74
74
|
logger.extend self
|
75
75
|
end
|
76
76
|
|
@@ -100,7 +100,7 @@ module InfluxdbLogger
|
|
100
100
|
end
|
101
101
|
|
102
102
|
class InnerLogger < ActiveSupport::Logger
|
103
|
-
def initialize(options, level,
|
103
|
+
def initialize(options, level, initialized_tags, influxdb_tags)
|
104
104
|
self.level = level
|
105
105
|
@messages_type = (options[:messages_type] || :array).to_sym
|
106
106
|
@tag = options[:tag]
|
@@ -115,15 +115,15 @@ module InfluxdbLogger
|
|
115
115
|
@time_precision = options[:time_precision] || 'ns'
|
116
116
|
|
117
117
|
@influxdb_logger = InfluxDB::Client.new(
|
118
|
-
**options.slice(:host, :database, :retry, :username, :password, :async),
|
118
|
+
**options.slice(:host, :port, :database, :retry, :username, :password, :async),
|
119
119
|
time_precision: @time_precision,
|
120
120
|
discard_write_errors: true
|
121
121
|
)
|
122
122
|
|
123
|
+
@influxdb_tags = influxdb_tags
|
123
124
|
@severity = 0
|
124
125
|
@messages = []
|
125
|
-
@
|
126
|
-
@fields = fields
|
126
|
+
@initialized_tags = initialized_tags
|
127
127
|
after_initialize if respond_to? :after_initialize
|
128
128
|
end
|
129
129
|
|
@@ -181,19 +181,16 @@ module InfluxdbLogger
|
|
181
181
|
}
|
182
182
|
end
|
183
183
|
|
184
|
-
tags = @global_tags.clone
|
185
|
-
|
186
184
|
if @tags
|
187
|
-
@
|
188
|
-
|
185
|
+
@initialized_tags.keys.zip(@tags).each do |k, v|
|
186
|
+
values[k] = v
|
189
187
|
end
|
190
188
|
end
|
191
|
-
|
192
189
|
message = {
|
193
190
|
series: @series,
|
194
191
|
timestamp: Time.now.to_precision(@time_precision),
|
195
|
-
tags:
|
196
|
-
values: values.
|
192
|
+
tags: values.slice(*@influxdb_tags).merge(@global_tags),
|
193
|
+
values: values.except(*@influxdb_tags).merge({
|
197
194
|
severity: format_severity(@severity)
|
198
195
|
}).transform_values {|value|
|
199
196
|
case value
|
data/spec/logger_spec.rb
CHANGED
@@ -51,6 +51,10 @@ describe InfluxdbLogger::Logger do
|
|
51
51
|
|
52
52
|
let(:series) { 'Request' }
|
53
53
|
|
54
|
+
let(:influxdb_tags) {
|
55
|
+
[:uuid, :foo]
|
56
|
+
}
|
57
|
+
|
54
58
|
let(:tags) {
|
55
59
|
{
|
56
60
|
uuid: :uuid,
|
@@ -71,7 +75,7 @@ describe InfluxdbLogger::Logger do
|
|
71
75
|
}
|
72
76
|
|
73
77
|
let(:logger) {
|
74
|
-
InfluxdbLogger::Logger.new(tags: tags, settings: settings)
|
78
|
+
InfluxdbLogger::Logger.new(influxdb_tags: influxdb_tags, tags: tags, settings: settings)
|
75
79
|
}
|
76
80
|
|
77
81
|
let(:request) {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: influxdb-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rallets
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
version: '0'
|
126
126
|
requirements: []
|
127
127
|
rubyforge_project:
|
128
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.5.2.3
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: Influxdb logger
|