V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
5261
V2EX  ›  程序员

大厂的同事们,你们是怎么定位线上故障的?

  •  1
     
  •   5261 · 13 天前 · 11433 次点击

    我先分享下我们小厂是怎么玩的

    所有服务节点都接了 pinponit ,然后结合 kibana 收集的线上日志+traceid

    分享几张今天新鲜出炉的 bug 图

    今天发现根据这个 pp 的日志就很快定位到有查全表的场!

    第 1 条附言  ·  11 天前
    这个帖子还是很牛的,每个人都分享一种模式

    这样每个都都有 N 种处理思想了
    125 条回复    2025-05-07 11:07:52 +08:00
    1  2  
    opengps
        1
    opengps  
       13 天前   ❤️ 1
    小厂未必用得上你的这么高级的工具。分析办法全靠经历事故来积累经验
    Pythoner666666
        2
    Pythoner666666  
       13 天前   ❤️ 1
    日志收集 + 监控,剩下的全靠个人经验了
    darksword21
        3
    darksword21  
       13 天前
    printf
    5261
        4
    5261  
    OP
       13 天前
    @darksword21 大佬啊
    ala2008
        5
    ala2008  
       13 天前   ❤️ 56
    小公司 tail -f xxx.log 啊
    littlesky87906
        6
    littlesky87906  
       13 天前
    sentry
    7gugu
        7
    7gugu  
       13 天前   ❤️ 1
    后端就是靠 TraceId 看链路+日志上报
    web 就是看 JS 堆栈+日志上报来分析
    MuSeCanYang
        8
    MuSeCanYang  
       13 天前   ❤️ 2
    23333 ,在全球五百强。 我们现在都没用上你这一套东西。
    Ljxtt
        9
    Ljxtt  
       13 天前
    5261
        10
    5261  
    OP
       13 天前
    @Ljxtt
    5261
        11
    5261  
    OP
       13 天前
    @littlesky87906 好,晚点我也去看下
    Ljxtt
        12
    Ljxtt  
       13 天前   ❤️ 1
    @Ljxtt 我去,怎么多了个空格,[线上故障应急处理:4 年多 on call 经验总结]( https://jt26wzz.com/posts/0007-online-firefighting-real-world-lessions-from-4-years-on-call/)
    ssiitotoo
        13
    ssiitotoo  
       13 天前
    skywalking
    jimmzhou
        14
    jimmzhou  
       13 天前   ❤️ 1
    var_dump();die; phper 就是任性
    tpopen
        15
    tpopen  
       13 天前
    tail -f xxxx | xargs grep xxx
    dddd1919
        16
    dddd1919  
       13 天前   ❤️ 1
    以前写 ruby ,都是直接生产 rails console 执行代码调试🤣主打一个胆大心细
    pkoukk
        17
    pkoukk  
       13 天前
    kibana + trace_id 搜就行了,没空搞这些花里胡哨的,开发自己用的工具不算 KPI ,能用就行,懒得搞
    msg7086
        18
    msg7086  
       13 天前   ❤️ 1
    我们都是 tail -f 大法
    kevinxzhao
        19
    kevinxzhao  
       13 天前
    大盘监控 + 链路追踪 + 查日志。
    darkengine
        20
    darkengine  
       13 天前
    tail -f, grep 😂

    哦不对,我们不是大厂
    lawler
        21
    lawler  
       13 天前
    splunk
    wxw752
        22
    wxw752  
       13 天前   ❤️ 1
    就以我们公司这点微服务体量,闭着眼睛都能知道大概哪里的问题
    wahaha3010
        23
    wahaha3010  
       13 天前
    监控+指标+数据+日志
    0x49
        24
    0x49  
       13 天前   ❤️ 10
    楼上都是大佬,我们小小小公司项目发现问题,都靠客户...
    客户不反馈=项目无 bug,反馈了不能复现出来,就不算问题.
    Leon777
        25
    Leon777  
       13 天前   ❤️ 1
    我们小厂有时候要测试开发产品三方会诊才能确定这到底是 feature 还是 bug 😂
    foolishcrab
        26
    foolishcrab  
       13 天前 via iPhone
    这种代码问题导致的单点故障基本上依靠基建都是非常好排查的。
    稍微难一点的是上下游变更导致离变更节点非常远的地方异常,这种基本是排查时间点附近的变更并结合业务专家经验来看。
    最难的是变更后很久才能发现的业务一致性问题,基本就靠人力慢慢推理了
    nevermoreluo
        27
    nevermoreluo  
       13 天前
    小厂,先大致确定问题服务是哪组,开发查日志,问题严重需要联系运营找群里论坛里看有没有用户发复现操作,测试尝试复现。
    拿到大致复现逻辑或者可能根本无法复现的,运维切备用线路,也可能问题太大先切,看运维和运营把控。
    如果没有备用线路,看情况问运营争取关掉外网网关一段时间。至于该不该有备用是事后开会讨论的事。

    如果日志查不出来就再拿其他工具分析旁路分析 tcpdump ,proc, gstack ,实在不行就找写这部分代码的开发一起调试吧,反正用户已经切备用线路了。

    动态语言可以上一些 console ,或者一些内部接口实现一些简单的 runtime script ,例如动态读取一个脚本文件 or 语句执行
    静态语言例如 c++就 ci 再 build 个 RelWithDebInfo ,该调试调试,该 dump 就 dump


    当然上面说的运维+测试+看日志的+写这部分代码的人,可能都是你( bushi
    lepig
        28
    lepig  
       13 天前   ❤️ 2
    vim 20250430.log
    /errorText (回车)

    找吧就...
    1yndonn3u
        29
    1yndonn3u  
       13 天前   ❤️ 1
    多说无益,先摇人。
    whoami9426
        30
    whoami9426  
       13 天前
    虽然不是大厂,但也是我们公司内部开源出来的一种解决方案,实时的告警和全链路的追溯 https://github.com/GuangYiDing/exception-notify
    Greendays
        31
    Greendays  
       13 天前
    太高级了,看不懂(
    js2854
        32
    js2854  
       13 天前
    直接腾讯云低频 CLS 不香么
    server
        33
    server  
       13 天前
    跟着赶脚走
    chenyu0532
        34
    chenyu0532  
       13 天前
    就我自己用 frebase 么。。。
    vfs
        35
    vfs  
       13 天前   ❤️ 1
    @0x49 反馈了不能复现, 就继续让客户反馈, 直到问题重现或者用户崩溃 😂
    freeup
        36
    freeup  
       13 天前
    一般就看堆栈,异常类型,结合函数签名与功能,与最近相关改动,加上点日常经验,基本能解决 99%的问题
    imokkkk
        37
    imokkkk  
       13 天前
    一般的问题就是群里监控告警,一般告警的时候会携带异常的采样,拿到 traceId 之类的去阿里云 SLS 查日志。
    严重的问题就是 GOC 拉群摇人
    DUNAI
        38
    DUNAI  
       13 天前
    先看大动脉有没有被裁
    HtPM
        39
    HtPM  
       13 天前
    #24 @0x49 巧了我们也是,我们知道的 bug 不算 bug ,客户反馈的才是 bug
    whoami9426
        40
    whoami9426  
       13 天前
    异常直接到群里自动分析堆栈并找到代码的提交人 at 对应的人处理并附带上全链路的日志
    Lockroach
        41
    Lockroach  
       13 天前
    tail -f xxx.log | grep xxx --color
    8355
        42
    8355  
       13 天前
    全链路+网关+告警啊
    whoami9426
        43
    whoami9426  
       13 天前
    @whoami9426 #30 异常直接到群里自动分析堆栈并找到代码的提交人 at 对应的人处理并附带上全链路的日志
    VVVYGD
        44
    VVVYGD  
       13 天前
    skywalking + 自研类似 skywalking 项目 + EBPF + 知识图谱系图数据资产
    vincentWdp
        45
    vincentWdp  
       13 天前
    一边复现, 一边看日志
    craftsmanship
        46
    craftsmanship  
       13 天前 via Android
    这帖子看得我笑中带泪啊🥹
    Sanow
        47
    Sanow  
       13 天前
    arthas 直接排查
    epicSoldier
        48
    epicSoldier  
       13 天前
    less xxx.log;
    xx%;
    page down...
    layxy
        49
    layxy  
       13 天前
    日志+监控基本能够排查绝大部分故障
    yc8332
        50
    yc8332  
       13 天前
    接口响应时间+服务器的各种监控告警。。
    lilyou
        51
    lilyou  
       13 天前
    @whoami9426 q 请问这个怎么实现的
    5261
        52
    5261  
    OP
       13 天前
    @Sanow 这玩意来不及的!我不知道你们线上是怎么靠这个查问题的
    billbob
        53
    billbob  
       13 天前
    docker service logs -t app 打开,测试你再点一下
    crackidz
        54
    crackidz  
       13 天前
    线上直接 debug
    declandragon
        55
    declandragon  
       13 天前
    php lumen 框架
    error handle 写日志
    filebeat 收集上报 elk
    python 每 20 分钟定时统计,有错误发通知到群里
    whoami9426
        56
    whoami9426  
       13 天前
    @lilyou readm 中有介绍原理,主要是通过 @AfterThrowing
    seth19960929
        57
    seth19960929  
       13 天前
    小厂直接上阿里云的 tracing 就行了, 很便宜, 全量 30 天存储一个月几千块


    https://www.shiguopeng.cn/posts/2024032815/
    不过上了之后, 又发现一个别的 bug >_
    seth19960929
        58
    seth19960929  
       13 天前
    一个在用的方案:
    日志: k8s 容器 (写文件 | 标准输出), 阿里云 SLS 自动收集到对应的服务
    链路: 使用标准的 opentelemetry 协议上报到 阿里云 ARMS, 如上图
    报警: 总共三层 日志(SLS)聚合, tracing 聚合(p95, HTTP 错误), gateway 错误
    gateway (这一层一定要加, 曾经吃过亏, 服务进程卡死, 日志不收集, tracing 也不上报了, 直到 gateway 层 500 错误很多)

    supuwoerc
        59
    supuwoerc  
       13 天前
    less run.log :G :?error
    vipfts
        60
    vipfts  
       13 天前
    @0x49 超小微公司, 我们也是
    spritecn
        61
    spritecn  
       13 天前
    @seth19960929 SLS 是不差钱的公司才用得起的
    5261
        62
    5261  
    OP
       13 天前
    @seth19960929 我们有小项目是接的阿里云的日志系统,总感觉没有自己搭建的 elk 灵活
    njmaojing
        63
    njmaojing  
       13 天前
    1 、站点监控:每个服务 api 探活
    2 、日志堆栈告警
    3 、链路监控,模拟用户真实请求
    先靠这些主动发现问题,具体怎么处理问题,就是 tail -f ,pinpoint ,查看埋点之类的
    weilai99
        64
    weilai99  
       13 天前
    @littlesky87906 自托管的 sentry 57 个容器,是认真的吗?
    luciankaltz
        65
    luciankaltz  
       13 天前
    说存 ELK 的能问下数据规模和成本吗(
    lu5je0
        66
    lu5je0  
       13 天前 via Android
    各种监控埋点
    lizhengg
        67
    lizhengg  
       13 天前
    前端+app 一套探针探测组件性能上报,后端 Apm 探针,堆栈链路分析工具,云 LTS 日志存储检索,基础设施性能,中间件慢日志,队列堆积监测等,可观测性系统加混沌工程定期测试,每个月应急演练。
    R77
        68
    R77  
       13 天前
    小厂,接口,服务器监控,人肉 log 分析
    AmaQuinton
        69
    AmaQuinton  
       13 天前
    kubectl -n namespace logs -f pod-name --since=1h
    pigf
        70
    pigf  
       13 天前
    @MuSeCanYang 尾大不掉
    Torpedo
        71
    Torpedo  
       13 天前
    @0x49 #24 大厂内部平台也很多这么搞的。很多问题都是用户反馈的
    BestPix
        72
    BestPix  
       13 天前
    @whoami9426 感谢分享,很有用!
    proxychains
        73
    proxychains  
       13 天前
    journalctl -xeu myapp | grep -i err
    5261
        74
    5261  
    OP
       13 天前
    @luciankaltz 成本确实有点大,光 es 3 个节点 就要不少费用
    Grocker
        75
    Grocker  
       13 天前
    SLS
    NathanInMac
        76
    NathanInMac  
       13 天前
    最简单就 Sentry + SLS + OpenTelemetry
    yibo2018
        77
    yibo2018  
       13 天前
    @ala2008 正儿八经,我发现 tail -f 比查阿里云那个破烂日志好用多了
    qbmiller
        78
    qbmiller  
       13 天前
    楼主用的 elk 那套吗。 loki 那套 看好多用的
    Youko
        79
    Youko  
       13 天前
    arthas 挺好用
    seth19960929
        80
    seth19960929  
       13 天前
    @spritecn SLS 还挺便宜的, https://sls.console.aliyun.com/lognext/tools/calculator 100G 30 天保存, 一天 40 块
    @5261 #62 没感觉有什么灵活的, 反正比自建省事, 毕竟 k8s 也用阿里云的
    Charlie17Li
        81
    Charlie17Li  
       13 天前
    纵坐标是啥,我们都是 SLS 查关键字
    tudou1514
        82
    tudou1514  
       13 天前
    牛逼的用眼看,其余的 grep -i xxx.log |less
    iguess
        83
    iguess  
       13 天前
    第一阶段: 看日志
    bli22ard
        84
    bli22ard  
       13 天前
    @whoami9426 #40 这个是不是 javaagent 实现的?
    whoami9426
        85
    whoami9426  
       13 天前
    @bli22ard 基于 aop 实现的, aop + git blame + webhook
    spinlock
        86
    spinlock  
       13 天前
    代码注释 二分查找
    alphagao
        87
    alphagao  
       13 天前
    @ala2008 我云服务公司也是这么查的。。。甚至有的容器日志没有映射,还得现查日志文件路径
    Alliot
        88
    Alliot  
       13 天前
    总的来说就是可观测性那一套 Metrics+Log+tracing.

    用得多的就是 Promethues 全家桶,ELK 那套日志, 加 APM.

    往细节上,
    除去系统性能指标那些,还加上了应用/业务指标的监控。
    网关层面的状态码监控。
    再加上数据库慢 SQL 之类的监控。
    最后还有就是波测,SaaS 多地监控。
    bli22ard
        89
    bli22ard  
       13 天前
    @whoami9426 #85 git blame 只有在编译阶段才有吧, 难道你们每次编译生成了一个代码行和 git blame 的对应关系,出现异常 ,用堆栈类+行号 取找 git blame 的信息,然后生成通知信息?
    whoami9426
        90
    whoami9426  
       13 天前
    @bli22ard #89 是直接请求 git 平台的 git blame api , 根据仓库,分支 实时读取的最新的代码
    bli22ard
        91
    bli22ard  
       13 天前
    @whoami9426 #90 厉害了。
    zcl0621
        92
    zcl0621  
       13 天前
    @weilai99 量大 selfhosting 的 sentry 能搞死你,我折腾了俩月,才扛住 50W 日活的 app
    JoeDH
        93
    JoeDH  
       13 天前
    @zcl0621 #92 大概需要多少服务器资源,我有个项目也想用用这玩意
    quzard
        94
    quzard  
       13 天前 via iPhone
    完全用 SLS 来排查和运维
    caqiko
        95
    caqiko  
       13 天前
    @lepig 最近学习的 grep "error" *.log -ni --color=always
    zcl0621
        96
    zcl0621  
       13 天前   ❤️ 1
    @JoeDH kafka ,redis ,pg ,clickhouse 全部拆出去部署;需要修改 selfhosting 的脚本,compose 文件,还有几个 py 文件;以及手动去执行 kafka ,pg ,clickhouse 的初始化文件;其他那些组件都跑在一台 16c 还是 32c 的机器上(目前离职一段时间了,我不太记得了);还需要调整 container 的数量。总之 selfhosting 的坑贼多,文档也很少,只能自己摸索。
    wogogoing
        97
    wogogoing  
       13 天前 via iPhone
    jukanntenn
        98
    jukanntenn  
       13 天前   ❤️ 1
    我们公司是
    try:
    ...
    except:
    pass

    没有报错就没有 bug
    kid1412621
        99
    kid1412621  
       13 天前 via iPhone
    @proxychains #73 加下 —no-pager😂
    kid1412621
        100
    kid1412621  
       13 天前 via iPhone
    没人折腾这个吗? LGTM

    https://github.com/grafana/docker-otel-lgtm
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1012 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:11 · PVG 03:11 · LAX 12:11 · JFK 15:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.