[转帖]使用SkyWalking监控nginx (以openresty为例)

使用,skywalking,监控,nginx,openresty · 浏览次数 : 0

小编点评

# 生成内容时需要带简单的排版 以下内容需要带简单的排版 ```lua content_by_lua_block { ngx.say(\"<p>Backend service for testing only.</p>\") ngx.say(\"<p>Backend sw8 received headers: \" .. ngx.req.get_headers()[\"sw8\"] .. \"</p>\") } ``` # 其他细节 * 如需要添加其他静态文件,可以将它们添加到  server { listen 80; }  部分的  server {  location /   }  部分。 * 如需要添加后端服务的配置,可以将它们添加到  server { listen 80; }  部分的  server {  location /ingress   }  部分。 * 如需要添加静态文件示例,可以将它们添加到  server { listen 80; }  部分的  server {  location /   }  部分。

正文

https://www.cnblogs.com/hahaha111122222/p/15829737.html

 

安装使用SkyWalking先看这篇文章,地址:https://www.cnblogs.com/sanduzxcvbnm/p/15829781.html

使用SkyWalking监控nginx借助的是nginx的lua模块,若没有则需要重新编译安装nginx,在这里直接使用openresty,这个自带就已经有lua模块了

wget https://openresty.org/package/centos/openresty.repo && mv openresty.repo /etc/yum.repos.d/ && yum makecache
yum -y install openresty

systemctl start openresty.service && systemctl enable openresty.service
BASH 复制 全屏

下载SkyWalking Nginx LUA

地址:https://skywalking.apache.org/downloads/

下载后的文件是:skywalking-nginx-lua-0.6.0.tar.gz




解压缩skywalking-nginx-lua-0.6.0.tar.gz文件到nginx的conf目录下

nginx的conf目录以实际情况为准,解压后的文件夹是:skywalking-nginx-lua-0.6.0

tar -zxv -f skywalking-nginx-lua-0.6.0.tar.gz -C /usr/local/openresty/nginx/conf/

使用官方提供的nignx配置文件进行配置演示

官方参考文档地址:https://github.com/apache/skywalking-nginx-lua

官方参考配置:

http {
    lua_package_path "/Path/to/.../skywalking-nginx-lua/lib/?.lua;;";

    # Buffer represents the register inform and the queue of the finished segment
    lua_shared_dict tracing_buffer 100m;

    # Init is the timer setter and keeper
    # Setup an infinite loop timer to do register and trace report.
    init_worker_by_lua_block {
        local metadata_buffer = ngx.shared.tracing_buffer

        -- Set service name
        metadata_buffer:set('serviceName', 'User Service Name')
        -- Instance means the number of Nginx deployment, does not mean the worker instances
        metadata_buffer:set('serviceInstanceName', 'User Service Instance Name')
        -- type 'boolean', mark the entrySpan include host/domain
        metadata_buffer:set('includeHostInEntrySpan', false)
        -- set ignoreSuffix, If the operation name(HTTP URI) of the entry span includes suffixes in this set, this segment would be ignored. Multiple values should be separated by a comma(',').
        -- require("skywalking.util").set_ignore_suffix(".jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.svg")

        -- set random seed
        require("skywalking.util").set_randomseed()
        require("skywalking.client"):startBackendTimer("http://127.0.0.1:12800") # 这儿应该是12800,不是8080,官方文档写的有问题

        -- If there is a bug of this `tablepool` implementation, we can
        -- disable it in this way
        -- require("skywalking.util").disable_tablepool()

        skywalking_tracer = require("skywalking.tracer")
    }

    server {
        listen 8090;
        
        location /ingress {
            default_type text/html;

            rewrite_by_lua_block {
                ------------------------------------------------------
                -- NOTICE, this should be changed manually
                -- This variable represents the upstream logic address
                -- Please set them as service logic name or DNS name
                --
                -- Currently, we can not have the upstream real network address
                ------------------------------------------------------
                skywalking_tracer:start("upstream service")
                -- If you want correlation custom data to the downstream service
                -- skywalking_tracer:start("upstream service", {custom = "custom_value"})
            }

            -- Target upstream service
            proxy_pass http://127.0.0.1:8080/backend;

            body_filter_by_lua_block {
                if ngx.arg[2] then
                    skywalking_tracer:finish()
                end
            }

            log_by_lua_block {
                skywalking_tracer:prepareForReport()
            }
        }
    }
}

在解压的skywalking-nginx-lua-0.6.0/examples路径下有一个skywalking官方提供的nginx.conf配置文件,用这个文件替换安装openresty后的那个默认nginx.conf文件,然后再修改这个文件。

主要是修改lua_package_path参数,也就是引用的lua文件路径和访问skywalking后端服务的端口号


然后启动nginx服务,使用命令:curl http://127.0.0.1:8090/ingress,结果如下:

# curl 127.0.0.1:8090/ingress
<p>Backend service for testing only.</p>
<p>Backend sw8 received headers: 1-ZjhlNjNjYjMtMDU3Yy00ZDQ4LWEwNmItMDVhYWU4ZDQ5MzUz-MzZjNjY3ZmMtMjZjMi00MjQ0LWEzOTctODZjNWZkOTZlZmQz-1-VXNlciBTZXJ2aWNlIE5hbWU=-VXNlciBTZXJ2aWNlIEluc3RhbmNlIE5hbWU=-L3RpZXIyL2xi-YmFja2VuZCBzZXJ2aWNl</p>

对照nginx.conf文件分析刚才使用的命令,可以得到如下结果:
1.访问127.0.0.1:8090/ingress对应的是nginx.conf配置文件中的server {listen 8090;}location /ingress {}配置
2.这个location /ingress {}配置中实际访问使用的是:proxy_pass http://127.0.0.1:8090/tier2/lb;,把接受过来的请求转发给这个服务了。
3.分析proxy_pass http://127.0.0.1:8090/tier2/lb;,对应的是 server {listen 8090;}location /tier2/lb配置
4.这个配置再把请求转发给proxy_pass http://127.0.0.1:8090/backend;,这个服务对应的是 server {listen 8090;}location /backend配置
5.这个配置的内容如下,正好是请求curl http://127.0.0.1:8090/ingress后得到的相应结果。

content_by_lua_block {
    ngx.say("<p>Backend service for testing only.</p>")
    ngx.say("<p>Backend sw8 received headers: " .. ngx.req.get_headers()["sw8"] .. "</p>")
}

根据实际情况修改nginx.conf文件

skywalking官方提供的nginx.conf文件可以作为测试分析使用,实际使用的话可以直接在原有nginx.conf文件的基础上新增加上需要的配置即可。

nginx.conf实际配置

http {
    lua_package_path "/usr/local/openresty/nginx/conf/skywalking-nginx-lua-0.6.0/lib/?.lua;;"; # 根据实际情况修改这个路径,跟上面解压缩后的路径保持一致,(lib目录下还有子目录,子目录下才是lua文件)
    lua_shared_dict tracing_buffer 100m;

    init_worker_by_lua_block {
        local metadata_buffer = ngx.shared.tracing_buffer
        metadata_buffer:set('serviceName', 'httpnginx') # 修改一下名称
        metadata_buffer:set('serviceInstanceName', 'httpInstancenginx')  # 修改一下名称
        metadata_buffer:set('includeHostInEntrySpan', false)
        require("skywalking.util").set_randomseed()
        require("skywalking.client"):startBackendTimer("http://127.0.0.1:12800") # 修改成连接skywalking后端服务的地址和端口(我这都是在一台主机上)
        skywalking_tracer = require("skywalking.tracer")
    }
    
  .......
    
    # 静态文件示例,没有后端服务
    server {
        listen       80;
        server_name  localhost;
        access_log  logs/host.access.log  main;

        location / {
            default_type text/html;
            root   html;
            index  index.html index.htm;
            
            # 如下内容直接新增
            rewrite_by_lua_block {
                skywalking_tracer:start("listennginx") # 修改一下名称
            }

            body_filter_by_lua_block {
                if ngx.arg[2] then
                    skywalking_tracer:finish()
                end
            }
            log_by_lua_block {
                skywalking_tracer:prepareForReport()
            }
        }    
    }

   # 有后端服务的示例
    server {
        listen 80;
        server_name  localhost;
        
        location /ingress { # ingress根据实际情况修改
            default_type text/html;
            rewrite_by_lua_block {
                skywalking_tracer:start("upstream service")
            }

            proxy_pass http://127.0.0.1:8000/xxx; # 反向代理的后端服务和端口等根据实际情况修改

            body_filter_by_lua_block {
                if ngx.arg[2] then
                    skywalking_tracer:finish()
                end
            }

            log_by_lua_block {
                skywalking_tracer:prepareForReport()
            }
        }
    }

}

效果

以静态文件示例,没有后端服务为例

用浏览器访问这个主机的80端口,出现的是openresty默认页面,此时查看skywalking页面

故意访问一个不存在的页面或路径

与[转帖]使用SkyWalking监控nginx (以openresty为例)相似的内容:

[转帖]使用SkyWalking监控nginx (以openresty为例)

https://www.cnblogs.com/hahaha111122222/p/15829737.html 安装使用SkyWalking先看这篇文章,地址:https://www.cnblogs.com/sanduzxcvbnm/p/15829781.html 使用SkyWalking监控ngi

[转帖]使用 SkyWalking 监控 MySQL(一)工具与方案

https://my.oschina.net/GreatSQL/blog/5567471 * GreatSQL 社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 注:本文适用于 SkyWalking v9.1.0。 SkyWalking 简介 SkyWalking 是一个分布式系统的应用

[转帖]Spring Cloud 整合 SkyWalking

https://www.jianshu.com/p/e81e35dc6406 Java Agent 服务器探针 探针,用来收集和发送数据到归集器。参考官网给出的帮助 Setup java agent,我们需要使用官方提供的探针为我们达到监控的目的,按照实际情况我们需要实现三种部署方式 IDEA 部署

[转帖]springboot中使用skywalking实现日志追踪

文章目录 SkyWalking分布式追踪系统介绍主要架构 环境引入依赖配置Log4j2下载编译好的8.7.0版本包使用探针实现日志追踪启动脚本启动Java服务访问服务 使用UI切换存储方式 SkyWalking分布式追踪系统 介绍 Skywalking是一个国产的开源框架,2015年有吴晟个人开源,

[转帖]br备份时排除某个库

作者: qhd2004 原文来源: https://tidb.net/blog/2a88149e 生产环境中我们使用br来备份数据库,但是有时候可能需要排除某个库,比如,skywalking后台库(实际中是skywalking暂时放在tidb中,后面会转到es,并且skywalking的数据对我们来

[转帖]br 备份时排除某个库

https://tidb.net/book/tidb-monthly/2023/2023-02/usercase/excluded-a-storeroom-during-br-backup 生产环境中我们使用br来备份数据库,但是有时候可能需要排除某个库,比如,skywalking后台库(实际中是s

[转帖]使用JMX服务监控Java程序性能

https://www.jianshu.com/p/3c3c836c1c20?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation 背景 单机收集服务器需要性能监控和测试。 JMX

[转帖]使用 tc netem 模拟网络异常

https://cizixs.com/2017/10/23/tc-netem-for-terrible-network/ 在某些情况下,我们需要模拟网络很差的状态来测试软件能够正常工作,比如网络延迟、丢包、乱序、重复等。linux 系统强大的流量控制工具 tc 能很轻松地完成,tc 命令行是 ipr

[转帖]使用 sysdig 进行监控和调试 linux 机器

https://cizixs.com/2017/04/27/sysdig-for-linux-system-monitor-and-analysis/ sysdig 简介 sysdig 官网 上对自己的介绍是: Open Source Universal System Visibility With

[转帖]使用MAT命令行工具生成堆dump分析文件

https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html 写作目标 Java程序运行过程中,难免会出现 OOM,往往是在 JVM 启动参数中添加出现 OOM 时输出堆 dump(又名:堆转储、堆