采集及分析Nginx监控日志 您所在的位置:网站首页 Jenkins日志采集监控 采集及分析Nginx监控日志

采集及分析Nginx监控日志

2024-07-16 08:23| 来源: 网络整理| 查看: 265

通过配置Nginx内置的stub_status模块,您可以启用专用的状态页实时显示Nginx服务器的关键指标,例如活跃的客户端连接数(Active connections)、在读取请求头(Reading)、发送响应(Writing)以及处于等待状态(Waiting)的连接数。您可以通过Logtail插件采集Nginx监控日志并进行查询分析,持续监控Nginx集群的性能。

前提条件

已在服务器上安装Logtail。具体操作,请参见安装Logtail(Linux系统)或安装Logtail(Windows系统)。

说明

目前支持Linux Logtail 0.16.0及以上版本,Windows Logtail 1.0.0.8及以上版本。

步骤一:配置stub_status模块说明

本文以Linux系统为例介绍操作步骤。

执行以下命令,安装和启动Nginx。

sudo yum install nginx sudo systemctl start nginx

执行以下命令确认Nginx已具备status功能。

nginx -V 2>&1 | grep -o with-http_stub_status_module with-http_stub_status_module

返回以下信息,表示支持status功能。

with-http_stub_status_module

配置Nginx服务器。

执行以下命令,编辑文件/etc/nginx/nginx.conf。

vim /etc/nginx/nginx.conf

按下键盘的i键,进入编辑模式。

在server {..}部分添加以下代码。nginx_status的更多信息,请参见Nginx status。

location /nginx_status { stub_status on; #启用stub_status模块 access_log off; allow ${服务器IP}; deny all; # 拒绝所有其他 IP 地址访问这个状态页面 }

按下键盘的esc键退出编辑模式,输入:wq保存文件并退出。

在服务器执行以下命令,验证配置结果。

curl http://${服务器IP}/nginx_status

返回以下结果,代表配置成功。

Active connections: 1 server accepts handled requests 2507455 2507455 2512972 Reading: 0 Writing: 1 Waiting: 0 步骤二:采集Nginx监控日志

登录日志服务控制台。

单击控制台页面右侧的快速接入数据卡片。

image

单击自定义数据插件卡片。

选择目标Project和Logstore,单击下一步。创建机器组。如果您已有可用的机器组,请单击使用现有机器组。如果您还没有可用的机器组,请执行以下操作(以ECS为例)。在ECS机器页签中,通过手动选择实例方式选择目标ECS实例,单击创建

具体操作,请参见安装Logtail(ECS实例)。

重要 如果您的服务器是与日志服务属于不同账号的ECS、其他云厂商的服务器和自建IDC时,您需要手动安装Logtail。更多信息,请参见安装Logtail(Linux系统)或安装Logtail(Windows系统)。

手动安装Logtail后,您必须在该服务器上手动配置用户标识。具体操作,请参见配置用户标识。

安装完成后,单击确认安装完毕。在创建机器组页面,输入名称,单击下一步

日志服务支持创建IP地址机器组和用户自定义标识机器组,详细参数说明请参见创建IP地址机器组和创建用户自定义标识机器组。

确认目标机器组已在应用机器组区域,单击下一步

重要

创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。

数据源设置页签中,设置配置名称插件配置,然后单击下一步

inputs为数据源配置,必选项。

重要

一个inputs中只允许配置一个类型的数据源。

processors为处理配置,用于解析数据。可选项,您可以配置一种或多种处理方式。

如果当前的inputs配置无法满足日志解析需求,您可以在插件配置中添加processors配置,即添加Logtail插件处理数据。例如提取字段、提取日志时间、脱敏数据、过滤日志等。更多信息,请参见使用Logtail插件处理数据。

{ "inputs": [ { "type": "metric_http", "detail": { "IntervalMs": 60000, "Addresses": [ "http://${服务器IP}/nginx_status", "http://${服务器IP}/nginx_status", "http://${服务器IP}/nginx_status" ], "IncludeBody": true } } ], "processors": [ { "type": "processor_regex", "detail": { "SourceKey": "content", "Regex": "Active connections: (\\d+)\\s+server accepts handled requests\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+Reading: (\\d+) Writing: (\\d+) Waiting: (\\d+)[\\s\\S]*", "Keys": [ "connection", "accepts", "handled", "requests", "reading", "writing", "waiting" ], "FullMatch": true, "NoKeyError": true, "NoMatchError": true, "KeepSource": false } } ] }

重要参数说明如下表所示:

参数

类型

是否必须

说明

type

string

数据源类型,固定为metric_http。

IntervalMs

int

每次请求的间隔,单位:ms。

Addresses

数组

配置为您需要监控的URL列表。

IncludeBody

boolean

是否采集请求体,默认值:false。如果为true,则采集后,将请求体内容存放在content字段中。

完成采集配置1分钟后,即可查看日志,样例如下所示。日志服务默认生成nginx_status仪表盘,展示查询和分析结果。

_address_:http://10.10.XX.XX/nginx_status _http_response_code_:200 _method_:GET _response_time_ms_:1.83716261897 _result_:success accepts:33591200 connection:450 handled:33599550 reading:626 requests:39149290 waiting:68 writing:145 步骤三:查询和分析日志

登录日志服务控制台。

在Project列表区域,单击目标Project。

image

在控制台左侧,单击日志存储,在日志库列表中单击目标Logstore。

image

输入查询和分析语句,然后单击最近15分钟,设置查询和分析的时间范围。

更多信息,请参见步骤一:输入查询和分析语句。

查询日志

查询某IP地址的相关信息。

_address_ : 10.10.0.0

查询响应时间超过100毫秒的请求。

_response_time_ms_ > 100

查询状态码不为200的请求。

not _http_response_code_ : 200

分析日志

每5分钟统计一次waiting、reading、writing、connection的平均值。

*| select avg(waiting) as waiting, avg(reading) as reading, avg(writing) as writing, avg(connection) as connection, from_unixtime( __time__ - __time__ % 300) as time group by __time__ - __time__ % 300 order by time limit 1440

统计最大等待连接数排名前十的服务器。

*| select max(waiting) as max_waiting, _address_, from_unixtime(max(__time__)) as time group by address order by max_waiting desc limit 10

统计IP地址数量。

* | select count(distinct(_address_)) as total

统计请求失败的IP地址数量。

not _result_ : success | select count(distinct(_address_))

统计最近十次请求失败的IP地址。

not _result_ : success | select _address_ as address, from_unixtime(__time__) as time order by __time__ desc limit 10

每5分钟统计一次请求总数。

*| select avg(handled) * count(distinct(_address_)) as total_handled, avg(requests) * count(distinct(address)) as total_requests, from_unixtime( __time__ - __time__ % 300) as time group by __time__ - __time__ % 300 order by time limit 1440

每5分钟统计一次平均请求延迟。

*| select avg(_response_time_ms_) as avg_delay, from_unixtime( __time__ - __time__ % 300) as time group by __time__ - __time__ % 300 order by time limit 1440

统计请求成功的数量和失败的数量。

not _http_response_code_ : 200 | select count(1) _http_response_code_ : 200 | select count(1)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有