摘要:微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。
微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。
我们将重点介绍微服务架构中的日志收集方案ELK(ELK是Elasticsearch、Logstash、Kibana的简称),准确地说是ELKB,即ELK+Filebeat,其中Filebeat是用于转发和集中日志数据的轻量级传送工具。
为什么需要分布式日志系统
在以前的项目中,如果想要在生产环境需要通过日志定位业务服务的bug或者性能问题,则需要运维人员使用命令挨个服务实例去查询日志文件,导致的结果是排查问题的效率非常低。
微服务架构下,服务多实例部署在不同的物理机上,各个微服务的日志被分散储存不同的物理机。集群足够大的话,使用上述传统的方式查阅日志变得非常不合适。因此需要集中化管理分布式系统中的日志,其中有开源的组件如syslog,用于将所有服务器上的日志收集汇总。
然而集中化日志文件之后,我们面临的是对这些日志文件进行统计和检索,哪些服务有报警和异常,这些需要有详细的统计。所以在之前出现线上故障时,经常会看到开发和运维人员下载了服务的日志,基于Linux下的一些命令,如grep、awk和wc等,进行检索和统计。这样的方式效率低,工作量大,且对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
ELKB分布式日志系统
ELKB是一个完整的分布式日志收集系统,很好地解决了上述提到的日志收集难,检索和分析难的问题。ELKB分别是指Elasticsearch、Logstash、Kibana和Filebeat。elastic提供的一整套组件可以看作为MVC模型,logstash对应逻辑控制controller层,Elasticsearch是一个数据模型model层,而Kibana则是视图view层。logstash和Elasticsearch基于Java编写实现,Kibana则使用的是node.js框架。
下面依次介绍这几个组件的功能,以及在日志采集系统中的作用。
Elasticsearch的安装与使用
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVAAPI等结构提供高效搜索功能,可扩展的分布式系统。它构建于ApacheLucene搜索引擎库之上。
Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户,能胜任上百个服务节点的扩展,并支持PB级别的结构化或者非结构化数据。
Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
Elasticsearch是一个实时的分布式搜索分析引擎,它被用作全文检索、结构化搜索、分析以及这三个功能的组合,它是面向文档的,意味着它存储整个对象或文档。Elasticsearch不仅存储文档,而且索引每个文档的内容使之可以被检索。在Elasticsearch中,你对文档进行索引、检索、排序和过滤--而不是对行列数据。
为了方便,我们直接使用使用docker安装Elasticsearch:
dockerrun-d--nameelasticsearchdocker.elastic.co/elasticsearch/elasticsearch:5.4.0需要注意的是,Elasticsearch启动之后需要进行简单的设置,xpack.security.enabled默认是开启的,为了方便,取消登录认证。我们登入到容器内部,执行如下的命令:
#进入启动好的容器dockerexec-itelasticsearchbash#编辑配置文件vimconfig/elasticsearch.ymlcluster.name:docker-clusternetwork.host:0.0.0.0