fluent-plugin-bigquery 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/README.md +39 -3
- data/fluent-plugin-bigquery.gemspec +1 -1
- data/lib/fluent/plugin/bigquery/version.rb +1 -1
- data/lib/fluent/plugin/out_bigquery.rb +39 -10
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0802b40a0e2792d20ca2e92f20cfe398d92aa5db
|
4
|
+
data.tar.gz: a210aa8139c2d82467979adac99f6396096ef6d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 865a4f9cd3de0d912678768a5a29d3795b62382de2949ac7fc220446d2aaedb2c62616056ad2d44901c64c2782d45c3e2f2f1bb78ca73174394d1b2954291e5f
|
7
|
+
data.tar.gz: 1bde3427c107b3ac396e808f4856daff92f9a50666d07567dfe1b3cdd0fd50a0ca550b1573368b1913cde125dfa4d874ed6aa96862014fdb2bd22e950ce78bbf
|
data/README.md
CHANGED
@@ -9,14 +9,13 @@ Fluentd output plugin to load/insert data into Google BigQuery.
|
|
9
9
|
* for data loading as batch jobs, for big amount of data
|
10
10
|
* https://developers.google.com/bigquery/loading-data-into-bigquery
|
11
11
|
|
12
|
-
Current version of this plugin supports Google API with Service Account Authentication,
|
12
|
+
Current version of this plugin supports Google API with Service Account Authentication, but does not support
|
13
|
+
OAuth flow for installed applications.
|
13
14
|
|
14
15
|
## Configuration
|
15
16
|
|
16
17
|
### Streming inserts
|
17
18
|
|
18
|
-
For service account authentication, generate service account private key file and email key, then upload private key file onto your server.
|
19
|
-
|
20
19
|
Configure insert specifications with target table schema, with your credentials. This is minimum configurations:
|
21
20
|
|
22
21
|
```apache
|
@@ -25,6 +24,7 @@ Configure insert specifications with target table schema, with your credentials.
|
|
25
24
|
|
26
25
|
method insert # default
|
27
26
|
|
27
|
+
auth_method private_key # default
|
28
28
|
email xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com
|
29
29
|
private_key_path /home/username/.keys/00000000000000000000000000000000-privatekey.p12
|
30
30
|
# private_key_passphrase notasecret # default
|
@@ -58,6 +58,7 @@ For high rate inserts over streaming inserts, you should specify flush intervals
|
|
58
58
|
|
59
59
|
num_threads 16
|
60
60
|
|
61
|
+
auth_method private_key # default
|
61
62
|
email xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com
|
62
63
|
private_key_path /home/username/.keys/00000000000000000000000000000000-privatekey.p12
|
63
64
|
# private_key_passphrase notasecret # default
|
@@ -100,6 +101,41 @@ Important options for high rate events are:
|
|
100
101
|
* `1` is lowest value, without patches on Fluentd v0.10.41 or earlier
|
101
102
|
* see `patches` below
|
102
103
|
|
104
|
+
### Authentication
|
105
|
+
|
106
|
+
There are two methods supported to fetch access token for the service account.
|
107
|
+
1. Public-Private key pair
|
108
|
+
2. Predefined access token (Compute Engine only)
|
109
|
+
|
110
|
+
The examples above use the first one. You first need to create a service account (client ID),
|
111
|
+
download its private key and deploy the key with fluentd.
|
112
|
+
|
113
|
+
On the other hand, you don't need to explicitly create a service account for fluentd when you
|
114
|
+
run fluentd in Google Compute Engine. In this second authentication method, you need to
|
115
|
+
add the API scope "https://www.googleapis.com/auth/bigquery" to the scope list of your
|
116
|
+
Compute Engine instance, then you can configure fluentd like this.
|
117
|
+
|
118
|
+
```apache
|
119
|
+
<match dummy>
|
120
|
+
type bigquery
|
121
|
+
|
122
|
+
auth_method compute_engine
|
123
|
+
|
124
|
+
project yourproject_id
|
125
|
+
dataset yourdataset_id
|
126
|
+
table tablename
|
127
|
+
|
128
|
+
time_format %s
|
129
|
+
time_field time
|
130
|
+
|
131
|
+
field_integer time,status,bytes
|
132
|
+
field_string rhost,vhost,path,method,protocol,agent,referer
|
133
|
+
field_float requestime
|
134
|
+
field_boolean bot_access,loginsession
|
135
|
+
</match>
|
136
|
+
```
|
137
|
+
|
138
|
+
|
103
139
|
### patches
|
104
140
|
|
105
141
|
This plugin depends on `fluent-plugin-buffer-lightening`, and it includes monkey patch module for BufferedOutput plugin, to realize high rate and low latency flushing. With this patch, sub 1 second flushing available.
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "rake"
|
22
|
-
spec.add_runtime_dependency "google-api-client", "~> 0.
|
22
|
+
spec.add_runtime_dependency "google-api-client", "~> 0.7.1"
|
23
23
|
spec.add_runtime_dependency "fluentd"
|
24
24
|
spec.add_runtime_dependency "fluent-mixin-plaintextformatter", '>= 0.2.1'
|
25
25
|
spec.add_runtime_dependency "fluent-mixin-config-placeholders", ">= 0.2.0"
|
@@ -39,9 +39,14 @@ module Fluent
|
|
39
39
|
# config_param :client_id, :string
|
40
40
|
# config_param :client_secret, :string
|
41
41
|
|
42
|
+
# Available methods are:
|
43
|
+
# * private_key -- Use service account credential
|
44
|
+
# * compute_engine -- Use access token available in instances of ComputeEngine
|
45
|
+
config_param :auth_method, :string, :default => 'private_key'
|
46
|
+
|
42
47
|
### Service Account credential
|
43
|
-
config_param :email, :string
|
44
|
-
config_param :private_key_path, :string
|
48
|
+
config_param :email, :string, :default => nil
|
49
|
+
config_param :private_key_path, :string, :default => nil
|
45
50
|
config_param :private_key_passphrase, :string, :default => 'notasecret'
|
46
51
|
|
47
52
|
# see as simple reference
|
@@ -115,11 +120,23 @@ module Fluent
|
|
115
120
|
require 'google/api_client'
|
116
121
|
require 'google/api_client/client_secrets'
|
117
122
|
require 'google/api_client/auth/installed_app'
|
123
|
+
require 'google/api_client/auth/compute_service_account'
|
118
124
|
end
|
119
125
|
|
120
126
|
def configure(conf)
|
121
127
|
super
|
122
128
|
|
129
|
+
case @auth_method
|
130
|
+
when 'private_key'
|
131
|
+
if !@email || !@private_key_path
|
132
|
+
raise Fluent::ConfigError, "'email' and 'private_key_path' must be specified if auth_method == 'private_key'"
|
133
|
+
end
|
134
|
+
when 'compute_engine'
|
135
|
+
# Do nothing
|
136
|
+
else
|
137
|
+
raise Fluent::ConfigError, "unrecognized 'auth_method': #{@auth_method}"
|
138
|
+
end
|
139
|
+
|
123
140
|
if (!@table && !@tables) || (@table && @table)
|
124
141
|
raise Fluent::ConfigError, "'table' or 'tables' must be specified, and both are invalid"
|
125
142
|
end
|
@@ -180,14 +197,26 @@ module Fluent
|
|
180
197
|
:application_version => Fluent::BigQueryPlugin::VERSION
|
181
198
|
)
|
182
199
|
|
183
|
-
|
184
|
-
|
185
|
-
@
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
200
|
+
case @auth_method
|
201
|
+
when 'private_key'
|
202
|
+
key = Google::APIClient::PKCS12.load_key( @private_key_path, @private_key_passphrase )
|
203
|
+
asserter = Google::APIClient::JWTAsserter.new(
|
204
|
+
@email,
|
205
|
+
"https://www.googleapis.com/auth/bigquery",
|
206
|
+
key
|
207
|
+
)
|
208
|
+
# refresh_auth
|
209
|
+
client.authorization = asserter.authorize
|
210
|
+
|
211
|
+
when 'compute_engine'
|
212
|
+
auth = Google::APIClient::ComputeServiceAccount.new
|
213
|
+
auth.fetch_access_token!
|
214
|
+
client.authorization = auth
|
215
|
+
|
216
|
+
else
|
217
|
+
raise ConfigError, "Unknown auth method: #{@auth_method}"
|
218
|
+
end
|
219
|
+
|
191
220
|
@cached_client_expiration = Time.now + 1800
|
192
221
|
@cached_client = client
|
193
222
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-bigquery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TAGOMORI Satoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.7.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.7.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: fluentd
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|