prerequirement
see Before Installing Fluentd | Fluentd
コマンドが扱えるファイルの数を確認
$ ulimit -n
1024だと足りないので
$ sudo /etc/security/limits.conf
root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536
を追記、再起動(VPSだとログアウト、ログインで変更された)
kernel parameterを変えるのは他に影響が出そうだったのでスキップ
install
ubuntu 14.04 trusty
register td-agent repository, install td-agent and boot td-agent deamon
$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sh
test
throw one request to td-agent
curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
confirm log
cat /var/log/td-agent/td-agent.log
service
start, stop, etc..
$ sudo /etc/init.d/td-agent start
$ sudo /etc/init.d/td-agent stop
$ sudo /etc/init.d/td-agent restart
$ sudo /etc/init.d/td-agent status
check processes
プロセスは2つ起動しているのが正しい
$ ps aufx | grep td-agent
directive
設定ファイル
$ sudo vim /etc/td-agent/td-agent.conf
<system>
Fluentdのコアの動作を設定
<source>
ログの入力元を設定
デフォルトだと
@type forward -> TPC:24424で待ち受ける @type http HTTP:9880で待ち受ける
に対応
<match>
ログの出力先を設定
sourceのtagで出力を分けられる
かぶるパターンは先勝ちで、後は動作しない
<include>
外部ファイルの設定を読み込む
rootize
エラーログなど権限不足で読めないので、td-agentをrootで起動する
$ sudo vim /etc/init.d/td-agent
TD_AGENT_USER=root
TD_AGENT_GROUP=root
$ service td-agent restart
example 1
nginx access logをtd-agent.logに出力する
$ vim /etc/td-agent/td-agent.conf
<match debug.**>
@type stdout
</match>
<source>
@type tail
path /var/log/nginx/sample-access.log
tag debug.sample-access
pos_file /var/log/td-agent/sample-access.log.pos
format /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)" "(?<forwarder>[^\"]*)")?/
time_format %d/%b/%Y:%H:%M:%S %z
</source>
$ tail /var/log/td-agent/td-agent.log
2017-02-15 21:26:44 +0900 debug.sample-access: {"remote":"xxx.xxx.xxx.xxx","host":"-","user":"-","metho
6_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36","forwarder":"-"}
use docker
prepare conf
localhost:24224(TCP)で受けて標準出力する
<source>
@type forward
</source>
<match *>
@type stdout
</match>
fluentdコンテナ起動
$ docker run -it -p 24224:24224 -v /path/to/conf/test.conf:/fluentd/etc/test.conf -e FLUENTD_CONF=test.conf fluent/fluentd:latest
コンソール上で起動(Ctrl + Cでストップ)
他のdockerコンテナをfluentdログドライバーで起動
$ docker run –log-driver=fluentd your/application
ログがfluentdコンテナを起動したコンソールで表示される
with mongo
use fluent-plugin-mongo
see https://hub.docker.com/r/fluent/fluentd/ Customize Dockerfile to install plugins (optional)