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

Nginx 可观测性最佳实践

ztj100 2025-02-28 18:11 4 浏览 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 服务器提供丰富的监控数据支撑。

相关推荐

告别手动操作:一键多工作表合并的实用方法

通常情况下,我们需要将同一工作簿内不同工作表中的数据进行合并处理。如何快速有效地完成这些数据的整合呢?这主要取决于需要合并的源数据的结构。...

【MySQL技术专题】「优化技术系列」常用SQL的优化方案和技术思路

概述前面我们介绍了MySQL中怎么样通过索引来优化查询。日常开发中,除了使用查询外,我们还会使用一些其他的常用SQL,比如INSERT、GROUPBY等。对于这些SQL语句,我们该怎么样进行优化呢...

9.7寸视网膜屏原道M9i双系统安装教程

泡泡网平板电脑频道4月17日原道M9i采用Win8安卓双系统,对于喜欢折腾的朋友来说,刷机成了一件难事,那么原道M9i如何刷机呢?下面通过详细地图文,介绍原道M9i的刷机操作过程,在刷机的过程中,要...

如何做好分布式任务调度——Scheduler 的一些探索

作者:张宇轩,章逸,曾丹初识Scheduler找准定位:分布式任务调度平台...

mysqldump备份操作大全及相关参数详解

mysqldump简介mysqldump是用于转储MySQL数据库的实用程序,通常我们用来迁移和备份数据库;它自带的功能参数非常多,文中列举出几乎所有常用的导出操作方法,在文章末尾将所有的参数详细说明...

大厂面试冲刺,Java“实战”问题三连,你碰到了哪个?

推荐学习...

亿级分库分表,如何丝滑扩容、如何双写灰度

以下是基于亿级分库分表丝滑扩容与双写灰度设计方案,结合架构图与核心流程说明:一、总体设计目标...

MYSQL表设计规范(mysql表设计原则)

日常工作总结,不是通用规范一、表设计库名、表名、字段名必须使用小写字母,“_”分割。...

怎么解决MySQL中的Duplicate entry错误?

在使用MySQL数据库时,我们经常会遇到Duplicateentry错误,这是由于插入或更新数据时出现了重复的唯一键值。这种错误可能会导致数据的不一致性和完整性问题。为了解决这个问题,我们可以采取以...

高并发下如何防重?(高并发如何防止重复)

前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。...

性能压测数据告诉你MySQL和MariaDB该怎么选

1.压测环境为了尽可能的客观公正,本次选择同一物理机上的两台虚拟机,一台用作数据库服务器,一台用作运行压测工具mysqlslap,操作系统均为UbuntuServer22.04LTS。...

屠龙之技 --sql注入 不值得浪费超过十天 实战中sqlmap--lv 3通杀全国

MySQL小结发表于2020-09-21分类于知识整理阅读次数:本文字数:67k阅读时长≈1:01...

破防了,谁懂啊家人们:记一次 mysql 问题排查

作者:温粥一、前言谁懂啊家人们,作为一名java开发,原来以为mysql这东西,写写CRUD,不是有手就行吗;你说DDL啊,不就是设计个表结构,搞几个索引吗。...

SpringBoot系列Mybatis之批量插入的几种姿势

...

MySQL 之 Performance Schema(mysql安装及配置超详细教程)

MySQL之PerformanceSchema介绍PerformanceSchema提供了在数据库运行时实时检查MySQL服务器的内部执行情况的方法,通过监视MySQL服务器的事件来实现监视内...

取消回复欢迎 发表评论: