作業環境
- OS: Amazon Linux2
- td-agent3(fluentd v1)
構成
- Fluentd Client数台
- いつ入れ替わってもすべてのログを保存したいので、ほぼリアルタイムでServerにログを送って集約させます
- Fluentd Server一台
- ログの保存時間、コスト、検索の便利さなどを考慮して、一時間ごとにログをS3に転送します
Fluentd Client側のインストールと設定
インストール
下記のコマンドでtd-agent3をインストールすることができます。
curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh
設定
設定ファイルはここにあります。
/etc/td-agent/td-agent.conf
下記の内容を追加します。
<source>
@type tail
format nginx
tag "nginx.access.#{Socket.gethostname}"
path /var/log/nginx/access.log
pos_file /var/log/td-agent/nginx.access.log.pos
</source>
<source>
@type tail
tag "nginx.error.#{Socket.gethostname}"
path /var/log/nginx/error.log
pos_file /var/log/td-agent/nginx.error.log.pos
format multiline
format_firstline /^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} \[\w+\] (?<pid>\d+).(?<tid>\d+): /
format1 /^(?<time>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[(?<log_level>\w+)\] (?<pid>\d+).(?<tid>\d+): (?<message>.*)/
multiline_flush_interval 3s
</source>
<match nginx.**>
@type forward
<buffer tag>
flush_interval 3s
</buffer>
<server>
host x.x.x.x
port 24224
</server>
</match>
- source: ログを指定し、tagをつける
- match: tagをマッティングし、収集してきたログを処理する
※注意点:#{Socket.gethostname}
でhost名を取得できますが、必ず""
を付けてください。つけないと単なる文字列として扱われます。
Fluentd Server側のインストールと設定
インストール
下記のコマンドでtd-agent3とプラグインをインストールすることができます。
curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh
td-agent-gem install fluent-plugin-forest
※注意点:fluent-plugin-s3
が必要だと多くの記事に書いてありますが、td-agentの中にすでに含まれてるのでインストール不要です。もしもう一つのfluent-plugin-s3
を入れたら必ずアンインストールしてください。複数個存在すればエラーが発生してしまいます。ご注意ください。
プラグインの確認方法
td-agentを起動してログで確認できます。
/var/log/td-agent/td-agent.log
内容は下記のように。
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-elasticsearch' version '3.5.4'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-kafka' version '0.11.1'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-prometheus' version '1.5.0'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-record-modifier' version '2.0.1'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '2.2.0'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-s3' version '1.1.11'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-td' version '1.0.0'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.4'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-webhdfs' version '1.2.4'
2019-12-10 11:41:04 +0900 [info]: gem 'fluentd' version '1.7.0'
設定
<match nginx.**>
@type forest
subtype copy
<template>
<store>
@type s3
aws_key_id YOUR_KEY_ID
aws_sec_key YOUR_SECRIT_KEY
s3_bucket BUCKET_NAME
s3_region REGION
s3_enpoint s3.ap-northeast-1.amazonaws.com
path ${tag_parts[0]}/${tag_parts[1]}/%Y%m%d/${tag_parts[1]}.log.${tag_parts[2]}.
time_slice_format %Y%m%d%H
<buffer tag,time>
@type file
path /var/log/td-agent/s3/${tag_parts[0]}/${tag_parts[1]}.log.${tag_parts[2]}
timekey 3600 # 1 hour partition
timekey_wait 10s
</buffer>
</store>
</template>
</match>
説明:tagがnginx.**のログは一旦buff fileに保存して、1時間ごとにs3に転送します。tagはClient側で設定されます。プラグインforestの使い方はgoogleで検索してください。
※注意点:bufferのpathですが、サーバごとにログごとに分けてください。分けないとエラーになってログの収集が失敗してしまいます。
Debugログの出力方法
デフォルトではエラーログは出ないです。
debugログを出力したい場合は下記の内容を/etc/td-agent/td-agent.conf
に追加して再起動してください。
<system>
log_level debug
</system>