查看其它 3 个回答caikai的回答

caikaicaikai系统架构师KYLERC

容器常被用来运行需要快速故障迁移、弹性伸缩的应用或微服务,因此容器中运行的应用,在运行的过程中随着迁移、弹性伸缩的发生,应用日志很可能会在不同的运行节点中产生,对应用通过日志进行监控、问题排查带来了很大的麻烦,所以和大多数传统应用把日志写在本地文件系统不同的是,容器应用需要考虑把日志进行集中收集,写入外部的集中日志管理系统中,比如上面bryan提到的ELK方案,或者采用Flume进行采集,进一步通过Kafka等消息队列把日志信息实时传递到外部的日志收集、日志分析系统;或者最简单的方式就是让容器在运行时挂载外部共享存储卷当做应用的日志目录,这样应用的日志会被实时写入外部共享存储以备后续处理,这种方式对外部工具依赖少,但需要我们做好控制,不同的容器不能挂载同一个外部卷,否则就会出现写日志冲突的问题,容器迁移的时候还需要重新挂卷。

除了日志的集中收集这一系统层面需要做的工作,在应用改造上我们还应该重视容器应用的日志标准化问题。通过标准化应用写日志的格式和内容,我们可以通过应用日志进行交易率、成功率、响应时间等关键业务指标的分析,用作问题预警、容量扩缩的依据。越来越多的容器应用正在采用这一做法,原因一是因为某些传统的APM工具因容器快速迁移、实例数量、IP地址都在不断变化的特点而失去监控能力,其二是避免传统埋设探针方式带来的性能下降太多、监控指标变化不灵活的特点。

此外,越来越多的用户采用容器来运行微服务架构应用,一个业务调用往往需要经过多个微服务的调用链,整个业务处理过程的日志记录分散在不同的微服务日志中,这对通过日志进行问题诊断带来了不小的困难。通过标准化日志,例如带上唯一的ID信息等,我们做到把同一个业务在不同微服务中的处理过程给关联起来。针对这一点,微服务框架在一定程度上已经帮我们做到了,例如Spring Cloud Sleuth,如果只是微服务服务链路的追踪,使用这样的框架工具可以很好地帮到我们,它其实就是在应用写日志的时候,添加上标准化的字段内容实现的。

银行 · 2017-10-16
浏览2566

回答者

caikai
系统架构师KYLERC
擅长领域: 云计算容器容器云

caikai 最近回答过的问题

回答状态

  • 发布时间:2017-10-16
  • 关注会员:5 人
  • 回答浏览:2566
  • X社区推广