はじめに
今回はphpのFluentLoggerモジュール(fluent-logger-php)を使ってみる話しです。
こちらも使ってみてからだいぶたってるのでうる覚えですが自分用にメモっておきます!
ということで、td-agent(fluentd)関連の記事としてTreasure Dataを使う・使ってみたメモの③です
本家Treasure Dataでは
FluentLoggerからTreasure Dataへデータを送る流れでやってみますが
今回は簡単に確認できることを優先にローカルのテキストファイルに出力する方法を挟む形に変えてお試しです
関連記事はこちら
→td-agent(fluentd)の運用でTreasure Data使ってみたメモ① - とにかく使ってみる
→td-agent(fluentd)の運用でTreasure Data使ってみるメモ② - Application Supportを使ってみる(fluent-logger-perl)
本家Treasure Dataサンプルと今回のサンプルの違い
本家Treasure Dataサンプル
Fluent::Logger→in_forward→Treasure Dataにデータ送信今回のサンプル
Fluent::Logger→in_forward→テキストファイルに書き出し
→からのTreasure Dataにデータ送信
ってことで、使ってみる流れはすごく簡単です。こんな感じ
流れ
1. git cloneでfluent-logger-php入れる
# cd /usr/local/src # git clone https://github.com/fluent/fluent-logger-php.git ※任意の場所にコピー #cp -r fluent-logger-php/src/Fluent <path/to/your_project>
補足
最後のコピーは自分の環境にあった形で行います
git cloneした直後のディレクトリ構成はこんな感じです
# tree fluent-logger-php -d fluent-logger-php |-- examples | `-- stress |-- site-cookbooks | |-- apache2 | | `-- recipes | |-- apt | | `-- recipes | |-- build-essential | | `-- recipes | |-- finalize | | |-- files | | | `-- default | | `-- recipes | |-- fluentd | | `-- recipes | |-- git | | `-- recipes | `-- php5 | `-- recipes |-- src | `-- Fluent | `-- Logger `-- tests `-- Fluent `-- Logger
phpスクリプト書く
書くスクリプトはほぼ本家Treasure Dataのサンプルまんまですがこんな感じです
ソース
実行してみる
configを書いてないので動きませんが実行してみます
※NG # php fluent_logger_test.php Fluent\Logger\FluentLogger stream_socket_client(): unable to connect to unix:///var/run/td-agent/td-agent.sock (No such file or directory) td.test_db.test_table: {"hello":"world"} Fluent\Logger\FluentLogger stream_socket_client(): unable to connect to unix:///var/run/td-agent/td-agent.sock (No such file or directory) td.test_db.follow: {"from":"userA","to":"userB"} ※OK # sudo php fluent_logger_test.php
設定を書いてないのでOKのほうもログは出ませんが、
unixドメインソケットを使ってやりとりするので
/var/run/td-agent/td-agent.sockに対して権限があるユーザで実行する必要があります
td-agentのconfig書く(out_file)
configはこんな感じ
<source> type unix path /var/run/td-agent/td-agent.sock </source> <match td.*.*> type file time_slice_format %Y_%m_%d path /var/log/td-agent/project/out/fluent_logger_log </match>
config変えたのでtd-agentの再起動もお忘れなく
# /etc/init.d/td-agent restart
難しいとこはないので次行きます
4.phpスクリプト実行してみる
ってことで、あとは実行するのみ
# sudo php fluent_logger_test.php # cd /var/log/td-agent/project/out # ls -al -rw-r--r-- 1 td-agent td-agent 140 5月 19 22:25 2014 fluent_logger_log.2014_05_19.b4f9c0b0fc53a1687 # cat fluent_logger_log.2014_05_19.b4f9c0b0fc53a1687 2014-05-19T22:25:05+09:00 td.test_db.test_table {"hello":"world"} 2014-05-19T22:25:05+09:00 td.test_db.follow {"from":"userA","to":"userB"}
ってことで、
めでたくfluent_logger_log.2014_05_19.b4f9c0b0fc53a1687
というファイルに出力されました!
5. apikeyを取得する
ここからいよいよTreasure Dataにデータを送るわけですが、
送るにはconfigにapikeyを書く必要があるのでapikeyを取得します。
apikey自体は取得というよりはTreasure Dataにsign upしていれば既にできています
→sign upについてはこちら
ってコトでhttps://console.treasuredata.com/にログインした状態で
アカウント名クリック > API Keysのランにパスワードを入力 > Show Keys
でapikeyが表示されます
6. td-agentのconfig変更(out_tdlog)
configをこんな感じに変更してみます
<source> type unix path /var/run/td-agent/td-agent.sock </source> #<match td.*.*> # type file # time_slice_format %Y_%m_%d # path /var/log/td-agent/project/out/fluent_logger_log #</match> <match td.*.*> type tdlog apikey [`5. apikeyを取得する`で取得したapikey] auto_create_table buffer_type file buffer_path /var/log/td-agent/project/buffer/buffer use_ssl true </match>
毎度ですが変更後は再起動お忘れなく
# /etc/init.d/td-agent restart
補足
後で出てきますが、bufferファイルは実際はこんな形で出力されます
# ls -al /var/log/td-agent/project/buffer -rw-r--r-- 1 td-agent td-agent 31 5月 19 22:33 2014 buffer.test_db.follow.b4f9c0d082752f0b8.log -rw-r--r-- 1 td-agent td-agent 23 5月 19 22:33 2014 buffer.test_db.test_table.b4f9c0d082731050a.log
フォルダ指定のつもりで/var/log/td-agent/project/buffer
みたいに書くと意図しないところにbufferファイルができるので注意
7. 再度phpスクリプト実行してみる
ってことで再び実行
# sudo php fluent_logger_test.php # ls /var/log/td-agent/project/buffer buffer.test_db.follow.b4f9c0d082752f0b8.log buffer.test_db.test_table.b4f9c0d082731050a.log # kill -USR1 `cat /var/run/td-agent/td-agent.pid`
補足
bufferファイルをflushするためにSIGUSR1シグナルでkillしてますが
configにflush_interval 0s
を追加するとすぐにflushされます
<match td.*.*> type tdlog apikey [`5. apikeyを取得する`で取得したapikey] auto_create_table buffer_type file buffer_path /var/log/td-agent/project/buffer/buffer flush_interval 0s←これ use_ssl true </match>
8. Treasure Dataで確認
https://console.treasuredata.com/にログインして確認します
- test_dbができてる
- test_table、followができてる
まとめ
ってことで、
FluentLoggerを使うことでphpモジュールからtd-agentクライアントにemmit、からのTreasure Dataにデータ入れることができるようになりました
いろいろ使い道はありそうですね!