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

Nginx 可观测性最佳实践

off999 2025-01-21 20:36 17 浏览 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 服务器提供丰富的监控数据支撑。

相关推荐

「Python条件结构」if…else实现判断奇偶数

功能要求用户从键盘上输入一个整数,判断该数是奇数还是偶数。说明:能被2整除的整数叫偶数,不能被2整除的叫奇数;即该数除以2后余数为0时该数为偶数,否则该数为奇数。求余数运算符为“%”。实例代码num...

Python if else条件语句详解

前面我们看到的代码都是顺序执行的,也就是先执行第1条语句,然后是第2条、第3条……一直到最后一条语句,这称为顺序结构。但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用,儿...

python基础篇: python中的流程控制,你都了解吗?

在之前的文章中大致的介绍过python中的流程控制语句,今天通过一些案例来详细了解一下python中的流程语句。目前python中流程控制语句,包含如下,如有遗漏欢迎留言补充。在python中条件判断...

python中if语句

if语句用来判断,当不同的条件成立去做与之对应事情;格式如下:if条件:执行代码条件为True才会去做执行代码布尔类型(bool)说到布尔类型,就像开关只有两个值一样,布尔类型的值只有两个...

python中的循环语句到底难不难

好多初学者会有一种这样的心里:循环难不难?该怎么学习?下面来给大家分析下.Python中的循环语句并不难,但需要理解其核心逻辑和应用场景。以下是针对零基础学习者的清晰解析,通过对比、示例和常见误...

Python6大基础运算符,看完这篇之后会让你有一个彻底认识

昨天我们准备好了Python程序所需要的的东西,那么今天我们开始了解Python的各种基础运算符,这些要是不熟悉下来你后面的路也会走的很艰难Python支持基础运算符,常见的算术运算符有+、-、*、/...

Python基础:条件语句和循环语句

下面会详细讲解一下Python关于条件语句和循环语句,会包含一些示例代码。我们首先来介绍条件语句(if-else),然后再讨论循环语句(for和while循环)。条件语句(if-else)在Pytho...

Python合集之Python循环语句(一)

在上一节的合集中,我们了解了Python流程控制语句中if语句的嵌套及条件表达会的相关知识,本节我们将进一步了解一下Python循环语句中的while语句的相关知识。在日常生活中很多问题都无...

Python“三步”即可爬取,毋庸置疑

声明:本实例仅供学习,切忌遵守robots协议,请不要使用多线程等方式频繁访问网站。#第一步导入模块importreimportrequests#第二步获取你想爬取的网页地址,发送请求,获取网页内...

「Python条件结构」if…else实现三角形判断

功能要求编写程序,判断输入的三个数是否能构成三角形的三个边。如果可以,打印“可以构成三角形”;如果不可以,打印“不可以构成三角形”。构成三角形的条件是:三条边都等于0,且任何2条边的边长之和都大于第三...

Python中检查对象是否具有某个属性的方法

技术背景在Python编程中,经常会遇到需要检查一个对象是否具有某个特定属性的情况。例如,在调用对象的属性之前,需要先确认该属性是否存在,以避免引发AttributeError异常。以下将介绍几种常见...

Python条件语句:从入门到精通

导语条件语句是编程中的基础概念,它允许我们根据不同的条件执行不同的代码块。在Python中,条件语句的灵活性和易读性使其成为编写逻辑判断和流程控制的强大工具。本教程将带您深入了解Python条件语句的...

简单学Python——条件语句if

条件语句是用来判断给定的条件是否满足(表达式值是否为0或False),并根据判断的结果(真或假)决定执行的语句。Python条件语句用的是if或if和else、elif等搭配实现的。代码执行的过程:i...

Python合集之Python跳转语句(一)

在上一节的合集中,我们了解了Python循环嵌套语句的相关知识,本节我们将进一步了解一下Python跳转语句中的break的相关知识。当循环条件一直满足时,程序会一直执行下去,如果希望在中间离开循环...

新手学Python避坑,学习效率狂飙! 八、Python 布尔值判断

布尔值判断系统知识在Python里,布尔类型仅有两个值:True和False,它们常被用于条件判断。下面从几个方面展开介绍:1.布尔运算逻辑与(and):只有当两个操作数都为True时,...

取消回复欢迎 发表评论: