概要
みなさんこんにちはcandleです。今回はfluentdサーバを2台使って、ログの収集を行ってみたいと思います。サーバ2台はどのような環境でも良いのですが、私が今回説明する環境は1つはMac PCもう1つはvagrantのCent OSで行いたいと思います。
ところで、なぜfluentdからfluentdへデータというかログを送信するかというと、ログのマージの冗長化が大きな理由だと思います。
例えば以下のようなサーバ構成でサービスを提供しているとしましょう。
ロードバランサ1台、サーバ3台、データベース1台。
この時、apacheのアクセスログやエラーログ、railsを使っているならrailsログなどはそれぞれのサーバに蓄積します。そうなると、ログのマージが大変になります。それぞれのサーバにアクセスしてscpとかftpとか考えるだけでも大変です。そこで、ログ出力fluentdと収集fluentdを2つ立てることで、この問題を解決したいと思います。
なお、この記事では実用的なところまではやらず、いわばfluentdのhellow worldまでしかやりません。
収集fluentdサーバにログが投げれるところまでを取り扱いたいとおもいます。
前提
2台のPCにfluentdがインストールされている
収集fluentdサーバ側のIPアドレスかホスト名の確認
必要事項として、収集サーバのIPアドレスかホスト名を確認しておく必要があります。
sshで収集fluentdサーバにアクセスします。IPアドレスを調べたい場合は「ifconfig」コマンドで調べます。ホスト名の場合は恐らく自分で設定していると思うのでそれを使ってください。
実例の1つとして、vagrantのCentOSのIPアドレスの確認の仕方を下に記述します。
vagrant ssh ifconfig
私の場合は192.168.33.11ですね。
ログ出力fluentdの設定
ログが実際に生成されている側のfluentdの設定をやります。今回使うOSはMacです。
fluentdの設定ファイルの作成場所ですが、CentOSやubuntuで実用的に使いたいなら、fluentdがデフォルトで参照する/etc/fluent/fluent.confに作るのが良いと思います。
今回は練習ですので、ホームディレクトリにfluentフォルダを作ります。
mkdir ~/fluent cd ~/fluent
fluent.confをfluentdコマンドがから作成します。
fluentd --setup ./
自動的に設定ファイルが作成されます。
fluent.confに下の設定を加えます。
<match ftest> type forward <server> name collectionfluentd host 収集サーバのIPアドレスかホスト名 port 24224 </server> </match>
ここで先ほど調べた収集fluentdサーバのIPアドレスかホスト名を使います。
私の場合は下のようになります。
保存しましょう。
この設定を簡単に説明すると、ftestというタグがついたデータはforwardでホストが192.168.33.11のポート24224にデータを丸ごと投げるという意味です。nameの「collectionfluentd」というのは実はなんでもよくて、分かりやすい名前にしてあげましょう。
これで、ログ出力側の設定は終わりです。
ログ収集側のfluentdの設定
今度はログ収集側のfluentdの設定です。
収集側はどの様な形式でログを保存するか自由に選べます。
データベースに入れても良いし、ファイル書き込んでもよいし、ストレージに投げてもよいのですが、今回は1番簡単なファイルに出力する方法をやってみましょう。
収集側のfluentdのOSはCentOSを私は使います。
fluent.confファイルを作成します。
先ほども書いたように、実用的に使うなら/etc/fluent/fluent.confを作るのが良いと思うのですが、練習ですので、ホームディレクトリにfluentフォルダを作りそこにfluent.confを置きましょう。
mkdir ~/fluent cd ~/fluent
fluent.confをfluentdコマンドがから作成します。
fluentd --setup ./
すると自動的に設定ファイルが作成されます。
下の内容をfluent.confに書き加えましょう。
<match ftest> type file path /var/log/fluent/myapp time_slice_format %Y%m%d time_slice_wait 10m time_format %Y%m%dT%H%M%S%z compress gzip utc </match>
簡単に説明しますと、もしも、ftestというタグがついたデータがきたら、ファイルに出力にしてます。ファイルを置く場所は/var/log/fluent/フォルダです。myapp+時間でファイル名を付けて、gzip圧縮するというものです。
恐らくまだ。/var/log/fluentフォルダは作られていないと思うので先に作ります。
sudo mkdir /var/log/fluent/ sudo chown root:ユーザー名 /var/log/fluent/ sudo chmod 774 /var/log/fluent/
これでよいでしょう。ユーザ名のところは今ログインしているユーザ名を書きます。ユーザ名が分からなければ、コンソールで「who am i」と打てば教えてくれます。
これで収集側のfluentdの設定が終わりました。
実際にデータを投げてみる
始めに、ログ収集側のfluentdを起動します。
下のコマンドを打ち込みましょう。
cd ~/fluent/ fluentd -c ./fluent.conf -vv
続いて、ログ出力側のfluentdを起動します。
収集側のfluentdと対してかわりません。同じように、
cd ~/fluent/ fluentd -c ./fluent.conf -vv
で起動します。
両方のfluentdが起動しました。
ログデータを送信する
先ほど起動したログ出力fluentdの画面は置いておいて、別のウィンドウでログ出力fluentd側にsshでアクセスして、
下のコマンドを実行しましょう。
echo '{"first":"hello"}' | fluent-cat ftest
このコマンドは”first”:”hello”という内容をftestというタグでログ出力fluentdにデータを投げています。
設定ファイルにあるように、ログ出力fluentdはftestタグの付いたデータをforwardで私の場合ですと、192.168.33.11の収集fluentdに投げます。
ログ収集fluentdはftestタグのデータを/var/log/fluent/にファイルとして保存する設定にしたので、うまくいけば、/var/log/fluent/にfluet-catで送った”first:”hello”が保存されているはずです。
ログ収集fluentdに新たにsshで接続して、
cd /var/log/fluent/ ls
内容を見ると、うまくデータが保存されていますね。
まとめ
手入力でfluentdサーバを起動してというのは余り実用的ではありませんが、それは自動起動に設定すれ良い話です。
あとはこれの応用でログやデータを収集することができるでしょう。
railsとfluentdを使ったログの集め方は次回試していきましょう。