如何在生产环境优雅的 debug?

2020-06-22 15:58:43 +08:00
 dandankele

我们日常生产环境反馈有问题的做法一般都是直接在线上 debug,比如直接在线上修改代码打日志等。。 因为我们使用的是 PHP,其优点在这里就可以凸显出,那就是可以随时修改代码随时看效果,所以我们都是在线上改代码打日志。。。但我觉得这样子不是正常的做法。。

不知道有没有什么样的系统性方案。。来应对这么些问题:

  1. 该问题只在生产环境中出现,若要复现只能在线上做调试,因此本地或测试环境无法复现和排查。
  2. 当我们应用从单机部署变成了集群部署,在线上修改代码就不止修改一份代码了。
  3. 我们无法有充分的预见性在代码中各个点埋好日志记录,因此只有等问题出现了,然后再去加日志埋点?
  4. 即使我们做足了日志收集,但日常 90%的时间以上都是没有问题的,日志照样输出并采集,积累的大量日志太占磁盘了,而出问题时,我们仅仅需要那一小部分的日志信息。

所以不知道大家都是怎么做的?难道是应用中日志埋点做满,但平常不输出和采集,只有出问题时,通过修改日志采集配置再进行日志采集?比较困惑

5964 次点击
所在节点    程序员
29 条回复
superrichman
2020-06-22 16:03:49 +08:00
生产环境 debug ?居然没有被运维打死?
evill
2020-06-22 16:04:27 +08:00
日志级别 + 日志调用链路 + requestID
yukinomiu
2020-06-22 16:07:25 +08:00
生成环境 debug 这个需求本身已经不优雅了.
Vegetable
2020-06-22 16:09:52 +08:00
只在生产环境出现的问题真的有这么多吗?标准操作就是日志拉满,非生产环境复现问题。

日志是定时切分压缩或清理的,叫 rotation,应用层系统层都可以实现,占不了多少地方。你分布式之后会涉及到日志收集。
你欠缺可能是一个 stage 环境
xhcnb
2020-06-22 16:10:55 +08:00
哈哈, 没有经历过生活的毒打
lff0305
2020-06-22 16:21:00 +08:00
把 PROD 的 request 镜像到你的调试机上
需要 IT 配合
vitoliu
2020-06-22 16:28:09 +08:00
核心功能打好 request 和 response,公司如果有流量回放的中间件可以用上,如果没有可以用 arthas 或者去哪儿的 bistoury
lower
2020-06-22 16:30:00 +08:00
果然 PHP 才是世界上最好的编程语言
asanelder
2020-06-22 16:34:50 +08:00
俺说下自己的看法

1. 首先这个问题只能在生产环境复现,那么,这种问题就应该是一种少有的情况(如果你的项目大部分问题都是在生产环境复现,你应该考虑是不是项目本身出什么问题了)。既然是一种少有的情况,就特殊对待即可,而看样子,楼主想使用一种通用的方案,俺觉得企图使用通用优雅的方案来解决少有的情况是不合适的。

2. 即然楼主可以在生产环境复现,那么将服务部署到一台生产环境的机器,让它不对接上流的流量,然后楼主不是能复现么,直接在这台机器上复现,debug 即可。

3. 当然,在生产环境 debug 时,要留意这个过程中产生的数据,是不是进入了生产环境。避免数据污染。

4. 最后说一句,以上仅仅是下下策,只有在其它环境实在搞不定的情况下,才使用,使用的时候要万分小心,考虑周到(主要是数据污染问题)!!!
opengps
2020-06-22 16:39:38 +08:00
业务规模小的时候都是生产直接调试,我就不像那些大公司的大佬们那样打击楼主了

我从零到一,从一到百万负载,确实是意识到了这个过程的重要性,小公司刚起步就那么规范的话,估计活不过几年,所以在线 debug 几乎属于必然,但是我建议楼主千万注意备份,我也经历过数据库误操作丢失一个备注列的情况,以至于客服部门不敢再使用我提供的备注列寸信息了
guanhui07
2020-06-22 16:54:17 +08:00
测试环境 复现是最好,生产环境日志
luxinfl
2020-06-22 17:29:32 +08:00
改生产环境代码 debug ?想都不敢想
useben
2020-06-22 18:14:04 +08:00
elk 日志系统+p 指标监控系统...
smallpython
2020-06-22 18:23:51 +08:00
gdb 是不是可以调试 php
kop1989
2020-06-22 18:25:48 +08:00
如果是一个未知原因的小概率出现的问题,也就是加日志了,然后通过日志去揣测问题本质,然后再在测试环境尝试复现。
hankai17
2020-06-22 19:21:28 +08:00
gdb -p 加一堆断点
JuSH
2020-06-22 19:24:52 +08:00
我们公司产品测试环节等同于无,客户遇到问题后,研发直接远程到客户服务器替换组件上生成日志分析原因。后面嫌临时替换文件太麻烦,直接做成产品功能。
zhuzhibin
2020-06-22 19:53:47 +08:00
Yii debug
ben1024
2020-06-22 19:54:15 +08:00
试试滴滴的请求录制
[didi/rdebug]( https://github.com/didi/rdebug)
或者引入哨兵机制

线上还是做日志监控处理,不直接断点最安全
darknoll
2020-06-22 20:07:41 +08:00
生产环境 de 啥 bug

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/683792

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX