不讨论针对用户行为的埋点日志,仅讨论业务日志。
待过两家公司,完全不同的日志策略:前者是内容平台(也是创业公司),基本上能不打日志就不打,只打一些异常日志;后者是交易平台,基本上所有用户请求都要 trace,每个请求参数,返回值的关键信息,除了集合类型的数据,其他数据都是尽量落日志了。
我总结了下,前者因为是内容平台,内容多寡、精不精确,对用户其实没有承诺(当然用户会用脚投票),真有问题就让用户重新操作下就可以了;而后者因为涉及到交易,需要对交易链条上的每个环节负责到底,无论是因为用户操作不当还是系统问题都需要给出合理的解释。前者没有一个客服,后者一大帮客服。前者平台跟用户是互利的(流量换内容),后者用户是平台爸爸。
思考:用户对产品的认知有差异,产品越简单,这种差异越小,就越不需要客服,也就越不需要日志。减少日志的办法可能还是简化产品逻辑,使之符合更多人的预期。
正常业务流程 info,业务异常 warn (可能是参数不对或者不能满足一些业务条件之类的),这两种都属于正常情况,ret=0,表示结果是可用的,前端可以直接展示给用户。业务异常不能打 error,否则会有大量报警。
只有系统异常(如超时)才打 error,ret 不等于 0,表示结果不可用,前端可以根据 errorcode 判断是要重试还是怎么处理。这种异常会报警,可以标识服务的状态。
errorcode 也是一个值得讨论的话题,不过这贴先不讨论了。
不知道 XDM 在项目中是如何实践的,欢迎分享讨论
![]() | 1 chendy 2021-08-13 17:51:24 +08:00 ![]() 个人倾向是多打日志,多打日志最多导致需要更多的磁盘空间保存日志,但是用户遇到问题咨询甚至投诉的时候找不到日志才是真的要命 |
![]() | 2 raaaaaar 2021-08-13 18:58:48 +08:00 磁盘成本又不高 |
![]() | 4 guodong110 2021-08-13 21:05:53 +08:00 打出入口日志,中间业务逻辑看需求,有必要就打 |
![]() | 5 wangbenjun5 2021-08-13 21:34:48 +08:00 讲个实话,有些菜鸡喜欢一行一个日志,好像日志没有开销一样,个人感觉业务日志开发调试的时候可以打点,基本上稳定之后能删就删,真正有自信的人不用打日志,要打也是打关键地方。 |
6 yitingbai 2021-08-13 22:02:04 +08:00 我跟你说微信 app 怎么打的吧, 我反编译看过, 他们在编译的时候, 给每个函数头部和尾部都插入了代码, 方便知道函数的调用链, 排查问题更方便. 日志千万不要省, 除非调用非常频繁的函数, 日志可以省点, 其他函数, 日志能多久多, 能详细就详细 |
![]() | 7 pengtdyd 2021-08-13 22:41:14 +08:00 日志太多,给运维带来困难,上线之后不应该出现 info 日志才对 |
![]() | 9 pengtdyd 2021-08-13 23:10:11 +08:00 @GM 如果日志过多,如何从海量日志里面定位问题,日志如何存储,如何维护,保存多久等等一系列的问题就出现了,我觉得这些本身应该可以通过全链路压测解决 |
11 GM 2021-08-14 00:18:23 +08:00 @pengtdyd 定位问题有办法的,每个请求进来先分配一个 requestId,之后所有这次请求相关的日志都带上这个 requestId,排查问题简直不要太方便。我公司现在就是保存全链路详细日志,日志保留 30 天,也就大约 100G 左右,一个月成本几十块钱,非常划算。 |
![]() | 12 witcherhope 2021-08-14 00:22:33 +08:00 via iPhone 日志太多和太少本质是同一个问题 |
![]() | 13 sujin190 2021-08-14 00:23:53 +08:00 ![]() 我觉得楼主似乎混淆了,我们一般说的日志都是运行日志,这个只是监测、异常报告用的,所以一般打核心点和异常栈就行了,后面交易这个应该算业务日志,本身就是支付系统业务流程的一部分,认真说把运行日志和业务日志打在一起时极其傻叉的行为,本来两者的用途就不一样,其它的还有链路追踪用的,调试分析用的等等,每一种各有不同,也不需要同时启用所有日志,打日志的侧重点也不一样,保存周期可能也不同,本身就不应该混在一起打 |
![]() | 14 IvanLi127 2021-08-14 00:25:53 +08:00 via Android 我觉得,尽量在性能允许的范围内多打些日志。日志按级别分类存,然后低级别的日志存的时间短些。 |
![]() | 15 IvanLi127 2021-08-14 00:28:01 +08:00 via Android 另外,楼主说的交易平台里的日志,应该是类似操作留痕之类的东西,和另一个项目的日志本质上不是同一个东西嘞 |
![]() | 16 nuk 2021-08-14 00:49:11 +08:00 当系统被入侵后或者有用户利用业务漏洞,日志的宝贵就体现出来了 |
![]() | 17 Sparkli 2021-08-14 00:54:22 +08:00 我有个想法啊,是不是日志的三个级别 Info 、Warm 、Error 可以通过冷温热进行分级存储呢?类似于 ES 策略,这样兼具存储成本和排查效率二者优点 |
![]() | 18 xuanbg 2021-08-14 06:18:42 +08:00 日志不是越多越好,而是越精准越好。精准的定义就是不需要的 1 条都没有,需要的 1 条都不少。 |
19 chenshun00 2021-08-14 08:37:56 +08:00 @GM 30 天 100G 么,要是日志量翻个 20 倍,30 倍呢。 |
![]() | 21 sparkssssssss 2021-08-14 13:30:38 +08:00 如果是性能日志或者程序的运行日志,当然是看大爷您心情了,只要你别出问题或者出问题了能快速定位. 但是如果是业务日志,还是要根据业务 /产品需求吧,别到时候客户要查自己啥时候登陆过,啥时候做个 xx 操作,你这边一脸糟比 |
![]() | 22 kongkongyzt 2021-08-14 13:39:55 +08:00 两种打日志的策略我都经历过, 我个人是觉得能多打日志的话就多打吧, 不然到时候追踪问题的时候就很麻烦了, 尤其是对方是惹不起的大客户的时候 |
23 GM 2021-08-14 15:14:18 +08:00 ![]() @chenshun00 算你翻 100 倍,又如何? 1000 倍我更开心,说明有大量业务,花钱买就是了。 |
![]() | 24 zu1y 2021-08-15 00:43:41 +08:00 我们这网关一台服务器每小时打 500G 左右日志,也只打了出入参。。 挂了 4T 的硬盘,搞了个 crontab 每小时 zip 后转到 nfs 上去。。 虽说硬盘这玩意确实不值钱,但每天这上百 T 的日志也不是个事,量太大也不好搞 ELK 里去查。很是疼 但应该是监管部门对这玩意有要求,需要至少保存 6 个月? |
![]() | 25 PolarBears 2021-08-15 03:00:09 +08:00 @zu1y 虽然监管部门有要求要 6 个月,但没要求日志要详细到什么程度 |
26 darknoll 2021-08-15 19:25:32 +08:00 我就不想打太多日志了,客户出问题我直接连对方调试呗 |