notebook

都内でWEB系エンジニアやってます。

fluentdでサーバ間通信

fluentdでサーバ間通信

めちゃくちゃいまさら感があるけどfluentdの勉強

今回はwebサーバ(送信側)、logサーバ(受信側)で分けてみます

構成

  • 送信側
    • 192.168.60.11
    • 192.168.60.12
  • 受信側
    • 192.168.60.13

環境はCentOS6.4

インストール,起動

シェルスクリプト一発でインストールできてしまうらしい。

ログの送信側と受信側でインストールします。

curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh

/etc/init.d/td-agent start

ログ送信側(192.168.60.11, 192.168.60.12)

<source>
  type tail
  format apache2
  path /var/log/httpd/access_log
  pos_file /var/log/td-agent/pos.httpd
  tag apache.access
</source>
<match apache.access>
  type forward
  <server>
    host 192.168.60.13
    port 24224
  </server>
  flush_interval 60s
</match>

sourceディレクティブ

ログの取り込みの設定を行う

  • format
    • 取り込むログのフォーマット、今回はapacheのログなので用意されている(apache2)を指定
  • path
    • 取り込むログファイル
  • pos_file
    • どこまで取り込んだかを記述しておくファイル
  • tag
    • fluentd側の識別子みたいな感じ

matchディレクティブ

出力先の設定を行う

sourceディレクティブのtagで指定した名前にマッチしたものの出力の設定(この場合apache.access)

  • type
    • forwardで転送、fileでファイルへ出力
  • server ( forwardで転送先を指定したら転送先のサーバの設定を行う )
    • host
      • 転送先のホスト
    • port
      • 転送先のポート
  • flush_interval
    • 何秒毎にログを転送するか、、、かな

ログ受信側(192.168.60.13)

<source>
  type forward
  port 24224
</source>
<match apache.access>
  type file
  path /var/log/httpd/access.log
  time_slice_format  %Y%m%d
  time_slice_wait 10m
</match>

sourceディレクティブ

受信用の設定、もちろん送信元の設定でも同じポートを指定する(24224)

  • type
    • forwardで他サーバから転送されたものを取り込む
  • port
    • 空けておくポートを指定する

matchディレクティブ

受け取ったログの出力先の設定

送信側で設定したtag名がそのまま使えるよう、sourceでtagを付け替えとかできたりするのかな。。

  • type
    • fileを設定したのでファイルに出力
  • path
    • 出力するパス
  • time_slice_format
    • format毎にファイルを生成する
  • time_slice_wait
    • この期間ごとに書き出しする....?

上記設定で無事受け取り側にログを収集することができました

こんな感じ

ls /var/log/httpd/
access.log.20140727_0.log

基本的にはsourceディレクティブでインプット、matchディレクティブでアウトプットって感じでしょうか

実際にやってみてイメージわきやすかったけど何度か「Permission denied」で躓いた。

ログの権限あたりでちゃんと設定しないとうまくいかないので気をつける