2013年4月16日火曜日

Amazon Linux (EC2) で Fluentd(td-agent)を試す

php環境での使用を想定しているのでrubyのインストールはせず、
td-agentがAmazon Linuxで動作するか試してみた。
ちなみにrubyでも導入は簡単そうでした。

参考

http://docs.fluentd.org/articles/install-by-rpm
http://docs.fluentd.org/articles/php

検証環境

  • OS Amazon Linux 64bit
  • インスタンスの種類 マイクロインスタンス
  • ログの受信用サーバ1インスタンス
  • ログの送信用サーバ1インスタンス
  • PHP5.4から任意の値を送信(FuelPHP上で使ってみた)

1. td-agentのインストール

#次の1行をec2-userで実行した。
curl -L http://toolbelt.treasure-data.com/sh/install-redhat.sh | sh

ビルド済みのパッケージをインストールするだけなので、microインスタンスでもすぐに完了した。
Installing:
 td-agent            x86_64     1.1.12-0              treasuredata     20 M
Installing for dependencies:
 compat-libtermcap   x86_64     2.0.8-49.2.amzn1      amzn-main        16 k
 compat-readline5    x86_64     5.2-17.3.amzn1        amzn-main        156 k
 openssl098e         x86_64     0.9.8e-17.8.amzn1     amzn-main        894 k
 td-libyaml          x86_64     0.1.4-1               treasuredata     125 k

2. 設定ファイル(ログ受信側)

/etc/td-agent/td-agent.conf
<source>
  type forward
  port 24224
</source>
<match log.**>
  type file
  path /var/log/fluent/log
  time_slice_format %Y%m%d%H (1時間毎にファイル分割してみた)
  time_slice_wait 10m
  time_format %Y%m%d %H:%M:%S
  compress gzip
</match>

3. 設定ファイル(ログ送信側)

/etc/td-agent/td-agent.conf
<source>
  type unix
  path /var/run/td-agent/td-agent.sock
</source>
<match log.**>
  type forward
  send_timeout 60s
  recover_wait 10s
  heartbeat_interval 1s
  phi_threshold 8
  hard_timeout 60s
  <server>
    host 10.***.***.***(受信サーバのプライベートIPアドレス)
    port 24224
  </server>
  <secondary>
    type file
    path /var/log/fluent/forward-failed
  </secondary>
</match>

4. SecurityGroupsの設定

td-agentは、デフォルトで24224番ポートを使用するが、
TCPとUDPの両方を使用するので、両方開けておく必要がある。
http://docs.fluentd.org/articles/in_forward
http://docs.fluentd.org/articles/out_forward

5. td-agentの起動

送信、受信双方のtd-agentを起動する。
起動
/etc/init.d/td-agent start
停止
/etc/init.d/td-agent stop
再起動
/etc/init.d/td-agent restart
状態確認
/etc/init.d/td-agent status

自動起動
chkconfig --level 345 td-agent on

6. fluent-logger-phpのインストール

公式サイト掲載のパッケージをそのまま利用してみた。
git clone https://github.com/fluent/fluent-logger-php.git
cp -r src/Fluent /path/to/

7. ログを送信してみたサンプルコード

require_once '/path/to/Fluent/Autoloader.php';
use Fluent\Logger\FluentLogger;
Fluent\Autoloader::register();

$key = 'log.pv';
$val = array(
    'time'        => date('Y-m-d H:i:s'),
    'member_id'   => 'aaaaaaa',
    'useragent'   => $_SERVER['HTTP_USER_AGENT'],
    'ipaddress'   => $_SERVER['HTTP_X_FORWARDED_FOR'],
);
$logger = new FluentLogger("unix:///var/run/td-agent/td-agent.sock");
$logger->post($key, $val);

8. 試してみた感想

出力されるログは、JSON形式なので集計するときに取り扱いが簡単ですね。
また、追加したい値が増えてもこれなら気兼ねなく追加できます。
基本的なことでかつ重要なことですが、今のところログの取りこぼしがありません。
試しに受信側落としてみたらセカンダリーに出力してくれるし、設定によってはコピーして転送してくれたりで、
冗長化や障害時のリカバリーも可能ですね。

日々すごい量のトラフィックをさばいている次の企業で導入されているのも納得です。
http://docs.fluentd.org/articles/users

あと、td-agentならrubyではない環境でも簡単にfluentdが導入できそうです。
ただし、Windowsは除くようですが・・・。

Fluentd doesn't run on Windows.

2013年4月7日日曜日

FuelPHP 1.5.2と1.5.3の差分

2013/3/8にFuelPHP 1.5.3が出てたので内容を確認してみた
セキュリティー関連の設定に変更があったようです。



手元の1.5.2とdiffしてみた。

Files fuelphp-1.5.2/docs/assets/js/combined.js
Only in fuelphp-1.5.3/fuel/app/cache: fuel
Files fuelphp-1.5.2/fuel/app/config/config.php
Only in fuelphp-1.5.3/fuel/app/logs: 2013
Only in fuelphp-1.5.3/fuel/app/views: person
Files fuelphp-1.5.2/fuel/core/classes/fuel.php
Files fuelphp-1.5.2/fuel/core/classes/security.php
Files fuelphp-1.5.2/fuel/core/config/config.php


差分確認して該当のファイルを置き換えればよさそうです。

2013年2月12日火曜日

FuelPHP 1.5.1と1.5.2の差分

FuelPHP 1.5.2が出たので内容を確認してみた。

Hotfix release v1.5.2
fixed autoloader not properly loading and initializing classes are an…

autoload関連のバグフィックスらしい
手元の1.5.1とdiffしてみた。

diff -qr fuelphp-1.5.1 fuelphp-1.5.2
// パスは省略
Only in fuelphp-1.5.2: .gitignore
Only in fuelphp-1.5.2: .gitmodules
Only in fuelphp-1.5.2/docs: .gitignore
docs/assets/js/combined.js
docs/installation/download.html
fuel/core/base.php
fuel/core/bootstrap.php
fuel/core/classes/autoloader.php
fuel/core/classes/session/driver.php
fuel/packages/log/classes/log.php


アップデートした方がよさそう。
coreとlog.phpはコピーしておこう。

2012年11月19日月曜日

MAMPにApacheモジュール追加してみた

ことの始まりは、MAMPのapacheにapxsコマンドでモジュール追加しようとしたら、config_vars.mkが無いという警告が出てビルドできないじゃないですか・・・。
というわけで、メモ

config_vars.mkが無いよ・・・

cannot open /Applications/MAMP/Library/build/config_vars.mk: No such file or directory at /Applications/MAMP/bin/apache2/bin/apxs line 217.


そんなわけで、いろいろ試したところapacheをソースからビルドして、
関連ファイルをコピーという、結局MAMPを使う意味が半減する罠にはまりました。

MAMPのapacheバージョン確認



/Applications/MAMP/bin/apache2/bin/httpd -v

Server version: Apache/2.2.22 (Unix)
Server built: Jul 4 2012 16:45:07


Apacheのソースからビルド



先ほど確認したバージョンと同じソースコードをダウンロードする

cd /usr/local/src
curl -L -O http://archive.apache.org/dist/httpd/httpd-2.2.22.tar.bz2
tar jxfv httpd-2.2.22.tar.bz2
cd httpd-2.2.22
./configure --enable-so --prefix=/tmp/httpd-2.2.22


errorが出ております・・・

configure: error: in `/usr/local/src/httpd-2.2.22':
configure: error: C compiler cannot create executables
See `config.log' for more details.


config.log見ると、ccが無くてNo such file or directoryが多数あるんですが、

./configure: line 4709: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc: No such file or directory


MountainLionだから?かわかりませんが、パスが変わったみたいですね。
XcodeDefault.xctoolchainというパスがあったのでとりあえずシンボリックリンク張って対応

cd /Applications/Xcode.app/Contents/Developer/Toolchains
sudo ln -s XcodeDefault.xctoolchain OSX10.8.xctoolchain


気を取り直して再実行

cd /usr/local/src/httpd-2.2.22
./configure --enable-so --prefix=/tmp/httpd-2.2.22
make
make install


必要なファイルおよびディレクトリーをコピーします。

cp -r /tmp/httpd-2.2.22/build /Applications/MAMP/Library/
cp -r /tmp/httpd-2.2.22/include /Applications/MAMP/Library/


必要に応じてconfig_vars.mkの中身のパスを書き換え

cd /Applications/MAMP/Library/build
perl -i -p -e 's/\/tmp\/httpd-2.2.22/\/Applications\/MAMP\/Library/g' *

環境により微調整が必要です。
vi /Applications/MAMP/Library/build/config_vars.mk
exp_sysconfdir = /Applications/MAMP/conf/apache
sysconfdir = /Applications/MAMP/conf/apache


これでApacheモジュール追加できるようになりました。

参考



  • http://zuzara.com/blog/2010/04/08/compiling-php5-3-2-on-mamp/

  • https://groups.google.com/forum/#!msg/phusion-passenger/5trJ1eoN6cE/phDt_M-UKIYJ
  • 2012年10月15日月曜日

    gettextインストールするのにこんなに時間かかるはずがない for MacPorts - その後cmakeも

    久しぶりにosxにMacPortsでphpをインストールしようとしたら、
    なぜかgettextがインストールできないすてきな罠に出会いましたのでメモを残します。

    環境
    OSX 10.8 (Mountain Lion)
    MacPorts 2.1.2

    お急ぎの方に先に結論を申し上げると、次の2行でインストールできました。

    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework
    port install gettext

    ログなど


    sudo port install gettext
    途中省略
    ---> Fetching archive for gettext
    ---> Attempting to fetch gettext-0.18.1.1_2.darwin_12.x86_64.tbz2 from http://packages.macports.org/gettext
    ---> Attempting to fetch gettext-0.18.1.1_2.darwin_12.x86_64.tbz2 from http://mse.uk.packages.macports.org/sites/packages.macports.org/gettext
    ---> Attempting to fetch gettext-0.18.1.1_2.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/gettext
    ---> Fetching distfiles for gettext
    ---> Attempting to fetch gettext-0.18.1.1.tar.gz from ftp://ftp.dti.ad.jp/pub/GNU/gettext
    ---> Verifying checksum(s) for gettext
    ---> Extracting gettext
    ---> Applying patches to gettext
    ---> Configuring gettext

    このまま数時間放置していたのに状況変わらず・・・
    CPU利用率を見ても動いている気配がない・・・
    ターミナルのメニューにjavacの文字が見えているので少し調べると

    https://trac.macports.org/ticket/34221
    どうもJAVA_HOME設定するとよいらしい。

    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework
    port install gettext
    ---> Computing dependencies for gettext
    ---> Configuring gettext
    ---> Building gettext
    ---> Staging gettext into destroot
    ---> Installing gettext @0.18.1.1_2
    ---> Activating gettext @0.18.1.1_2
    ---> Cleaning gettext
    ---> Updating database of binaries: 100.0%
    ---> Scanning binaries for linking errors: 100.0%
    ---> No broken files found.

    インストールできましたよ。

    参考まで

    ちなみにMac Developer Libraryを参考にした下記のパスでは動作しませんでした。


    export JAVA_HOME=`/usr/libexec/java_home`

    java_homeコマンドで設定されたパス
    echo $JAVA_HOME
    /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

    その後cmakeもインストールできなかった・・・

    次のようにmysql5.5をインストールしようとしたが、cmakeのビルドで止まり同様に動かない様子。

    sudo port install mysql55-server

    こちらもJAVA_HOMEと関係しているか不明のままですが、
    次の手順でいったんcmakeを削除してから再度インストールできました。

    参考
    http://stackoverflow.com/questions/5576785/problem-installing-cmake-with-macports


    sudo port clean cmake
    sudo port install cmake

    2012年10月1日月曜日

    そろそろ通信回線について言っておくか



    iPhone5の到来によりコスト配分が変わったので、
    通信回線について言っておきます。

    通信回線
    以下、最近使っていた通信回線ですが、iPhone5が加わったのでこれを整理したいと思います。




































    通信回線電波状況通信速度コストコメント
    docomo 3Gバランスが良い。
    いろんな場所で使える安心のドコモ。
    IIJmio×月額945円でdocomo回線なのが最大の魅力。
    通信速度が128kbpsなのでメールとtwitterだけなど
    使うものを限定するかWifiと併用すればコスト面で最強。
    オプションでLTEも使える。
    WiMAXテザリングで通信データ量の上限がないのはこれだけ。
    PCを使う場合はとくに制限がないのは安心です。
    建物に囲まれた場所や地下などで
    使えないことが多い。
    au LTE◎(3Gも含む)iPhone5を購入しなければ使うことはないと思いますが、
    LTEでテザリングできるのは魅力です。
    まだLTEが普及していないので来年以降に期待。


    docomo 3G


    とにかくバランスがいいけど、これと言う売りがないのがドコモです。
    あえて言うなら地方へ行った時の安心感ですね。
    LTE(Xi)への移行はコスト面でデメリットが大きいので、もう少しがんばってほしい。
    今後は、できるだけ安く運用できるようにプランやオプションの見直しを行い、
    電話、メールなどはすべてiPhone5に転送するように設定。
    塩漬け状態ですね。

    IIJmio


    私の場合は、ウェルカムパック for イオンを購入しました。
    通信速度が128kbspなので用途が限られます。
    追加料金でLTEも使えるのですが、コストを下げるがの目的であれば使わないと思います。
    自宅、職場、駅、カフェなどでWifiが使えればこれでも十分ですね。
    テザリングはWifiルータによっては使えるらしいですが、
    128kなのであまり期待しないほうがよいかと思います。
    Wifiと併用してAndroid開発端末用かな。

    WiMAX


    通信制限なくテザリングできるのはこれだけですね。
    コスト面でもLTEと比べると安いので1年くらいお世話になりました。
    ビルで囲まれた場所や地下で使えなかったことが残念です。
    今後はLTEに設備投資していくと思われるので、どう差別化していくのかが心配です。
    iPhone5を購入したため手放すことにしましたが、今後は容量を気にする必要があるのでそれが気がかりです。

    au LTE


    auに限らずLTEの料金は高いですね。これはどのキャリアでも言えるのですが、
    LTEで通信できる場所はまだ限られているので割高感は否めません。
    良くも悪くもiPhone5のおかげでLTEの競争が激しくなるので、
    来年はLTEがどこでも使えるようになって安くなることを祈ります。
    二年縛りですが、メインのdocomoは塩漬けで残しているので、
    より良いサービスがあればすぐに解約します。

    iOS6の地図で騒がれているAppleですが、LTEだけ見てもiPhoneの影響は大きいですね。
    NFCもつけてほしかったな・・・。

    最後にこれが言いたかった。
    docomoさん、応援してます!
    ユーザーの声をもっと聞いてほしいな。

    2012年8月27日月曜日

    MacPortsインストール・アンインストール for OSX 10.8 (Mountain Lion)

    たまにしかやらないのでメモ

    MacPorts参考


  • MacPorts
  • MacPorts Guide

  • 事前準備


  • Xcode をApp Storeでインストールする
  • Command Line Tools (OSX Mountain Lion) for Xcodeをインストールする

  • MacPortsをソースコードからインストールする


  • ファイルの置き場所
  • curl -O https://distfiles.macports.org/MacPorts/MacPorts-2.1.3.tar.bz2
    tar jxvf MacPorts-2.1.3.tar.bz2
    cd MacPorts-2.1.3
    ./configure && make && sudo make install
    cd ../
    rm -rf MacPorts-2.1.3
    export PATH=/opt/local/bin:/opt/local/sbin:$PATH
    sudo port -v selfupdate
    

    MacPortsアンインストール

    sudo port -fp uninstall installed
    sudo rm -rf \
    /opt/local \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* \
    /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0 \
    ~/.macports
    

    上記のコマンドをワンライナーで実行する いずれも管理者権限で実行します。
    インストール
    curl https://raw.github.com/rx93/install/master/bin/macports.sh | env VER=2.1.3 sh
    
    アンインストール
    curl https://raw.github.com/rx93/install/master/bin/macports_uninstall.sh | sh