zoukankan      html  css  js  c++  java
  • 在分布式系统中进行日志查询与管理的新手段介绍

    原文链接

    日志查看方式

    随着技术的发展,越来越多的系统从单机转向到分布式,同时对应的日志查看方式除了直接查看文件外,也发展出了各种集中日志管理方式。其中常见日志查看方式如下:

    单线程程序

    开发单机程序时诊断非常简单:设置断点,检查断点上下变量状态即可。
    当程序部署线上后,可以把断点中内容以日志方式记录下来。出现错误后,还原日志上下文(Context)不难,只要把日志文件中前后N行拿到后都能容易找到问题

    DingTalk20170609201400.png

    多线程程序

    当多线程出现后,还原上下文变得复杂一些,因为不同线程打日志顺序会造成一定干扰。我们可以在日志中记录、筛选线程(ThreadID)来排除其他线程干扰,拿到上下文

    DingTalk20170609201456.png

    分布式系统

    在分布式场景下(比如Docker、LXC、多服务器等),进程会同时跑在不同服务器上,一般通过集中式日志管理(例如Splunk、ELK、日志服务)等查找定位日志。

    DingTalk20170609201628.png

    这种场景下查找日志非常方便(例如通过"Level:Error","Latency>100000 & Method:HandleRequest"等能对上亿日志进行快速查找),但定位到关键日志后还原上下文却变得很难。因为日志采集、索引都是无序的,为了还原上下文,必须通过时间、机器、线程号来筛选和查找(这种方法一般不够精确),业界并没有好的方法。

    日志上下文查看

    今天日志服务(原SLS)LogSearch在查询分析基础上,提供了查看上下文的按钮,既可以在控制台上 完全精确 还原任意日志上下文(上下N条日志),并支持对指定内容(比如ThreadId)进行筛选,帮助你快速定位问题。整个过程如图所示:

    DingTalk20170609202622.png

    使用依赖

    • 只支持使用Logtail客户端收集的日志
    • 指定日志库(Logstore)必须开启索引功能

    实际场景

    • Dev在线上通过关键词查询,定位到一个异常日志

    DingTalk20170612104019.png

    • 点击上下文查询后,既跳转到前后N条上下文显示框
      • 可以通过“更早”、“更新”等按钮加载更多上下文,也可以点击“返回普通搜索模式”进一步排查
      • 通过筛选框筛选ThreadID,进行精准上下文的过滤

    DingTalk20170609203658.png

    原文链接

  • 相关阅读:
    CocoaPods
    第一篇 理论 1.7 精进-正念-正知,如理作意和觉察力
    构架稳定与可扩展的优惠券系统
    一个产品从0到1的过程
    实现实时定位
    征信比拼重点是数据和连接
    黑产
    爬虫有什么用
    爬虫应用
    甘蔗理论
  • 原文地址:https://www.cnblogs.com/iyulang/p/7000646.html
Copyright © 2011-2022 走看看