fluent-plugin-elasticsearch 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Changelog
2
2
 
3
+ ### Future
4
+
5
+ - do not generate @timestamp if already part of message (#35)
6
+
3
7
  ### 0.3.0
4
8
 
5
9
  - add `parent_key` option (#28)
data/README.md CHANGED
@@ -12,7 +12,7 @@ I wrote this so you can search logs routed through Fluentd.
12
12
 
13
13
  $ gem install fluent-plugin-elasticsearch
14
14
 
15
- * prerequisite : You need to install [libcurl](http://curl.haxx.se/libcurl/) to work with.
15
+ * prerequisite : You need to install [libcurl (libcurl-devel)](http://curl.haxx.se/libcurl/) to work with.
16
16
 
17
17
  ## Usage
18
18
 
@@ -53,6 +53,12 @@ By default, the records inserted into index `logstash-YYMMDD`. This option allow
53
53
  logstash_dateformat %Y.%m. # defaults to "%Y.%m.%d"
54
54
  ```
55
55
 
56
+ By default, when inserting records in logstash format, @timestamp is dynamically created with the time at log ingestion. If you'd like to use a custom time. Include an @timestamp with your record.
57
+
58
+ ```
59
+ {"@timestamp":"2014-04-07T000:00:00-00:00"}
60
+ ```
61
+
56
62
  By default, the records inserted into index `logstash-YYMMDD`. This option allows to insert into specified index like `logstash-YYYYMM` for a monthly index.
57
63
 
58
64
  ```
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'fluent-plugin-elasticsearch'
6
- s.version = '0.3.0'
6
+ s.version = '0.3.1'
7
7
  s.authors = ['diogo', 'pitr']
8
8
  s.email = ['team@uken.com']
9
9
  s.description = %q{ElasticSearch output plugin for Fluent event collector}
@@ -21,5 +21,5 @@ Gem::Specification.new do |s|
21
21
  s.add_runtime_dependency 'elasticsearch', '~> 0'
22
22
 
23
23
  s.add_development_dependency 'rake', '~> 0'
24
- s.add_development_dependency 'webmock', '~> 0'
24
+ s.add_development_dependency 'webmock', '~> 1'
25
25
  end
@@ -34,16 +34,24 @@ class Fluent::ElasticsearchOutput < Fluent::BufferedOutput
34
34
  end
35
35
 
36
36
  def client
37
- @_es ||= Elasticsearch::Client.new :hosts => get_hosts, :reload_connections => true, :adapter => :patron, :retry_on_failure => 5
37
+ @_es ||= begin
38
+ adapter_conf = lambda {|f| f.adapter :patron }
39
+ transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new({ hosts: get_hosts,
40
+ options: {
41
+ reload_connections: true,
42
+ retry_on_failure: 5
43
+ }}, &adapter_conf)
44
+ Elasticsearch::Client.new transport: transport
45
+ end
38
46
  raise "Can not reach Elasticsearch cluster (#{@host}:#{@port})!" unless @_es.ping
39
47
  @_es
40
48
  end
41
49
 
42
50
  def get_hosts
43
51
  if @hosts
44
- @hosts.split(',').map {|x| x.strip}.compact
52
+ @hosts.split(',').map {|x| hp = x.split(':'); { host: hp[0], port: hp[1] || @port } }.compact
45
53
  else
46
- ["#{@host}:#{@port}"]
54
+ [{host: @host, port: @port }]
47
55
  end
48
56
  end
49
57
 
@@ -60,7 +68,7 @@ class Fluent::ElasticsearchOutput < Fluent::BufferedOutput
60
68
 
61
69
  chunk.msgpack_each do |tag, time, record|
62
70
  if @logstash_format
63
- record.merge!({"@timestamp" => Time.at(time).to_datetime.to_s})
71
+ record.merge!({"@timestamp" => Time.at(time).to_datetime.to_s}) unless record.has_key?("@timestamp")
64
72
  if @utc_index
65
73
  target_index = "#{@logstash_prefix}-#{Time.at(time).getutc.strftime("#{@logstash_dateformat}")}"
66
74
  else
@@ -119,7 +119,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
119
119
  stub_elastic_with_store_index_command_counts("http://#{host}:#{port}/_bulk")
120
120
  end
121
121
 
122
- 1000.times do
122
+ 1000.times do
123
123
  driver.emit(sample_record.merge('age'=>rand(100)))
124
124
  end
125
125
 
@@ -128,7 +128,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
128
128
  # @note: we cannot make multi chunks with options (flush_interval, buffer_chunk_limit)
129
129
  # it's Fluentd test driver's constraint
130
130
  # so @index_command_counts.size is always 1
131
-
131
+
132
132
  assert(@index_command_counts.size > 0, "not working with hosts options")
133
133
 
134
134
  total = 0
@@ -169,8 +169,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
169
169
  end
170
170
 
171
171
  def test_writes_to_logstash_utc_index
172
- driver.configure("logstash_format true\n")
173
- driver.configure("utc_index false\n")
172
+ driver.configure("logstash_format true
173
+ utc_index false")
174
174
  time = Time.parse Date.today.to_s
175
175
  utc_index = "logstash-#{time.strftime("%Y.%m.%d")}"
176
176
  stub_elastic_ping
@@ -181,8 +181,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
181
181
  end
182
182
 
183
183
  def test_writes_to_logstash_index_with_specified_prefix
184
- driver.configure("logstash_format true\n")
185
- driver.configure("logstash_prefix myprefix\n")
184
+ driver.configure("logstash_format true
185
+ logstash_prefix myprefix")
186
186
  time = Time.parse Date.today.to_s
187
187
  logstash_index = "myprefix-#{time.getutc.strftime("%Y.%m.%d")}"
188
188
  stub_elastic_ping
@@ -193,8 +193,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
193
193
  end
194
194
 
195
195
  def test_writes_to_logstash_index_with_specified_dateformat
196
- driver.configure("logstash_format true\n")
197
- driver.configure("logstash_dateformat %Y.%m\n")
196
+ driver.configure("logstash_format true
197
+ logstash_dateformat %Y.%m")
198
198
  time = Time.parse Date.today.to_s
199
199
  logstash_index = "logstash-#{time.getutc.strftime("%Y.%m")}"
200
200
  stub_elastic_ping
@@ -205,9 +205,9 @@ class ElasticsearchOutput < Test::Unit::TestCase
205
205
  end
206
206
 
207
207
  def test_writes_to_logstash_index_with_specified_prefix_and_dateformat
208
- driver.configure("logstash_format true\n")
209
- driver.configure("logstash_prefix myprefix\n")
210
- driver.configure("logstash_dateformat %Y.%m\n")
208
+ driver.configure("logstash_format true
209
+ logstash_prefix myprefix
210
+ logstash_dateformat %Y.%m")
211
211
  time = Time.parse Date.today.to_s
212
212
  logstash_index = "myprefix-#{time.getutc.strftime("%Y.%m")}"
213
213
  stub_elastic_ping
@@ -236,6 +236,17 @@ class ElasticsearchOutput < Test::Unit::TestCase
236
236
  assert_equal(index_cmds[1]['@timestamp'], ts)
237
237
  end
238
238
 
239
+ def test_uses_custom_timestamp_when_included_in_record
240
+ driver.configure("logstash_format true\n")
241
+ stub_elastic_ping
242
+ stub_elastic
243
+ ts = DateTime.new(2001,2,3).to_s
244
+ driver.emit(sample_record.merge!('@timestamp' => ts))
245
+ driver.run
246
+ assert(index_cmds[1].has_key? '@timestamp')
247
+ assert_equal(index_cmds[1]['@timestamp'], ts)
248
+ end
249
+
239
250
  def test_doesnt_add_tag_key_by_default
240
251
  stub_elastic_ping
241
252
  stub_elastic
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - diogo
@@ -9,78 +10,88 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-03-17 00:00:00.000000000 Z
13
+ date: 2014-06-16 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: fluentd
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
- - - "~>"
20
+ - - ~>
19
21
  - !ruby/object:Gem::Version
20
22
  version: '0'
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
- - - "~>"
28
+ - - ~>
26
29
  - !ruby/object:Gem::Version
27
30
  version: '0'
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: patron
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
- - - "~>"
36
+ - - ~>
33
37
  - !ruby/object:Gem::Version
34
38
  version: '0'
35
39
  type: :runtime
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
- - - "~>"
44
+ - - ~>
40
45
  - !ruby/object:Gem::Version
41
46
  version: '0'
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: elasticsearch
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
- - - "~>"
52
+ - - ~>
47
53
  - !ruby/object:Gem::Version
48
54
  version: '0'
49
55
  type: :runtime
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
- - - "~>"
60
+ - - ~>
54
61
  - !ruby/object:Gem::Version
55
62
  version: '0'
56
63
  - !ruby/object:Gem::Dependency
57
64
  name: rake
58
65
  requirement: !ruby/object:Gem::Requirement
66
+ none: false
59
67
  requirements:
60
- - - "~>"
68
+ - - ~>
61
69
  - !ruby/object:Gem::Version
62
70
  version: '0'
63
71
  type: :development
64
72
  prerelease: false
65
73
  version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
66
75
  requirements:
67
- - - "~>"
76
+ - - ~>
68
77
  - !ruby/object:Gem::Version
69
78
  version: '0'
70
79
  - !ruby/object:Gem::Dependency
71
80
  name: webmock
72
81
  requirement: !ruby/object:Gem::Requirement
82
+ none: false
73
83
  requirements:
74
- - - "~>"
84
+ - - ~>
75
85
  - !ruby/object:Gem::Version
76
- version: '0'
86
+ version: '1'
77
87
  type: :development
78
88
  prerelease: false
79
89
  version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
80
91
  requirements:
81
- - - "~>"
92
+ - - ~>
82
93
  - !ruby/object:Gem::Version
83
- version: '0'
94
+ version: '1'
84
95
  description: ElasticSearch output plugin for Fluent event collector
85
96
  email:
86
97
  - team@uken.com
@@ -88,8 +99,8 @@ executables: []
88
99
  extensions: []
89
100
  extra_rdoc_files: []
90
101
  files:
91
- - ".gitignore"
92
- - ".travis.yml"
102
+ - .gitignore
103
+ - .travis.yml
93
104
  - Gemfile
94
105
  - History.md
95
106
  - LICENSE.txt
@@ -102,26 +113,27 @@ files:
102
113
  homepage: https://github.com/uken/fluent-plugin-elasticsearch
103
114
  licenses:
104
115
  - MIT
105
- metadata: {}
106
116
  post_install_message:
107
117
  rdoc_options: []
108
118
  require_paths:
109
119
  - lib
110
120
  required_ruby_version: !ruby/object:Gem::Requirement
121
+ none: false
111
122
  requirements:
112
- - - ">="
123
+ - - ! '>='
113
124
  - !ruby/object:Gem::Version
114
125
  version: '0'
115
126
  required_rubygems_version: !ruby/object:Gem::Requirement
127
+ none: false
116
128
  requirements:
117
- - - ">="
129
+ - - ! '>='
118
130
  - !ruby/object:Gem::Version
119
131
  version: '0'
120
132
  requirements: []
121
133
  rubyforge_project:
122
- rubygems_version: 2.2.0
134
+ rubygems_version: 1.8.23.2
123
135
  signing_key:
124
- specification_version: 4
136
+ specification_version: 3
125
137
  summary: ElasticSearch output plugin for Fluent event collector
126
138
  test_files:
127
139
  - test/helper.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: c80790f854f11ab486602bfec4e4f96ab56f2f56
4
- data.tar.gz: 06163c0e34e87393e84f9a8a04d906dff2fc985b
5
- SHA512:
6
- metadata.gz: 9344c56bfe39072a37402e7e2343a7ec28a9d3417cb14f899bc57744bf91e224d98d5fbf3df048b10d37b36c7bf3edb77812ecd10407c76dad514d0174c98828
7
- data.tar.gz: 102828a3a5df25a3c5dcf8462c9a43c5afd802bbe974f2497b5d2c1e9c53f6cf8462165b1a3bad895ed34915e4fdce286cc6976f980085cfe41411fdf25dd2f1