LoginSignup
18
17

More than 5 years have passed since last update.

Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)

Posted at

こんにちは、cloudpack@dz_ こと大平かづみです。

Prologue - はじめに

Fluentd について勉強をはじめました!
インフラ学校1年生の私ですが、ドキュメントを参考にPHPプログラムからログを送るところまで実践できました!

自身の備忘録がてら綴ります。尚、今回は Amazon Linux (t2.micro) で作業しました。

Fluentd のための前準備

まずは 前準備 として、以下を事前に行っておくことが推奨されているようです。

NTP (Network Time Protocol) の設定

ログのタイムスタンプに影響するため、しっかり設定するのが推奨されています。
(私は今回はタイムスタンプは特に重要でなかったので、設定していません。)

ファイルディスクリプタの最大値の調整

ulimit -n
65535

であればOKだそうです。

これより数値が低い場合は、以下の対処が推奨されるそうです。

  1. /etc/security/limits.conf に以下を追記する
  2. マシンをリブートして設定を反映する
/etc/security/limits.conf
# 以下を追加
root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536

Networtk Kernel Parametre の最適化

複数台の Fluentd インスタンスで構成された高負荷環境の場合、以下の対処が推奨されるそうです。

  1. /etc/sysctl.conf に以下の設定を追記する
  2. sysctl -w を実行、またはリブートして設定を反映する
/etc/sysctl.conf
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
/etc/yum.repos.d/td.repo
[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"}

はじめてのログ収集、できました! :sparkles:

ログを送信する (PHP で)

このままさくさく進みます!

PHPアプリケーションからデータをインポートする を参考に、 fluent-logger-php を利用して PHP からログを送信してみます。

設定ファイルの設定

今回のように rpm でインストールした場合には、以下の場所に設定ファイルがあります。

# php からのログを受信できるように設定を変更 (後述)
sudo vi /etc/td-agent/td-agent.conf

td-agent.conf に、以下を追加します。

/etc/td-agent/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 の設定です。

composer.json
{
    "name": "my-project",
    "version": "1.0.0",
    "require": {
        "fluent/logger": "v0.3.7"
    }
}

送信用プログラムを作成

# 送信用の php プログラムを作成する (後述)
vi sender.php

送信用の php プログラム

送信用の php プログラムはこちらです。
ドキュメントのサンプルコードをベースに、 fluent-logger-php を呼ぶ部分を調整したものです。

sender.php
<?php
// composer でインストールした fluent-logger-php を呼び出す
require_once __DIR__.'/vendor/fluent/logger/src/Fluent/Autoloader.php';

use Fluent\Logger\FluentLogger;
Fluent\Autoloader::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"}

やたー!ログがちゃんと届いていました!! :sparkles:

Epilogue - おわりに

こんなに簡単に扱えるものだったんですねぇ!びっくりです。
未だに Amazon EC2 のインスタンスを立ち上げるにもドキドキする私ですが、半日程度でここまで実践することができました。

次回は、ログを Amazon S3 へ出力する部分に挑戦する予定です!

近況

Phalcon関連

Amazon ECS関連

技術ブログ寄稿

cloudpack技術ブログでも、AWS Lambda や 運用ツール Serf に関して記事を書いています。ご興味あれば読んでいただけると嬉しいです!

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17