Fluentdを使おうと思って調べてる。
Fluentdを使うと、各種ログを集約したり、いろいろな出力先に振り分けたりが簡単にできる。
Rubyで実装されていて、gemでインストールすることができるけど、今回はRubyの実行環境も含めてパッケージ化されたtd-agentを使う。
GitHub - treasure-data/td-agent: This repository is OBSOLETE, check gh/treasure-data/omnibus-td-agent
バージョンはUbuntu 12.04(precise)、Python 2.7、td-agent 0.10.35、fluent-logger-python 0.3.3。
ドキュメントがあるので、この通りでよさそう。
http://help.treasure-data.com/kb/installing-td-agent-daemon/installing-td-agent-for-debian-and-ubuntu
td-agentのインストール
td-agentのインストールは、インストール用スクリプトをダウンロードして実行する。
$ curl -L http://toolbelt.treasure-data.com/sh/install-ubuntu-precise.sh | sh
スクリプト内でsudoを使っているので、管理者権限が必要。
設定ファイルは、 /etc/td-agent/td-agent.conf となる。
もし、TresureDataのサービスへログをアップロードしたい場合は、APIキーを取得して設定する。
td-agentの起動、終了、再起動
init.dスクリプトで起動、終了、再起動する。
$ sudo /etc/init.d/td-agent start $ sudo /etc/init.d/td-agent stop $ sudo /etc/init.d/td-agent restart
この辺はあとでUpstartで動くように変更したほうが個人的には嬉しいかも。
curlでデータを投げてみる
デフォルト設定では8888ポートで起動し、debug.*というパスならstdoutに出力されるので、これをcurlで試す。
$ curl -X POST -d 'json={"foo":"bar","fuga":2}' http://localhost:8888/debug.hoge
デフォルトではstdoutの出力は /var/log/td-agent/td-agent.log に出力されるので、tailで確認する。
$ tail -n 1 /var/log/td-agent/td-agent.log 2013-07-18 01:56:34 +0900 debug.hoge: {"foo":"bar","fuga":2}
これでtd-agentの動作を確認できた。
Pythonからデータを投げてみる
PythonからFluentdにデータを投げるには、fluent-loggerモジュールを使うと簡単。
GitHub - fluent/fluent-logger-python: A structured logger for Fluentd (Python)
fluent-logger 0.4.1 : Python Package Index
virtualenv環境にインストールしてみる。
$ virtualenv fluent-test New python executable in fluent-test/bin/python Installing setuptools............done. Installing pip...............done. $ source fluent-test/bin/activate (fluent-test)$ pip install fluent-logger
fluent_test.py
単純にログを1回だけ投げてみるスクリプトを用意。
from fluent import sender, event def main(): sender.setup('debug') event.Event('from_python', {'foo': 'bar', 'test': 123}) if __name__ == '__main__': main()
setupの第一引数で、prefixを指定できるようだ。
実行結果
スクリプトを実行するとFluentdにログが投げられるので、tailで確認する。
(fluent-test)$ python fluent_test.py (fluent-test)$ tail -n 1 /var/log/td-agent/td-agent.log 2013-07-18 02:11:04 +0900 debug.from_python: {"test":123,"foo":"bar"}
特にハマることなく、うまく動かせた。