每天要处理亿级的日志文件,该怎么做? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whnzy
V2EX    Hadoop

每天要处理亿级的日志文件,该怎么做?

  •  1
     
  •   whnzy 2015-06-30 18:08:08 +08:00 11183 次点击
    这是一个创建于 3761 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在要做到每天处理亿级的日志文件,公司根本没有现成的系统.日志是由nginx打下的请求日志,要在日志中筛选需要的信息,有些还是加密的请求,需要解密.
    我当时用python 搭建起一套系统,一天可以处理完,但是随着数据的增加,我为了提高查询数据库的速度,将一些内容放到了内存中,但是随着数据的增加,内存已经爆掉.
    mongo,多维数组什么的都已经尝试过了,已经无能为力了,我刚刚毕业,没有那么多的经验,手中只有两台服务器可用,而且内存一个4G,一个1G,cpu最多的一个也才是双核的.
    请教该怎么搞?

    73 条回复    2015-07-01 21:33:34 +08:00
    xujif
        1
    xujif  
       2015-06-30 18:10:30 +08:00
    内存问题,只能队列处理啊,一次处理一部分,如果处理不及,只能加机器或者cpu
    repus911
        2
    repus911  
       2015-06-30 18:10:34 +08:00
    这是服务器么 估计还没我的本本配置好
    whnzy
        3
    whnzy  
    OP
       2015-06-30 18:12:30 +08:00
    @xujif 我已经用了队列了,因为要进行数据挖掘,所以存储结构复杂.每次存库要查询mysql,导致速度越来越慢,所以我将信息存到了内存中.现在内存不够用了哦
    whnzy
        4
    whnzy  
    OP
       2015-06-30 18:13:02 +08:00
    @repus911 QAQ,公司穷,AWS的,我的本本也比这个好
    nullcc
        5
    nullcc  
       2015-06-30 18:15:48 +08:00
    elasticsearch+logstash+kibana
    zhicheng
        6
    zhicheng  
       2015-06-30 18:17:35 +08:00
    都用 AWS 了,还有什么解决不了的。开 spot instance 超大内存多核的机器,一个小时跑满不就好了。这个量级上,不是应该用人去解决的。
    omi4399
        7
    omi4399  
       2015-06-30 18:18:32 +08:00
    买买买买买,花钱就能解决的问题
    whnzy
        8
    whnzy  
    OP
       2015-06-30 18:21:49 +08:00
    @zhicheng 我擦,我得给老大提提了
    whnzy
        9
    whnzy  
    OP
       2015-06-30 18:27:30 +08:00
    烦烦烦死
    julypanda
        10
    julypanda  
       2015-06-30 18:42:29 +08:00
    splunk
    xdeng
        11
    xdeng  
       2015-06-30 18:55:19 +08:00
    golang
    mhycy
        12
    mhycy  
       2015-06-30 19:02:04 +08:00
    @whnzy 请问方便给份样本测试下么?企鹅已申请。。
    AntiGameZ
        13
    AntiGameZ  
       2015-06-30 19:02:09 +08:00
    @julypanda 估计LZ是用不起 Splunk的
    jason52
        14
    jason52  
       2015-06-30 19:02:12 +08:00 via Android
    莫非是渣浪~知乎有个开发2g怎么玩的问题
    em70
        15
    em70  
       2015-06-30 19:09:09 +08:00 via Android
    awk 专注处理日志文件三十年
    20150517
        16
    20150517  
       2015-06-30 19:10:00 +08:00 via Android
    弄个hive不就好了?
    whnzy
        17
    whnzy  
    OP
       2015-06-30 19:16:47 +08:00
    @20150517 可是没有 集群啊
    whnzy
        18
    whnzy  
    OP
       2015-06-30 19:17:09 +08:00
    @xdeng 这.... 没有人会用吧
    whnzy
        19
    whnzy  
    OP
       2015-06-30 19:18:31 +08:00
    @em70 = -= awk 有些还是处理不了的
    20150517
        20
    20150517  
       2015-06-30 19:19:54 +08:00 via Android
    @whnzy 一台也行,多台也行,不用一定好多集群
    kaneg
        21
    kaneg  
       2015-06-30 19:33:13 +08:00 via iPhone
    想要马儿跑得快,还要马儿不吃草。玩QQ游戏的电脑配置也比你的要好吧
    Septembers
        22
    Septembers  
       2015-06-30 19:34:54 +08:00
    qsl0913
        23
    qsl0913  
       2015-06-30 19:39:30 +08:00
    日志的查询需求具体是,查明细?做统计?
    em70
        24
    em70  
       2015-06-30 19:42:09 +08:00 via Android
    @whnzy 只能用一种工具解决吗,awk可以帮你快速筛选记录,然后给Python后续处理啊,你用python去查找那不慢死,awk命令完全可以达到数据库的性能

    另外可以创建一个内存盘,把当前处理的日志拷贝到内存盘里让awk处理,那更加酸爽
    paulw54jrn
        25
    paulw54jrn  
       2015-06-30 20:17:24 +08:00
    丢Redshift吧..
    rssf
        26
    rssf  
       2015-06-30 20:33:55 +08:00
    这已经不是技术能解决的了,给老大提,这算毛的服务器啊。如果老板1毛钱都不想花在硬件上,趁早换地
    yghack
        27
    yghack  
       2015-06-30 20:36:05 +08:00
    ELK
    sunchen
        28
    sunchen  
       2015-06-30 20:44:45 +08:00
    aws的话试试redshift
    sunchen
        29
    sunchen  
       2015-06-30 20:45:33 +08:00
    @paulw54jrn 赞同,redshift谁用谁知道
    scys
        30
    scys  
       2015-06-30 20:54:42 +08:00
    服务器性能不足,请最少配置16G的内存给日志服务器。
    realpg
        31
    realpg  
    PRO
       2015-06-30 21:00:54 +08:00
    @jason52 你刚说完这个,又有一大堆渣浪的回帖卧槽离职时候忘了把自己的内存拔下来了……
    summic
        32
    summic  
       2015-06-30 21:20:55 +08:00
    分而治之
    ms2008
        33
    ms2008  
       2015-06-30 21:40:36 +08:00
    elk妥妥的
    msg7086
        34
    msg7086  
       2015-06-30 21:55:05 +08:00
    4G内存?不要搞笑了。我5年前家用的破电脑都有8G。敢不敢让你们领导买台旧电脑来处理?

    @realpg 内存才几个钱……比ssd还便宜吧……
    hitsmaxft
        35
    hitsmaxft  
       2015-06-30 22:12:28 +08:00
    额。。我跑工具脚本的虚拟机都都是 6g 内存, 你这玩意用4g的。。
    daoluan
        36
    daoluan  
       2015-06-30 23:09:56 +08:00
    这些日志用来做什么?
    sophymax
        37
    sophymax  
       2015-06-30 23:13:25 +08:00 via iPad
    明显要上集群啊
    xiawinter
        38
    xiawinter  
       2015-06-30 23:17:24 +08:00   2
    @nullcc 很多人用这个方案,但这个方案题主跑不起来,太慢了。 题主可以考虑 heka, 我们数据量比这还要高点,两台机器往 elasticsearch里扔, elasticsearch 需要 12G 内存, 未用 SSD, 不过能用 ssd 速度快很多。

    logstash 是 jruby 来做正则解析的,不知道为什么他们会用这么个方案,百思不得其解的慢。 heka 做法非常好, 如果不能及时处理数据,会缓存到 /var/cache/hekad/ 下面,这样不会造成机器卡死。 数据传输和处理有点延迟很正常,硬盘做大点, 准备 100G 应当就差不多。 几天不做都死不了。

    如果转运过程还需要去查询 mysql, 那么我认为设计方案可能可以优化一下,类似日志的数据分析不应该做即时分析的,可以先把数据格式化后,之后开始做计算。 否则可能让数据阻塞在原来的地方。

    请求加密是指传过来的数据是加密的,然后解密这部分数据? 感觉很多东西都混在一起,耦合有点高。
    chinabrowser
        39
    chinabrowser  
       2015-07-01 01:26:00 +08:00
    赶快GCE 这个同等配置可比AWS便宜
    9
        40
    9  
       2015-07-01 01:39:32 +08:00
    最近在做跟楼主一样的东西,ELK 是很适合的方案,不要把数据放数据库中去,那是自杀的做法。
    其中 logstash 可以换成 fluentd,不多说了,直接看这个 kibana 的 demo 吧,http://demo.elastic.co/packetbeat/
    darrenxyli
        41
    darrenxyli  
       2015-07-01 01:43:51 +08:00
    elasticsearch+logstash+kibana
    YORYOR
        42
    YORYOR  
       2015-07-01 08:49:32 +08:00
    这tm 比我们渣浪还惨啊 擦
    shiznet
        43
    shiznet  
       2015-07-01 09:05:17 +08:00
    @whnzy awk先做一次筛选 减少数据规模 然后在用其他工具处理呢
    whnzy
        44
    whnzy  
    OP
       2015-07-01 09:29:52 +08:00
    @qsl0913 做统计,听说过一个 solar的东西
    whnzy
        45
    whnzy  
    OP
       2015-07-01 09:33:05 +08:00
    @daoluan 挖掘日志中的用户信息的.
    whnzy
        46
    whnzy  
    OP
       2015-07-01 09:33:35 +08:00
    @paulw54jrn 这个在infoQ上看到过一次,研究下
    whnzy
        47
    whnzy  
    OP
       2015-07-01 09:36:02 +08:00
    真是谢谢大家了,感觉要重新设计下了,题主也是开发经验不足,架构的东西现在出现的问题,向前找原因,一开始就错了.
    c89758972
        48
    c89758972  
       2015-07-01 09:40:39 +08:00
    @realpg 麻蛋啊,我之前的公司就是.我倒是想过拿回自己的,可那行政balabala的,当时内存也便宜啊,4G99,就没在意.
    popok
        49
    popok  
       2015-07-01 09:43:13 +08:00
    处理啥啊,直接删。哈哈
    whnzy
        50
    whnzy  
    OP
       2015-07-01 09:46:21 +08:00
    @c89758972 你们都是自己的服务器啊
    whnzy
        51
    whnzy  
    OP
       2015-07-01 09:48:47 +08:00
    @popok 不要闹好不好呀,数据很重要哒
    c89758972
        52
    c89758972  
       2015-07-01 09:49:45 +08:00
    @whnzy 这倒不是,是自己有内存多,刚好公司又缺内存,申请又麻烦就拿过去用了.结果都是悲剧,没能拿回来.哎
    fxxkgw
        53
    fxxkgw  
       2015-07-01 10:23:42 +08:00
    ELK太占内存了 logstash匹配速度太慢 配置这么点的服务器根本承受不了
    loryyang
        54
    loryyang  
       2015-07-01 11:08:32 +08:00
    亿级别的话,简单的还是用批处理吧,kafka+hadoop
    实时流的技术难度太高了,而且稳定性是个很大的难题。
    数据先用kafka导到hdfs,然后每天运行mr任务,可以上面架一个hive,写写sql就行。hadoop的整套实践方案,还是相对简单一些
    不过一个应届生,要搞定这整一套环境,还是有点困难的。。
    loryyang
        55
    loryyang  
       2015-07-01 11:09:55 +08:00
    额,没看到你只有两台服务器,那忽略我吧。。。
    fengyqf
        56
    fengyqf  
       2015-07-01 11:19:16 +08:00
    亿级日志的规模,竟然用1G 4G的服务器
    lunaticus7
        57
    lunaticus7  
       2015-07-01 11:26:41 +08:00
    没折腾过nginx日志,不过对原始数据做好预处理,很多情况下可以极大的提高系统的性能,awk sed都可以用,一个比较通用的思路是,在进入流程中大运算量步骤之前,尽量筛掉无用的数据
    由于机器配置低,所以做好分治+流式的规划,同时可以看看负载是耗在那一块了,可以考虑多线程,把cpu尽量用起来
    Chip
        58
    Chip  
       2015-07-01 11:29:29 +08:00
    花钱能解决的问题,Splunk大法好。
    typcn
        59
    typcn  
       2015-07-01 11:56:30 +08:00
    直接 fopen 全部读一遍,然后 fseek 到文件尾部,流式读取这个日志,插入队列

    这个 CPU 基本 0% ,内存超不过 5MB

    数据库如果无需复杂功能的话可以简单实现一个,挂个 epoll ,异步拿数据,然后转成 binary 每隔几秒 append 一次磁盘,这个 CPU 不会超过 5%,内存超不过 100MB
    typcn
        60
    typcn  
       2015-07-01 12:02:02 +08:00
    看错了,,,是离线日志,直接 while(line = getline())
    JohnSmith
        61
    JohnSmith  
       2015-07-01 12:29:26 +08:00
    @xdeng +1 有许多现成的方案
    EF0718
        62
    EF0718  
       2015-07-01 12:32:20 +08:00
    elasticsearch+logstash+kibana
    smileawei
        63
    smileawei  
       2015-07-01 12:36:58 +08:00 via iPhone
    即使你现在勉强解决了,等下次性能瓶颈的时候怎么办,老板会觉得,上次都搞定了,这次也可以的。然后。。。
    minotaur
        64
    minotaur  
       2015-07-01 12:57:24 +08:00
    流处理,内存中只保留热门数据,冷门数据都持久化到磁盘。
    一毕业就做这个还挺有意思的。
    whnzy
        65
    whnzy  
    OP
       2015-07-01 15:38:05 +08:00
    不知道有没有人用过GoAccess,想请教下.
    9hills
        66
    9hills  
       2015-07-01 15:41:20 +08:00
    上面说elasticsearch的,lz那点内存还敢跑elasticsearch?我32G内存的机器都OOM。。
    9hills
        67
    9hills  
       2015-07-01 15:42:08 +08:00
    ES的文档里说了:A machine with 64 GB of RAM is the ideal sweet spot

    64G为佳。。
    Pacer
        68
    Pacer  
       2015-07-01 15:46:07 +08:00
    首先~~ 把机器内存和 CPU 升级一下吧~
    跟老板要 16GB 4核 吧
    Clarencep
        69
    Clarencep  
       2015-07-01 16:04:31 +08:00
    这么多log肯定有很多是冗余的,垃圾信息的,清理下,然后免费版的splunk就够用的了
    paw
        70
    paw  
       2015-07-01 18:58:23 +08:00
    kafka spark


    不要求实时的话 mapreduce去


    PS:不管咋样,跟BOSS说加机器去。。。。
    luw2007
        71
    luw2007  
       2015-07-01 19:47:15 +08:00
    看日志处理完干嘛。
    错误日志可以使用全文搜索引擎报错。
    hb1412
        72
    hb1412  
       2015-07-01 21:31:23 +08:00
    可以看看sumologic
    loading
        73
    loading  
       2015-07-01 21:33:34 +08:00 via Android   1
    花十万开发工具 vs 花一万上新机器
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5373 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 08:38 PVG 16:38 LAX 01:38 JFK 04:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86