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がインストールされている

SPONSORED LINK


収集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

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

関連記事

cakephp2系にphpunitとDebugkitをcomposerを使って最速で導入する

概要 みなさんこんにちはcandleです。今回はcakephp2.4以降でphpunitとdebugkitをcomposerを使って導入してみたいと思います。 cakephpは標準でphpunitを使 …

ruby on railsのbundleのGemfileでインストールしたgemを削除する

概要 みなんさんこんにちはcandleです。今回は間違って入れてしまったり、不必要になったgemの削除のやり方を紹介します。 前提 ruby on railsの環境が整っている gemの概念を理解して …

ec2からvimをアンインストールして削除する

概要 みなさんこんにちはcandleです。 今回はec2のデフォルトで入っているvimを削除してみたいと思います。 emacs使いの私としてはvimは、まぁ、いらないと考えました。 もちろんviが入っ …

wordpressをnginxでsubdirectoryに配置する

概要 みなさんこんにちはcandleです。 今回はnginxを使って、サブディレクトリにwordpressを配置してルーティングを行う方法を紹介します。 実はこれ、結構苦労しました。わりと文献はあるの …

wordpress skeletonを使った開発環境の構築

はじめに みなさんこんにちはcandleです。wordpressは大変便利なのですが、いまいちgitで管理するのが難しいものです。 というのも、wordpress全体をgit管理対象にしてしまうと、w …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ