热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

每天10G的nginx日志,需要怎么分析?

RT,要分析出每IP的访问数量和每IP的访问内容。
RT,要分析出每IP的访问数量和每IP的访问内容。

14 个解决方案

#1


贴一段日志出来,我测试一下代码。

#2


61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101091101&type=observe&date=201312042349&appid=7c1429&key=BUyFU0GyXhzGNDNVpMQaortggDQ= HTTP/1.1" 200 76 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.1; MI 2S MIUI/JLB23.0)" -
61.4.184.91 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101280601&type=observe&date=201301012336&appid=7c1429&key=oMqeris3J3IZ3CHkbOKd06X5NYg= HTTP/1.1" 200 77 "-" "Dalvik/1.4.0 (Linux; U; Android 4.0; US900G Build/GRK39F)" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101090101&type=observe&date=201312042349&appid=f63d32&key=bheUQV3tGn2xWQ9irl%2B37J2Vkjs%3D HTTP/1.1" 200 303 "-" "SAMSUNG-Android" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101100805&type=observe&date=201312042348&appid=7c1429&key=qggG1p4SesvT0DU3dZDPLTaVwCs= HTTP/1.1" 200 76 "-" "Dalvik/1.6.0 (Linux; U; Android 4.0.4; GT-S7562 Build/IMM76I)" -
61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101181502&type=observe&date=201212042358&appid=7c1429&key=d6MVaHYcjds8O69Fd48hw4JNQxc= HTTP/1.1" 200 76 "-" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; Philips T3500 Build/JDQ39)" -
61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101120201&type=forecast3h&date=201312042349&appid=f63d32&key=93MlJYwsegk7wcPTH77nL%2Fe9uRg%3D HTTP/1.1" 200 4470 "-" "SAMSUNG-Android" -
61.4.184.91 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101070801&type=forecast&date=201312042349&appid=f63d32&key=UG569rKKIvtoXUhUH2KKAff7WtU%3D HTTP/1.1" 200 1165 "-" "SAMSUNG-Android" -
61.4.184.90 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101110101&type=forecast&date=201312042349&appid=f63d32&key=Lu7X6OrSpspE26sp4ReHcKeT2Uo%3D HTTP/1.1" 200 1158 "-" "SAMSUNG-Android" -
61.4.184.90 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101210101&type=observe&date=200001040934&appid=7c1429&key=N6Rsf8HWIQquODZD6UV1nqDxAq8= HTTP/1.1" 200 77 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.1; N70DC-S Build/JRO03H)" -
61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101050101&type=forecast3h&date=201312042349&appid=f63d32&key=PXAV3jDeBp%2Bz5SdaAmtpeKQl1xk%3D HTTP/1.1" 200 4614 "-" "SAMSUNG-Android" -
61.4.184.90 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101150901&type=forecast&date=201312042349&appid=f63d32&key=1A%2B%2B%2FzK3Y81MsJtk%2FQz1FWewpV8%3D HTTP/1.1" 200 1178 "-" "SAMSUNG-Android" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101110807&type=forecast3h&date=201312042349&appid=f63d32&key=yLwpn77%2BMQUxG88U%2Bw9DnGzHoXU%3D HTTP/1.1" 200 4487 "-" "SAMSUNG-Android" -
61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101280601&type=observe&date=201312042349&appid=f63d32&key=oL0wNOM41qqbS2LZePZRMBqwELs%3D HTTP/1.1" 200 298 "-" "SAMSUNG-Android" -
61.4.184.91 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101110101&type=observe&date=201312042349&appid=f63d32&key=KIGS0Mrd%2BtxGAw2QxffBSPLudgM%3D HTTP/1.1" 200 297 "-" "SAMSUNG-Android" -
61.4.184.90 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101050901&type=observe&date=201311032350&appid=7c1429&key=qsp5O1PiXAiL7dbOgzr6czkbl1Q= HTTP/1.1" 200 77 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.1; MI 2A MIUI/JLB20.0)" 10.172.19.85
61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101181001&type=forecast&date=201312042349&appid=f63d32&key=rn59yR4fNs7%2FgmSydlOkzZMRXH4%3D HTTP/1.1" 200 1165 "-" "SAMSUNG-Android" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101250101&type=temp&date=201312042349&appid=f63d32&key=lruvnBBc6YicdB2I4rVbWzxq9ks%3D HTTP/1.1" 200 26 "-" "SAMSUNG-Android" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101210101&type=observe&date=201312042349&appid=f63d32&key=Q52d%2FOp%2F6sKinR9A0PqnMrH7ZQ8%3D HTTP/1.1" 200 298 "-" "SAMSUNG-Android" 10.128.165.209
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101191201&type=forecast&date=201312042349&appid=f63d32&key=D%2FvpXPLqv8w9d4B3Ai0T6eTNGec%3D HTTP/1.1" 200 1164 "-" "SAMSUNG-Android" -
61.4.184.91 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101020100&type=forecast&date=201312042349&appid=f63d32&key=LiZ1%2FjwdXPFbcw5LQ4%2Bloycoynk%3D HTTP/1.1" 200 1166 "-" "SAMSUNG-Android" -
61.4.184.91 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101240601&type=observe&date=201212042349&appid=7c1429&key=lfXLCmrdscNVlGn88KLFv6M/fSw= HTTP/1.1" 200 76 "-" "Dalvik/1.6.0 (Linux; U; Android 4.0.4; HYUNDAI T20 Build/IMM76D)" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101260201&type=observe&date=201312042349&appid=f63d32&key=ggmOFVKXOY0loNHLXT4g%2BRyeHUY%3D HTTP/1.1" 200 298 "-" "SAMSUNG-Android" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101131001&type=observe&date=201301091725&appid=7c1429&key=sepcW9rh6bW6G6k3dYkAMdRi2Rc= HTTP/1.1" 200 77 "-" "Dalvik/1.6.0 (Linux; U; Android 4.0.4; ZTE U817 Build/IMM76D)" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101280301&type=observe&date=201312042349&appid=5b9529&key=5RpBSBt3UoRvEFDOhEtNTxY63Ag%3D HTTP/1.1" 200 48 "-" "Jakarta Commons-HttpClient/3.1-rc1" -
61.4.184.93 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101210901&type=observe&date=201312042349&appid=f63d32&key=0SN0sdlHUCOUvrk3zjZ5KqueMPA%3D HTTP/1.1" 200 298 "-" "SAMSUNG-Android" -
61.4.184.91 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101270507&type=observe&date=201312042348&appid=7c1429&key=7rb44bA5Ou581EHpr+yu43v1sMw= HTTP/1.1" 200 77 "-" "Dalvik/1.4.0 (Linux; U; Android 2.3.4; SHW-M110S Build/GINGERBREAD)" -
61.4.184.90 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101280301&type=forecast3d&date=201312042349&appid=5b9529&key=iKV%2BWpVEX5QXMIJh8%2FBytd3iVfQ%3D HTTP/1.1" 200 562 "-" "Jakarta Commons-HttpClient/3.1-rc1" -
61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101040100&type=forecast3h&date=201312042350&appid=f63d32&key=tMADH88lt5KmNbeGaJNbRQNTWx8%3D HTTP/1.1" 200 4619 "-" "SAMSUNG-Android" -
61.4.184.90 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101110101&type=all&date=201312041137&appid=f63d32&key=hVTLiUIZERsEtnmw5i4HD7Er5K4%3D HTTP/1.0" 200 5899 "-" "-" -
61.4.184.91 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101090301&type=all&date=201312041146&appid=f63d32&key=bO30zDwAE5bLc%2BcEVt80q%2BfkuNw%3D HTTP/1.0" 200 6507 "-" "-" -


引用 1 楼 ljc007 的回复:
贴一段日志出来,我测试一下代码。

#3


[ljc007]$  awk '{a[$1]++}END{for(i in a)print i,a[i]}' urfile
61.4.184.93 10
61.4.184.90 6
61.4.184.91 7
61.4.184.92 7
你测试一下这个代码需要执行多长时间

#4


引用 3 楼 ljc007 的回复:
[ljc007]$  awk '{a[$1]++}END{for(i in a)print i,a[i]}' urfile
61.4.184.93 10
61.4.184.90 6
61.4.184.91 7
61.4.184.92 7
你测试一下这个代码需要执行多长时间


你知道的太多了!

#5


引用 3 楼 ljc007 的回复:
[ljc007]$  awk '{a[$1]++}END{for(i in a)print i,a[i]}' urfile
61.4.184.93 10
61.4.184.90 6
61.4.184.91 7
61.4.184.92 7
你测试一下这个代码需要执行多长时间

1。4G数据处理10分钟无果

#6


先放进hadoop,然后写mapper和reducer。。

#7


数量和内容分开处理比较方便吧?
统计数量:awk '{print $1}' log.txt | sort | uniq -c
内容:跟据以上结果再grep

#8


引用 6 楼 qq120848369 的回复:
先放进hadoop,然后写mapper和reducer。。


这个要用hadoop么?配起来会不会比较麻烦?不用实时分析,只要一天分析一次就OK了

#9


用C++写个程序分析一下。读一遍文件就好了。

#10


还是写入数据库,建索引,用c++或其它分析快。

#11


数据库建索引挺慢的。

#12


10G 日志,要分析的话只要散列到小文件就好。

Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import simple
>>> simple.preprocess('/tmp/log')
>>> simple.query('61.4.184.92')
INFO:root:61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101091101&type=observe&date=201312042349&appid=7c1429&key=BUyFU0GyXhzGNDNVpMQaortggDQ= HTTP/1.1" 200 76 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.1; MI 2S MIUI/JLB23.0)" -

INFO:root:61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101181502&type=observe&date=201212042358&appid=7c1429&key=d6MVaHYcjds8O69Fd48hw4JNQxc= HTTP/1.1" 200 76 "-" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; Philips T3500 Build/JDQ39)" -

INFO:root:61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101120201&type=forecast3h&date=201312042349&appid=f63d32&key=93MlJYwsegk7wcPTH77nL%2Fe9uRg%3D HTTP/1.1" 200 4470 "-" "SAMSUNG-Android" -

INFO:root:61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101050101&type=forecast3h&date=201312042349&appid=f63d32&key=PXAV3jDeBp%2Bz5SdaAmtpeKQl1xk%3D HTTP/1.1" 200 4614 "-" "SAMSUNG-Android" -

INFO:root:61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101280601&type=observe&date=201312042349&appid=f63d32&key=oL0wNOM41qqbS2LZePZRMBqwELs%3D HTTP/1.1" 200 298 "-" "SAMSUNG-Android" -

INFO:root:61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101181001&type=forecast&date=201312042349&appid=f63d32&key=rn59yR4fNs7%2FgmSydlOkzZMRXH4%3D HTTP/1.1" 200 1165 "-" "SAMSUNG-Android" -

INFO:root:The requested ip(61.4.184.92) has 6 record(s)
>>> simple.query('192.168.1.100')
ERROR:root:There is no such ip in history: 192.168.1.100




#!/usr/bin/env python2.7
#
# simple.py
#

import logging

logging.basicConfig(level=logging.DEBUG)

_hash_file_pattern = '/tmp/log.hash.%d'
_hash_file_map = {}

def _ip2int(ip):
    import struct
    import socket
    return struct.unpack('!I', socket.inet_aton(ip))[0]

def _iphash(ip):
    return _ip2int(ip) % 1021

def preprocess(log):
    for line in open(log):
        ip = line[:line.find(' ')]
        iphash = _iphash(ip)
        out_file_name = _hash_file_pattern % iphash
        of = _hash_file_map.get(iphash, open(out_file_name, 'a+'))
        of.seek(0, 2)
        of.write(line)
        _hash_file_map[out_file_name] = of

def query(ip):
    iphash = _iphash(ip)
    out_file_name = _hash_file_pattern % iphash
    try:
        of = _hash_file_map.get(iphash, open(out_file_name, 'r'))
        of.seek(0)
        count = 0
        for line in of:
            if line[:line.find(' ')] == ip:
                count += 1
                logging.info(line)

        logging.info('The requested ip(%s) has %d record(s)' % (ip, count))
    except IOError:
        logging.error('There is no such ip in history: ' + ip)


#13


29行错了,
_hash_file_map[out_file_name] = of

改成
_hash_file_map[iphash] = of

#14


10G也不算大,如果用脚本的话很容易也能分析出来可能会有点慢,但是有利于后期维护,如果非要要求运行速度,可能需要用C语言,楼主的需求是什么呢?代码的原理都差不多,就是扫描一遍文件,按照IP统计。

推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
author-avatar
手机用户2502938015
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有