🎉
【Fluentd】td-agentを複数プロセスで起動する
td-agentを複数プロセスで起動する最低限度の設定を紹介します。
コピペでOKです。
環境
・OS: CentOS 7.9
・td-agent: 3.8.1
td-agentのインストール
以下のコマンドを実行すると、インストールされます。
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
fluent-plugin-multiprocessのインストール
以下のコマンドを実行すると、インストールされます。
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-multiprocess
td-agentの設定ファイルを作成
以下の通りtd-agentの設定ファイルを作成します。
・/etc/td-agent/td-agent.conf
※td-agent.confは、td-agentインストール時に作成されているので、元のファイルをバックアップして、新しく作成してください。
<source>
@type multiprocess
<process>
cmdline -c /etc/td-agent/td-agent-child1.conf --log /var/log/td-agent/td-agent-child1.log
pid_file /run/td-agent/td-agent-child1.pid
</process>
<process>
cmdline -c /etc/td-agent/td-agent-child2.conf --log /var/log/td-agent/td-agent-child2.log
pid_file /run/td-agent/td-agent-child2.pid
</process>
</source>
・/etc/td-agent/td-agent-child1.conf
<source>
@type tail
path /var/log/test/test1.log
pos_file /var/log/test/test1.log.pos
tag test.event
<parse>
@type regexp
expression ^(?<name>[^ ]*)$
</parse>
</source>
<match test.**>
@type stdout
</match>
・/etc/td-agent/td-agent-child2.conf
<source>
@type tail
path /var/log/test/test2.log
pos_file /var/log/test/test2.log.pos
tag test.event
<parse>
@type regexp
expression ^(?<name>[^ ]*)$
</parse>
</source>
<match test.**>
@type stdout
</match>
td-agent-child1.conf、 td-agent-child2.confにあるpathが入力ファイルになります。
設定ファイルを作成したら、td-agentを再起動します。
systemctl restart td-agent
入力ファイルにデータを追加するスクリプトを作成
入力ファイルを作成するフォルダを作成します。
cd /var/log/
mkdir test
chmod -R 777 test
入力ファイルにデータを追加するスクリプトを作成します。
・test.sh(作成場所は任意)
#!/bin/sh
while true
do
echo 'test1' >> /var/log/test/test1.log
echo 'test2' >> /var/log/test/test2.log
sleep 2
done
動作確認
ターミナル(例えば、Tera Term)を3窓起動します。
1窓で以下を実行します。
tail -f /var/log/td-agent/td-agent-child1.log
2窓で以下を実行します。
tail -f /var/log/td-agent/td-agent-child2.log
3窓で以下を実行します。
sh test.sh
以下のような結果が表示され、td-agentの処理が2プロセスで実行されることを確認できます。
・1窓
2021-09-25 18:31:41.729989616 +0900 test.event: {"name":"test1"}
2021-09-25 18:31:43.753916421 +0900 test.event: {"name":"test1"}
2021-09-25 18:31:45.774160137 +0900 test.event: {"name":"test1"}
2021-09-25 18:31:47.786154392 +0900 test.event: {"name":"test1"}
2021-09-25 18:31:49.798616913 +0900 test.event: {"name":"test1"}
2021-09-25 18:31:51.814665758 +0900 test.event: {"name":"test1"}
2021-09-25 18:31:53.821096046 +0900 test.event: {"name":"test1"}
2021-09-25 18:31:55.829277438 +0900 test.event: {"name":"test1"}
2021-09-25 18:31:57.841652265 +0900 test.event: {"name":"test1"}
・2窓
2021-09-25 18:32:54.224697625 +0900 test.event: {"name":"test2"}
2021-09-25 18:32:56.240475982 +0900 test.event: {"name":"test2"}
2021-09-25 18:32:58.254149458 +0900 test.event: {"name":"test2"}
2021-09-25 18:33:00.267759312 +0900 test.event: {"name":"test2"}
2021-09-25 18:33:02.275536545 +0900 test.event: {"name":"test2"}
2021-09-25 18:33:04.284903741 +0900 test.event: {"name":"test2"}
2021-09-25 18:33:06.304048593 +0900 test.event: {"name":"test2"}
2021-09-25 18:33:08.310172104 +0900 test.event: {"name":"test2"}
Discussion
fluent-plugin-multiprocess を使う方法は、基本的にFluentd v0.x系向けの方法になります。
Fluentd v1.x系(td-agent v3系およびv4系)ではマルチプロセスで動作させる機能が標準機能として備わっていますので、特別な理由がなければそちらをご利用ください。