td-agentバージョンアップ
td-agent V2(Fluentd v0系)からV4(Fluentd v1系)へのバージョンアップを実施したので、そのときの調査、検証を記載します。
今回はRHEL7からRHEL8へのVMのUpdateに伴うtd-agentのバージョンアップとなります。
※特定の環境下の内容ではあるので、バージョンアップの網羅性はありません。
td-agentバージョンの確定
できればサポート期間内のものがよいのですが、あまりに変更がありすぎても困る、、というのがあります。
td-agentはv5からFluentdに統合されることになっています。
対象のサーバー群はRHEL7からRHEL8へのUpgrade想定です。
v4もv5も対応しています。
結論として、Flunetdバージョンとしてv0からv1にあがるものの、Fluentdに統合される前のv4を選択することとなりました。
Pluginの確認
td-agent v4をにupdateするにあたって、ログの出力や整形等で使用しているpluginがそのまま使えるかの確認が必要です。
※この記事では、対象バージョンアップシステムで使用しているpluginのみ対象で確認しています。
確認が必要なplugin
(td-agentにdefaultで入っているものでバージョンアップに関係なさそうなものは除いています)
- fluent-plugin-forest
- 現行設定で非常に多く利用されている。実機で確認したところ、現行の設定であれば利用可能であることを確認。
- file_with_fix_path
- ログの保管サーバーでまとめてログ監視のために利用していることが判明。各サーバーでログ監視をする設定に変更するため、利用しないこととする。
- elasticsearch
- AWSでelasticsearchを利用しているが、こちらもEOSのためOpensearch利用とする。(実機で確認するとElasticsearch2.3(on AWS)にログが配置できなかった)
- s3
- 実機確認したところ、利用に問題なし。
td-agentの複数プロセスでの実行
td-agent v2ではパフォーマンスを良くするために、td-agentのプロセスを複数起動させていました。
type multiproces
を利用してそれぞれ設定ファイルを指定し、複数プロセスを起動していますが、v4では利用できませんでした。
代わりに<worker>
でプロセスを分けて起動できるようになっています。
参考:Multi Process Workers
例)
旧設定ファイル
<source>
type multiprocess
<process>
cmdline -c /etc/td-agent/td-agent_01.conf
sleep_before_start 1s
sleep_before_shutdown 5s
</process>
(省略)
</source>
新設定ファイル
<system>
workers 8
</system>
## Worker
<worker 0> ##<==ここでプロセス指定
## Input
<source>
@type forward
port 24224 ##<==ここでPORTを指定(送信元はこのPORTを設定ファイルで宛先に指定)
bind 0.0.0.0
</source>
(省略)
</worker>
workerは0から始まるので、今回はworker 8
なので9個実行します。
上記では省略していますが、Worker別にPORT番号を連番にしなくても、以下のようになります。
# ss -ltnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 1024 0.0.0.0:24224 0.0.0.0:* users:(("ruby",pid=16657,fd=7))
LISTEN 0 1024 0.0.0.0:24225 0.0.0.0:* users:(("ruby",pid=16658,fd=7))
LISTEN 0 1024 0.0.0.0:24226 0.0.0.0:* users:(("ruby",pid=16660,fd=21))
LISTEN 0 1024 0.0.0.0:24227 0.0.0.0:* users:(("ruby",pid=16662,fd=21))
LISTEN 0 1024 0.0.0.0:24228 0.0.0.0:* users:(("ruby",pid=16664,fd=21))
LISTEN 0 1024 0.0.0.0:24326 0.0.0.0:* users:(("ruby",pid=16659,fd=7))
LISTEN 0 1024 0.0.0.0:24327 0.0.0.0:* users:(("ruby",pid=16661,fd=7))
LISTEN 0 1024 0.0.0.0:24328 0.0.0.0:* users:(("ruby",pid=16663,fd=7))
confファイルの書き方の変更
td-agent v2からv4(Fluentd v0からv1)での書き方の変更に対応する必要があります。
type
type
は@type
へ変更。量が多いので一括変換すべし。
buffer
それまでオプションでbuffer_chunk_limit
と記載されていたようなbufferの設定を
<buffer>
ディレクティブで囲んで記載します。(option名も変更になっています)
<buffer>
@type file
path /log1/td-agent-buffer/24226/test_WebOperationTool
queue_limit_length 32768
flush_mode interval
flush_interval 1s
</buffer>
format
こちらもbufferと同じように<format>
で囲みます。
<format>
@type single_value
</format>
rewriterule
rewrite_tag_filter
のプラグインでルール書き換えのときも、<rule>
で囲みます。
旧記載
@type rewrite_tag_filter
rewriterule1 hostname ^.P p.${tag}
rewriterule2 hostname ^.T v.${tag}
新記載
@type rewrite_tag_filter
<rule>
key hostname
pattern ^.P
tag p.${tag}
</rule>
td-agentの導入と設定
td-agentのパッケージを導入をします。必要なpluginを入れ、設定ファイルを配置し、dry-runをして実際に動かします。
導入
td-agent v4のインストール方法
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh
yum install -y td-agent
バージョン確認
td-agent --version
pluginの導入と確認
td-agent-gem install <Plugin名>
td-agent-gem list
設定ファイルの確認 (dry-runで文法チェックを行う)
設定ファイルを/etc/td-agent
の下に配置しておきます。
td-agent --dry-run -c /etc/td-agent/td-agent.conf
errorやwarnが出たら、それぞれ直しましょう。
サービス起動
sudo systemctl start td-agent
以上でupdate作業は終わりです。
必要に応じて、単体テストを実施します。