`

sanic+mongodb+highcharts 分析nginx流量

阅读更多

       

Nginx日志

按日期切割log

1
2
3
mv /var/log/nginx-server.access.log /var/log/nginx/nginx-server.access_$(date -d "yesterday" +"%Y%m%
d").log
kill -USR1 `cat /etc/nginx/logs/nginx.pid`

首先要明确自己的Nginx的日志格式,找到配置文件如下:

1
2
3
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';

以上是我Nginx日志的格式

Nginx日志分析处理

啥也别说了 直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#coding=utf-8
import linecache
import re
import time,datetime
import glob
import os
import conn
w = '''112.224.65.85 - - [20/Aug/2013:00:01:02 +0800] "POST /api/topic/comments HTTP/1.1" 200 3804 "-" "Corax/0.7.0 CFNetwork/609.1.4 Darwin/13.0.0" "-" "1.173" "0.005"'''
files_dir = "/home/corax/ops/data/"
bak_dir = "/home/corax/ops/data/backup"

def readfile(path):
filename = []
files = glob.glob(path + '*.log')
return files

def readtime(path):
read_time = []
files = glob.glob(path + '*.log')
print files
for i in files:
read_time.append(i.split('_')[1].split('.')[0])
read_time = set(read_time)
return read_time

def timestamp(time_file):
return time.mktime(time.strptime(time_file,'%Y%b%d %H:%M:%S'))

def datestamp(date_name):
return time.strptime(date_name,'%Y%b%d')

def handle_log(log_file):
ip = r"?P<ip>[\d.]*"
date = r"?P<date>\d+"
month = r"?P<month>\w+"
year = r"?P<year>\d+"
log_time = r"?P<time>\S+"
method = r"?P<method>\S+"
request = r"?P<request>\S+"
status = r"?P<status>\d+"
bodyBytesSent = r"?P<bodyBytesSent>\d+"
refer = r"""?P<refer>
[^\"]*
"""

userAgent=r"""?P<userAgent>
\S*
"""

forwardr=r"""?P<forwardr>
[^\"]*
"""

request_time=r"""?P<request_time>
[^\"]*
"""

response_time=r"""?P<response_time>
[^\"]*
"""

p = re.compile(r"(%s)\ -\ -\ \[(%s)/(%s)/(%s)\:(%s)\ [\S]+\]\ \"(%s)?[\s]?(%s)?.*?\"\ (%s)\ (%s)\ \"(%s)\"\ \"(%s).*?\"\ \"(%s)\"\ \"(%s)\"\ \"(%s)\"" %(ip, date, month, year, log_time, method, request, status, bodyBytesSent, refer, userAgent, forwardr, request_time, response_time ), re.VERBOSE)

s = time.time()

log_list = []
for l in log_file:
f = open(l,'r')
file_all = f.read()
m = re.findall(p,file_all)
for g in m:
time_all = '%s%s%s %s'%(g[3], g[2], g[1], g[4])
time_format = timestamp(time_all)
date = time.strftime("%Y%m%d",datestamp('%s%s%s'%(g[3], g[2], g[1])))
hour = g[4].split(":")[0]
# print date,hour
if g[12] != "-":
req_time = float(g[12])
else:
req_time = None
if g[13] != "-" and len(g[13])<=5:
res_time = float(g[13])
else:
res_time = None
log = {'ip':g[0],'time':time_format,'method':g[5],'request':g[6],'status':g[7],'bodyBytesSent':g[8],'refer':g[9],'userAgent':g[10],'forwardr':g[11],'request_time':req_time,'response_time':res_time,'date':int(date),'hour':int(hour)}

conn.db.log.insert(log)
f.close()
print "mv %s %s "%(l,bak_dir)
os.system("mv %s %s "%(l,bak_dir))
print time.time() - s

if __name__ == '__main__':
lf = readfile(files_dir)
print lf
read_time = readtime(files_dir)
print read_time
handle_log(lf)

我们书接上回,对上面的代码进行一下梳理:

w变量存了一个测试的Nginx日志条目,readfile()函数是读取日志文件,然后返回文件的路径,readtime()函数是获取日期,handle_log()函数是分析日志的函数,对于每个日志段,用正则精心匹配筛选出来,然后就是入库。这里面试写入到了MongDB中。

好了,日志都放到NOSQL当中了,接下来就是分析的问题,这个就是仁者见仁智者见智的事了,每个公司的需求不一样,有用redis分析的,有用zeromq分析,这就看大家的喜好了,分析完最后还是推荐大家用highcharts出图比较好看,这里推荐使用highcharts的文章:highcharts使用

 

分享到:
评论

相关推荐

    管理系统系列--运用SSM写的停车场管理系统,加入了车牌识别和数据分析.zip

    【标题】中的“管理系统系列--运用SSM写的停车场管理系统,加入了车牌识别和数据分析”表明这是一个基于SSM(Spring、SpringMVC、MyBatis)框架开发的停车场管理系统,且具备车牌识别与数据分析功能。SSM是Java Web...

    毕业设计&课设--数字化社区管理平台-毕业设计.zip

    数据分析是数字化社区管理平台的重要组成部分,可能使用Python的Pandas、NumPy库或者R语言进行数据清洗和分析,使用Echarts、Highcharts等图表库展示数据,帮助管理者洞察社区动态。此外,机器学习技术如分类、聚类...

    JAVA翻转课堂管理系统设计与实现

    这涉及到统计分析和图表展示,可以使用Apache POI处理Excel导出,Highcharts或ECharts生成交互式图表。 在技术选型上,JAVA作为企业级开发的首选语言,提供了丰富的开源库和框架,如Spring Boot简化了项目的初始化...

    newblog:个人博客,个人网站,blog

    Redisson(分布式锁),dubbo缓存:Redis(日志系统等)数据库:MySQL部署:Tomcat,Nginx,阿里云服务器,七牛云CDN Python相关:百度统计的获取,Flask提供文本分析API其他:MongoDB(目前仅用于记录数据库启动)...

    水温极值可视化平台.zip

    "水温极值可视化平台.zip" 是一个包含与水温监测和数据分析相关的项目。这个项目的重点在于利用Java技术实现一个可视化的平台,帮助用户直观地理解水体中的温度变化,尤其是极端高温或低温的情况。Java作为一种多...

    mean-learning-notes:从头开始学习 MEAN Stack 的注意事项

    使用 Highcharts 添加数据可视化图表莫里斯.js 15 个最佳 JavaScript 图表库 第 9 周 - 外部工具使用 Mailgun示例发送电子邮件 第 8 周 - 部署到 EC2 准备 Ubuntu 14.04 EC2 实例安装 Nginx、MongoDB、Node.js、NPM ...

    酒店管理系统源码

    8. **报表与数据分析**:系统应提供各类统计报表,如入住率、收入分析等,可能需要利用Excel导出、图表生成库(如Echarts、Highcharts)和数据分析工具。 9. **安全性**:保护客户隐私和防止未授权访问是关键,需要...

    pt-学生考勤管理系统 毕设.zip

    8. **报表与统计分析**:系统应具备生成考勤报表的功能,可能利用ECharts、Highcharts等图表库展示出学生的出勤率、迟到次数等统计信息。 9. **版本控制**:开发者会使用Git进行代码版本控制,便于团队协作和代码...

    知乎毕业设计—(包含完整源码可运行).zip

    7. **数据可视化**:如果项目包含了数据分析功能,可能还使用了ECharts、Highcharts等工具进行数据可视化,展示用户行为、热门话题等信息。 8. **版本控制**:作为完整源码的一部分,项目很可能是在Git上进行版本...

    一起镇江管理后台2017.6.16.rar

    5. **数据可视化**:后台管理系统可能会用到图表库,如ECharts、Highcharts或D3.js,以便以图形方式展示数据分析结果。 6. **API接口设计**:系统可能对外提供API接口,供其他服务调用,这涉及到API设计规范,如...

    考试类精品--网上考勤系统”由某公司提出,主要用于该公司的打卡等签到日常操作,由西北工业大学-SSF小组负责实施。根.zip

    2. **数据库设计**:为了存储员工信息、考勤记录等数据,需要设计合理的数据库结构,可能涉及SQL语言、关系数据库管理系统(如MySQL、PostgreSQL)或NoSQL数据库(如MongoDB)。 3. **用户认证与授权**:确保系统的...

    利用爬虫爬取知乎上关于新冠肺炎话题下的问题及答案以及评论,并利用Django+layui进行可视化

    6. **数据可视化**:为了清晰地展示爬取到的信息,我们可以利用layui的表格组件显示数据,也可以集成ECharts、Highcharts等图表库,制作柱状图、折线图等,以可视化问题数量、答案长度、评论热度等统计信息。...

    华奥汽车销售集团网源码毕业设计—(包含完整源码可运行).zip

    8. **数据可视化**:可能使用ECharts、Highcharts等库进行图表展示,如销售数据分析、库存状态等。 9. **测试与调试**:单元测试、集成测试,确保代码质量及功能正确性。 10. **部署与运维**:Docker容器化部署,...

    一个学校上机管理系统

    【标题】"一个学校上机管理系统"所涉及的知识点涵盖了多个方面,主要集中在Web开发、数据库管理、用户权限控制和数据分析。以下是对这些知识点的详细解释: 1. **Web开发**:这个系统是一个Web应用程序,可能采用了...

    word源码java-TechBoard:整理开发中积累的各种开源库、框架、工具、方法等

    word源码java TechBoard 整理开发中积累的各种开源库、框架、工具、方法等,为...AngularJS、JQuery、ReactJS、EasyUI、Bootstrap、Highcharts、Umediter、Meteor、Ember Python Tornado、Flask、Twisted、Django、Pyra

    虚拟股票网站源代码虚拟股票网站源代码

    这部分可能涉及到数据库设计,如MySQL或MongoDB,以及安全措施,如哈希加密和验证码。 3. **股票模拟交易**:核心功能是模拟交易,用户可以买入、卖出股票,查看持股情况、盈亏等。这需要设计交易逻辑,包括买卖...

    VentilatorLogging:使用roboRIO读取模拟和CAN数据,并使用数据托管Web服务器

    这通常会用到JavaScript库,如D3.js或Highcharts,来创建交互式的图表和仪表盘,使团队成员能快速理解和分析机器人的性能。 在实际应用中,VentilatorLogging这样的系统对于调试机器人行为、优化控制策略和进行故障...

    Temperaturscanner_easy_demoapplication_

    常见的Web服务器有Apache、Nginx和Node.js等。在这个项目中,可能使用了一个轻量级的Web服务器框架,如Python的Flask或Express.js。 2. **Web界面**:"inculsive web sides"意味着项目包含了Web页面设计,这些页面...

    TwitterTrends

    3. **前端可视化库**: 为了绘制趋势图表,项目可能使用了如D3.js、Highcharts或者Chart.js这样的JavaScript图表库。这些库可以帮助创建各种类型的图表,如折线图、柱状图,以便直观地展示Twitter趋势。 4. **OAuth...

Global site tag (gtag.js) - Google Analytics