溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么實(shí)現(xiàn)Skywalking支持HTTP 1.1通信接口

發(fā)布時間:2021-12-10 17:39:08 來源:億速云 閱讀:443 作者:iii 欄目:云計算

本篇內(nèi)容介紹了“怎么實(shí)現(xiàn)Skywalking支持HTTP 1.1通信接口”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!        

OpenResty 是什么?

OpenResty是一個基于 Nginx 與 Lua 的高性能 Web 平臺,其內(nèi)部集成了大量精良的 Lua 庫、第三方模塊以及大多數(shù)的依賴項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動態(tài) Web 應(yīng)用、Web 服務(wù)和動態(tài)網(wǎng)關(guān)。

因此,很多公司都會使用 OpenResty 開發(fā)出適合自己業(yè)務(wù)的高性能 web Server 模塊。

那么它和 Skywalking 有什么關(guān)心呢?我們得先知道Skywalking是什么,Skywalking 是由Java 語言開發(fā)的一套APM系統(tǒng),主要監(jiān)控服務(wù)與服務(wù)之間的調(diào)用鏈路以及服務(wù)應(yīng)用指標(biāo)。官方的介紹是:分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具,專為微服務(wù)、云原生架構(gòu)和基于容器(Docker、K8s、Mesos)架構(gòu)而設(shè)計。

假設(shè),當(dāng)我們的使用Nginx/OpenResty 為我們的微服務(wù)做負(fù)載均衡的時候,怎樣才能將整條鏈路通過請求串起來,以及怎樣保證整個鏈路的拓?fù)鋱D正確呢?目前的解決方案是在 Nginx 中支持鏈路信息的上報,同時能夠?qū)⒄埱箧溌逢P(guān)鍵信息傳遞給上游應(yīng)用。     

Skywalking 7.x 開始支持 HTTP 1.1

Skywalking 監(jiān)控 Java、Golang、Node、.NET 語言的鏈路都是采用了 SDK 或者 Agent 的方式將數(shù)據(jù)上報到 Skyalking 后端。不過都是采用 gRPC 的方式和后端交互,Apache Nginx Lua 考慮到 Nginx 足以勝任 10K 以上并發(fā)連接響應(yīng),并沒有采用 Nginx gRPC的方式,因此需要 Skywalking 支持 HTTP 1.1 的通信接口。 

怎么玩起來?

這里先畫一個怎么玩的邏輯圖:

怎么實(shí)現(xiàn)Skywalking支持HTTP 1.1通信接口  
skywalking_nginx_lua


  • 首先安裝 Openresty 參照官網(wǎng):https://openresty.org/cn/download.html

Macos 系統(tǒng)采用 Homebrew 安裝:

> brew install openresty/brew/openresty

==> Summary
????  /usr/local/Cellar/openresty/1.15.8.2: 303 files, 6.5MB, built in 1 minute
==> Caveats
==> openresty-openssl
openresty-openssl is keg-only, which means it was not symlinked into /usr/local,
because only for use with OpenResty.

If you need to have openresty-openssl first in your PATH run:
 echo 'export PATH="/usr/local/opt/openresty-openssl/bin:$PATH"' >> ~/.zshrc

For compilers to find openresty-openssl you may need to set:
 export LDFLAGS="-L/usr/local/opt/openresty-openssl/lib"
 export CPPFLAGS="-I/usr/local/opt/openresty-openssl/include"

==> openresty
To have launchd start openresty/brew/openresty now and restart at login:
 brew services start openresty/brew/openresty
Or, if you don't want/need a background service you can just run:
 openresty
 
  • 克隆或者下載 Apache Nginx Lua庫
git clone https://github.com/apache/skywalking-nginx-lua.git
cd skywalking-nginx-lua/examples/
 

該目錄存放了關(guān)于Nginx的樣例配置,如下是部分內(nèi)容:

  • nginx.conf:
http {
  # 這里指向剛剛克隆下來的 skywalking nginx lua項(xiàng)目
   lua_package_path "path/to/skywalking-nginx-lua/lib/skywalking/?.lua;;";
   # Buffer represents the register inform and the queue of the finished segment
   lua_shared_dict tracing_buffer 100m;
   
   init_worker_by_lua_block {
       local metadata_buffer = ngx.shared.tracing_buffer

       metadata_buffer:set('serviceName', 'User Service Name')
       -- Instance means the number of Nginx deloyment, does not mean the worker instances
       metadata_buffer:set('serviceInstanceName', 'User Service Instance Name')

       # 這里需要指定上報Skywalking 的后端地址。端口默認(rèn)是12800
       require("client"):startBackendTimer("http://127.0.0.1:12800")
   }

   server {
       listen 8080;
       location /test {
           default_type text/html;

           rewrite_by_lua_block {
               require("tracer"):start("upstream service")
           }
           # 這里則是 上圖中 nginx 上游服務(wù)的地址
           proxy_pass http://127.0.0.1:8080/upstream/test;
           body_filter_by_lua_block {
               if ngx.arg[2] then
                   require("tracer"):finish()
               end
           }
           log_by_lua_block {
               require("tracer"):prepareForReport()
           }
       }
   }
}
 
  • 直接啟動 OpenResty 即可,并指定配置文件,例如:
openresty -c /Users/tanjian/gitprojects/skywalking-nginx-lua/examples/nginx.conf

“怎么實(shí)現(xiàn)Skywalking支持HTTP 1.1通信接口”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI