fluent-plugin-elasticsearch 0.1.1 → 0.1.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.
data/History.md ADDED
@@ -0,0 +1,18 @@
1
+ Changelog
2
+ =========
3
+
4
+ 0.1.2
5
+ =====
6
+
7
+ - add id_key option
8
+
9
+ 0.1.1
10
+ =====
11
+
12
+ - fix timezone in logstash key
13
+
14
+
15
+ 0.1.0
16
+ =====
17
+
18
+ - Initial gem release.
data/README.md CHANGED
@@ -51,6 +51,21 @@ The record inserted into elasticsearch would be
51
51
 
52
52
  ---
53
53
 
54
+ ```
55
+ id_key request_id # use "request_id" field as a record id in ES
56
+ ```
57
+
58
+ By default, all records inserted into elasticsearch get a random _id. This option allows to use a field in the record as an identifier.
59
+
60
+ This following record `{"name":"Johnny","request_id":"87d89af7daffad6"}` will trigger the following ElasticSearch command
61
+
62
+ ```
63
+ { "index" : { "_index" : "logstash-2013.01.01, "_type" : "fluentd", "_id" : "87d89af7daffad6" } }
64
+ { "name": "Johnny", "request_id": "87d89af7daffad6" }
65
+ ```
66
+
67
+ ---
68
+
54
69
  fluentd-plugin-elasticsearch is a buffered output that uses elasticseach's bulk API. So additional buffer configuration would be (with default values):
55
70
 
56
71
  ```
@@ -3,8 +3,8 @@ $:.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.1.1'
7
- s.authors = ["diogo"]
6
+ s.version = '0.1.2'
7
+ s.authors = ["diogo", 'pitr']
8
8
  s.email = ["team@uken.com"]
9
9
  s.description = %q{ElasticSearch output plugin for Fluent event collector}
10
10
  s.summary = s.description
@@ -10,6 +10,7 @@ class Fluent::ElasticsearchOutput < Fluent::BufferedOutput
10
10
  config_param :logstash_format, :bool, :default => false
11
11
  config_param :type_name, :string, :default => "fluentd"
12
12
  config_param :index_name, :string, :default => "fluentd"
13
+ config_param :id_key, :string, :default => nil
13
14
 
14
15
  include Fluent::SetTagKeyMixin
15
16
  config_set_default :include_tag_key, false
@@ -49,7 +50,11 @@ class Fluent::ElasticsearchOutput < Fluent::BufferedOutput
49
50
  record.merge!(@tag_key => tag)
50
51
  end
51
52
 
52
- bulk_message << { "index" => {"_index" => target_index, "_type" => type_name} }.to_json
53
+ meta = { "index" => {"_index" => target_index, "_type" => type_name} }
54
+ if @id_key && record[@id_key]
55
+ meta['index']['_id'] = record[@id_key]
56
+ end
57
+ bulk_message << meta.to_json
53
58
  bulk_message << record.to_json
54
59
  end
55
60
  bulk_message << ""
@@ -26,7 +26,7 @@ class ElasticsearchOutput < Test::Unit::TestCase
26
26
  end
27
27
 
28
28
  def sample_record
29
- {'age' => 26}
29
+ {'age' => 26, 'request_id' => '42'}
30
30
  end
31
31
 
32
32
  def stub_elastic(url="http://localhost:9200/_bulk")
@@ -140,4 +140,27 @@ class ElasticsearchOutput < Test::Unit::TestCase
140
140
  assert(index_cmds[1].has_key?('tag'))
141
141
  assert_equal(index_cmds[1]['tag'], 'mytag')
142
142
  end
143
+
144
+ def test_adds_id_key_when_configured
145
+ driver.configure("id_key request_id\n")
146
+ stub_elastic
147
+ driver.emit(sample_record)
148
+ driver.run
149
+ assert_equal(index_cmds[0]['index']['_id'], '42')
150
+ end
151
+
152
+ def test_doesnt_add_id_key_if_missing_when_configured
153
+ driver.configure("id_key another_request_id\n")
154
+ stub_elastic
155
+ driver.emit(sample_record)
156
+ driver.run
157
+ assert(!index_cmds[0]['index'].has_key?('_id'))
158
+ end
159
+
160
+ def test_adds_id_key_when_not_configured
161
+ stub_elastic
162
+ driver.emit(sample_record)
163
+ driver.run
164
+ assert(!index_cmds[0]['index'].has_key?('_id'))
165
+ end
143
166
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - diogo
9
+ - pitr
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-04-27 00:00:00.000000000 Z
13
+ date: 2013-05-22 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: fluentd
@@ -68,6 +69,7 @@ extra_rdoc_files: []
68
69
  files:
69
70
  - .gitignore
70
71
  - Gemfile
72
+ - History.md
71
73
  - LICENSE.txt
72
74
  - README.md
73
75
  - Rakefile
@@ -89,7 +91,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
91
  version: '0'
90
92
  segments:
91
93
  - 0
92
- hash: 4483254378511463978
94
+ hash: 3762640390142768539
93
95
  required_rubygems_version: !ruby/object:Gem::Requirement
94
96
  none: false
95
97
  requirements:
@@ -98,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
100
  version: '0'
99
101
  segments:
100
102
  - 0
101
- hash: 4483254378511463978
103
+ hash: 3762640390142768539
102
104
  requirements: []
103
105
  rubyforge_project:
104
106
  rubygems_version: 1.8.23