百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Nginx 可观测性最佳实践

ztj100 2025-02-28 18:11 15 浏览 0 评论

Nginx 介绍

Nginx 是一个开源、轻量级、高性能的 HTTP 和反向代理服务器,也可以用于 IMAP/POP3 代理服务器。Nginx 因其采用的异步非阻塞工作模型,使其具备高并发、低资源消耗的特性。高度模块化设计也使得 Nginx 具备很好的扩展性,在处理静态文件、反向代理请求等方面, Nginx 表现出了很大的优势,同时部署维护简单。因此绝大多数企业内部都会用到 Nginx 。

Nginx 的配置结构图如下:

主要结构块说明如下:

1)全局块:配置影响 Nginx 全局的指令。

2)http块:Nginx 配置文件中的主要上下文之一,用于定义全局的 HTTP 配置。它可以包含其他模块的配置指令,如 server 和 upstream。

3)server块:是 Nginx 配置文件中的另一个上下文,用于定义虚拟主机的配置。每个 server 块代表一个虚拟主机,可以包含 listen、server_name、location 和 location 块等指令。

4)location块:location 是 server 上下文中的一个指令,用于定义请求的 URI 或名称空间的匹配和处理规则。它可以包含处理请求的指令,如 proxy_pass、root、index 等。

5)upstream:upstream 用于定义一个服务器组,通常用于负载均衡。它允许 Nginx 将请求分发到多个后端服务器。

通常在 Nginx 监控中,可以通过 stub_status 模块提供的如下7个指标来查看 Nginx 的状态信息。

  • Active connections:当前活动的客户端连接数,包括等待中的连接
  • accepts:接受的客户端连接总数
  • handled:处理的连接总数。通常情况下,此参数的值与accepts相同,除非已经达到了某些资源限制(例如,worker_connections限制)
  • equests:客户端请求的总数
  • Reading:当前Nginx正在读取请求头的连接数量
  • Writing:当前Nginx正在将响应写回客户端的连接数量

但是,这些信息对于监控 Nginx 整体运行情况显然不太够用。Nginx VTS 模块会提供更加丰富的 Nginx 监控指标。Nginx VTS 是 Nginx virtual host traffic status module 的简称,是一个专门用于 Nginx 服务器的监控模块,它的主要目的是收集和呈现关于 Nginx 运行状态的详细信息,可以监控 Nginx 的流量、连接数等底层数据,对分析 Nginx 的性能非常重要。

该模块允许用户访问 Nginx 的虚拟主机状态信息,包括服务器、上游服务器(upstreams)和缓存状态。它类似于 Nginx Plus 的实时活动监控功能。例如,一个 Nginx 的 web 服务中,会包含多个 server,通常监控的流量都是服务器总的流量。如果要分享找到流量大的 server,通常的做法是通过分析日志来进行访问量统计。但是,有了 Nginx VTS 模块后,通过对 server zone 的统计,各个 server 的流量可以一览无余。除了 server 外,各个 upstream 也可以分别统计,可以很方便的查看 nginx 转发到 upstream 的流量,结合监控可以实现动态调整等。

Nginx VTS 模块提供了内置的 HTML 页面,以及 JSON、HTML、JSONP 和 Prometheus 格式的数据输出,方便用于第三方监控工具进行数据采集,并通过监控仪表板进行监控数据的呈现。

Nginx VTS 模块的安装和配置

模块安装

通过如下链接下载 VTS 模块,并上传下载文件到 Nginx 服务器(或者直接在 Nginx 服务上通过 git 下载)。

https://github.com/vozlt/nginx-module-vts

通过如下命令获取 Nginx 当前的配置情况:

# nginx -V
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module

通过 --add-module 添加VTS模块,并编译安装 Nginx 。

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --add-module=/file_path_to/nginx-module-vts
make && make install
nginx -V  -- 启动nginx服务,并检测开启的模块

模块配置

修改 nginx.conf 配置文件,添加 VTS 相关配置。重启 Nginx 服务。

http {
    vhost_traffic_status_zone;
    server {
        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format prometheus;
        }
     }
}

备注:vhost_traffic_status_display_format 可选格式有json、jsonp、html或prometheus。

访问 Nginx VTS 的配置地址( http://localhost/status )。正常情况下会出现如下信息。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

部署 DataKit

DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。

登录观测云控制台,在 集成 -> DataKit 选择对应安装方式,当前采用 Linux 主机部署 DataKit 。

采集器配置

我们将通过 DataKit 中的 Nginx 采集器对 Nginx 的监控指标进行采集。配置说明如下:

1、开启 Nginx 采集器

cp /usr/local/datakit/conf.d/nginx/nginx.conf.sample /usr/local/datakit/conf.d/nginx/nginx.conf

2、编辑 nginx.conf 文件,开启 VTS 选项并配置监控数据的访问地址等,如下所示:

[[inputs.nginx]]
  ## Nginx status URL.
  ## (Default) If not use with VTS, the formula is like this: "http://localhost/basic_status".
  ## If using with VTS, the formula is like this: "http://localhost/status/format/json".
  url = "http://localhost/status/format/json"
  use_vts = true

  use_plus_api = false
  insecure_skip_verify = false
  response_timeout = "20s"
  election = false

3、重启 DataKit 服务让配置生效。

datakit service -R

关键指标

  • nginx 指标集

1、标签

Tag

Description

host

Host name which installed nginx

nginx_port

Nginx server port

nginx_server

Nginx server host

nginx_version

Nginx version, exist when using vts

2、指标列表

Metric

Description

Type

Unit

connection_accepts

The total number of accepts client connections

int

count

connection_active

The current number of active client connections

int

count

connection_dropped

The total number of dropped client connections

int

count

connection_handled

The total number of handled client connections

int

count

connection_reading

The total number of reading client connections

int

count

connection_requests

The total number of requests client connections

int

count

connection_waiting

The total number of waiting client connections

int

count

connection_writing

The total number of writing client connections

int

count

load_timestamp

Nginx process load time in milliseconds, exist when using vts

int

msec

pid

The pid of nginx process (only for Nginx plus)

int

count

ppid

The ppid of nginx process (only for Nginx plus)

int

count

  • nginx_server_zone 指标集

1、标签

Tag

Description

host

host name which installed nginx

nginx_port

nginx server port

nginx_server

nginx server host

nginx_version

nginx version

server_zone

server zone

2、指标列表

Metric

Description

Type

Unit

code_200

The number of responses with status code 200 (only for Nginx plus)

int

count

code_301

The number of responses with status code 301 (only for Nginx plus)

int

count

code_404

The number of responses with status code 404 (only for Nginx plus)

int

count

code_503

The number of responses with status code 503 (only for Nginx plus)

int

count

discarded

The number of requests being discarded (only for Nginx plus)

int

count

processing

The number of requests being processed (only for Nginx plus)

int

count

received

The total amount of data received from clients.

int

B

requests

The total number of client requests received from clients.

int

count

response_1xx

The number of responses with status codes 1xx

int

count

response_2xx

The number of responses with status codes 2xx

int

count

response_3xx

The number of responses with status codes 3xx

int

count

response_4xx

The number of responses with status codes 4xx

int

count

response_5xx

The number of responses with status codes 5xx

int

count

responses

The total number of responses (only for Nginx plus)

int

count

send

The total amount of data sent to clients.

int

B

  • nginx_upstream_zone 指标集

1、标签

Tag

Description

host

host name which installed nginx

nginx_port

nginx server port

nginx_server

nginx server host

nginx_version

nginx version

upstream_server

upstream server

upstream_zone

upstream zone

2、指标列表

Metric

Description

Type

Unit

active

The number of active connections (only for Nginx plus)

int

count

backup

Whether it is configured as a backup server (only for Nginx plus)

int

count

fails

The number of failed requests (only for Nginx plus)

int

count

received

The total number of bytes received from this server.

int

B

request_count

The total number of client requests received from server.

int

count

response_1xx

The number of responses with status codes 1xx

int

count

response_2xx

The number of responses with status codes 2xx

int

count

response_3xx

The number of responses with status codes 3xx

int

count

response_4xx

The number of responses with status codes 4xx

int

count

response_5xx

The number of responses with status codes 5xx

int

count

send

The total number of bytes sent to clients.

int

B

state

The current state of the server (only for Nginx plus)

int

count

unavail

The number of unavailable server (only for Nginx plus)

int

count

weight

Weights used when load balancing (only for Nginx plus)

int

count

  • nginx_cache_zone 指标集

1、标签

Tag

Description

cache_zone

cache zone

host

host name which installed nginx

nginx_port

nginx server port

nginx_server

nginx server host

nginx_version

nginx version

2、指标列表

Metric

Description

Type

Unit

max_size

The limit on the maximum size of the cache specified in the configuration

int

B

received

The total number of bytes received from the cache.

int

B

responses_bypass

The number of cache bypass

int

count

responses_expired

The number of cache expired

int

count

responses_hit

The number of cache hit

int

count

responses_miss

The number of cache miss

int

count

responses_revalidated

The number of cache revalidated

int

count

responses_scarce

The number of cache scarce

int

count

responses_stale

The number of cache stale

int

count

responses_updating

The number of cache updating

int

count

send

The total number of bytes sent from the cache.

int

B

used_size

The current size of the cache.

int

B

场景视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “Nginx”, 选择 “Nginx(VTS) 监控视图”,点击 “确定” 即可添加视图。

视图主要由如下3个部分组成:

1、总览部分:主要显示 Nginx 服务器的总体运行情况。包括整体的请求数,连接数,收发数据量和响应错误数等。

2、Server 部分:主要显示各个虚拟主机的请求数,数据收发量和对应的响应错误数据情况。

3、upstream 部分:主要显示请求分发到不同后端服务的请求数,数据收发量和对应的响应错误数据情况。

监控器(告警)

连接断开异常告警

断开连接数等于 accept(接收)和 handled(处理)之间的差值。在正常情况下,断开的连接应为零。如果每单位时间断开连接的速率开始上升,需要寻找导致资源饱和状态可能的因素。

请求连接数突变

请求数的剧烈变化可能会是环境中某个地方正在发生问题,虽然它并不能确切地告诉问题发生在哪里。但是,值得关注并做进一步分析。

服务错误率告警

服务器错误率等于单位时间的 5xx 错误数(例如 “502 Bad Gateway”)除以请求总数(包含 1xx,2xx,3xx,4xx,5xx)。如果错误率过高,则可能需要进行进一步调查。

总结

Nginx VTS 模块提供了一种强大而灵活的方式来监控和分析 Nginx 的性能和流量,对于维护和优化 Nginx 服务器提供丰富的监控数据支撑。

相关推荐

Win10预览版10532已知问题汇总(微软win11正式版已知问题一览)

IT之家讯微软已向Insider用户推送了Win10预览版10532更新,本次更新对右键菜单、《Windows反馈》应用以及Edge浏览器进行了改进。除此之外还包含一些Bug,汇总如下,有意升级Wi...

Gabe Aul正测试Win10 Mobile 10532,Insider用户还需等

IT之家讯本月中旬微软向Insider用户推送了Win10Mobile预览版10512,该版本修复了一些Bug,增强了系统稳定性,但依然存在一些问题。今天,微软Insider项目负责人GabeAu...

微软开始推送Win10预览版10532快速版更新

8月28日消息,刚才,微软推送了Win10Build10532快速版,修复了之前的Bug,并带来了三项改进。主要来说,这次的更新改进了右键菜单的UI,使其更具Modern风格(见上图)。此外,更新...

Win10预览版10532更新内容大全(windows10更新预览版)

IT之家讯今天凌晨微软向Insider用户推送了Win10预览版10532快速版更新,本次更新主要带来了三处改进,汇总如下:o改进右键菜单,外观更加Modern。这是基于网友要求界面一致的反馈做出...

无法升级Win10预览版10532?也许Hyper-V在搞鬼

根据IT之家网友的反映,安装了微软虚拟机Hyper-V的Win10预览版用户无法成功升级Build10532版本,安装过程中会被要求回滚系统。很多朋友在尝试关闭虚拟机之后重启安装程序,结果仍然无法顺...

Win10预览版10532界面兴起“酷黑”风潮

Win10预览版10532的界面改动还是较为明显的,主要体现在右键菜单上面。总体来看,该版本的右键菜单间距更宽,视觉上更大气,操作上更便于触控。具体来说,任务栏右键菜单的变化最为明显。除了增加选项的宽...

Win10预览版10532上手图集(windows10预览版下载)

IT之家讯8月28日,微软今天推送了Win10预览版10532快速版更新,在该版本中,微软主要是加强细节上调整,并且主要是增强Edge浏览器性能等。在Windows10预览版10532中,微软改进了...

Win10预览版10532上手视频亮点演示

IT之家讯8月28日消息,今天凌晨微软向WindowsInsider快速通道用户推送了Win10预览版10532。在Windows10预览版10532中,微软改进了右键菜单,外观更加现代化。另外还...

第二篇 前端框架Vue.js(vue前端框架技术)

前端三大核心是网页开发的基础,Vue则是基于它们构建的“生产力工具”。通俗理解就是HTML是化妆的工具如眉笔,CSS是化妆品如口红,JavaScript是化妆后的互动,而Vue就是化妆助手。有了化妆工...

基于SpringBoot + vue2实现的旅游推荐管理系统

项目描述...

基于Vue以及iView组件的后端管理UI模板——iview-admin

介绍iView-admin是一套后端管理界面模板,基于Vue2.0,iView(现在为ViewUI)组件是一套完整的基于Vue的高质量组件库,虽然Github上有一套非常火的基于ElementUI...

别再说你会SPA开发了,这5个核心你真的搞懂了吗?

前言此spa非彼spa,不是你所熟知的spa。你所熟知的spa作者肯定是没有你熟悉的。我们这里指的是在前端开发中的一种模型,叫作单页应用程序,顾名思义,就是整个项目只有一个页面,而页面中的内容是动态的...

React.js Top20面试题(react.js中文官网)

概述作为React开发者,对框架的关键概念和原则有扎实的理解是很重要的。考虑到这一点,我整理了一份包含20个重要问题的清单,每个React开发者都应该知道,无论他们是在面试工作还是只是想提高技能。...

美媒:特朗普签署行政令后,FBI又发现约2400份、总计超14000页涉肯尼迪遇刺案文件

来源:环球时报新媒体1月23日特朗普下令公布肯尼迪遇刺案相关机密文件图源:美媒综合福克斯新闻网和Axios网站10日报道,在总统特朗普签署行政令,要求公布“肯尼迪遇刺案”相关政府机密文件之后,美国...

2021 年 Node.js 开发人员学习路线图

Node.js自发布以来,已成为业界重要破局者之一。Uber、Medium、PayPal和沃尔玛等大型企业,纷纷将技术栈转向Node.js。Node.js支持开发功能强大的应用,例如实时追踪...

取消回复欢迎 发表评论: