从Nginx的access日志统计PV、UV和热点资源

需求:

在阿里云-CDN管理控制台的监控页面里,有对PV、UV和热点资源的统计。于是自己也写了脚本来获取相关数据。

分析:

PV:指网站的访问请求数。包含同一来源IP的多次请求。

UV:值网站的独立访客数。同一来源IP的多次请求只计算一次。

来看一条Nginx的access日志信息:

# head -1 access.log 
192.165.158.238 - - 2017-03-06T20:47:04+08:00 "GET http://download.helloworld.com/ HTTP/1.1" 200 851 425 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-" 0.000 -

以空格为分隔符的第一列,代表客户端的来源IP;第六列代表了用户请求的资源。

Linux Shell实现:

# awk 'END{print "PV is:",NR}' access.log 
PV is: 1881955
# awk '{s[$1]+=1} END{for(i in s){sum+=1}} END{print "UV is:",sum}' access.log 
UV is: 64953
# awk '{s[$6]+=1} END{for(i in s){print s[i],i}}' access.log  | sort -rn | head -10
# 只打印出访问次数最多的10条记录
92838 http://download.helloworld.com/hello/hello
88873 http://download.helloworld.com/world/hi/
57711 http://appy.helloworld.com/world/js/jquery-1.10.1.min.js
46980 http://download.helloworld.com/favicon.ico
38759 http://appy.helloworld.com/world/css/style.css?t=00001
38684 http://appy.helloworld.com/world/css/base.css
35404 http://appy.helloworld.com/favicon.ico
34907 http://download.helloworld.com/world/js/jquery-1.10.1.min.js
34882 http://appy.helloworld.com/world/img/hi.jpg
34445 http://download.helloworld.com/world/css/base.css

Python实现:

# cat count.py 
from __future__ import print_function
from collections import Counter

ips = []                       #定义存储客户端来源IP的列表
hot_resources = Counter()      #用计数器来统计资源的访问情况
with open('access.log', 'r') as fin:
    for line in fin:
        ip = line.split()[0]
        if ip:
            ips.append(ip)
        resource = line.split()[5]
        if resource:
            hot_resources[resource] += 1

print("PV is: {0:d}".format(len(ips)))
print("UV is: {0:d}".format(len(set(ips))))

for key, val in hot_resources.most_common(10):          #计数器提供了most_common,可以输出最大的10条记录
    print(val, key)
    
# python count.py 
PV is: 1881955
UV is: 64953
92838 http://download.helloworld.com/hello/hello
88873 http://download.helloworld.com/world/hi/
57711 http://appy.helloworld.com/world/js/jquery-1.10.1.min.js
46980 http://download.helloworld.com/favicon.ico
38759 http://appy.helloworld.com/world/css/style.css?t=00001
38684 http://appy.helloworld.com/world/css/base.css
35404 http://appy.helloworld.com/favicon.ico
34907 http://download.helloworld.com/world/js/jquery-1.10.1.min.js
34882 http://appy.helloworld.com/world/img/hi.jpg
34445 http://download.helloworld.com/world/css/base.css

PS:

现阶段正在自学Python,但是线上业务并没有用到。只好将Shell实现的功能,用Python再实现一遍,以做练习。

原文地址:http://blog.51cto.com/13568014/2059163

时间: 2024-10-30 04:16:15

从Nginx的access日志统计PV、UV和热点资源的相关文章

日志分析统计PV UV 独立IP

pv一般都是统计指定页面的点击量,这里用首页来计算 grep "/index.php" /var/log/nginx/access.log | wc -l uv是统计指定页面上真是访问的用户,也就是说同一ip 不管点击多少次都算一个uv grep "/index.php" /var/log/nginx/access.log | awk '{print $1}'| sort | uniq | wc –l 独立ip是统计不管用户点击那个url只要有浏览,就算一个独立ip

python实现对nginx的access日志的统计

老板有一个要求,说要看到一个url每日的访问量,然而系统在开发的时候并没有做这样的计数,于是我就想到,由于前段负载使用nginx做的,有access日志,尝试了一下从access日志中将结果分析出来,最终的效果是实现了,也许效率不是那么高,逻辑不是那么合理,起码效果达到了,本人菜鸟一个,如有不对,请不要喷,交流而已,对则对,不对交流. 脚本内容奉上: #!/usr/bin/python # _*_coding:utf-8 _*_ import os import shutil import sy

Nginx 分析access日志文件

Nginx Access Log日志统计分析常用命令 IP相关统计 统计IP访问量 awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时间段的IP访问量(4-5点) grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l 查看访问最频繁的前100个IP awk '{print $1}' access

实时统计每天pv,uv的sparkStreaming结合redis结果存入mysql供前端展示

最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实际还需要按照类型字段分类统计pv,uv,比如按照date,hour,pv,uv,type来展示.这里介绍最基本的pv,uv的展示. id uv pv date hour 1 155599 306053 2018-07-27 18 关于什么是pv,uv,可以参见这篇博客:https://blog.csdn.net/petermsh/article/details/78652246 1.

Spark shell 词频统计和统计PV心得

所有过程按本人实验 并以本人能够接受的方式理解的,大家可以参考,如有问题请留言指正. 样本数据 [[email protected] ~]$ cat hh.txt hello,world hello,hadoop hello,oracle hadoop,oracle hello,world hello,hadoop hello,oracle hadoop,oracle 词频统计,及其按单词数量倒序排序过程及其详解 1.将文件加载成RDD Scala>  var file=sc.textFile(

Nginx日志统计

1)按每小时切割Nginx访问日志,并且将日志自动上传至FTP服务器: #!/bin/bash #auto mv nginx log shell #by author xiaoming S_LOG=/usr/local/nginx/logs/access.log D_LOG=/data/backup/`date +%Y%m%d%H%M` echo -e "\033[32mPlease wait start cutshell scripts...\033[0m" sleep 2 if [

Nginx日志统计方案全过程

本文主要记录下给予python的nginx日志统计过程,主要原因是最近系统经常遭到未知程序的疯狂爬数据,虽然做了防爬机制,但是还是必须要找出是哪些IP访问次数比较多.想到的办法就是通过分析ngxin日志,从而找出这些IP排行即可.具体方案的操作步骤包括: ngxin日志每日切割功能: 设置ngxin的日志格式: 编写python代码在每日切割之前统计下access.log中的IP访问次数并将统计结果录入MongoDB: 编写web查询MongoDB进行统计. 一.nginx日志每日切割功能 该功

logstash grok 分析 nginx access 日志

为了便于量化分析nginx access日志,使用logstash 进行筛选匹配 1.确定nginx 日志格式     log_format access '$remote_addr - $remote_user [$time_local] '               '$http_host $request_method $uri '               '$status $body_bytes_sent '               '$upstream_status $ups

老男孩教育每日一题-2017年4月26日-通过访问日志access.log统计IP和每个地址访问的次数

通过访问日志access.log统计IP和每个地址访问的次数 101.226.61.184 - - [22/Nov/2015:11:02:00 +0800] "GET /mobile/sea-modules/gallery/zepto/1.1.3/zepto.js HTTP/1.1" 200 24662 "http://m.oldboyedu.com/mobile/theme/oldboyedu/home/index.html" "Mozilla/5.0