nginx访问日志获取访问前10的url
在ELK里面获取top10的url在日志量非常大的情况下是非常消耗内存的,所以写了一个脚本用来快速获取。
配置文件 log.conf
[log]
log_file = /data/logs/nginx/access_all.log [id_rsa]
id_rsa = /root/.ssh/id_rsa
程序log.py
#!/usr/bin/env python
#coding=utf-8
#author hexm@2016-12-07 import sys
import datetime
import paramiko
import configparser class Command(object): def __init__(self, host, domain, startime, endtime):
self.getconf()
self.host = host
self.domain = domain
self.command = '''awk \'/%s/, /%s/\' %s | grep \'^%s\' | awk \'{print $8}\' | awk -F\"?\" \'{print $1}\' | awk \'{access[$1]++} END {for (A in access){print access[A], A}}\' | sort -nr | head ''' % (startime, endtime, self.logfile, self.domain)
self.username = 'root'
self.port = 22
self.private_key = paramiko.RSAKey.from_private_key_file(self.id_rsa) def mostrequests(self):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=self.host, port=self.port, username=self.username, pkey=self.private_key)
stdin, stdout, stderr = ssh.exec_command(self.command)
ret, err = stdout.read(), stderr.read()
result = ret if ret else err
ssh.close()
return result.decode() def getconf(self):
config = configparser.ConfigParser()
config.read('log.conf', encoding='utf-8')
self.logfile = config.get('log', 'log_file') + ' ' + config.get('log', 'log_file') + '-' + datetime.datetime.now().strftime('%Y%m%d')
self.id_rsa = config.get('id_rsa', 'id_rsa') if __name__ == '__main__': h_dict = { 'passport.51.com':'10.80.2.173', 'www.51.com':'10.80.2.174', 'gameapi.51.com':'10.80.2.138', 'game.51.com':'10.80.2.139', 'home.51.com':'10.80.2.170'}
domain = sys.argv[1]
host = h_dict[domain]
startime, endtime = sys.argv[2:]
log = Command(host, domain, startime, endtime) ret = log.mostrequests()
print ret
使用例子:
# python log.py game.51.com 2016:09:01 2016:10:1158702 /rolelevel/api
36558 /act/cps_api/ns
36226 /act/cps_api/kfyg
28344 /webgame/index/tx/s2400
28200 /newserver/index/dtx
26082 /webgameleft/button/
22602 /webgameleft/updlevel
13769 /box/heartbeat/h
8629 /website/ajaxload/
5478 /dss/stat51/
nginx访问日志获取访问前10的url的更多相关文章
- 使用CDN后配置nginx自定义日志获取访问用户的真实IP
问题描述: 新上线了一个项目,架构如下(简单画的理解就好): 问题是:负载前面加上CDN后负载这里无法获取客户的真实访问IP,只能过去到CDN的IP地址: 问题解决: 修改nginx日 ...
- 使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页
使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页 方法1:linux下使用awk命令 # cat access1.log | awk '{print $1" &q ...
- python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)【转】
前言:python统计apache.nginx访问日志IP访问次数并且排序(显示前20条).其实用awk+sort等命令可以实现,用awk数组也可以实现,这里只是用python尝试下. apach ...
- Linux小技巧之:两种方法统计访问web网站的前10个IP
获得访问前10位的IP地址: 10.46.170.7 218.202.70.147 77.72.83.87 5.39.217.107 185.197.74.234 185.197.74.231 第二种 ...
- Linux(7)- Nginx.conf主配置文件、Nginx虚拟主机/访问日志/限制访问IP/错误页面优化、Nginx反向代理、Nginx负载均衡
一.Nginx.conf主配置文件 Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的.一般,每个区块以一对大括号{}来表示开始与结束. 核心模 ...
- yii2获取登录前的页面url地址--电脑和微信浏览器上的实现以及yii2相关源码的学习
对于一个有登录限制(权限限制)的网站,用户输入身份验证信息以后,验证成功后跳转到登录前的页面是一项很人性化的功能.那么获取登录前的页面地址就很关键,今天在做一个yii2项目的登录调试时发现了一些很有意 ...
- 查询nginx访问日志中访问次数最多的前10个IP地址
cat log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | awk '{print $0}' | head -n 10
- Tomcat配置自定义访问日志 --- 获取请求头部信息
使用tomcat,搭建完个人网站后,默认记录来访游客的信息是十分有限的,主要有ip和路径以及方法等. 有时候为了获取更多来访信息,比如请求的头部信息,这个时候就需要我们手动配置log了. 开始 进入T ...
- Linux分析日志获取最多访问的前10个IP
原文地址:http://xuqq999.blog.51cto.com/3357083/774714 apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问 ...
随机推荐
- Android内容观察者
内容观察者是做什么的? 内容观察者主要用来观察数据库是否被操作了. 以查询数据库为例: 首先注册一个内容观察者(App1): //false 观察的Uri必须是一个确切的Uri 如果是true,只需要 ...
- C++的异常处理之一:throw是个一无是处的东西
看这篇文章学习C++异常处理的基础知识.看完后,还不过瘾,为什么大家在C++代码中都不用Exception?为什么C++11会引入一些变化? 为什么C++ exception handling需要un ...
- android-之测试框架的使用AndroidTestCase
Android Manifest.xml中所需要添加的配置 <instrumentation android:name="android.test.InstrumentationTes ...
- android 点亮屏幕与锁定屏幕
PowerManager pm=(PowerManager) getSystemService(Context.POWER_SERVICE); //获取电源管理器对象 PowerManager.Wak ...
- 如何在移动端app中应用字体图标icon fonts (转)
原文: http://www.cnblogs.com/willian/p/4166757.html?utm_source=tuicool&utm_medium=referral How to ...
- 网络流 poj 2135
n个点 m条边 给m条边 求1->n n->1 最小花费,每条边最多走一次 两个最短路显然不行 会影响另外一条 #include<stdio.h> #include<al ...
- 面试题:Integer和int的区别?在什么时候用Integer和什么时候用int
/* * (1) int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类. * (2)int的默认值为0, 而Integer的默 ...
- an important difference between while and foreach on Perl
while (<STDIN>) { } # will read from standard input one line at a time foreach (<STDIN>) ...
- Leetcode First Bad Version
You are a product manager and currently leading a team to develop a new product. Unfortunately, the ...
- Restful api介绍
网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致AP ...