用户操作日志记录统计有什么比较好的方案么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
autulin
V2EX    Java

用户操作日志记录统计有什么比较好的方案么?

  •  
  •   autulin 2017-10-12 15:46:34 +08:00 8445 次点击
    这是一个创建于 2922 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主要问题就是记录方案和存储方案

    目前想的是用 AOP 给所有 Controller 一个切面,然后将日志写入到 MySQL 中,这样做比较方便统计。但是具体起来发现一个切面很难适应所有 Controller,因为每个 Controller 的参数可能不一样,但是每一个 Controller 都写一个方法又似乎太麻烦。另外 MySQL 到后期可能抗不住这么多日志,于是想另外一种存储就是把数据稍微格式化一下扔到 ElasticSearch 里面去,不过这样统计起来可能要复杂一些

    所以想请问现在记录和存储比较成熟的方案有哪些?
    10 条回复    2017-11-02 17:41:28 +08:00
    yidinghe
        1
    yidinghe  
       2017-10-12 15:53:52 +08:00
    ELK 是比较成熟的方案
    omygod
        2
    omygod  
       2017-10-12 16:50:02 +08:00
    controller 统一接收 post 请求,参数全部写在 requestbody 中,aop 拦截请求参数写入文件或消息队列,看情况写入 hadoop 或其他存储中落地保存,不知道这种方式行不行?
    xrlin
        3
    xrlin  
       2017-10-12 16:53:44 +08:00
    我也想知道有没有好的记录日志的方法, 如果还需要给用户查看操作记录, 用中间件之类的方式也感觉不太好使, 很难做到通用.
    autulin
        4
    autulin  
    OP
       2017-10-13 00:25:09 +08:00
    @yidinghe 之前也看了一下 ELK 的架构,初步感觉这个用于记录系统运行的日志还行,但是用来记录用户行为(访问接口、参数等)这种的结构化数据好像没有看到比较好的方案,比如可以在之后来统计某个用户访问某个接口多少次、访问时的参数是什么
    autulin
        5
    autulin  
    OP
       2017-10-13 00:28:16 +08:00
    @omygod 接口是 Restful 的已经定了,就不好改了。当然也可以从 request 里面稍微自己解析一下之后按照您的方法来存储,但是存到 Hadoop 之后再解析的话,感觉这个工程量还是有点大
    blueorange
        6
    blueorange  
       2017-10-13 10:48:07 +08:00
    我们之前同事是每个业务里面写一次,贼麻烦。
    autulin
        7
    autulin  
    OP
       2017-10-13 10:53:19 +08:00
    @blueorange #8 是啊,我现在暂时的方法是这样。另外问一下你们是存储到哪的?
    upupxjg
        8
    upupxjg  
       2017-10-13 18:04:00 +08:00
    ELK 本身是没有问题的,而问题在于收集的元数据格式不统一,这是当时定接口时候的坑,感觉也没啥好办法,必然要对各个 controller 的日志进行转换,不过可以想办法从应用中拿出来,统一到一个 ETL 过程中,尽量做逻辑复用和拼接吧
    autulin
        9
    autulin  
    OP
       2017-10-14 11:22:43 +08:00 via Android
    @upupxjg 还真是难有一招必杀的方法啊
    aboutyang
        10
    aboutyang  
       2017-11-02 17:41:28 +08:00
    我的处理方式:
    1. 通过这个 Filter 把用户标识、请求 IP 等信息 放在线程变量中;
    2. 新建一个 LogOperator 的 annotation, 里面可以增加一些字段 表示办理的业务;
    3. 使用 aop 拦截这个 annotation, 构造 OperaotrEvent 对象; OperatorEvent 中可以记录用户标识、请求 IP 等信息,同时把拦截方法的入参、返回 和 异常 都转换成 JSON 存储在 OperatorEvent 当中;
    4. 异步发布这个事件,通过事件监听处理数据;
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5467 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 01:26 PVG 09:26 LAX 18:26 JFK 21:26
    Do have faith in what you're doing.
    ubao 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