微服务详解(九):故障排除指南

微服务详解(一):概述

微服务详解(二):解决方案

微服务详解(三):设置开发环境

微服务详解(四):领域驱动设计

微服务详解(五):实现微服务

微服务详解(六):部署与测试

微服务详解(七):微服务的安全性

微服务详解(八):最佳做法和一般原则

微服务详解(九):故障排除指南

1.日志记录和ELK环境

微服务一般使用映像的容器,如Docker来部署,它们提供日志,并通过命令来帮助你读取部署在容器内的服务日志。Docker和Docker Compose提供把容器内运行的,在所有容器中的服务日志分别输出的命令。

如果监控很多个微服务的日志,就会非常的费时并且价值很小,因此,需要使用一种类似ELK环境的日志聚合器和可视化工具来辅助,它将用于集中日志记录;

1.简要概述

Elasticsearch、Logstash、Kibana(ELK)环境是一系列执行日志聚合、分析、可视化和监控的工具。ELK环境提供完整日志记录平台,用来分析、可视化和监控所有的日志,包括所有类型的产品日志和系统日志。

Elasticsearch

企业全文搜索引擎之一。可分布式的、并且支持多租户。一个单独的Elasticsearch服务器存储多个索引,每个索引都表示一个数据库,并且单个查询可以搜索多个索引的数据。

Logstash

具有实时管道能力的开方源码信息收集引擎。简单的说,它收集、分析处理并存储数据;由于Logstash具有管道能力,他能帮助你处理任何来自各种系统的事件数据,如日志,它收集数据,解析过滤它们呢,并将其输出发送到一个指定的应用程序,如Elasticsearch或者在控制台上的简单标准输出;

Kibana

它是一个基于浏览器web应用程序,可以用各种图标、表和地图执行高级的数据分析和可视化数据。

2.ELK环境安装

一般来讲,这些工具都是单独安装的,然后配置为相互通信。这些组件的安装时相当 简单的。

安装Elasticsearch

安装Logstash

安装Kibana

Docker Hub有许多现成的ELK环境的Docker映像。willdurand/elk是被下载最多的容器,也容易启动,并良好的与docker compose配合工作;

【有关ELK环境实现的提示】

  1. 为了避免任何的数据丢失和处理突然激增的输入负载,建议在Logstash和Elasticsearch之间使用代理,如Redis或者RabbitMQ
  2. 如果正在使用集群,防止脑裂问题,请使用基数个Elasticsearch的节点数;
  3. 在Elasticsearch中,对于给定的数据始终使用合适的字段类型。这将允许你执行不同的检查,例如:int字段类型将允许你执行(http_status:<400)检查,同样,其他字段类型还允许你执行类似的检查;

2.服务调用关联ID的使用

通常情况下,一个服务造成的问题可能会造成其他位置的服务出现问题。这个问题很难追踪,可能需要大量的工作。如果它是整体式的,你会知道正确的调查方向,但微服务使得难以理解问题的根源是什么,以及问题的源头;

【解决思路】

利用跨所有调用传递的关联ID,能够跟踪每个请求,并轻松的跟踪路由,每个请求都具有独特的关联ID。因此,当我们调用任何问题的时候,关联ID都是我们的出发点;

关联ID需要一些额外的开发工作,但是这个工作非常值得做;

3.依赖项和版本

循环依赖关系及其影响

整体式架构具有典型的分层模型,而微服务带有图状模型。因此,微服务可能会有循环依赖。

需要考虑如何构建一个安全的事务;

设计系统时候需要分析它

设计微服务的时候,需要在不同的服务之间建立正确的关系,以避免任何循环依赖。它是一个设计问题,并且必须得到解决,即使需要重构代码;

维护不同版本

当你有更多的服务的时候,这意味着每个服务有不同的周期,这将通过不同版本服务的引入增加复杂性,相同的REST服务将有不同的版本。当某个问题在一个版本中已经消失并在一个新版本中复现的时候,再现问题的解决方案是很难的;

【API版本控制】

第一种方案:在路径中使用版本;

第二种:使用HTTP标头,HTTP标头可以是自定义请求的标头,或者你可以使用Accept Header表示调用API的版本;

在理想情况下,应该避免你的任何微服务的任何实例有太多的版本;

猜你喜欢

转载自blog.csdn.net/qq_36807862/article/details/81284404