Scribe是Facebook開源的日誌收集系統,以前我也寫過一篇關於scribe的博文,主要是關於scribe各個依賴包的編譯安裝方法和scribe服務的配置方法。今天咱們來學習一下如何把scribe運用到實際業務當中。php
在學習以前,須要你們先了解如何正確安裝和配置scribe服務。還不會的同窗,請移步個人另外一篇博文《Scribe安裝及配置方法》,連接地址是:http://cyr520.blog.51cto.com/714067/1209485。java
想讓scribe在你的業務當中發揮做用,須要咱們在安裝完scribe服務以後用thrift生成頭文件,而後把這個生成的頭文件引用到你的程序當中。這樣咱們就有了scribe的客戶端了。有了客戶端以後,咱們想收集什麼數據就垂手可得了。python
thrift支持的語言很是多,有as三、C++、C#、java、python、php、perl、ruby等等。vim
如下以php爲例,具體講解如下操做過程:ruby
一、在源碼包裏找兩個文件,fb303.thrift和scribe.thift,並放在同一個目錄下。bash
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/
二、修改scribe.thrift中包含fb303的路徑爲當前路徑。socket
vim scribe.thrift
三、用thrift生成php的接口文件,生成的目錄名是gen-php。ide
/usr/local/thrift/bin/thrift -r --gen php scribe.thrift
四、將生成的gen-php改爲有意思的名稱,再複製幾個必要的目錄。學習
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/
整個目錄結構以下:測試
五、編寫php客戶端測試程序。
vim php_client_test.php
<?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(); ?>
六、執行測試腳本。
php php_client_test.php
七、驗證程序執行效果。
到這裏,咱們的實驗就完成了。若是你在使用當中有何問題,歡迎和我一塊兒討論。