如何在生产环境优雅的 debug? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dandankele
V2EX    程序员

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

  •  
  •   dandankele 2020-06-22 15:58:43 +08:00 6581 次点击
    这是一个创建于 1944 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

    线上还是做日志监控处理,不直接断点最安全
    darknoll
        20
    darknoll  
       2020-06-22 20:07:41 +08:00 via Android
    生产环境 de 啥 bug
    fhsan
        21
    fhsan  
       2020-06-22 20:17:46 +08:00
    elk 吧,别搞了
    oneoy
        22
    oneoy  
       2020-06-22 22:30:10 +08:00 via Android
    idea 支持的 谷歌下就可以 我目前在用
    sadfQED2
        23
    sadfQED2  
       2020-06-23 09:18:20 +08:00 via Android
    哈哈哈,我也经常在生产环境 debug 啊,在我个人博客项目里面
    ifconfig
        24
    ifconfig  
       2020-06-23 09:21:50 +08:00
    1 、该问题只在生产环境中出现,若要复现只能在线上做调试:
    你说的应该就是 Sentry,可以在 Sentry 配置各种环境, 报错会提示相关环境、第几行代码

    2 、在线上修改代码就不止修改一份代码了
    这些不是都可以通过 Git 分支加 webhook 解决么
    avenger
        25
    avenger  
       2020-06-23 10:11:03 +08:00
    多打日志吧,再加一个预发布 staging 环境,日志记录推荐一下 papertrailapp
    带尾巴链接 URL: https://papertrailapp.com/?thank=48e610
    dandankele
        26
    dandankele  
    OP
       2020-06-23 10:15:23 +08:00
    @Vegetable 好吧,就是觉得一些地方做日志,平时基本没啥问题,但日志大量被产生,收集的贼多,感觉像是在浪费磁盘。。
    dandankele
        27
    dandankele  
    OP
       2020-06-23 10:20:28 +08:00
    @useben 这些都有,但日志没做满,一些问题出现在没做日志的地方,但不出问题的话感觉这些日志太占空间了。。
    dandankele
        28
    dandankele  
    OP
       2020-06-23 10:21:21 +08:00
    @ben1024 看起来不错,回头我研究一下
    weixiangzhe
        29
    weixiangzhe  
       2020-06-23 17:59:14 +08:00
    本地开个 http 代理,whistle 挺好用的,代理到本地也可以
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1256 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 17:30 PVG 01:30 LAX 10:30 JFK 13:30
    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