Scribe日誌收集系統的安裝

 

除此之外本文還收集了網絡上的很多資料,加入了自己的一些解決方法,由於沒有集中記錄,有些地方若出現了相同,還請見諒,感謝原著作者。

Scribe是facebook開源的日誌收集系統,在facebook內部已經得到大量的應用。 Scribe是基於一個使用非阻斷C++服務器的thrift服務的實現。它能夠從各種日誌源上收集日誌,存儲到一箇中央存儲系統 (可以是NFS,分佈式文件系統等)上,以便於進行集中統計分析處理。它爲日誌的“分佈式收集,統一處理”提供了一個可擴展的,高容錯的方案。
 
 
更新依賴庫:
yum -y install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel libxml2 libxml2-devel byacc libevent
否則在安裝Thrift時會出現無法make的情況。

安裝階段:
cd  /tmp/deps
tar xzvf m4-1.4.15.tar.gz
cd m4-1.4.15/
./configure --prefix=/usr/local/services/m4
make
make install
export PATH=/usr/local/services/m4/bin/:$PATH

wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz
cd  /tmp/deps
cd autoconf-2.68/
./configure --prefix=/usr/local/services/autoconf/
make
make install
export PATH=/usr/local/services/autoconf/bin/:$PATH

wgetftp://mirrors.kernel.org/gnu/automake/automake-1.11.1.tar.gz
cd  /tmp/deps
tar xzvf automake-1.11.1.tar.gz
cd automake-1.11.1/
./configure --prefix=/usr/local/services/automake/
make
make install

wget http://johntech-resource.googlecode.com/files/boost_1_44_0.tar.bz2
cd  /tmp/deps
cd boost_1_44_0/
./bootstrap.sh --with-python=/usr/local/services/python/lib/python2.7 --with-python=2.7.2 --with-icu=/usr/local/lib/icu --prefix=/usr/local/services/boost
./bjam --prefix=/usr/local/services/boost install
echo "/usr/local/services/boost/lib" >> /etc/ld.so.conf
echo "/usr/local/services/boost/include" >> /etc/ld.so.conf
ldconfig

wgethttp://ftp.gnu.org/gnu/libtool/libtool-2.4.tar.gz
cd  /tmp/deps
tar xzvf  
cd libtool-2.4/
./configure --prefix=/usr/local/services/libtool
make install
export PATH=/usr/local/services/libtool/bin/:$PATH

 wgethttps://dist.apache.org/repos/dist/release/thrift/0.8.0/thrift-0.8.0.tar.gz
cd  /tmp/deps
tar xzvf thrift-0.8.0.tar.gz
cd thrift-0.8.0/
export PY_PREFIX=/usr/local/services/python/
./configure --prefix=/usr/local/services/thrift --with-csharp=no --with-java=no --with-erlang=no --with-perl=no --with-php=no --with-ruby=no --with-boost=/usr/local/services/boost/
make
make install
echo "/usr/local/services/thrift/lib" >> /etc/ld.so.conf
ldconfig
(thrift目錄下)
cd contrib/fb303/
./bootstrap.sh
./configure --prefix=/usr/local/services/fb303 --with-boost=/usr/local/services/boost/ --with-thriftpath=/usr/local/services/thrift/
make
make install
 
編譯出錯的話 ,解決方法:
1. 修改 src/Makefile , 把 CXXFLAGS = -Wall -O3  改爲 CXXFLAGS = -Wall -O3 -fpermissive
2. 修改/usr/local/include/thrift/transport/TSocket.h  添加:# include <netinet/in.h>
    修改之後不要運行./bootstrap.sh 重新編譯即可
3./configure --prefix=/usr/local/services/fb303 --with-boost=/usr/local/services/boost/ --with-thriftpath=/usr/local/services/thrift/
 
cd  /tmp/deps
tar xzvf facebook-scribe-2ee14d3.tar.gz
cd facebook-scribe-2ee14d3/
./bootstrap.sh --prefix=/usr/local/services/scribe --with-thriftpath=/usr/local/services/thrift/ --with-fb303path=/usr/local/services/fb303/ --with-boost=/usr/local/services/boost/
make
make install

安裝後使用
/usr/local/services/scribe/bin/scribed -c /deps/facebook-scribe-63e4824/examples/example1.conf
命令啓動scribe,成功則顯示

 
然後在examples目錄下,發個數據給scribe :  echo "hello world test" | ./scribe_cat test
發現scribe出現提示信息:出現no module named thrift.thrif,則需在lib/python下運行python setup.py install.    


若出現
 
則安裝正確
 
 
如果出現ImportError: No module named scribe 表示模塊路徑錯誤,找到scibe在Python下的路徑
 
修改/etc/profile
添加
export PYTHONPATH=/usr/local/services/python/lib/python2.4/site-packages

服務器端需要以上7個步驟,也就是集中管理日誌的那臺服務器

在example目錄下  運行./scribe_ctrl 的子命令:】

status – 如果服務器運行正常則返回'ALIVE'

version – 返回當前Scribe服務器的版本、

alive – 返回服務器運行時間

stop – 停止Scribe服務器

reload – 重新加載Scribe配置文件

counters – 返回下列統計信息 (如果非零):

received good: 返回Scribe服務器啓動後接收到的信息數

received bad: 接收到的非法信息數

sent:發送到另一臺Scribe服務器的信息數

denied for queue size: 因信息隊列滿被禁止的請求數

denied for rate: 由於速度限制而被禁止的請求數

retries: 緩衝儲存重試發送一批消息的次數

requeue: Scribe發送消息到一個Store的次數 (如果must_succeed 啓用).

lost: 沒有記錄的消息的數量。(推薦配置: 使用Buffer Stores 避免信息丟失)

received blank category: 接收到的沒有信息類別的信息數量

 
作爲客戶端的配置,primary是type=network,即向remote_host發送log,如果發送不成功,就採用secondary的配置,暫時寫入本地文件 

客戶端192.168.10.242安裝好後,啓動客戶端服務器,啓動中央服務器,客戶端使用命令
echo "192.168.10.241" | ./scribe_cat -h 192.168.10.241:1463 log
發送至服務端192.168.10.241的設定文檔下log/log_00000中

如果不加指定的路徑:
echo "Thks" | ./scribe_cat log
客戶端的配置,分以下情況:
1.開了客戶端服務:會將記錄先保存在本地,再啓動中央服務端,文件會自動寫入192.168.10.241,同時本地記錄刪除。
2.同時打開客戶端和服務端,會經過客戶端的跳轉,將記錄push至服務端,本地文件也不會保存。
 

客戶端PHP接口配置:
配置php接口,需要拷貝thrift/lib/php/src下的 protocol(目錄)transport(目錄) autoload.php Thrift.php
並找到fb303.thrift和scribe.thrift,放到相同的目錄下,修改scribe.thrift中包含fb303的路徑爲當前路徑,然後執行
thrift -r --gen php scribe.thrift
用來生成接口,會在當前目錄下生成gen-php的文件夾,所需要的php框架文件都在這個文件夾下。
把你的gen-php mv 成closer或者其他你喜歡的名字,然後進入closer目錄,會發現有fb303和scribe兩個目錄。
protocol(目錄)transport(目錄) protocol(目錄)transport(目錄) autoload.phpThrift.php 都複製進closer目錄,
建立packages目錄,將本來生成的scribe和fb303目錄複製進入packages目錄。
完整的:

然後vi一個文件,內容如下: vim test.php
<?
$GLOBALS['THRIFT_ROOT'] = './thrift';

include_once $GLOBALS['THRIFT_ROOT'] . '/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'] = 'Log2';
$msg1['message'] = "a,b,c,d,e,f,g";
$entry1 = new LogEntry($msg1);
$messages = array($entry1);

$socket = new TSocket('192.168.10.241', 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();
?>

查看是否接收到:

 

目前生產環境使用的Scribe只是每次安裝完Scribe,再去客戶端修改PHP文件中的地址即可正常PUSH日誌,具體使用還需研究一下,另外附上Scribe的安裝腳本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章