任何复杂的应用程序偶尔都会出现错误。在微服务应用程序中,需要跟踪几十甚至几百个服务发生的情况。要获取系统的整体视图,日志记录和监控至关重要。在微服务架构中,一个业务请求会经历多个服务,收集端到端链路上的日志能够帮助我们判断错误发生的具体位置。

随着大数据的兴起,我们对数据的分析解读能力越来越强,日志作为原始数据则体现出了更大的价值,运行日志可以交由大数据系统进行数据挖掘,以智能判断服务的运行状况,出错时及时触发报警等。访问日志则更适合大数据系统做统一的统计分析,比如哪些资源访问较多,资源访问耗时是多少,状态码分布规律是怎样的等等。另外,大数据本身也衍生了更多数据方面的需求,比如用户行为分析,敏感词过滤,反作弊反垃圾等等,为了提供这些数据,我们通常也是以日志的形式将这些信息打印出来。

整体架构

收集日志不仅仅可以用于诊断排查错误,日志同样也是大量的数据,通过对这些数据进行集中分析,可以产生极大的价值。

对于微服务架构来说,应用的数量一般来说少则几十,大则成千上万,对于日志的集中收集来说,会有一系列的问题:

  • 性能
  • 稳定性
  • 扩展性
  • ...

日志系统中,我们使用比较常见的 EFLK(ElasticSearch + Filebeat + LogStash + Kibana) 方案:

我们统一日志收集规则,目录和输出方式,使用 SiderCar 模式来统一收集日志:在虚拟机集群中,我们在每一台主机上都部署一个 Filebeat 进程,并把服务的日志统一打到某个目录中,通过 Filebeat 来统一收集;在 K8S 集群中,我们将所有的 Pod 的日志都挂载到宿主机上,每台主机上单独起一个日志收集 Pod(Filebeat)。在后端存储中,我们可以通过 Filebeat 直接把日志输出到 ElasticSearch 中,也可以在中间加一层 LogStash 来过滤或清洗日志。当然,当log达到更大的量级之后,我们会在 ElasticSearch 之前加一层消息队列的缓冲。

这样的架构,优点是完全解耦,性能最高,管理起来也最方便,缺点就是我们需要在服务层统一日志收集规则,目录和输出方式(对我们来说,这些缺点都还是能接受的)。

日志跟踪

微服务主要的难点是如何了解各个服务之间的事件流,客户端单次请求可能会涉及多个服务,若要将一次请求中所有涉及到的服务的日志按照整个步骤的序列关联起来,则每个服务都应该通过一个关联ID(Trace ID)来当做每个请求的唯一标识符,该 Trace ID 可以用来实现跨服务的分布式跟踪。这个 Trace ID 可以是一个全局的唯一 ID,也可以是一个包含更丰富信息(例如调用方-被调用方关系,用户信息等)的关联 ID。

我们会在网关层接收客户端的请求时生成 Trace ID,在请求后续的服务,服务之间互相调用或者发送异步消息时,都会在请求头元数据中放置该 Trace ID,这样这个唯一的 Trace ID 就可以流遍整个系统。当然,每个服务写日志的事件中都应该包含这个 Trace ID。

在服务的日志中,我们都将带上 Trace ID,当排查关联服务的错误时,可以根据 Trace ID 查找同一操作中包含的所有服务调用的日志,进行根本原因的分析。

日志分析

传统的运行日志和访问日志,基本是为开发或运维提供排查问题的信息,是面向人去设计的,人脑天生适合处理非结构化的数据,因此日志信息非常随意,可能只是一句话,关联的数据项和格式也不固定。可能日志对于写代码的程序员来说会有一定的格式(服务,方法,日志,日志级别等),但日志信息本身却是程序员随意去写的,相对而言对于机器来说是不友好的。

我们有没有统一的标准来表达这种 key-object 的的语义呢?JSON 可能是一种选择。大数据时代,处理日志信息的不再是人工,而是代码,只有结构化的数据才会便于代码处理。所以我们对于日志的输出从面向人,转变为面向机器。

我们的日志存储到 ElasticSearch 的格式:

{ "type":"log

cx_oracle写日志信息_浅谈微服务架构之构建日志收集系统相关推荐

  1. 代码重新发布后docker服务会不会受影响_分享点经验 | 浅谈微服务架构

    点击蓝字关注我们 AMP 背景简介 在最原始的系统设计中,我们通常使用单体架构.单体架构把所有的业务逻辑都写在一起,没有对业务场景进行划分.在规模比较小的情况下工作情况良好,但是随着系统规模的扩大,它 ...

  2. 微服务怎么部署到服务器的_浅谈微服务部署方案

    在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 微服务目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需 ...

  3. 阿里技术专家浅谈微服务架构

  4. 事物日志恢复 mysql_浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用...

    本篇文章是系列文章中的第五篇,是对前一个日志系列的补充篇.如果您对日志的基本概念还没有一个比较系统的了解,可以参看本系列之前的文章: 浅谈SQL Server中的事务日志(一)----事务日志的物理和 ...

  5. 浅谈微服务基建的逻辑

    2019独角兽企业重金招聘Python工程师标准>>> 起点 首先,我们得有一个"服务".根据定义,我们可以把每个服务实例都视作一个黑盒.这个盒子有着明确的输入点 ...

  6. 浅谈微服务的来龙去脉

    作者:王清培(Plen wang) 沪江 公共业务平台 应用架构师 转载至沪江技术学院微信公众号 背景介绍 最近一段时间公共业务平台在进行大面积的重构,对原来的技术栈进行迁移,逐渐往Java.Go.N ...

  7. (未完待续)浅谈微服务以及 常用中间件( zookeeper redis rabbitmq)

    传统的单体框架,已经不满足目前公司战略规划要求,近几年"微服务" 这个字眼,出现的越来越频繁,虽然有过一年多微服务项目经验,也很难把微服务解释清楚,到底何为微服务? Martin ...

  8. dubbo协议_阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud

    微服务架构 什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发.部署.扩展.服务于服务之间通过注入RESTful ...

  9. (一)浅谈微服务概念理解

    1.什么是微服务 让我们以一个餐厅为例来解释微服务的概念. 想象一家传统的餐厅,它有一个集中式的厨房,所有的菜品都在同一个厨房中准备和烹饪.这个厨房负责接收顾客的点餐请求,准备食材,烹饪菜品,并最终将 ...

最新文章

  1. mysql中一个表最多能有几个auto_mysql--一个表上可以指定几个auto_increment
  2. Maven settings.xml配置详解
  3. 【php】(转载)分享一个好用的php违禁词 处理类
  4. Android 6.0 Changes
  5. 安全类链接,https
  6. Dijkstra算法——计算一个点到其他所有点的最短路径的算法
  7. php导出csv_原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
  8. 20145302张薇《Java程序设计》第十周学习总结
  9. C++基础::构造函数
  10. spring+hibernate中clob、blob字段的处理方法
  11. linux使用RAM_DISK根文件系统基本过程
  12. matlab如何创建callback函数_MATLAB作图实例:46:显示复杂的三维对象
  13. ZebraDesigner3 打印到.prn文件乱码
  14. JAVA编程规范(阿里巴巴)
  15. pdf转图片 jpg png
  16. 下拉列表—DropDownMenu的使用解析
  17. 找工作再也不愁之面试题全覆盖-微服务篇
  18. U盘显示文件或目录损坏且无法读取(U盘提示无法访问解决方法)
  19. 永恒之境服务器维护,7月22日服务器例行维护公告(已完成)
  20. 网络编程经典好书推荐

热门文章

  1. php上传文件的目录,php文件上传及下载附带显示文件及目录功能
  2. php 加tab键,php 生成Tab键或逗号分隔的CSV
  3. aes 加密_PHP使用AES加密和解密
  4. 如何自学成为设计师_如何成为平面设计师?平面设计师平时做什么?教你做好平面设计...
  5. python中如何调用类_python中如何调用类的方法
  6. java 字符终端库_Java 字符终端上获取输入三种的方式分享
  7. mysql如何通过数据库修改root_MySQL数据库之MySQL——修改root密码的4种方法(以windows为例)...
  8. 落谷 P3375 【模板】KMP字符串匹配
  9. PHP 连接MySQL数据库
  10. 目标检测——知识蒸馏的学习笔记