Nginx是一个开源、免费、高性能的HTTP和反向代理服务器,也可以用于IMAP/POP3代理服务器,Nginx因其采用的异步非阻塞工作模型,使其具备高并发、低资源消耗的特性,高度模块化设计也使得Nginx具备很好的扩展性,在处理静态文件、反向代理请求等方面,Nginx表现出了很大的优势,同时部署维护简单,因此绝大多数企业内部都会用到Nginx,当前Nginx最常用的几个场景如下:
• WEB服务器(静态资源服务器)
• 负载均衡(流量分发负载)
• 反向代理
• 其他
Nginx虽然简单,但因为应用场景广泛,所以在企业内部相对来说还是很重要的,那如何保障Nginx的健康与稳定,也是企业内部的运维人员非常关心的一件事。Nginx自身自带的性能指标模块with-http_stub_status_module就可以支持直接获取nginx相关的数据,例如请求连接数,处理连接数等,同时Nginx日志(acces.log、error.log)可以用来进行具体的请求层面的分析,例如PV数量、UV数量、请求错误统计等,这两方面的数据结合就可以快速了解Nginx自身的状态。
• Nginx(with-http_stub_status_module)
• Nginx日志:
举例如下:
虽然说Nginx自身已经提供了足够多的数据源来反馈Nginx自身的状态,但文本类的数据格式或者说日志类的数据格式,首先观看起来不方便也不美观,其次这些数据格式也不能实时反馈Nginx相关请求数或服务器请求状态的变化趋势。那有什么好用的可视化工具可以快速展现这方面的数据或指标呢?
目前来说,企业内部往往会用到日志处理工具(ELK、Splunk)进行Nginx日志的处理跟展现,Nginx的性能数据往往采用支持可视化的工具来进行数据展现,这两种方式相对来说会存在数据割裂,或者解决方案成本过高的问题,为了解决这个问题,观测云决定从源头进行处理,比如数据采集采用同一个配置项同时进行Nginx性能状态以及日志的采集,数据的展现也是在同一平台同一界面进行展现,从而提高使用人员的工作效率。
观测云配置界面及最终监测效果展现:
如何使用观测云监测Nginx
一、Nginx监控接入观测云前置条件
1、登录观测云安装DataKit
前往官方网站 观测云 - 云时代的系统可观测平台 注册账号,使用已注册的账号/密码登录。点击 [集成] 模块,右上角 [快速获取 DataKit 安装命令],根据您的操作系统和系统类型选择合适的安装命令。
复制 Datakit 安装命令在需要被监控的服务器上直接运行。
• 安装目录 /usr/local/datakit/
• 日志目录 /var/log/datakit/
• 主配置文件 /usr/local/datakit/conf.d/datakit.conf
• 插件配置目录 /usr/local/datakit/conf.d/
Datakit 安装完成后,已经默认开启 Linux 主机常用插件,可以在DF——基础设施——内置视图查看。
• 点击 [基础设施] 模块,查看所有已安装 Datakit 的主机列表以及基础信息,如主机名,CPU,内存等。
• 点击 [主机名] 可以查看该主机的详细系统信息,集成运行情况 (该主机所有已安装的插件),内置视图(主机)。
• 点击 [集成运行情况] 任意插件名称 [查看监控视图] 可以看到该插件的内置视图。
2、新建监控场景
登录观测云进入具体的项目空间,点击新建场景-新建空白场景-视图模板(建议直接选择DF上系统视图中的nginx视图模板):
监控视图如下:
二、Nginx采集相关配置开启步骤
1、开启datakit.inputs 中 nginx.conf 前提条件
验证是否开启nginx(with-http_stub_status_module)模块,如果未安装该模块,需要安装该模块。
(1)linux环境
yum 安装的 nginx 可在控制台输入ngixn -V查询是否开启
with-http_stub_status_module 模块,如查询已存在该模块,可直接跳至Datakit 开启 nginx.inputs 环节。
$ nginx -V
如果是自定义安装的nginx,可通过在控制台输入 /usr/local/nginx/sbin/nginx -V 查看,如查询已存在该模块,可直接跳至Datakit开启nginx.inputs环节。
$ /usr/local/nginx/sbin/nginx -V
(2)windows环境
在powershell中执行 .\nginx.exe -V 查看,如查询已存在该模块,可直接跳至Datakit开启nginx.inputs环节。
$ .\nginx.exe -V
(3)安装with-http_stub_status_module模块(linux)
如已安装该模块,请直接跳过该步骤。
开启该模块需要重新编译nginx,具体命令如下:
./configure --with-http_stub_status_module
configure文件位置的查询方式:find /| grep configure |grep nginx
$ find /| grep configure |grep nginx $ cd /usr/local/src/nginx-1.20.0/ $ ./configure --with-http_stub_status_module
(4)在Nginx.conf中增添nginx_status的location转发(举例)
$ cd /etc/nginx //nginx路径根据实际情况而定 $ vim nginx.conf $ server{ listen 80; server_name localhost; //端口可自定义 location /nginx_status { stub_status on; allow 127.0.0.1; deny all; } }
检查该模块是否已正常开通:
linux环境:curl http://127.0.0.1/nginx_status
windows环境:浏览器访问 http://127.0.0.1/nginx_status
如已开通,可执行 nginx -t查看nginx状态。
会出现如下数据:
2、Datakit中开启nginx.inputs
(1)linux环境
$ cd /usr/local/datakit/conf.d/nginx/ $ cp nginx.conf.sample nginx.conf $ vim nginx.conf
#修改如下内容
[[inputs.nginx]] url = http://localhost/nginx_status [inputs.nginx.log] files = ["/var/log/nginx/access.log","/var/log/nginx/error.log"] pipeline = "nginx.p" # pipeline 文件负责对nginx日志进行切割处理,把完整的文本文件切割成 kwy value状态的键值对,方便在df平台上进行可视化展示 # pipeline 配置的nginx.p 默认会放置在/usr/local/datakit/pipeline/目录下,已内置access跟error类格式相关的切割语句
保存nginx.conf文件后重启datakit
# 如需对pipeline进行定制化修改,可参考[ 文本处理(Pipeline)]
https://www.yuque.com/dataflux/doc/wqccue
(2)windows环境
$ 进入 C:\Program Files\datakit\conf.d\nginx\
$ 复制nginx.conf.sample 重命名为nginx.conf
$ 编辑nginx.conf文件
#修改如下内容
[[inputs.nginx]] url = http://localhost/nginx_status [inputs.nginx.log] files = ["/logs/access.log","/ logs/error.log"]
保存nginx.conf文件后重启datakit
三、Nginx相关指标介绍
Nginx关键指标
通过监控Nginx,您可以发现两类问题:1、Nginx本身资源问题,2、Web基础结构中其他地方的开发问题。大多数Nginx用户将从监控中受益的一些指标包括requests per second(每秒请求数),它提供了最终用户活动组合的高级视图;server error rate(服务器错误率),它指代您的服务器请求处理失败或失效在总请求中占的比率;和request processing time(请求处理时间),它描述您的服务器处理客户端请求所花费的时间(这可能表明环境中请求速度变慢或其他问题)。
一般来说,至少要注意三个关键类别的指标:
• 基本活动指标
• 错误指标
• 性能指标
下面我们将分解每个类别中一些最重要的Nginx指标,以及一个值得特别提及的相当普遍的用例的指标:使用Nginx Plus进行反向代理。我们还将介绍如何使用您选择的图形或监控工具监控所有这些指标。
(1)基本活动指标
无论您使用哪种Nginx用例,您都将毫无疑问想要监控服务器正在接收多少个客户端请求以及如何处理这些请求。
Nginx Plus可以报告基本活动指标,就像开源Nginx一样,但是它还提供了一个辅助模块,报告的指标略有不同。我们首先讨论开源Nginx,然后再讨论Nginx Plus提供的其他报告功能。
a.Nginx
下图显示了一个客户端连接的生命周期,以及Nginx的开源版本如何在连接期间收集指标。
Accepts(接受),Handled(处理)和Requests(请求)会随着计数器不断增加。Active(活动),Waiting(等待),Reading(阅读)和Writing(写作)随请求量的变化而变化。
当Nginx从操作系统获取一个连接请求时,计数器就会增加。如果工作程序无法获得该请求的连接(通过建立新连接或复用打开的连接),则该连接将被丢弃。通常,由于已达到资源限制(例如Nginx的worker_connections限制),所以连接被丢弃。
• waiting(等待):如果当前没有活动请求,则活动连接也可能处于“waiting”状态。新的连接可以绕过此状态并直接移动到Reading,最常见的情况是使用“接受过滤器”或“延迟接受”,在这种情况下,Nginx直到有足够的数据来开始响应时才会继续工作。如果将连接设置为keep-alive,则连接在发送响应后,连接也将处于“等待”状态。
• reading(读取):当接收到一个请求时,连接将退出等待状态,并且该请求本身将被视为正在读取。在这种状态下,Nginx正在读取客户端请求标头。请求标头一般都是轻量级的,所以这通常是一个快速的操作。
• writing(写入):在读取请求后,该请求将被视为正在写入,并保持该状态,直到将响应返回给客户端为止。这意味着当Nginx等待上游系统(Nginx后面的系统)的结果,而Nginx对响应进行操作时,请求正在写入。请求通常将大部分时间花费在写状态。
通常,一个连接一次仅支持一个请求。在这种情况下,活动连接数==等待连接+读取请求+写入请求。但是,HTTP / 2允许通过连接多路复用多个并发请求/响应,因此Active可能小于Waiting,Reading和Writing的总和。
b.Nginx Plus
如上所述,Nginx Plus中提供了所有开源Nginx所拥有的指标,但是Plus还可以展示其他指标。本节将介绍只能从Nginx Plus可用的指标。
Accepted(接收)Dropped(丢弃),和Total(总数)的计数器都是在不断的增加。Acctive(活跃),Idle(空闲)和Current(当前)跟踪每个状态下的当前连接数或请求总数,因此它们随请求量的增加或减少而增加或减少。
当Nginx Plus工作者从操作系统Accepted(接收)连接请求时,计数器将会增加。如果工作程序无法获得该请求的连接(通过建立新连接或复用已打开的连接),则该连接将被Dropped(丢弃),并且丢弃将递增。通常由于已达到资源限制(例如Nginx Plus的worker_connections限制),所以连接被丢弃。
Active(活跃)的和Idle(空闲) 如上所述,它与开源Nginx中的“active”和“waiting”状态相同,但有一个关键的例外:在开源Nginx中,“waiting”属于“active”范围,而在Nginx Plus中,“idle”连接为从“active”计数中排除。Current(当前)与开源Nginx中合并的“Reading+Writing”状态相同。
Total(全部)是客户请求的累积计数。请注意,单个客户端连接可能涉及多个请求,因此该数量可能远大于连接的累积数量。实际上,(total / accepted)表示每个连接的平均请求数。
c.警报指标:连接断开
已Dropped(丢弃)的连接数等于accept(接收)和handled(处理)之间的差值,或者直接可以用Nginx Plus提供的指标。在正常情况下,断开的连接应为零。如果您每单位时间断开连接的速率开始上升,请寻找导致资源饱和状态可能的因素。
d.警报指标:每秒请求
以固定的时间间隔采样请求数据(Nginx开源版本的Requests,或Nginx Plus中的Total)可以为您提供每单位时间内接收的请求数量——通常是分钟或秒。监控这个指标可以提醒你进入的网络流量的峰值,无论合法或恶意的,还是突然的下降,这通常代表着存在问题。每秒请求的剧烈变化可以提醒您环境中某个地方正在发生的问题,虽然它并不能确切地告诉您这些问题发生在哪里。注意,所有的请求都会被记数,不管它们的url是什么。
e.收集活动指标
开源Nginx在一个简单的状态页面上公开了这些基本服务器指标。因为状态信息以标准化形式显示,因此几乎可以配置任何图形或监控工具来解析相关数据,以便进行分析,可视化或发出报警。Nginx Plus提供了具有更丰富数据的JSON feed。阅读有关Nginx指标收集的配套文章,以获取有关启用指标收集的说明。
(2)错误指标
Nginx错误度量标准告诉您服务器返回了错误而不是处理了有效的请求。客户端错误由4xx状态码表示,服务器错误由5xx状态码表示。
a.警报指标:服务器错误率
您的服务器错误率等于每单位时间(通常为1到5分钟)的5xx错误数(例如“ 502 Bad Gateway”)除以请求总数(包含1xx,2xx,3xx,4xx,5xx)。如果您的错误率随着时间而开始攀升,则可能需要进行调查。如果突然增加,则可能需要采取紧急措施,因为客户端可能会向最终用户报告错误。
关于客户端错误的注释:4xx更多的代表客户端的错误,而且从4xx中获取的信息是有限的,因为它更多的代表客户端异常,并不能提供具体对特定URL的了解。换句话说,4xx的变化可能是噪音,例如,Web扫描程序盲目地寻找漏洞。
b.收集错误指标
尽管开源Nginx不会直接提供可用于可观测性的错误率,但是至少有两种方法可以捕获该信息:使用商业支持的Nginx Plus随附的扩展状态模块;配置Nginx的日志模块,在访问日志中写入响应代码。
阅读有关Nginx指标收集的配套文章,以获取有关这两种方法的详细说明。
(3)性能指标
a.预警指标:请求处理时间
Nginx记录的请求时间度量记录了每个请求的处理时间,从读取第一个客户端字节到完成请求。较长的响应时间可能指向上游也就是服务器端的响应问题。
b.收集处理时间指标
Nginx和Nginx Plus用户可以通过将$request_time变量添加到访问日志格式来捕获处理时间的数据。有关配置日志以进行监控的更多详细信息,请参见我们有关Nginx日志配套文章。
https://www.yuque.com/dataflux/datakit/nginx#62b5133f
(4)反向代理指标
Nginx的最常见用法是作为反向代理。商业版本的Nginx Plus公开了大量有关后端(或“上游”)服务器的指标,这些指标与反向代理设置有关。本节将重点介绍Nginx Plus用户关注的一些关键上游指标。
Nginx Plus首先按组细分上游的指标,然后按单个服务器细分。因此,例如您的反向代理将请求分配给五个上游Web服务器,则可以一眼看出这些单独的服务器中是否有服务器超负荷运转,以及上游服务器组中是否有足够多的健康服务器来确保良好的响应时间。
a.活动指标
每个上游服务器的活动连接数可以帮助您验证反向代理是否在服务器组中正确的分配了工作。如果您将Nginx用作负载均衡,若任何一台服务器处理的连接数存在显著偏差,可能表明该服务器正在努力及时处理请求,或者您所配置的负载平衡方法(例如轮询或IP散列)对您的流量模式来说还存在优化空间。
b.错误指标
回顾一下上面的错误指标部分,诸如“ 502错误的网关”或“ 503服务暂时不可用”之类的5xx(服务器错误)代码是一个值得监控的指标,尤其是在总响应代码中所占的比例。Nginx Plus可以使您轻松获取每个上游服务器5xx状态码的数量,以及响应总数量,以确定具体服务器的错误率。
c.可用性指标
对于Web服务器的运行状况的另一个视角,Nginx还可以使您可以通过以下方式轻松地监控上游组的运行状况:每个组中当前可用的服务器。在大型反向代理设置中,只要您的可用服务器池能够处理负载,您可能就不会非常在意单独一台服务器的运行状态。但是,监控每个上游组中处于运行状态的服务器总数可以非常全面地查看Web服务器的总体运行状况。
d.收集上游指标
Nginx Plus的上游指标公开在Nginx Plus监控仪表板上,也可以通过JSON接口提供指标到几乎任何外部监控平台。
到这里,我们了解到一些最有用、最具价值的指标,你可以自己开始尝试使用观测云监测Nginx服务器上的所有指标。如果你刚开始使用Nginx,监控下面列表中的大部分或所有指标将为你的网络基础设施的健康和活动水平提供良好的可视性:
• 连接断开
• 每秒请求
• 服务器错误率
• 要求处理时间
最终,您将认识到与您自己的基础设施和用例特别相关的其他更专业的指标。当然,您要监控的内容将取决于您拥有的工具和可用的指标。