はじめに
録画サーバの運用をはじめて、約1年が経過します。録画サーバ上にはmirakurun、chinachu、ffmepegなどが動いています。
さらに、録画サーバ上ではDockerでGrowiというwikiや自分の勉強用にwordpressなんかも動作させています。
で、ゴールデンウィークで10連休ということもあり、勉強がてらfluentd、elasticsearch、kibanaを使い、ログを可視化したいと考えました。
「コンテナ使えば、簡単にできるんでしょ?」なんて考えていたのですが、まったく動きません。fluentdの動作を理解できていないのでさっぱりわかりません。ということで、VMを使って環境を作ってみることにしました。
まず目的とする構成
いきなりログをまとめるというのは自分にはハードルが高すぎるので、syslogをfluentdでログを集めるところから始めるようにします。
同じサーバ内で完結する構成です。
環境
サーバはVMを使用します。OSは慣れているCentOSを使用します。バージョンは最新の7.6です。
手順
googleで検索すると、Qiitaなどが記事でかかるのですが、公式(英語)のクイックスタートを参照しました。
td-agentとfluentdは同じと考える
公式サイトにtd-agentとfluentdの両方の表記があるようなのですが、まずは深く考えずに同じものと考えます。
異なるものだったら、後で
インストール
以下を参考にしました。
Installing Fluentd Using rpm Package | Fluentd
以下のコマンドでインストールします。自動でインストールが完了するので楽です。
# curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
サービス起動
以下でサービスを起動します。
# systemctl start td-agent.service
fluentdの動作確認
# curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
fluentdが動いていると、以下にログが出力されています。
/var/log/td-agent/td-agent.log
定義ファイルの確認
#cat /etc/td-agent/td-agent.conf
td-agent.confを見てみる
インプットとなるところは以下です。
# HTTP input # POST http://localhost:8888/<tag>?json=<json> # POST http://localhost:8888/td.myapp.login?json={"user"%3A"me"} # @see http://docs.fluentd.org/articles/in_http <source> @type http @id input_http port 8888 </source>
ログに書き出すところは以下かな。
/var/log/td-agent/td-agent.log
に出力するのは、stdoutで定義されていると思います。(時間のあるときにコードなどを追いかけようと思います。)
## match tag=debug.** and dump to console <match debug.**> @type stdout @id output_stdout </match>
syslogをfluentdの標準出力に書き出す
td-agent.confの編集
/etc/td-agent/td-agent.conf
を編集します。
<source> @type tail format syslog path /var/log/messages tag syslog.messages </source> <match syslog.messages> @type stdout </match>
ハマったポイント
Permission denied
以下のようにエラーが出力されました。Permissionが適切ではなくてエラーが出力され続けました。
2019-04-28 09:36:32 +0900 [error]: #0 suppressed same stacktrace 2019-04-28 09:36:33 +0900 [error]: #0 Permission denied @ rb_sysopen - /var/log/messages
対応
/var/log/messages
のパーミッションを変更した。764に変更した。
# chmod 764 /var/log/messages
効果のなかったと思われるfluentd起動ユーザの変更
以下のようにvi /etc/init.d/td-agent
を編集し、fluentdのユーザを変更してみました。しかし、この対応でもエラーは出力し続けました。
変更前
TD_AGENT_USER=td-agent TD_AGENT_GROUP=td-agent
変更後
TD_AGENT_USER=root TD_AGENT_GROUP=root
大量のエラーログには注意
Permission deniedとなっている間、ログが大量に出力されました。すぐに10MB、20MBとログが増えました。設定には気をつけないとです。