温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么实现Skywalking支持HTTP 1.1通信接口

发布时间:2021-12-10 17:39:08 来源:亿速云 阅读:409 作者:iii 栏目:云计算

本篇内容介绍了“怎么实现Skywalking支持HTTP 1.1通信接口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!        

OpenResty 是什么?

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

因此,很多公司都会使用 OpenResty 开发出适合自己业务的高性能 web Server 模块。

那么它和 Skywalking 有什么关心呢?我们得先知道Skywalking是什么,Skywalking 是由Java 语言开发的一套APM系统,主要监控服务与服务之间的调用链路以及服务应用指标。官方的介绍是:分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。

假设,当我们的使用Nginx/OpenResty 为我们的微服务做负载均衡的时候,怎样才能将整条链路通过请求串起来,以及怎样保证整个链路的拓扑图正确呢?目前的解决方案是在 Nginx 中支持链路信息的上报,同时能够将请求链路关键信息传递给上游应用。     

Skywalking 7.x 开始支持 HTTP 1.1

Skywalking 监控 Java、Golang、Node、.NET 语言的链路都是采用了 SDK 或者 Agent 的方式将数据上报到 Skyalking 后端。不过都是采用 gRPC 的方式和后端交互,Apache Nginx Lua 考虑到 Nginx 足以胜任 10K 以上并发连接响应,并没有采用 Nginx gRPC的方式,因此需要 Skywalking 支持 HTTP 1.1 的通信接口。 

怎么玩起来?

这里先画一个怎么玩的逻辑图:

怎么实现Skywalking支持HTTP 1.1通信接口  
skywalking_nginx_lua


  • 首先安装 Openresty 参照官网:https://openresty.org/cn/download.html

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
 
  • 克隆或者下载 Apache Nginx Lua库
git clone https://github.com/apache/skywalking-nginx-lua.git
cd skywalking-nginx-lua/examples/
 

该目录存放了关于Nginx的样例配置,如下是部分内容:

  • nginx.conf:
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 即可,并指定配置文件,例如:
openresty -c /Users/tanjian/gitprojects/skywalking-nginx-lua/examples/nginx.conf

“怎么实现Skywalking支持HTTP 1.1通信接口”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI