tweeeetyのぶろぐ的めも

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

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

はじめに

こちらも昔やったことのうる覚えの自分用メモ!
今回は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入れる
  2. perlスクリプト書く
  3. td-agentのconfig書く(out_file)
  4. perlスクリプト実行してみる
    --ここまででいったん確認--
  5. apikeyを取得する
  6. td-agentのconfig変更(out_tdlog)
  7. 再度perlスクリプト実行してみる
  8. Treasure Dataで確認

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

f:id:tweeeety:20140519200407p:plain

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ができてる f:id:tweeeety:20140519203258p:plain

  • test_tableができてる f:id:tweeeety:20140519203303p:plain

まとめ

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