Nginx中的自建状态页,可用于监控Nginx状态。您可以通过Logtail插件采集Nginx监控日志,并进行查询分析、告警等操作,全方位监控您的Nginx集群。
前提条件
已在服务器上安装Logtail。具体操作,请参见安装Logtail(Linux系统)或安装Logtail(Windows系统)。 说明 目前支持Linux Logtail 0.16.0及以上版本,Window Logtail 1.0.0.8及以上版本。
步骤一:准备环境
请按照以下步骤,开启Nginx status插件。
- 执行以下命令确认Nginx已具备status功能。
nginx -V 2>&1 | grep -o with-http_stub_status_module with-http_stub_status_module
如果回显信息为
with-http_stub_status_module
,表示支持status功能。 - 配置Nginx status。 在Nginx配置文件(默认为/etc/nginx/nginx.conf)中开启status功能,配置示例如下所示,详情请参见Nginx status。 说明 allow 10.10.XX.XX表示只允许IP地址为10.10.XX.XX的服务器访问nginx status功能。
location /private/nginx_status { stub_status on; access_log off; allow 10.10.XX.XX; deny all; }
- 执行如下命令验证安装Logtail的服务器具备nginx status访问权限。
$curl http://10.10.XX.XX/private/nginx_status
如果回显信息如下所示,表示已完成Nginx status配置。
Active connections: 1 server accepts handled requests 2507455 2507455 2512972 Reading: 0 Writing: 1 Waiting: 0
步骤二:采集Nginx监控日志
- 登录日志服务控制台。
- 在接入数据区域,选择自定义数据插件。
- 选择目标Project和Logstore,单击下一步。
- 创建机器组。
- 如果您已有可用的机器组,请单击使用现有机器组。
- 如果您还没有可用的机器组,请执行以下操作(以ECS为例)。
- 在ECS机器页签中,通过手动选择实例方式选择目标ECS实例,单击创建。
具体操作,请参见安装Logtail(ECS实例)。
重要 如果您的服务器是与日志服务属于不同账号的ECS、其他云厂商的服务器和自建IDC时,您需要手动安装Logtail。更多信息,请参见安装Logtail(Linux系统)或安装Logtail(Windows系统)。
手动安装Logtail后,您必须在该服务器上手动配置用户标识。具体操作,请参见配置用户标识。
- 安装完成后,单击确认安装完毕。
- 在创建机器组页面,输入名称,单击下一步。
日志服务支持创建IP地址机器组和用户自定义标识机器组,详细参数说明请参见创建IP地址机器组和创建用户自定义标识机器组。
- 在ECS机器页签中,通过手动选择实例方式选择目标ECS实例,单击创建。
- 选中目标机器组,将该机器组从源机器组移动到应用机器组,单击下一步。重要 创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。
- 在数据源设置页签中,设置配置名称和插件配置,然后单击下一步。
- inputs为数据源配置,必选项。 重要 一个inputs中只允许配置一个类型的数据源。
- processors为处理配置,用于解析数据。可选项,您可以配置一种或多种处理方式。
如果当前的inputs配置无法满足日志解析需求,您可以在插件配置中添加processors配置,即添加Logtail插件处理数据。例如提取字段、提取日志时间、脱敏数据、过滤日志等。更多信息,请参见使用Logtail插件处理数据。
{ "inputs": [ { "type": "metric_http", "detail": { "IntervalMs": 60000, "Addresses": [ "http://10.10.XX.XX/private/nginx_status", "http://10.10.XX.XX/private/nginx_status", "http://10.10.XX.XX/private/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/private/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。
- 在日志存储 > 日志库页签中,单击目标Logstore。
- 输入查询和分析语句,然后单击15分钟(相对),设置查询和分析的时间范围。
更多信息,请参见查询和分析。
- 查询日志
- 查询某IP地址的相关信息。
_address_ : 10.10.0.0
- 查询响应时间超过100 ms的请求。
_response_time_ms_ > 100
- 查询状态码非200的请求。
not _http_response_code_ : 200
- 查询某IP地址的相关信息。
- 分析日志
- 每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)
- 每5分钟统计一次waiting、reading、writing、connection的平均值。
- 查询日志
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/165787.html