上書き更新したファイルのデータが正しく反映されていません

FlyData Autoloadにて転送するデータをファイル上書きで更新する場合、元ファイルよりも上書きファイルのサイズが大きいと上書きファイルの最初の部分が転送されません。

例えば、次のような形で上書きでのファイル更新を実施しているとします。

$ ls -l
total 120
-rw-rw-r-- 1 john john 40960 Aug 26 16:42 log_to_load.log
-rw-rw-r-- 1 john john 81920 Aug 26 16:42 new_log.log
$ cp new_log.log log_to_load.log

結果

上書きファイルの前半が転送されず、不十分な形でデータが転送されてしまいます。

原因

FlyData Autoloadが内的に利用しているfluentdのin_tailプラグインは、(1) ログファイルのinodeが変化したとき、(2) ログファイルのサイズが小さくなったときに、ファイルに変更があったことを検知します。上記の例のように、元サイズよりも大きいファイルを上書きすると、fileのinodeはそのままで、ファイルが大きくなります。結果として、in_tailプラグインは、ファイルは追記されたと判断し、元ファイルと上書きファイルの差分のみが転送されます。

解決方法

上書きする前に元のファイルの名称を変更し、空のファイルを一度作ってから、新しいファイルで空のファイルを上書きしてください。

$ mv log_to_load.log log_to_load.log.bak
$ touch log_to_load.log
$ cat new_log.log >> log_to_load.log

 

他にご質問がございましたら、リクエストを送信してください

0 コメント

ログインしてコメントを残してください。
Powered by Zendesk