<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
NGINX 是一個通用且流行的應用程式。也是最流行的 Web 伺服器,它可用於提供靜態檔案內容,但也通常與其他服務一起用作分散式系統中的元件,在其中它用作反向代理、負載均衡 或 API 閘道器。
分散式追蹤 distributed tracing
是一種可用於分析與監控應用程式的機制,將追蹤在從源到目的的整個過程中的單個請求,這與僅通過單個應用程式域來追蹤請求的形式不同。
換句話說,我們可以說分散式追蹤是對跨多個系統的多個請求的拼接。拼接通常由一個或多個相關 ID 完成,並且跟蹤通常是一組記錄的、跨所有系統的結構化紀錄檔事件,儲存在一箇中心位置。
在這種背景的情況下, OpenTracing
應運而生。OpenTracing
是一個與應用供應商無關的 API,它可幫助開發人員輕鬆地跟蹤單一請求的域。目前有多種開源產品都支援 OpenTracing(例如,Jaeger
, skywalking
等),並將其作為一種檢測分散式追蹤的標準化方法。
本文將圍繞,從0到1實現在nginx設定分散式追蹤的架構的簡單範例說明。本文範例使用的元件為
nginx-1.22
jaeger-all-in-on v1.38
nginx-opentracing v1.22
jaeger-client-cpp v0.9
nginx-opentracing 倉庫中可以看到,官方為每個nginx版本都提供了一個編譯好的動態庫(Nginx1.19.13+),我們可以直接拿來使用這個動態庫,如果你想將這個利用Nginx 提供的編譯引數 --add-module=/path/to/module
構建為nginx的內建功能的話,可能會出現一些問題,例如下面的一些錯誤:
ngx_http_opentracing_module.so/config was found
/root/nginx-opentracing-0.25.0/opentracing//src/ngx_http_opentracing_module.cpp In file included from /root/nginx-opentracing-0.25.0/opentracing//src/ngx_http_opentracing_module.cpp:1:0: /root/nginx-opentracing-0.25.0/opentracing//src/load_tracer.h:3:38: fatal error: opentracing/dynamic_load.h: No such file or directory
根據 issue 中查詢得知 nginx-opentracing
需要嵌入到nginx中,是需要一些 opentracing-cpp 因為對c++不熟,嘗試偵錯很久還是上面的錯誤,故直接使用了官方提供的動態庫。
根據 nginx-opentracing
中提到的,還需要一個 jaeger-client-cpp 的 tracer
才可以正常執行(這也是作為jaeger架構中的角色)
來到 jaeger-client-cpp
看到Release提供的編譯好的動態庫已經很久了,而最新版都沒有提供相應編譯的版本,需要我們自己編譯
說明: 編譯依賴CMake 3.3+,gcc 4.9.2+
我們的編譯環境使用CentOS 7 預設gcc與CMake都符合要求需要自行編譯兩個的版本。
gcc下載地址:https://ftp.gnu.org/gnu/gcc/
cd gcc-5.4.0 ./contrib/download_prerequisites mkdir gcc-build-5.4.0 cd gcc-build-5.4.0 /usr/local/src/gcc-5.4.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib make && make install
參照處理 refer 1
cd /usr/bin/ mv gcc gcc_back mv g++ g++_back ln -s /usr/local/bin/gcc gcc ln -s /usr/local/bin/g++ g++
編譯時遇到幾個問題
/lib64/libstdc++.so.6: version GLIBCXX_3.4.20' not found
gcc 編譯,libgcc
動態庫有改動,恢復原狀即可
configure: error: C++ compiler missing or inoperational make[2]: *** [configure-stage1-libcpp] Error 1 make[2]: Leaving directory `/home/clay/programming/C++/gcc-4.8.1' make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory `/home/clay/programming/C++/gcc-4.8.1' make: *** [all] Error 2
./configure --prefix=/path/to/app make make install
這裡遇到一個小問題 編譯過程中遇到 [libstdc++.so.6: version GLIBCXX_3.4.20 not found
因為這裡使用了自己編譯的gcc版本,需要指定下動態庫的路徑 refer 2
LD_LIBRARY_PATH=/usr/local/lib64 ./configure --prefix=/usr/local/cmake
這裡根據官方提供的步驟操作即可
cd jaeger-client-cpp-0.9.0/ mkdir build cd build # 這裡建議使用下強國特色上網,編譯過程中會使用Hunter自動下載所需的依賴項 ALL_PROXY=http://x.0.0.x:10811 /usr/local/cmake/bin/cmake .. make
注:依賴項挺大的,下載時間可能很長,會hang主,只需等待結束即可
編譯完成後 libjaegertracing.so.0.9.0
則是我們需要的
./configure --user=web_www --group=web_www --with-pcre --with-compat --with-http_ssl_module --with-http_gzip_static_module --prefix=/root/nginx --with-http_stub_status_module
--with-compat
必須加上,表面允許使用動態庫,否則編譯完在啟動時會報下面的錯誤
nginx: [emerg] module "/root/nginx/conf/ngx_http_opentracing_module.so" is not binary compatible in /root/nginx/conf/nginx.conf:1
遇到的問題,cc nou found
,這裡只需將 gcc
軟連線一份為 cc
即可
jaeger.json
{ "service_name": "nginx", // 服務名 "sampler": { "type": "const", "param": 1 }, "reporter": { "localAgentHostPort": "jaeger:6831" // jaeger agent的地址 }, "headers": { // jaeger的預設的jaeger Baggage頭設定 "jaegerDebugHeader": "jaeger-debug-id", "jaegerBaggageHeader": "jaeger-baggage", "traceBaggageHeaderPrefix": "uberctx-" }, "baggage_restrictions": { "denyBaggageOnInitializationFailure": false, "hostPort": "" } }
# 載入 OpenTracing 動態模組。 load_module conf/ngx_http_opentracing_module.so; worker_processes 1; user root root; events { worker_connections 1024; } http { log_format opentracing '{"timestamp":"$time_iso8601",' '"source":"$server_addr",' '"hostname":"$hostname",' '"ip":"$http_x_forwarded_for",' '"traceID":"$opentracing_context_uber_trace_id",' '"client":"$remote_addr",' '"request_method":"$request_method",' '"scheme":"$scheme",' '"domain":"$server_name",' '"referer":"$http_referer",' '"request":"$request_uri",' '"args":"$args",' '"size":$body_bytes_sent,' '"status": $status,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamaddr":"$upstream_addr",' '"http_user_agent":"$http_user_agent",' '"https":"$https"' '}'; # 載入 tracer,這裡使用的jaeger,需要傳遞組態檔 opentracing_load_tracer conf/libjaegertracing.so conf/jaeger.json; # 啟用 tracing opentracing on; # 設定tag,可選引數 opentracing_tag http_user_agent $http_user_agent; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { opentracing_operation_name $uri; opentracing_propagate_context; root html; index index.html index.htm; } access_log logs/access.log opentracing; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
注:這裡使用的
opentracing-nginx
的動態庫為 ot16 ,linux-amd64-nginx-1.22.0-ot16-ngx_http_module.so.tgz
,另外一個版本不相容,-t
檢查語法時會提示
此時我們可以在jaeger上檢視,可以看到 NGINX 的 span(因為這裡只設定了NGINX,沒有設定更多的後端)。
Reference
2 libstdc++.so.6: version GLIBCXX_3.4.20 not found
到此這篇關於如何讓你的Nginx支援分散式追蹤的文章就介紹到這了,更多相關Nginx支援分散式追蹤內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45