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
联系客服