前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【日志服务CLS】Nginx日志数据全方位大解析

【日志服务CLS】Nginx日志数据全方位大解析

原创
作者头像
日志服务CLS小助手
修改2021-12-03 11:28:05
7220
修改2021-12-03 11:28:05
举报
文章被收录于专栏:日志服务CLS日志服务CLS

作者:v神

导语:云原生日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志数据解决平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。

Nginx 是一个高性能的HTTP和反向代理web服务器,透过Nginx日志可以挖掘非常大的价值,比如诊断调优网站,监控网站稳定性,运营数据统计等。今天我们一起通过日志服务CLS,看看如何对Nginx做全方位日志数据挖掘。

前提条件:Nginx日志采集至日志服务CLS,详见操作指南

本文采取标准nginx日志配置:

代码语言:javascript
复制
log_format  main  '$server_name $remote_addr - $remote_user [$time_local] "$request" '
                        '$status $uptream_status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for" ';

1. 诊断调优

需求场景:

  • 针对访问延时大的页面进行调优,优化用户体验。

解决流程:

  • 计算每5分钟请求的平均延时和最大延时,从整体了解延时情况。
代码语言:javascript
复制
* | select time_series(__TIMESTAMP__, '5m', '%Y-%m-%d %H:%i:%s', '0')  as time, avg(request_time) as avg_latency ,max(request_time) as max_latency group by time order by time limit 1000
延时情况统计
延时情况统计
  • 统计最大延时对应的请求页面,进一步优化页面响应。
代码语言:javascript
复制
* | select time_series(__TIMESTAMP__, '5m', '%Y-%m-%d %H:%i:%s', '0')  as time, max_by(request_uri,request_time) group by time order by time limit 1000
最大延时统计
最大延时统计
  • 对延时最大的页面进行调优。

例如/4nm8c.html页面的访问延时最大,需要对/4nm8c.html页面进行调优,则需计算/4nm8c.html页面的访问PV、UV、各种请求方法次数、各种请求状态次数、各种浏览器次数、平均延时和最大延时。

代码语言:javascript
复制
 request_uri:"/4nm8c.html*" | select count(1) as pv,
          approx_distinct(remote_addr) as uv,
          histogram(method) as method_pv,
          histogram(status) as status_pv,
          histogram(user_agent) as user_agent_pv,
          avg(request_time) as avg_latency,
          max(request_time) as max_latency
页面调优
页面调优

2. 监控网站稳定性问题

需求场景:

  • 针对性能问题、网站错误、流量急跌或暴涨等情况,根据日志监控阈值,一旦触发阈值告警,先于用户发现问题。

解决流程:

使用数学统计中的百分数(例如99%最大延时)来作为告警触发条件较为准确,使用平均值,个体值触发告警会造成一些个体请求延时被平均,无法反映真实情况。例如使用如下查询分析语句计算一天窗口(1440分钟)内各分钟的平均延时大小、50%分位的延时大小和90%分位的延时大小。

代码语言:javascript
复制
* | select avg(request_time) as l, approx_percentile(request_time, 0.5) as p50, approx_percentile(request_time, 0.99) as p99, time_series(__TIMESTAMP__, '5m', '%Y-%m-%d %H:%i:%s', '0') as time group by time order by time desc limit 1440
延时大小统计
延时大小统计

针对99%分位的延时大于100ms告警,并且在告警信息中直接展示受影响的url、用户,快速判断出错情况。

代码语言:javascript
复制
* | select approx_percentile(request_time, 0.99) as p99
监控页面
监控页面

接收告警信息,根据受影响的top url及用户信息,进行针对性的告警恢复决策。

告警信息页面
告警信息页面

3. 分析网站访问情况

利用日志服务CLS,用户可以搭建运营数据大盘,全方位展示网站访问情况。访问PV/UV统计、访问地理信息统计,前十访问来源、访问前十地址和等信息均可快速分析。

  • 统计最近一天访问IP地址的来源情况
代码语言:javascript
复制
* | select count(1) as c, ip_to_province(remote_addr) as address group by address limit 100
IP地址统计
IP地址统计
  • 展示最近一天PV数最多的前十个访问来源页面,获取热门页面
代码语言:javascript
复制
* | select count(1) as pv , http_referer  group by http_referer order by pv desc limit 10
PV Top10 访问来源页面统计
PV Top10 访问来源页面统计
  • 展示最近一天内的PV数和UV数
代码语言:javascript
复制
*| select approx_distinct(remote_addr) as uv ,count(1) as pv , time_series(__TIMESTAMP__, '5m', '%Y-%m-%d %H:%i:%s', '0')  as time group by time order by time limit 1000
PV、UV统计分析
PV、UV统计分析

以上就是本期Nginx日志玩法分享,如果您有更多有意思的日志实践,欢迎投稿分享!

一站式日志数据解决方案平台
一站式日志数据解决方案平台

往期文章:

对象存储COS访问日志场景体验

CLB日志核心的玩法你Get到了吗?

【日志服务CLS】腾讯云日志服务CLS接入内容分发网络CDN

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 诊断调优
    • 需求场景:
      • 解决流程:
      • 2. 监控网站稳定性问题
        • 需求场景:
          • 解决流程:
          • 3. 分析网站访问情况
          相关产品与服务
          日志服务
          日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档