tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

td-agent(fluentd)の運用でTreasure Data使ってみたメモ③ - Application Supportを使ってみる(fluent-logger-php)

はじめに

今回は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入れる
  2. phpスクリプト書く
  3. td-agentのconfig書く(out_file)
  4. phpスクリプト実行してみる
    --ここまででいったん確認--
  5. apikeyを取得する
  6. td-agentのconfig変更(out_tdlog)
  7. 再度phpスクリプト実行してみる
  8. 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のサンプルまんまですがこんな感じです

ソース

php_fluent_logger_test.php

実行してみる

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が表示されます

f:id:tweeeety:20140519200407p:plain

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ができてる

f:id:tweeeety:20140519223935p:plain

  • test_table、followができてる

f:id:tweeeety:20140519223943p:plain

まとめ

ってことで、
FluentLoggerを使うことでphpモジュールからtd-agentクライアントにemmit、からのTreasure Dataにデータ入れることができるようになりました
いろいろ使い道はありそうですね!