Class: Fluent::Plugin::NewrelicOutput
- Inherits:
-
Output
- Object
- Output
- Fluent::Plugin::NewrelicOutput
show all
- Defined in:
- lib/fluent/plugin/out_newrelic.rb
Defined Under Namespace
Classes: ConnectionFailure
Constant Summary
collapse
- DEFAULT_BUFFER_TYPE =
'memory'.freeze
Instance Method Summary
collapse
Instance Method Details
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/fluent/plugin/out_newrelic.rb', line 50
def configure(conf)
super
if @api_key.nil? && @license_key.nil?
raise Fluent::ConfigError.new("'api_key' or 'license_key' parameter is required")
end
@end_point = URI.parse(@base_uri)
auth = {
@api_key.nil? ? 'X-License-Key' : 'X-Insert-Key' =>
@api_key.nil? ? @license_key : @api_key
}
= {
'X-Event-Source' => 'logs',
'Content-Encoding' => 'gzip'
}.merge(auth)
.freeze
end
|
#handle_response(response) ⇒ Object
122
123
124
125
126
|
# File 'lib/fluent/plugin/out_newrelic.rb', line 122
def handle_response(response)
if !(200 <= response.code.to_i && response.code.to_i < 300)
log.error("Response was " + response.code + " " + response.body)
end
end
|
#multi_workers_ready? ⇒ Boolean
This tells Fluentd that it can run this output plugin in multiple workers. Our plugin has no interactions with other processes
46
47
48
|
# File 'lib/fluent/plugin/out_newrelic.rb', line 46
def multi_workers_ready?
true
end
|
#package_record(record, timestamp) ⇒ Object
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/fluent/plugin/out_newrelic.rb', line 69
def package_record(record, timestamp)
packaged = {
'timestamp' => timestamp,
'attributes' => record
}
if record.has_key?('message')
packaged['message'] = record['message']
packaged['attributes'].delete('message')
end
if record.has_key?('log')
packaged['message'] = record['log']
packaged['attributes'].delete('log')
end
packaged
end
|
#send_payload(payload) ⇒ Object
128
129
130
131
132
133
134
135
|
# File 'lib/fluent/plugin/out_newrelic.rb', line 128
def send_payload(payload)
http = Net::HTTP.new(@end_point.host, 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
request = Net::HTTP::Post.new(@end_point.request_uri, )
request.body = payload
handle_response(http.request(request))
end
|
#write(chunk) ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/fluent/plugin/out_newrelic.rb', line 93
def write(chunk)
payload = {
'common' => {
'attributes' => {
'plugin' => {
'type' => 'fluentd',
'version' => NewrelicFluentdOutput::VERSION,
}
}
},
'logs' => []
}
chunk.msgpack_each do |ts, record|
next unless record.is_a? Hash
next if record.empty?
payload['logs'].push(package_record(record, ts))
end
io = StringIO.new
gzip = Zlib::GzipWriter.new(io)
gzip << Yajl.dump([payload])
gzip.close
send_payload(io.string)
end
|