joppot

コピペで絶対動く。説明を妥協しない

サーバ

出力fluentdから収集fluentdへforwardを使ってログデータを送信する方法

投稿日:2014年8月2日更新日:

Pocket

bemoon

概要

みなさんこんにちはcandleです。今回はfluentdサーバを2台使って、ログの収集を行ってみたいと思います。サーバ2台はどのような環境でも良いのですが、私が今回説明する環境は1つはMac PCもう1つはvagrantのCent OSで行いたいと思います。

ところで、なぜfluentdからfluentdへデータというかログを送信するかというと、ログのマージの冗長化が大きな理由だと思います。

例えば以下のようなサーバ構成でサービスを提供しているとしましょう。

ロードバランサ1台、サーバ3台、データベース1台。

jh

この時、apacheのアクセスログやエラーログ、railsを使っているならrailsログなどはそれぞれのサーバに蓄積します。そうなると、ログのマージが大変になります。それぞれのサーバにアクセスしてscpとかftpとか考えるだけでも大変です。そこで、ログ出力fluentdと収集fluentdを2つ立てることで、この問題を解決したいと思います。

jh3

なお、この記事では実用的なところまではやらず、いわばfluentdのhellow worldまでしかやりません。
収集fluentdサーバにログが投げれるところまでを取り扱いたいとおもいます。

前提

2台のPCにfluentdがインストールされている


収集fluentdサーバ側のIPアドレスかホスト名の確認

必要事項として、収集サーバのIPアドレスかホスト名を確認しておく必要があります。
sshで収集fluentdサーバにアクセスします。IPアドレスを調べたい場合は「ifconfig」コマンドで調べます。ホスト名の場合は恐らく自分で設定していると思うのでそれを使ってください。

実例の1つとして、vagrantのCentOSのIPアドレスの確認の仕方を下に記述します。

vagrant ssh
ifconfig

checkIPadress

私の場合は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 ./

自動的に設定ファイルが作成されます。

localfluentconf

fluent.confに下の設定を加えます。

<match ftest>
  type forward
  <server>
    name collectionfluentd
    host 収集サーバのIPアドレスかホスト名
    port 24224
  </server>
</match>

ここで先ほど調べた収集fluentdサーバのIPアドレスかホスト名を使います。

私の場合は下のようになります。

ftestset

保存しましょう。
この設定を簡単に説明すると、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 ./

すると自動的に設定ファイルが作成されます。

vagrantfluent

下の内容を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を起動します。

startlogcollectserver

下のコマンドを打ち込みましょう。

cd ~/fluent/
fluentd -c ./fluent.conf -vv

startcollectionfluent

続いて、ログ出力側のfluentdを起動します。

neeee

収集側のfluentdと対してかわりません。同じように、

cd ~/fluent/
fluentd -c ./fluent.conf -vv

で起動します。

sametime

両方の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”が保存されているはずです。

savefluentdata

ログ収集fluentdに新たにsshで接続して、

cd /var/log/fluent/
ls

でフォルダを除くとファイルが生成されていました。
createdlogfile

内容を見ると、うまくデータが保存されていますね。

fluentok


まとめ

手入力でfluentdサーバを起動してというのは余り実用的ではありませんが、それは自動起動に設定すれ良い話です。
あとはこれの応用でログやデータを収集することができるでしょう。
railsとfluentdを使ったログの集め方は次回試していきましょう。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

AWSのLoad Blancer越しのアクセスをapacheのカスタムログを使用して取得し、かつfluentdで取得する方法

概要 みなさんこんにちはcandleです。今回はELB越しのapacheのアクセスをカスタムログを使用した場合にfluentdで如何にして取るかを紹介します。 fluentdがapacheのacces …

apache2.4でvirtualhost毎に環境変数を定義しphpで使用する方法

English 日本語 概要 みなさんこんにちはcandleです。 今回はapache2.4でバーチャルホスト毎に環境変数を定義して、それをphp側で受け取る方法を紹介します。 例えば、wordpre …

CentOS6.5にcomposerをインストールする

概要 みなさんこんにちはcandleです。cakephpではphpのライブラリ管理ツールcomposerと連帯して、便利に必要なライブラリを導入できます。 例えば、cakephpの標準テストツールph …

sshコマンドをaliasかssh configを使って短縮する

概要 みなさんこんにちはcandleです。今回はsshの接続先のホスト名を短くする方法です。 ssh接続は非常に強力なネットワークツールですが、接続先の指定がやや面倒ですね。それを単純にする方法をまと …

wordpress skeletonをnginx の本番環境でfabricを使って運用してみる

はじめに みなさんこんにちはcandleです。今回はskeletonを使用してwordpressを開発している時に、それを本番環境でどう使うかを試してみたいと思います。 本番環境はローカルのvagra …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ