東京生まれHOUSE MUSIC育ち

悪そうな奴はだいたい友達なの?

手始めにfluentdを動かしてみた


スポンサードリンク

はじめに

録画サーバの運用をはじめて、約1年が経過します。録画サーバ上にはmirakurun、chinachu、ffmepegなどが動いています。

さらに、録画サーバ上ではDockerでGrowiというwikiや自分の勉強用にwordpressなんかも動作させています。

で、ゴールデンウィークで10連休ということもあり、勉強がてらfluentd、elasticsearch、kibanaを使い、ログを可視化したいと考えました。

「コンテナ使えば、簡単にできるんでしょ?」なんて考えていたのですが、まったく動きません。fluentdの動作を理解できていないのでさっぱりわかりません。ということで、VMを使って環境を作ってみることにしました。

まず目的とする構成

いきなりログをまとめるというのは自分にはハードルが高すぎるので、syslogをfluentdでログを集めるところから始めるようにします。

同じサーバ内で完結する構成です。

f:id:padobure:20190429075145p:plain

環境

サーバはVMを使用します。OSは慣れているCentOSを使用します。バージョンは最新の7.6です。

手順

googleで検索すると、Qiitaなどが記事でかかるのですが、公式(英語)のクイックスタートを参照しました。

Quickstart Guide | Fluentd

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を編集します。

でインプットを指定します。tagを付与してから、でstdoutという標準出力で/var/log/td-agent/td-agent.logに書き出します。

<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とログが増えました。設定には気をつけないとです。