最近几个月tars c++更新了调用链功能,想要尝试摸索一下,但是尝试失败!
参考tars调用链介绍:
java:https://github.com/TarsCloud/Tars/blob/master/docs/tars_tracing.md
c++:https://github.com/TarsCloud/TarsCpp/blob/master/docs/tars_cpp_user_guide.md
期望目标:通过在浏览器url栏输入:localhost:9411 ,出现zipkin的图形界面。参考图:
1.环境
1.1 C++11
1.2 cmake-3.1.2
1.3 curl-7.29.0
1.4 opentracing-cpp ,version : 1.5.x
1.5 zipkin-cpp-opentracing ,version : master
2.下载tars 源码
2.1 TarsFramework
git clone https://github.com/TarsCloud/TarsFramework.git --recursive
2.2 TarsCpp
git clone https://github.com/TarsCloud/TarsCpp.git --recursive
3.安装方式:
3.1 仅编译安装TarsCpp,不重新编译TarsFramework
3.1.1 添加_USE_OPENTRACKING变量
在编译之前,在shell中执行export _USE_OPENTRACKING=1。
编译:
git clone https://github.com/TarsCloud/TarsCpp.git --recursive
cd TarsCpp
cmake .
make
3.1.2 编译失败
在编译时TarsCpp出现了初始化动态数组错误:
3.1.3 修改makefile.tars
1. 修改tarscpp/servant/makefile/makefile.tars,在前面增加一行: _USE_OPENTRACKING=1
3.1.4 安装
make install
3.1.5 编译例子HelloServer
(1)server端
g++ -std=c++11 -g -O2 -Wno-deprecated -Wall -D_USE_OPENTRACKING=1 -o HelloServer HelloImp.o HelloServer.o -I/usr/local/tars/cpp/include -I./ -I/usr/local/mysql/include/mysql -I/usr/local/mysql/include -I/usr/include/mysql -I/usr/local/include -L/usr/local/tars/cpp/lib -ltarsservant -ltarsparse -ltarsutil -lpthread -L/usr/local/mysql/lib/mysql -L/usr/local/mysql/lib -L/usr/lib/mysql -L/usr/local/lib -lopentracing -lzipkin_opentracing -lzipkin -lcurl
(2)client端
g++ -std=c++11 -g -O2 -Wno-deprecated -Wall -D_USE_OPENTRACKING=1 -o TestHelloServer main.o -I/home/tarsproto/TestApp/HelloServer -I/usr/local/tars/cpp/include -I./ -I/usr/local/mysql/include/mysql -I/usr/local/mysql/include -I/usr/include/mysql -I/usr/local/include -L/usr/local/tars/cpp/lib -ltarsservant -ltarsparse -ltarsutil -lpthread -L/usr/local/mysql/lib/mysql -L/usr/local/mysql/lib -L/usr/lib/mysql -L/usr/local/lib -lopentracing -lzipkin_opentracing -lzipkin -lcurl
3.1.6 修改HelloServer服务端配置文件conf
路径:/usr/local/app/tars/tarsnode/data/TestApp.HelloServer/conf/TestApp.HelloServer.config.conf
在TestApp.HelloServer.config.conf文件中指定zipkin的地址:
添加3行:
collector_host=127.0.0.1
collector_port=9411
sample_rate=1.0
3.1.7 启动服务
在web管理平台‘重启’HelloServer服务会将TestApp.HelloServer.config.conf还原,因此我才用shell启动。
./HelloServer --config=/usr/local/app/tars/tarsnode/data/TestApp.HelloServer/conf/TestApp.HelloServer.config.conf &
3.1.8 检查zipkin功能
(1)localhost:9411 ,并没有zipkin的图形化界面
(2)检查端口9411 ,lsof -i:9411 ,并没有9411端口在使用。
3.2 重新编译TarsFramework
3.2.1 添加_USE_OPENTRACKING变量
在编译之前,在shell中执行export _USE_OPENTRACKING=1。
将clone的tarscpp文件替换原TarsFramework下tarscpp文件,重新编译TarsFramework框架
cd /TarsFramework/build/
./build.sh all
3.2.2 编译出错
忽略动态数组初始化的错误,仍有其他错误:
tarscpp/servant/protocol/framework/NodeDescriptor.tars
[ 66%] Built target FRAMEWORK-PROTOCOL
Scanning dependencies of target tarsconfig
[ 66%] Building CXX object ConfigServer/CMakeFiles/tarsconfig.dir/ConfigImp.cpp.o
[ 67%] Building CXX object ConfigServer/CMakeFiles/tarsconfig.dir/main.cpp.o
[ 67%] Building CXX object ConfigServer/CMakeFiles/tarsconfig.dir/ConfigServer.cpp.o
Linking CXX executable ../deploy/tarsconfig/bin/tarsconfig
../tarscpp/servant/lib/libtarsservant.a(TarsCurrent.cpp.o):在函数‘_GLOBAL__sub_I__ZN4tars11TarsCurrentC2EPNS_13ServantHandleE’中:
/usr/local/include/opentracing/propagation.h:72:对‘opentracing::v2::propagation_error_category()’未定义的引用
/usr/local/include/opentracing/propagation.h:76:对‘opentracing::v2::propagation_error_category()’未定义的引用
/usr/local/include/opentracing/propagation.h:81:对‘opentracing::v2::propagation_error_category()’未定义的引用
/usr/local/include/opentracing/propagation.h:85:对‘opentracing::v2::propagation_error_category()’未定义的引用
/usr/local/include/opentracing/propagation.h:90:对‘opentracing::v2::propagation_error_category()’未定义的引用
../tarscpp/servant/lib/libtarsservant.a(Servant.cpp.o):/usr/local/include/opentracing/propagation.h:72: more undefined references to `opentracing::v2::propagation_error_category()' follow
../tarscpp/servant/lib/libtarsservant.a(Communicator.cpp.o):在函数‘tars::Communicator::initClientConfig()’中:
/home/TarsFramework/tarscpp/servant/libservant/Communicator.cpp:153:对‘zipkin::IpAddress::IpAddress(zipkin::IpVersion, std::string const&)’未定义的引用
../tarscpp/servant/lib/libtarsservant.a(Communicator.cpp.o):在函数‘tars::Communicator::initClientConfig()’中:
/home/maocc/tars-pjt/tars-install-pkgs/unVM-pkgs/TarsFramework/tarscpp/servant/servant/Communicator.h:318:对‘zipkin::makeZipkinOtTracer(zipkin::ZipkinOtTracerOptions const&)’未定义的引用
../tarscpp/servant/lib/libtarsservant.a(Communicator.cpp.o):在函数‘_GLOBAL__sub_I__ZN4tars12ClientConfig7LocalIpE’中:
/usr/local/include/opentracing/propagation.h:72:对‘opentracing::v2::propagation_error_category()’未定义的引用
/usr/local/include/opentracing/propagation.h:76:对‘opentracing::v2::propagation_error_category()’未定义的引用
/usr/local/include/opentracing/propagation.h:81:对‘opentracing::v2::propagation_error_category()’未定义的引用
/usr/local/include/opentracing/propagation.h:85:对‘opentracing::v2::propagation_error_category()’未定义的引用
/usr/local/include/opentracing/propagation.h:90:对‘opentracing::v2::propagation_error_category()’未定义的引用
../tarscpp/servant/lib/libtarsservant.a(AppCache.cpp.o):/usr/local/include/opentracing/propagation.h:72: more undefined references to `opentracing::v2::propagation_error_category()' follow
collect2: 错误:ld 返回 1
make[2]: *** [deploy/tarsconfig/bin/tarsconfig] 错误 1
make[1]: *** [ConfigServer/CMakeFiles/tarsconfig.dir/all] 错误 2
make: *** [all] 错误 2