fluent-plugin-geoip 0.4.0 → 0.5.0.beta

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/README.md CHANGED
@@ -16,9 +16,11 @@ before use, install dependent library as:
16
16
 
17
17
  ```bash
18
18
  # for RHEL/CentOS
19
+ $ sudo yum group install "Development Tools"
19
20
  $ sudo yum install geoip-devel --enablerepo=epel
20
21
 
21
22
  # for Ubuntu/Debian
23
+ $ sudo apt-get install build-essential
22
24
  $ sudo apt-get install libgeoip-dev
23
25
  ```
24
26
 
@@ -67,6 +69,9 @@ $ sudo td-agent-gem install fluent-plugin-geoip
67
69
  remove_tag_prefix access.
68
70
  tag geoip.${tag}
69
71
 
72
+ # To avoid get stacktrace error with `[null, null]` array for elasticsearch.
73
+ skip_adding_null_record true
74
+
70
75
  # Set log_level for fluentd-v0.10.43 or earlier (default: warn)
71
76
  log_level info
72
77
 
@@ -108,12 +113,15 @@ It is a sample to get friendly geo point recdords for elasticsearch with Yajl (J
108
113
  # ex. "37.4192008972168,-122.05740356445312"
109
114
  location_string ${latitude["host"]},${longitude["host"]}
110
115
 
111
- # lat lon as array (it is useful for Kibana's bettermap.)
116
+ # GeoJSON (lat lon as array) is useful for Kibana's bettermap.
112
117
  # ex. [-122.05740356445312, 37.4192008972168]
113
118
  location_array [${longitude["host"]},${latitude["host"]}]
114
119
  </record>
115
120
  remove_tag_prefix access.
116
121
  tag geoip.${tag}
122
+
123
+ # To avoid get stacktrace error with `[null, null]` array for elasticsearch.
124
+ skip_adding_null_record true
117
125
  </match>
118
126
  ```
119
127
 
@@ -130,6 +138,7 @@ On the case of using td-agent2 (v1-config), it have to quote `{ ... }` or `[ ...
130
138
  </record>
131
139
  remove_tag_prefix access.
132
140
  tag geoip.${tag}
141
+ skip_adding_null_record true
133
142
  </match>
134
143
  ```
135
144
 
@@ -182,17 +191,22 @@ http://dev.maxmind.com/geoip/legacy/csv/
182
191
 
183
192
  ## Placeholders
184
193
 
185
- Provides these placeholders for adding field of geolocate results.
194
+ Provides these placeholders for adding field of geolocate results.<br />
195
+ For more example of geolocating, you can try these websites like [Geo IP Address View](http://www.geoipview.com/) or [View my IP information](http://www.geoiptool.com/en/).
196
+
197
+ | placeholder attributes | output example | type | note |
198
+ |--------------------------------|-------------------|--------------|------|
199
+ | ${city[lookup_field]} | "Ithaca" | varchar(255) | - |
200
+ | ${latitude[lookup_field]} | 42.4277992248535 | decimal | - |
201
+ | ${longitude[lookup_field]} | -76.4981994628906 | decimal | - |
202
+ | ${country_code3[lookup_field]} | "USA" | varchar(3) | - |
203
+ | ${country_code[lookup_field]} | "US" | varchar(2) | A two-character ISO 3166-1 country code |
204
+ | ${country_name[lookup_field]} | "United States" | varchar(50) | - |
205
+ | ${dma_code[lookup_field]} | 555 | unsigned int | **only for US** |
206
+ | ${area_code[lookup_field]} | 607 | char(3) | **only for US** |
207
+ | ${region[lookup_field]} | "NY" | char(2) | A two character ISO-3166-2 or FIPS 10-4 code |
186
208
 
187
- * ${city[lookup_field]}
188
- * ${latitude[lookup_field]}
189
- * ${longitude[lookup_field]}
190
- * ${country_code3[lookup_field]}
191
- * ${country_code[lookup_field]}
192
- * ${country_name[lookup_field]}
193
- * ${dma_code[lookup_field]}
194
- * ${area_code[lookup_field]}
195
- * ${region[lookup_field]}
209
+ Further more specification available at http://dev.maxmind.com/geoip/legacy/csv/#GeoIP_City_Edition_CSV_Database_Fields
196
210
 
197
211
  ## Parameters
198
212
 
@@ -202,6 +216,11 @@ Provides these placeholders for adding field of geolocate results.
202
216
  Add original tag name into filtered record using SetTagKeyMixin.<br />
203
217
  Further details are written at http://docs.fluentd.org/articles/in_exec
204
218
 
219
+ * `skip_adding_null_record` (default: false)
220
+
221
+ Skip adding geoip fields when this valaues to `true`.
222
+ On the case of getting nothing of GeoIP info (such as local IP), it will output the original record without changing anything.
223
+
205
224
  * `remove_tag_prefix`
206
225
  * `remove_tag_suffix`
207
226
  * `add_tag_prefix`
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-geoip"
7
- spec.version = "0.4.0"
7
+ spec.version = "0.5.0.beta"
8
8
  spec.authors = ["Kentaro Yoshida"]
9
9
  spec.email = ["y.ken.studio@gmail.com"]
10
10
  spec.summary = %q{Fluentd Output plugin to add information about geographical location of IP addresses with Maxmind GeoIP databases.}
@@ -18,6 +18,11 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.add_development_dependency "bundler"
20
20
  spec.add_development_dependency "rake"
21
+
22
+ if defined?(RUBY_VERSION) && RUBY_VERSION > '2.2'
23
+ spec.add_development_dependency "test-unit", '~> 3'
24
+ end
25
+
21
26
  spec.add_runtime_dependency "fluentd"
22
27
  spec.add_runtime_dependency "fluent-mixin-rewrite-tag-name"
23
28
  spec.add_runtime_dependency "geoip-c"
@@ -11,6 +11,7 @@ class Fluent::GeoipOutput < Fluent::BufferedOutput
11
11
  config_param :geoip_database, :string, :default => File.dirname(__FILE__) + '/../../../data/GeoLiteCity.dat'
12
12
  config_param :geoip_lookup_key, :string, :default => 'host'
13
13
  config_param :tag, :string, :default => nil
14
+ config_param :skip_adding_null_record, :bool, :default => false
14
15
 
15
16
  include Fluent::HandleTagNameMixin
16
17
  include Fluent::SetTagKeyMixin
@@ -119,6 +120,7 @@ class Fluent::GeoipOutput < Fluent::BufferedOutput
119
120
 
120
121
  def add_geoip_field(record)
121
122
  placeholder = create_placeholder(geolocate(get_address(record)))
123
+ return record if @skip_adding_null_record && placeholder.values.first.nil?
122
124
  @map.each do |record_key, value|
123
125
  if value.match(REGEXP_PLACEHOLDER_SINGLE)
124
126
  rewrited = placeholder[value]
@@ -162,7 +162,16 @@ class GeoipOutputTest < Test::Unit::TestCase
162
162
  end
163
163
 
164
164
  def test_emit_with_unknown_address
165
- d1 = create_driver(CONFIG, 'input.access')
165
+ d1 = create_driver(%[
166
+ geoip_lookup_key host
167
+ <record>
168
+ geoip_city ${city['host']}
169
+ geopoint [${longitude['host']}, ${latitude['host']}]
170
+ </record>
171
+ skip_adding_null_record false
172
+ remove_tag_prefix input.
173
+ tag geoip.${tag}
174
+ ], 'input.access')
166
175
  d1.run do
167
176
  # 203.0.113.1 is a test address described in RFC5737
168
177
  d1.emit({'host' => '203.0.113.1', 'message' => 'invalid ip'})
@@ -176,6 +185,35 @@ class GeoipOutputTest < Test::Unit::TestCase
176
185
  assert_equal nil, emits[1][2]['geoip_city']
177
186
  end
178
187
 
188
+ def test_emit_with_skip_unknown_address
189
+ d1 = create_driver(%[
190
+ geoip_lookup_key host
191
+ <record>
192
+ geoip_city ${city['host']}
193
+ geopoint [${longitude['host']}, ${latitude['host']}]
194
+ </record>
195
+ skip_adding_null_record true
196
+ remove_tag_prefix input.
197
+ tag geoip.${tag}
198
+ ], 'input.access')
199
+ d1.run do
200
+ # 203.0.113.1 is a test address described in RFC5737
201
+ d1.emit({'host' => '203.0.113.1', 'message' => 'invalid ip'})
202
+ d1.emit({'host' => '0', 'message' => 'invalid ip'})
203
+ d1.emit({'host' => '8.8.8.8', 'message' => 'google public dns'})
204
+ end
205
+ emits = d1.emits
206
+ assert_equal 3, emits.length
207
+ assert_equal 'geoip.access', emits[0][0] # tag
208
+ assert_equal nil, emits[0][2]['geoip_city']
209
+ assert_equal nil, emits[0][2]['geopoint']
210
+ assert_equal 'geoip.access', emits[1][0] # tag
211
+ assert_equal nil, emits[1][2]['geoip_city']
212
+ assert_equal nil, emits[1][2]['geopoint']
213
+ assert_equal 'Mountain View', emits[2][2]['geoip_city']
214
+ assert_equal [-122.08380126953125, 37.38600158691406], emits[2][2]['geopoint']
215
+ end
216
+
179
217
  def test_emit_multiple_key
180
218
  d1 = create_driver(%[
181
219
  geoip_lookup_key from.ip, to.ip
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-geoip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
5
- prerelease:
4
+ version: 0.5.0.beta
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kentaro Yoshida
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-11-28 00:00:00.000000000 Z
12
+ date: 2015-06-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -125,9 +125,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  required_rubygems_version: !ruby/object:Gem::Requirement
126
126
  none: false
127
127
  requirements:
128
- - - ! '>='
128
+ - - ! '>'
129
129
  - !ruby/object:Gem::Version
130
- version: '0'
130
+ version: 1.3.1
131
131
  requirements: []
132
132
  rubyforge_project:
133
133
  rubygems_version: 1.8.23