こんにちは、cloudpack の @dz_ こと大平かづみです。
Prologue – はじめに
Fluentd について勉強をはじめました!
インフラ学校1年生の私ですが、ドキュメントを参考にPHPプログラムからログを送るところまで実践できました!
自身の備忘録がてら綴ります。尚、今回は Amazon Linux (t2.micro) で作業しました。
Fluentd のための前準備
まずは 前準備 として、以下を事前に行っておくことが推奨されているようです。
NTP (Network Time Protocol) の設定
ログのタイムスタンプに影響するため、しっかり設定するのが推奨されています。
(私は今回はタイムスタンプは特に重要でなかったので、設定していません。)
ファイルディスクリプタの最大値の調整
ulimit -n 65535
であればOKだそうです。
これより数値が低い場合は、以下の対処が推奨されるそうです。
/etc/security/limits.conf
に以下を追記する- マシンをリブートして設定を反映する
# 以下を追加 root soft nofile 65536 root hard nofile 65536 * soft nofile 65536 * hard nofile 65536
Networtk Kernel Parametre の最適化
複数台の Fluentd インスタンスで構成された高負荷環境の場合、以下の対処が推奨されるそうです。
/etc/sysctl.conf
に以下の設定を追記するsysctl -w
を実行、またはリブートして設定を反映する
net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 10240 65535
Fluentd のインストール
Fluentd の安定板である、 td-agent
をインストールをします。
rpm パッケージを使った Fluentd のインストール を参考に進めます。
td-agent (Fluentd) をインストール
# Treasuredata のレポジトリを追加 (記述内容は後述) sudo vi /etc/yum.repos.d/td.repo # yum の更新できるパッケージを確認 yum check-update # td-agent がインストール可能か確認 yum list td-agent # td-agent をインストール sudo yum install td-agent # td-agent がインストールされたか確認 $ yum list installed | grep td-agent
[treasuredata] name=TreasureData baseurl=http://packages.treasuredata.com/redhat/$basearch gpgcheck=0
起動確認
# Fluentd の起動 sudo /etc/init.d/td-agent start # Fluentd のステータス確認 sudo /etc/init.d/td-agent status
HTTPからログを送信してみる
# HTTPからログを送信してみる curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test # stdout に出力されたログを見てみる cat /var/log/td-agent/td-agent.log ... 略 ... 2015-02-10 13:06:04 +0000 debug.test: {"json":"message"}
はじめてのログ収集、できました!
ログを送信する (PHP で)
このままさくさく進みます!
PHPアプリケーションからデータをインポートする を参考に、 fluent-logger-php を利用して PHP からログを送信してみます。
設定ファイルの設定
今回のように rpm
でインストールした場合には、以下の場所に設定ファイルがあります。
# php からのログを受信できるように設定を変更 (後述) sudo vi /etc/td-agent/td-agent.conf
td-agent.conf
に、以下を追加します。
# Unix Domain Socket Input <source> type unix path /var/run/td-agent/td-agent.sock </source> # fluentd.test.** にマッチする入力を定義 <match fluentd.test.**> type stdout </match>
fluent-logger-php ライブラリのインストール
今回は、私が慣れている Composer でライブラリを用意しました。
# composer.json を記述する (後述) vi composer.json # composer をインストール wget http://getcomposer.org/composer.phar # fluent-logger-php をインストール php -d detect_unicode=0 composer.phar install
以下は、 fluent-logger-php のインストール手順に記載されている compser.json の設定です。
{ "name": "my-project", "version": "1.0.0", "require": { "fluent/logger": "v0.3.7" } }
送信用プログラムを作成
# 送信用の php プログラムを作成する (後述) vi sender.php
送信用の php プログラム
送信用の php プログラムはこちらです。
ドキュメントのサンプルコードをベースに、 fluent-logger-php
を呼ぶ部分を調整したものです。
// composer でインストールした fluent-logger-php を呼び出す require_once __DIR__.'/vendor/fluent/logger/src/Fluent/Autoloader.php'; use FluentLoggerFluentLogger; FluentAutoloader::register(); $logger = new FluentLogger("unix:///var/run/td-agent/td-agent.sock"); $logger->post("fluentd.test.follow", array("from"=>"userA", "to"=>"userB"));
送信プログラムを実行
# 送信プログラムを実行する php sender.php # ログを確認する tail /var/log/td-agent/td-agent.log ... 略 ... 2015-02-10 14:32:03 +0000 fluentd.test.follow: {"from":"userA","to":"userB"}
やたー!ログがちゃんと届いていました!!
Epilogue – おわりに
こんなに簡単に扱えるものだったんですねぇ!びっくりです。
未だに Amazon EC2 のインスタンスを立ち上げるにもドキドキする私ですが、半日程度でここまで実践することができました。
次回は、ログを Amazon S3 へ出力する部分に挑戦する予定です!
元記事はこちらです。
「Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)」