采集并分析Nginx访问日志
日志服务支持通过数据接入向导配置采集Nginx日志,并自动创建索引和Nginx日志仪表盘,帮助您快速采集并分析Nginx日志。
许多个人站长选取了Nginx作为服务器搭建网站,在对网站访问情况进行分析时,需要对Nginx访问日志统计分析,从中获取网站的访问量、访问时段等访问情况。传统模式下利用CNZZ等方式,在前端页面插入js,用户访问的时候触发js,但仅能记录访问请求。或者利用流计算、离线统计分析Nginx访问日志,但需要搭建一套环境,并且在实时性以及分析灵活性上难以平衡。
日志服务在支持查询分析实时日志功能,同时提供Nginx日志仪表盘(Dashboard),极大的降低了Nginx访问日志的分析复杂度,可以用于便捷统计网站的访问数据。本文档以分析Nginx访问日志为例,介绍日志分析功能在分析Nginx访问日志场景下的详细步骤。
应用场景
个人站长选取Nginx作为服务器搭建了个人网站,需要通过分析Nginx访问日志来分析网站的PV、UV、热点页面、热点方法、错误请求、客户端类型和来源页面制表,以分析、评估网站的访问情况。
Nginx日志格式
为了更好满足分析场景,推荐Nginx日志格式采用如下log_format
配置。
log_format main '$remote_addr - $remote_user [$time_local] "$request" $http_host '
'$status $request_length $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time $upstream_response_time';
各字段含义如下:
字段 | 含义 |
---|---|
remote_addr | 客户端地址 |
remote_user | 客户端用户名 |
time_local | 服务器时间 |
request | 请求内容,包括方法名、地址和http协议 |
http_host | 用户请求时使用的http地址 |
status | 返回的http状态码 |
request_length | 请求大小 |
body_bytes_sent | 返回的大小 |
http_referer | 来源页 |
http_user_agent | 客户端名称 |
request_time | 整体请求延时 |
upstream_response_time | 上游服务的处理延时 |
采集Nginx日志
采集日志前,请确认您已创建Project和创建Logstore。
- 登录日志服务控制台,单击Project名称。
- 在Logstore列表中,单击指定Logstore对应的数据接入向导图标。
日志服务提供数据接入向导快速接入Nginx在内的多种数据源。
图 1. Logstore列表
- 选择数据类型为Nginx访问日志。
日志服务提供多种数据类型接入(云产品、自建软件、API、SDK等),分析NGINX访问日志请选择自建软件 > NGINX访问日志。
- 数据源设置。
- 指定配置配置名称和日志路径。
- 将推荐的
log_format
日志格式填写到NGINX日志格式中。图 2. 配置数据源 - 确认Nginx键名称。
日志服务会自动提取出Nginx日志中的键名称,请确认是否正确。
说明 Nginx日志格式中的$request
会被提取为request_method
和request_uri
两个键。图 3. NGINX键名称
- 确认是否丢弃解析失败日志,并单击下一步。
开启该功能后,解析失败的Nginx访问日志不上传到日志服务;关闭后,Nginx访问日志解析失败时上传原始Nginx访问日志。
- 应用到机器组。
如果您之前没有创建过机器组,请先根据页面提示创建IP地址机器组。
说明 Nginx访问日志采集配置生效时间最长需要3分钟,请耐心等待。
为Nginx访问日志设置索引
在数据接入向导中配置采集Nginx访问日志之后,可以在向导的后续步骤中设置Nginx访问日志的索引。如果直接退出了数据接入向导,也可以在查询分析页面开启并配置索引、查询并分析Nginx访问日志。
以下步骤展示在数据接入向导中为Nginx访问日志设置索引。
确保日志机器组心跳正常的情况下,可以通过单击右侧预览按钮获取到采集上来的数据。
日志服务提供预设的Nginx访问日志数据键名称以便分析使用,可以选择预览数据生成的实际数据键名称,用来映射默认数据键名称。
图 5. 键值索引属性
单击下一步,日志服务会为您设置好Nginx访问日志的索引属性并创建nginx-dashboard
仪表盘以供分析使用。
分析Nginx访问日志
- 使用SQL语句分析Nginx访问日志:
在日志服务查询分析页面输入查询分析语句,可以查看符合条件的Nginx原始日志,或查看可视化的分析结果。另外,查询分析页面还提供快速分析、快速查询等功能,详细说明请查看查询日志和Nginx访问日志诊断及优化。
- 查看预设仪表盘的分析数据,分析Nginx访问日志:
日志服务预设的Nginx访问日志仪表盘中展示了各个分析指标的详细数据大盘,例如PV/UV统计等数据。关于如何使用仪表盘,请参考仪表盘。
图 6. Nginx访问日志仪表盘
- PV/UV统计(pv_uv)
统计最近一天的PV数和UV数。
图 7. PV/UV统计
统计语句:
* | select approx_distinct(remote_addr) as uv ,
count(1) as pv ,
date_format(date_trunc('hour', __time__), '%m-%d %H:%i') as time
group by date_format(date_trunc('hour', __time__), '%m-%d %H:%i')
order by time
limit 1000 - 访问地域分析(ip_distribution)
统计访问IP来源情况。
图 8. 访问地域分析
统计语句:
* | select count(1) as c,
ip_to_province(remote_addr) as address
group by ip_to_province(remote_addr) limit 100 - 访问前十地址(top_page)
统计最近一天访问PV前十的地址。
图 9. 统计访问
统计语句:
* | select split_part(request_uri,'?',1) as path,
count(1) as pv
group by split_part(request_uri,'?',1)
order by pv desc limit 10 - 请求方法占比(http_method_percentage)
统计最近一天各种请求方法的占比。
图 10. 请求方法占比
统计语句:
- 请求状态占比(http_status_percentage)
统计最近一天各种http状态码的占比。
图 11. 请求状态占比
统计语句:
- 请求UA占比(user_agent)
统计最近一天各种浏览器的占比。
图 12. 请求UA占比
统计语句:
* | select count(1) as pv,
case when http_user_agent like '%Chrome%' then 'Chrome'
when http_user_agent like '%Firefox%' then 'Firefox'
when http_user_agent like '%Safari%' then 'Safari'
else 'unKnown' end as http_user_agent
group by http_user_agent
order by pv desc
limit 10 - 前十访问来源(top_10_referer)
统计最近一天访问前十的来源信息。
图 13. 前十访问来源
统计语句:
Nginx访问日志诊断及优化
除了一些默认的访问指标外,站长常常还需要对一些访问请求进行诊断,分析Nginx访问日志中记录的处理请求的延时如何、有哪些比较大的延时、哪些页面的延时比较大。此时可以进入查询页面进行快速分析。
- 统计平均延时和最大延时
通过每5分钟的平均延时和最大延时,从整体上了解延时情况。
统计语句:
* | select from_unixtime(__time__ -__time__% 300) as time,
avg(request_time) as avg_latency ,
max(request_time) as max_latency
group by __time__ -__time__% 300 - 统计最大延时对应的请求页面
知道了最大延时之后,需要明确最大延时对应的请求页面是,以方便进一步优化页面响应。
统计语句:
* | select from_unixtime(__time__ - __time__% 60) ,
max_by(request_uri,request_time)
group by __time__ - __time__%60 - 统计请求延时的分布
统计网站的所有请求的延时的分布,把延时分布在十个桶里面,看每个延时区间的请求个数。
统计语句:
- 统计最大的十个延时
除最大的延时之外,还需要统计最大的十个延时及其对应值。
统计语句:
- 对延时最大的页面调优
假如
/url2
这个页面的访问延时最大,为了对/url2
页面进行调优,接下来需要统计/url2
这个页面的访问PV、UV、各种method次数、各种status次数、各种浏览器次数、平均延时和最大延时。统计语句:
request_uri:"/url2" | 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
得到以上数据后,就可以对网站的访问情况进行有针对性的详细评估。
采集并分析Nginx访问日志的更多相关文章
- 使用hive分析nginx访问日志方法
以下案例是使用hive分析nginx的访问日志案例,其中字段分隔通过正则表达式匹配,具体步骤如下: 日志格式: 192.168.5.139 - - [08/Jun/2017:17:09:12 +080 ...
- 利用GoAccess分析Nginx访问日志
原文链接:https://blog.csdn.net/yown/article/details/56027112 需求:及时得到线上用户访问日志分析统计结果,以便给开发.测试.运维.运营人员提供决策! ...
- 命令分析nginx访问日志的用法
awk分析日志常用高级使用命令方法 分析访问日志(Nginx为例) 日志格式: '$remote_addr - $remote_user [$time_local] "$request&qu ...
- python脚本分析nginx访问日志
日志格式如下: 223.74.135.248 [11/May/2017:11:19:47 +0800] "POST /login/getValidateCode HTTP/1.1" ...
- 一、基于hadoop的nginx访问日志分析---解析日志篇
前一阵子,搭建了ELK日志分析平台,用着挺爽的,再也不用给开发拉各种日志,节省了很多时间. 这篇博文是介绍用python代码实现日志分析的,用MRJob实现hadoop上的mapreduce,可以直接 ...
- nginx访问日志分析,筛选时间大于1秒的请求
处理nginx访问日志,筛选时间大于1秒的请求 #!/usr/bin/env python ''' 处理访问日志,筛选时间大于1秒的请求 ''' with open('test.log','a+' ...
- Nginx 访问日志配置
一.Nginx 访问日志介绍 Nginx 软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由 ngx_http_log_module 模块负责. 二. ...
- Logstash+ElasticSearch+Kibana处理nginx访问日志(转)
ELK似乎是当前最为流行的日志收集-存储-分析的全套解决方案. 去年年初, 公司里已经在用, 当时自己还山寨了一个统计系统(postgresql-echarts, 日志无结构化, json形式存储到p ...
- nginx访问日志(access_log)
一.nginx访问日志介绍 nginx软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由ngx_http_log_module模块负责,对应的官方地址 ...
随机推荐
- 断开所有的SMB连接的批处理
备用 @ECHO OFF ECHO ===Check how many SMB shares that already connected=== net use ECHO ===Disconnect ...
- Triangle leetcode java
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
- 使用LeakCanary检测内存泄露 翻译 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 门罗币(MONERO)钱包生成教程
一.下载钱包 钱包下载地址:https://getmonero.org/downloads/(如果下载缓慢请使用下载工具下载) 二.图形界面钱包生成 解压运行monero-wallet-gui.exe ...
- linux运维需要掌握的基础知识
踏入linux运维工程师这一职业,其实有很多工具技能需要掌握,下面我来给大家一一介绍. 1.shell脚本和另一个脚本语言,shell是运维人员必须具备的,不懂这个连入职都不行,至少也要写出一些系统管 ...
- nod32的内网在线更新设置
需要一个iis地址,最好能够目录浏览,权限够大. 还必须: 增加一个MIME类型,.ver,类型填写application/x-ver
- 数据结构 - 2-路插入排序 具体解释 及 代码(C++)
2-路插入排序 具体解释 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24267679 2-路插入排序的思想非常有意思 ...
- slf4j、jcl、jul、log4j1、log4j2、logback大总结
1 系列目录 jdk-logging.log4j.logback日志介绍及原理 commons-logging与jdk-logging.log4j1.log4j2.logback的集成原理 slf4j ...
- C#.NET常见问题(FAQ)-如何使用右下角托盘图标notifyIcon
1 拖放一个NotifyIcon控件,并设置图标,还有显示的文字 2 双击这个控件,即当最小化了主窗体,然后双击这个右下角图标的时候,要显示主窗体(大部分程序的用户体验都是这样干的,比如QQ,双击 ...
- Internet传输协议-TCP
http://phei.eefocus.com/book/08-07/473781276058574.html http://www.eefocus.com/communication/210643 ...