fluent-plugin-grafana-loki 1.2.10 → 1.2.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fluent/plugin/out_loki.rb +26 -20
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9b80ced17e5aa680b13c310f15008e9fcbd219b046b9dd40eddfb43a6f454fe
4
- data.tar.gz: 4e7721bf9e2bed189dd2ab9c7090aaac30621e8938658291ad6d622272cd0591
3
+ metadata.gz: f55e32f690e614bb33d3f905d01881bc0ad1bdc6a55badb1088930725d310c1b
4
+ data.tar.gz: dd4e2c4477d6edd9ea4f917cf62a821a99cfc0799639fe4445f5ac2635988305
5
5
  SHA512:
6
- metadata.gz: 624c222606aac4e9725e10a69984457d01a0a28e8364ec50f073df570ba783235719b72117a00aacdc64f0252d7ad4f1e740add4b2a51d86b0ccabda3a04c0f6
7
- data.tar.gz: 73ff3b3338cf03509890e26ca50449d8b0a956a8c7cc4a946faa030aa2efdabe34500a450dfc6869ceda06eadbb55fef6184df29fbce6b7edda1675568fbbce2
6
+ metadata.gz: d86cf23b27f243822ee9628e472d26f2bb6869462b471ddc26f9b0f347f36d48dec7f0aa3bce2bf2cac5893352a8509d71d4363f782d4b7dc8db2dcd7e1b1175
7
+ data.tar.gz: 010ce549ecdc4c6945a9a09fe790f82364eafa6389c3829e5d0483e7f595c5db4f449b584769c1d1214df8c0d1794a29c3a4a1fe8c9e214327be226e38f99cb1
@@ -15,6 +15,7 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
+ require 'fluent/env'
18
19
  require 'fluent/plugin/output'
19
20
  require 'net/http'
20
21
  require 'yajl'
@@ -26,6 +27,8 @@ module Fluent
26
27
  class LokiOutput < Fluent::Plugin::Output # rubocop:disable Metrics/ClassLength
27
28
  Fluent::Plugin.register_output('loki', self)
28
29
 
30
+ class LogPostError < StandardError; end
31
+
29
32
  helpers :compat_parameters, :record_accessor
30
33
 
31
34
  attr_accessor :record_accessors
@@ -131,29 +134,16 @@ module Fluent
131
134
  body = { 'streams' => payload }
132
135
 
133
136
  # add ingest path to loki url
137
+ res = loki_http_request(body)
134
138
 
135
- req = Net::HTTP::Post.new(
136
- @uri.request_uri
137
- )
138
- req.add_field('Content-Type', 'application/json')
139
- req.add_field('X-Scope-OrgID', @tenant) if @tenant
140
- req.body = Yajl.dump(body)
141
- req.basic_auth(@username, @password) if @username
142
-
143
- opts = ssl_opts(@uri)
139
+ return if res.is_a?(Net::HTTPSuccess)
144
140
 
145
- log.debug "sending #{req.body.length} bytes to loki"
146
- res = Net::HTTP.start(@uri.host, @uri.port, **opts) { |http| http.request(req) }
147
- unless res&.is_a?(Net::HTTPSuccess)
148
- res_summary = if res
149
- "#{res.code} #{res.message} #{res.body}"
150
- else
151
- 'res=nil'
152
- end
153
- log.warn "failed to #{req.method} #{@uri} (#{res_summary})"
154
- log.debug Yajl.dump(body)
141
+ res_summary = "#{res.code} #{res.message} #{res.body}"
142
+ log.warn "failed to write post to #{@uri} (#{res_summary})"
143
+ log.debug Yajl.dump(body)
155
144
 
156
- end
145
+ # Only retry 429 and 500s
146
+ raise(LogPostError, res_summary) if res.is_a?(Net::HTTPTooManyRequests) || res.is_a?(Net::HTTPServerError)
157
147
  end
158
148
 
159
149
  def ssl_opts(uri)
@@ -186,6 +176,22 @@ module Fluent
186
176
 
187
177
  private
188
178
 
179
+ def loki_http_request(body)
180
+ req = Net::HTTP::Post.new(
181
+ @uri.request_uri
182
+ )
183
+ req.add_field('Content-Type', 'application/json')
184
+ req.add_field('X-Scope-OrgID', @tenant) if @tenant
185
+ req.body = Yajl.dump(body)
186
+ req.basic_auth(@username, @password) if @username
187
+
188
+ opts = ssl_opts(@uri)
189
+
190
+ log.debug "sending #{req.body.length} bytes to loki"
191
+
192
+ Net::HTTP.start(@uri.host, @uri.port, **opts) { |http| http.request(req) }
193
+ end
194
+
189
195
  def numeric?(val)
190
196
  !Float(val).nil?
191
197
  rescue StandardError
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-grafana-loki
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.10
4
+ version: 1.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - woodsaj
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-03-17 00:00:00.000000000 Z
13
+ date: 2020-03-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler