Scribe是Facebook開源的日誌收集系統,之前我也寫過一篇關於scribe的博文,主要是關於scribe各個依賴包的編譯安裝方法和scribe服務的配置方法。今天我們來學習一下如何把scribe運用到實際業務當中。
在學習之前,需要大家先了解如何正確安裝和配置scribe服務。還不會的同學,請移步我的另一篇博文《Scribe安裝及配置方法》,鏈接地址是:http://cyr520.blog.51cto.com/714067/1209485。
想讓scribe在你的業務當中發揮作用,需要我們在安裝完scribe服務之後用thrift生成頭文件,然後把這個生成的頭文件引用到你的程序當中。這樣我們就有了scribe的客戶端了。有了客戶端之後,我們想收集什麼數據就輕而易舉了。
thrift支持的語言非常多,有as3、C++、C#、java、python、php、perl、ruby等等。
以下以php爲例,具體講解以下操作過程:
1、在源碼包裏找兩個文件,fb303.thrift和scribe.thift,並放在同一個目錄下。
1 2 3 4 | mkdir -p /data/tmp cd /data/tmp/ cp /data/software/thrift-0 .4.0 /contrib/fb303/if/fb303 .thrift /data/tmp/ cp /data/software /scribe-2 .1 /if/scribe .thrift /data/tmp/ |
2、修改scribe.thrift中包含fb303的路徑爲當前路徑。
1 | vim scribe.thrift |
3、用thrift生成php的接口文件,生成的目錄名是gen-php。
1 | /usr/local/thrift/bin/thrift -r --gen php scribe.thrift |
4、將生成的gen-php改成有意思的名稱,再複製幾個必要的目錄。
1 2 3 4 5 6 | mkdir includes mv gen-php includes /packages cp /data/software/thrift-0 .4.0 /lib/php/src/Thrift .php /data/tmp/includes/ cp /data/software/thrift-0 .4.0 /lib/php/src/autoload .php /data/tmp/includes/ cp -r /data/software/thrift-0 .4.0 /lib/php/src/protocol /data/tmp/includes/ cp -r /data/software/thrift-0 .4.0 /lib/php/src/transport /data/tmp/includes/ |
整個目錄結構如下:
5、編寫php客戶端測試程序。
1 | vim php_client_test.php |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php $GLOBALS [ 'THRIFT_ROOT' ] = './includes' ; include_once $GLOBALS [ 'THRIFT_ROOT' ] . '/packages/scribe/scribe.php' ; include_once $GLOBALS [ 'THRIFT_ROOT' ] . '/transport/TSocket.php' ; include_once $GLOBALS [ 'THRIFT_ROOT' ] . '/transport/TFramedTransport.php' ; include_once $GLOBALS [ 'THRIFT_ROOT' ] . '/protocol/TBinaryProtocol.php' ; $msg1 [ 'category' ] = 'TEST' ; $msg1 [ 'message' ] = "Test Message." ; $entry1 = new LogEntry( $msg1 ); $messages = array ( $entry1 ); $socket = new TSocket( 'localhost' , 1463, true); $transport = new TFramedTransport( $socket ); $protocol = new TBinaryProtocol( $transport , false, false); $scribe_client = new scribeClient( $protocol , $protocol ); $transport ->open(); $scribe_client ->Log( $messages ); $transport ->close(); ?> |
6、執行測試腳本。
1 | php php_client_test.php |
7、驗證程序執行效果。
到這裏,我們的實驗就完成了。如果你在使用當中有何問題,歡迎和我一起討論。
本文出自 “小崔的成長之路” 博客,請務必保留此出處http://cyr520.blog.51cto.com/714067/1265181