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环境实现的提示】
- 为了避免任何的数据丢失和处理突然激增的输入负载,建议在Logstash和Elasticsearch之间使用代理,如Redis或者RabbitMQ
- 如果正在使用集群,防止脑裂问题,请使用基数个Elasticsearch的节点数;
- 在Elasticsearch中,对于给定的数据始终使用合适的字段类型。这将允许你执行不同的检查,例如:int字段类型将允许你执行(http_status:<400)检查,同样,其他字段类型还允许你执行类似的检查;
2.服务调用关联ID的使用
通常情况下,一个服务造成的问题可能会造成其他位置的服务出现问题。这个问题很难追踪,可能需要大量的工作。如果它是整体式的,你会知道正确的调查方向,但微服务使得难以理解问题的根源是什么,以及问题的源头;
【解决思路】
利用跨所有调用传递的关联ID,能够跟踪每个请求,并轻松的跟踪路由,每个请求都具有独特的关联ID。因此,当我们调用任何问题的时候,关联ID都是我们的出发点;
关联ID需要一些额外的开发工作,但是这个工作非常值得做;
3.依赖项和版本
循环依赖关系及其影响
整体式架构具有典型的分层模型,而微服务带有图状模型。因此,微服务可能会有循环依赖。
需要考虑如何构建一个安全的事务;
设计系统时候需要分析它
设计微服务的时候,需要在不同的服务之间建立正确的关系,以避免任何循环依赖。它是一个设计问题,并且必须得到解决,即使需要重构代码;
维护不同版本
当你有更多的服务的时候,这意味着每个服务有不同的周期,这将通过不同版本服务的引入增加复杂性,相同的REST服务将有不同的版本。当某个问题在一个版本中已经消失并在一个新版本中复现的时候,再现问题的解决方案是很难的;
【API版本控制】
第一种方案:在路径中使用版本;
第二种:使用HTTP标头,HTTP标头可以是自定义请求的标头,或者你可以使用Accept Header表示调用API的版本;
在理想情况下,应该避免你的任何微服务的任何实例有太多的版本;