安装使用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

下载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为例)的更多相关文章

  1. 用Nginx+Lua(OpenResty)开发高性能Web应用

    在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开 ...

  2. Nginx+Lua(OpenResty)开发高性能Web应用

    使用Nginx+Lua(OpenResty)开发高性能Web应用 博客分类: 跟我学Nginx+Lua开发 架构 ngx_luaopenresty 在互联网公司,Nginx可以说是标配组件,但是主要场 ...

  3. zabbix监控nginx连接状态(转)

    zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数) ...

  4. 使用Nginx+Lua(OpenResty)开发高性能Web应用

    摘自(http://jinnianshilongnian.iteye.com/blog/2280928) 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等 ...

  5. 【zabbix告警监控】配置zabbix监控nginx服务

    zabbix监控nginx,nginx需要添加--with-http_stub_status模块 使用zabbix监控nginx,首先nginx需要配置开启ngx_status.但是我这边nginx安 ...

  6. Nginx、OpenResty和Kong的基本概念与使用方法

    Nginx.OpenResty和Kong的基本概念与使用方法 2018年10月10日 22:46:08 李佶澳 阅读数 322更多 分类专栏: kubernetes   版权声明:本文为博主原创文章, ...

  7. Nginx+lua+openresty精简系列

    1. CentOS系统安装openresty 你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum update 命令).运行下面的 ...

  8. Zabbix 监控 Nginx(四)

    简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) [root@localhost ~]# /apps/product/ng ...

  9. Python 监控nginx服务是否正常

    Python 监控nginx服务是否正常 #!/usr/bin/env python import os, sys, time from time import strftime while True ...

随机推荐

  1. docker多段构建nessus镜像

    1.构建基础镜像,主要做安装和获取注册号: FROM ubuntu:16.04 ADD Nessus-8.11.0-debian6_amd64.deb /tmp/Nessus-8.11.0-debia ...

  2. NOI / 2.1基本算法之枚举-8759:火车上的人数

    8759:火车上的人数​​​​​​ 总时间限制: 1000ms 内存限制: 65536kB 描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下 ...

  3. 推荐系统-协同过滤在Spark中的实现

    作者:vivo 互联网服务器团队-Tang Shutao 现如今推荐无处不在,例如抖音.淘宝.京东App均能见到推荐系统的身影,其背后涉及许多的技术.本文以经典的协同过滤为切入点,重点介绍了被工业界广 ...

  4. java------常见的进制、不同进制在代码中的表现形式、进制之间的转化、分辨率、三原色、计算机的存储规则

    常见的进制: 常见的进制:二进制.八进制.十进制.十六进制 不同进制在代码中的表现形式: 进制之间的转化: 二进制转十进制: 普通方法: 快捷方法: 八进制转十进制: 十六进制转十进制: 总结: 分辨 ...

  5. C# 基础知识-特性

    C基础 - 特性 一.特性 1>特性本质就是一个类,直接或者间接的继承了Attribute 2>特性就是在不破话类封装的前提下,加点额外的信息或者行为 特性添加后,编译会在元素内部产生IL ...

  6. CentOS 定时计划任务设置

    一.安装crontab服务并设置开机自启 yum install crontabs (centos默认就会带,一般不需要安装) systemctl enable crond (设为开机启动) syst ...

  7. 微信公众号授权登录后报redirect_uri参数错误的问题

      在进行微信公众号二次开发的时候,需要通过授权码模式来进行微信授权.比如,在进行登录的时候,用户点击了登录按钮,然后弹出一个授权框,用户点击同意后,就可以获取用户的OpenId等信息了.这篇文章主要 ...

  8. JS基础小练习

    入职薪水10K,每年涨幅入职薪水的5%,50年后工资多少? var sum = 10000; console.log(sum * (1 + 0.05 * 50)); 为抵抗洪水,战士连续作战89小时, ...

  9. 巨细靡遗流程控制,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang流程结构详解EP09

    流程结构就是指程序逻辑到底怎么执行,进而言之,程序执行逻辑的顺序.众所周知,程序整体都是自上由下执行的,但有的时候,又不仅仅是从上往下执行那么简单,大体上,Go lang程序的流程控制结构一共有三种: ...

  10. SpringCloud之nacos

    以下是官网文档中个人感兴趣的部分整理,官方完整文档链接如下: Nacos 官方文档 1.nacos是什么? 1.1 概念:快速实现动态服务发现.服务配置.服务元数据及流量管理. 简单来说就是发现.配置 ...