td-agent3(Fluentd v1.0)でBigQueryにログを保存する。2018-03-07
内容
https://github.com/kaizenplatform/fluent-plugin-bigquery を参考に、td-agent3
(Fluentd v1.0
)で BigQuery
にログを保存する設定をします。
準備
-
td-agent3
(Fluentd v1.0
)のインストールは済んでいるものとします
- GCP、BigQueryでの準備作業が必要になりますが、割愛します
fluent-plugin-bigquery
のインストール
-
fluent-plugin-bigquery
というプラグインが必要なのでインストールします。
- インストールで使うコマンドは
/opt/td-agent/embedded/bin/fluent-gem
にあります。
インストール
$ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-bigquery
... 表示が多いので詳細は割愛
Done installing documentation for uber, declarative, declarative-option, representable, retriable, mime-types-data, mime-types, little-plugger, logging, jwt, memoist, os, signet, googleauth, google-api-client, fluent-plugin-bigquery after 159 seconds
16 gems installed
td-agent3
(Fluentd v1.0
)のインストールは済んでいるものとします
fluent-plugin-bigquery
のインストール
-
fluent-plugin-bigquery
というプラグインが必要なのでインストールします。 - インストールで使うコマンドは
/opt/td-agent/embedded/bin/fluent-gem
にあります。
インストール
$ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-bigquery
... 表示が多いので詳細は割愛
Done installing documentation for uber, declarative, declarative-option, representable, retriable, mime-types-data, mime-types, little-plugger, logging, jwt, memoist, os, signet, googleauth, google-api-client, fluent-plugin-bigquery after 159 seconds
16 gems installed
$ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-bigquery
... 表示が多いので詳細は割愛
Done installing documentation for uber, declarative, declarative-option, representable, retriable, mime-types-data, mime-types, little-plugger, logging, jwt, memoist, os, signet, googleauth, google-api-client, fluent-plugin-bigquery after 159 seconds
16 gems installed
ちょっと時間がかかります
確認
$ /opt/td-agent/embedded/bin/fluent-gem list fluent-plugin-bigquery
*** LOCAL GEMS ***
fluent-plugin-bigquery (1.2.0)
[email protected]
のインストール(2018-03-07時点)
@type bigquery_insert
@type bigquery_load
@type bigquery_insert
@type bigquery_load
を利用したいのですが、使えるのはv2.0.0からのようです。
上記の手順でインストールすると、v1.2.0 なので一手間かけてv2.0.0をインストールします。
追記
https://rubygems.org/gems/fluent-plugin-bigquery/versions/2.0.0.beta
gemに2.0.0.betaがあります。こちらをインストールすれば以下のGitHubからのインストールの必要はありません。
GitHubからインストールする準備
$ sudo /opt/td-agent/embedded/bin/fluent-gem install --no-document specific_install
Fetching: specific_install-0.3.3.gem (100%)
Successfully installed specific_install-0.3.3
1 gem installe
GitHubから最新の fluent-plugin-bigquery
をインストール
$ sudo /opt/td-agent/embedded/bin/fluent-gem specific_install https://github.com/kaizenplatform/fluent-plugin-bigquery.git
/usr/bin/git
git installing from https://github.com/kaizenplatform/fluent-plugin-bigquery.git
Cloning into '/tmp/d20180307-1588-1vvfhc6'...
remote: Counting objects: 2133, done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 2133 (delta 60), reused 94 (delta 39), pack-reused 2008
Receiving objects: 100% (2133/2133), 461.14 KiB | 0 bytes/s, done.
Resolving deltas: 100% (799/799), done.
Checking connectivity... done.
WARNING: open-ended dependency on rake (>= 0, development) is not recommended
if rake is semantically versioned, use:
add_development_dependency 'rake', '~> 0'
WARNING: open-ended dependency on rr (>= 0, development) is not recommended
if rr is semantically versioned, use:
add_development_dependency 'rr', '~> 0'
WARNING: open-ended dependency on test-unit (>= 0, development) is not recommended
if test-unit is semantically versioned, use:
add_development_dependency 'test-unit', '~> 0'
WARNING: open-ended dependency on test-unit-rr (>= 0, development) is not recommended
if test-unit-rr is semantically versioned, use:
add_development_dependency 'test-unit-rr', '~> 0'
WARNING: open-ended dependency on google-api-client (>= 0.11.0) is not recommended
if google-api-client is semantically versioned, use:
add_runtime_dependency 'google-api-client', '~> 0.11', '>= 0.11.0'
WARNING: open-ended dependency on googleauth (>= 0.5.0) is not recommended
if googleauth is semantically versioned, use:
add_runtime_dependency 'googleauth', '~> 0.5', '>= 0.5.0'
WARNING: open-ended dependency on multi_json (>= 0) is not recommended
if multi_json is semantically versioned, use:
add_runtime_dependency 'multi_json', '~> 0'
WARNING: See http://guides.rubygems.org/specification-reference/ for help
Successfully built RubyGem
Name: fluent-plugin-bigquery
Version: 2.0.0.beta
File: fluent-plugin-bigquery-2.0.0.beta.gem
Successfully installe
確認
$ /opt/td-agent/embedded/bin/fluent-gem list fluent-plugin-bigquery
*** LOCAL GEMS ***
fluent-plugin-bigquery (2.0.0.beta, 1.2.0)
設定の例(bigquery_insert)
- ApacheのアクセスログをBigQueryに送る例です
-
auth_method
には json_key
を使います
/etc/td-agent/td-agent.conf
# <source> についての詳細は割愛
<source>
@type tail
path /var/log/apache2/access.log
tag apache.access
pos_file /var/log/td-agent/apache-access-log.pos
format apache2
keep_time_key true
</source>
# <match> の内容が本題
<match apache.access>
@type bigquery_insert
auth_method json_key
json_key /tmp/json_key.json
project PROJECT_NAME
dataset DATASET_NAME
auto_create_table true
table apache_access_%Y%m%d
<buffer time>
@type file
path /var/log/td-agent/bigquery
timekey 1d
</buffer>
<inject>
time_key time
time_type string
time_format %Y-%m-%d %H:%M:%S
</inject>
schema [
{"name": "time", "type": "TIMESTAMP"},
{"name": "host", "type": "STRING"},
{"name": "user", "type": "STRING"},
{"name": "method", "type": "STRING"},
{"name": "path", "type": "STRING"},
{"name": "code", "type": "INTEGER"},
{"name": "size", "type": "INTEGER"},
{"name": "referer", "type": "STRING"},
{"name": "agent", "type": "STRING"}
]
</match>
動作確認
auth_method
には json_key
を使います# <source> についての詳細は割愛
<source>
@type tail
path /var/log/apache2/access.log
tag apache.access
pos_file /var/log/td-agent/apache-access-log.pos
format apache2
keep_time_key true
</source>
# <match> の内容が本題
<match apache.access>
@type bigquery_insert
auth_method json_key
json_key /tmp/json_key.json
project PROJECT_NAME
dataset DATASET_NAME
auto_create_table true
table apache_access_%Y%m%d
<buffer time>
@type file
path /var/log/td-agent/bigquery
timekey 1d
</buffer>
<inject>
time_key time
time_type string
time_format %Y-%m-%d %H:%M:%S
</inject>
schema [
{"name": "time", "type": "TIMESTAMP"},
{"name": "host", "type": "STRING"},
{"name": "user", "type": "STRING"},
{"name": "method", "type": "STRING"},
{"name": "path", "type": "STRING"},
{"name": "code", "type": "INTEGER"},
{"name": "size", "type": "INTEGER"},
{"name": "referer", "type": "STRING"},
{"name": "agent", "type": "STRING"}
]
</match>
以上の設定例で td-agent
を起動してログ(/var/log/td-agent/td-agent.log
)を確認します。
特に問題がなさそうであれば
$ while true; do curl localhost > /dev/null && sleep 1; done
などでアクセスログを出力して、BigQueryにログがたまっていくか確認します。
BigQueryの状況を確認
#standardSQL
SELECT
*
FROM
DATASET_NAME.apache_access_20180307
ORDER BY
time DESC
設定の例(bigquery_load)
- ApacheのアクセスログをBigQueryに送る例です
-
auth_method
には json_key
を使います
-
flush_XXX
のdefalut値を参考にしつつ設定し、ある間隔で定期的に送るようにします
- 上限があるので気をつけましょう
/etc/td-agent/td-agent.conf
# <source> についての詳細は割愛
<source>
@type tail
path /var/log/apache2/access.log
tag apache.access
pos_file /var/log/td-agent/apache-access-log.pos
format apache2
keep_time_key true
</source>
# <match> の内容が本題
<match apache.access>
@type bigquery_load
auth_method json_key
json_key /tmp/json_key.json
project PROJECT_NAME
dataset DATASET_NAME
auto_create_table true
table apache_access_%Y%m%d
<buffer time>
@type file
path /var/log/td-agent/bigquery
timekey 1d
flush_at_shutdown true
flush_interval 25
</buffer>
<inject>
time_key time
time_type string
time_format %Y-%m-%d %H:%M:%S
</inject>
schema [
{"name": "time", "type": "TIMESTAMP"},
{"name": "host", "type": "STRING"},
{"name": "user", "type": "STRING"},
{"name": "method", "type": "STRING"},
{"name": "path", "type": "STRING"},
{"name": "code", "type": "INTEGER"},
{"name": "size", "type": "INTEGER"},
{"name": "referer", "type": "STRING"},
{"name": "agent", "type": "STRING"}
]
</match>
動作確認
auth_method
には json_key
を使いますflush_XXX
のdefalut値を参考にしつつ設定し、ある間隔で定期的に送るようにします
# <source> についての詳細は割愛
<source>
@type tail
path /var/log/apache2/access.log
tag apache.access
pos_file /var/log/td-agent/apache-access-log.pos
format apache2
keep_time_key true
</source>
# <match> の内容が本題
<match apache.access>
@type bigquery_load
auth_method json_key
json_key /tmp/json_key.json
project PROJECT_NAME
dataset DATASET_NAME
auto_create_table true
table apache_access_%Y%m%d
<buffer time>
@type file
path /var/log/td-agent/bigquery
timekey 1d
flush_at_shutdown true
flush_interval 25
</buffer>
<inject>
time_key time
time_type string
time_format %Y-%m-%d %H:%M:%S
</inject>
schema [
{"name": "time", "type": "TIMESTAMP"},
{"name": "host", "type": "STRING"},
{"name": "user", "type": "STRING"},
{"name": "method", "type": "STRING"},
{"name": "path", "type": "STRING"},
{"name": "code", "type": "INTEGER"},
{"name": "size", "type": "INTEGER"},
{"name": "referer", "type": "STRING"},
{"name": "agent", "type": "STRING"}
]
</match>
bigquery_insert
のときと同様
BigQueryの状況を確認
- 基本的に
bigquery_insert
のときと変わらないので詳細は割愛 -
flush_XXX
の間隔である程度たまってから送られていた
まとめ
td-agent3
(Fluentd v1.0
)で BigQuery
にログを保存できました。
その他
エラーが出た
[error]: #0 Permission denied @ rb_sysopen - /var/log/apache2/access.log
[error]: #0 Permission denied @ rb_sysopen - /var/log/apache2/access.log
のようなエラーが出るときはchmodします。
$ sudo chmod -R 755 /var/log/apache2/
エラーが出た2
fluent-plugin-bigquery
もエラーを出していましたが、beta版なので気にしないことにしました
エラーは出ましたが、それっぽく動いていました
Author And Source
この問題について(td-agent3(Fluentd v1.0)でBigQueryにログを保存する。2018-03-07), 我々は、より多くの情報をここで見つけました https://qiita.com/abetomo/items/e4f6c38bcf4807fbacbc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .