はじめに
こちらも昔やったことのうる覚えの自分用メモ!
今回はperlのFluent::Logger(fluent-logger-perl)モジュールを使ってみる話しです。
本家Treasure Dataでは
Fluent::LoggerからTreasure Dataへデータを送る流れでやってみますが
今回は簡単に確認できることを優先にローカルのテキストファイルに出力する方法を挟む形に変えてお試しです
本家Treasure Dataサンプルと今回のサンプルの違い
本家Treasure Dataサンプル
Fluent::Logger→in_forward→Treasure Dataにデータ送信今回のサンプル
Fluent::Logger→in_forward→テキストファイルに書き出し
→からのTreasure Dataにデータ送信
①導入はこちら
→td-agent(fluentd)の運用でTreasure Data使ってみたメモ① - とにかく使ってみる
補足
そんなにテクニカルでも有用でもないカモですがこちらにメモまとめをメモっておきました →td-agent(fluentd)を本番サ―ビスで小さく使ってみたメモ-まとめ
流れ
使ってみる流れはすごく簡単です。こんな感じ
1. cpanでfluent-logger-perl入れる
# cpan # cpan[1]> install Fluent::Logger
補足
こんな感じでエラったらYAMLを入れる
//hint// to see the cpan-testers results for installing this module, try:
reports FUJIWARA/Fluent-Logger-0.11.tar.gz
Warning (usually harmless): 'YAML' not installed, will not store persistent state
Running Build install
make test had returned bad status, won't install without force
Failed during this command:
FUJIWARA/Fluent-Logger-0.11.tar.gz : make_test NO
参考→さくらvpsの設定自分メモ - さくらVPSのCentOSにCpan入れる
2. perlスクリプト書く
書くスクリプトはほとんど本家Treasure Dataのまんまですがこんな感じです
ソース
perl_fluent_logger_test.pl
実行してみる
configを書いてないので動きませんが実行してみます
# perl fluent_logger_test.pl 2014-05-19T19:09:22+0900 Fluent::Logger[40214336](127.0.0.1:24224): Can't connect: 接続を拒否されました at fluent_logger_test.pl line 3 2014-05-19T19:09:22+0900 Fluent::Logger[40214336](127.0.0.1:24224): flushing pending data on close at fluent_logger_test.pl line 0 2014-05-19T19:09:22+0900 Fluent::Logger[40214336](127.0.0.1:24224): Can't connect: 接続を拒否されました at fluent_logger_test.pl line 0 2014-05-19T19:09:22+0900 Fluent::Logger[40214336](127.0.0.1:24224): Can't send pending data. LOST 51 bytes.: Can't call method "syswrite" on an undefined value at /usr/local/share/perl5/Fluent/Logger.pm line 281. at fluent_logger_test.pl line 0
in_forwardの設定を書いてないので当然ですが怒られますw
td-agentのconfig書く(out_file)
configはこんな感じ
<source> type forward port 24224 </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.perlスクリプト実行してみる
ってことで、あとは実行するのみ
# perl fluent_logger_test.pl # cd /var/log/td-agent/project/out # ls -al -rw-r--r-- 1 td-agent td-agent 79 5月 19 19:22 2014 fluent_logger_log.2014_05_19.b4f9be22e81378007 # cat fluent_logger_log.2014_05_19.b4f9be22e81378007 2014-05-19T19:22:11+09:00 td.test_db.test_table {"entry1":"value1","entry2":2}
ってことで、
めでたくfluent_logger_log.2014_05_19.b4f9be22e81378007
というファイルに出力されました!
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 forward port 24224 </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 /var/log/td-agent/project/buffer buffer.test_db.test_table.b4f9beef12cfd53d6.log
フォルダ指定のつもりで/var/log/td-agent/project/buffer
みたいに書くと意図しないところにbufferファイルができるので注意
7. 再度perlスクリプト実行してみる
ってことで再び実行
# perl fluent_logger_test.pl # ls /var/log/td-agent/project/buffer buffer.test_db.test_table.b4f9beef12cfd53d6.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ができてる
まとめ
ってことで、
Fluent::Loggerを使うことでperlからtd-agentクライアントにemmit、からのTreasure Dataにデータ入れることができるようになりました
いろいろ使い道はありそうですね!