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、验证程序执行效果。
到这里,我们的实验就完成了。如果你在使用当中有何问题,欢迎和我一起讨论。
本文转自 cyr520 51CTO博客,原文链接:http://blog.51cto.com/cyr520/1265181
