您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“怎么實(shí)現(xiàn)Skywalking支持HTTP 1.1通信接口”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
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 監(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 的通信接口。
這里先畫一個怎么玩的邏輯圖:
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
git clone https://github.com/apache/skywalking-nginx-lua.git
cd skywalking-nginx-lua/examples/
該目錄存放了關(guān)于Nginx的樣例配置,如下是部分內(nèi)容:
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 -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í)用文章!
免責(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)容。