本篇内容介绍了“怎么实现Skywalking支持HTTP 1.1通信接口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
因此,很多公司都会使用 OpenResty 开发出适合自己业务的高性能 web Server 模块。
那么它和 Skywalking 有什么关心呢?我们得先知道Skywalking是什么,Skywalking 是由Java 语言开发的一套APM系统,主要监控服务与服务之间的调用链路以及服务应用指标。官方的介绍是:分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
假设,当我们的使用Nginx/OpenResty 为我们的微服务做负载均衡的时候,怎样才能将整条链路通过请求串起来,以及怎样保证整个链路的拓扑图正确呢?目前的解决方案是在 Nginx 中支持链路信息的上报,同时能够将请求链路关键信息传递给上游应用。
Skywalking 监控 Java、Golang、Node、.NET 语言的链路都是采用了 SDK 或者 Agent 的方式将数据上报到 Skyalking 后端。不过都是采用 gRPC 的方式和后端交互,Apache Nginx Lua 考虑到 Nginx 足以胜任 10K 以上并发连接响应,并没有采用 Nginx gRPC的方式,因此需要 Skywalking 支持 HTTP 1.1 的通信接口。
这里先画一个怎么玩的逻辑图:
Macos 系统采用 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/
该目录存放了关于Nginx的样例配置,如下是部分内容:
http {
# 这里指向刚刚克隆下来的 skywalking nginx lua项目
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 的后端地址。端口默认是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 上游服务的地址
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
“怎么实现Skywalking支持HTTP 1.1通信接口”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。