Windows Server上のtd-agentでログを送れない事象にぶつかった

最近はWindows Serverを触ることが多いのですが、やはりログの管理が問題になってきます。いつからかWindows向けのtd-agentインストーラが配布されるようになっていますし、イベントログ(使いにくいけど離れがたいWindowsのログ管理の仕組み)からのInputを行うプラグインも公式ドキュメント上で紹介されています。

docs.fluentd.org

docs.fluentd.org

Windows Server上でのログ収集にも使える下地が整っていそうと考え、本番環境での使用を検討し始めました。

検証で頓挫

手元のHyper-V上でWindows Server同士でログ送信、受信を行うと全く問題ありませんでした。しかし顧客の検証環境のWindows Server同士でログ送信が行えない問題がありました。

古いですが以下の記事のように、ログの送信元のtd-agent.logには「detached forwarding server」が出ていました。コマンドラインからtd-agentのログレベルを詳細にして起動してみると集約サーバへのheartbeatを何度も送っては失敗しているように見えました。

blog.livedoor.jp

Windows Serverでのtd-agentの情報があまり見つからなかったのと、顧客の検証環境のすべてを知り尽くしているわけではないので調査が難航しました。

解決

某所で相談したおかげでこの事象が解決できました。td-agentのサービスを動かす権限はLocal Systemで事足りると思っていたのが間違いでした。LocalのAdministrator権限があるユーザーで動かしたらログを送ることができました。
fluent-catはおそらくAdministrator権限でPowerShell上で立ち上げていたのでログを送信できたのだと思われます。

未だに謎な部分

検証時、td-agentのサービスの権限はインストーラで設定されたもの(Local System)をそのまま使っていたのですが、ドキュメントを見る限り権限周りを変更する必要があるようには見えませんでした。またLocal SystemはAdministratorsグループのメンバーと同じレベルの権限を持つとありますが、なぜLocal Systemでは足りなかったのかが謎です。

atmarkit.itmedia.co.jp

何かわかる人がいましたらご連絡ください。

Quote Tweet