每周送书 | 基于微服务的日志中心设计、实现与关键配置

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

引言:

日志向来都是运维以及开发人员最关心的问题。运维人员可以及时的通过相关日志信息发现系统隐患、系统故障并及时安排人员处理解决问题。开发人员解决问题离不开日志信息的协助定位。没有日志就相当于没有了眼睛,失去了方向。

微服务日渐火热,享受微服务架构带来的种种好处的同时也要承担起由微服务带来的种种困扰。日志管理就是其中一个。微服务有一个很大的特色:分布式。 分布式部署的结果就导致日志信息散落在各地,这样就给日志的采集存储带来了一定的挑战:

d47e62d2b349aca45e42305ed6714efbe5ed61d9如何及时采集日志信息? d47e62d2b349aca45e42305ed6714efbe5ed61d9如何将日志信息进行汇总? d47e62d2b349aca45e42305ed6714efbe5ed61d9汇总之后如何对日志信息进行检索分析?

这篇文章将探讨一下日志管理的相关问题。

目录:

一、日志的重要性和复杂性

二、基于微服务的日志中心架构设计

三、日志中心的流程与实现

四、日志中心的关键配置

五、总结

一、日志的重要性和复杂性

要说管日志,在管日志之前有一个先决条件,我们需要知道日志是什么,能做什么,有什么用。援引百度百科的话,它是记录系统操作事件的记录信息。

在日志文件内部记录了当前系统的各项生命体征,就像我们在医院体检过后拿到的体检单,上面反应了我们的肝功能、肾功能、血常规等的具体指标。日志文件在应用系统中的作用就如同体检单,它反应了系统的健康状态、系统的操作事件、系统的变更状况。

0e7330cd560d745fffbcec1d6e07564b0215987a

日志在系统中扮演着监护人的身份,它是保障高可靠服务的基础,记录了系统的一举一动。运维层面、业务层面、安全层面都有日志的身影,系统监控、异常处理、安全、审计等都离不开日志的协助。

日志种类繁杂,一个健壮的系统可能会有着各种各样的日志信息。

a4a95b7707fbb848cd52bd0d678675547e218670

如此复杂多样的日志,是否要一网打尽?哪些又是我们所需要的?这都是我们在设计日志中心架构时需要考虑的问题。

二、基于微服务的

日志中心架构设计

日志中心是微服务生态中不可或缺的一环,是监控的二当家。在此分享一下我们的产品级设计实践,了解一下,在基于微服务的架构,日志中心在技术架构中所处的位置是怎样的,以及如何部署。

7e63a634324ea04375df6c76898bb2b500f4681f

在这一设计中,微服务结构由以下几部分组成:

d47e62d2b349aca45e42305ed6714efbe5ed61d9 域:一个域是一套注册中心、配置中心、业务监控中心、网关等组成的生态圈。一个域内有可以有多个系统。
d47e62d2b349aca45e42305ed6714efbe5ed61d9 系统:一个系统内部可以部署多个应用。
d47e62d2b349aca45e42305ed6714efbe5ed61d9 应用:轻耦合的微服务应用。

图片中并没有日志中心这四个关键字,因为他是由多个独立组件共同协同构成的。这些组件分别是Filebeat、Kafka、Logstash、Elastic search,他们共同构成了日志中心。

1401245596063bf0a916603ad2ba5b4e57f44491

我们经过考量研究确定了一套适用于当下微服务架构日志管理流程。

1. 日志选取 ---- 确定选择哪些日志记录分析

2. 日志采集 ---- filebeat轻巧做收集

3. 日志缓冲 ---- kafka缓存本地做缓冲

4. 日志筛选 ---- logstash筛选过滤

5. 日志存储 ---- elasticsearch建索引入库

6. 日志检索 ---- 利用elasticsearch本身的检索功能

7. 日志展现 ---- 参考kibana风格实现日志数据可视化

在传统的ELK上替换了Logstash做日志采集的部分采取Filebeat,在日志存储前多了kafka缓冲和logstash筛选。这一套流程在保障功能完备同时提高性能、尽可能做到轻量部署。

三、日志中心的流程与实现

选择:以业务场景为原则

日志内容复杂多样,如何去收集有价值的日志是我们重点关注的。日志的价值其实是取决于业务操作的,不同的业务场景下相同类型的日志的价值会截然不同。

根据以往的业务实践,结合企业级的一些业务需求,我们选定关注以下几类日志。

• 跟踪日志【trace.log】 Server引擎的调试日志,用于系统维护人员定位系统运行问题使用。

• 系统日志【system.log】 大粒度的引擎运行的入口、出口的日志,用于调用栈分析,可以进行性能分析使用。

• 部署日志【deploy.log】 记录系统启动、停止、构件包部署、集群通知等信息的日志。

• 引擎日志【engine.log】 细粒度的引擎运行日志,可以打印上下文数据,用于定位业务问题。

• 构件包日志【contribution.log】 构件包记录的业务日志(使用基础构件库的日志输出API写日志)

通过以上几种日志,我们可以在分析问题时明确我们要查找的位置,通过分类缩小查找范围提高效率。

采集(Filebeat:侧重考虑轻量级

微服务应用会分布在各个域内的各个系统。应用的日志也就相对应的产生在各个域内的各个系统。进行日志管理首先要做好日志的采集工作。日志采集工作我们选择Elastic Stack中的Filebeat。

b0e94c614894265ffd9d6749f33d0a7d08c7ff45

  • Filebeat是一个开源的文件采集器,基于go语言开发,不需要java环境,它是对logstash的重构产物。Filebeat对环境依赖很低比较亲民。

  • Filebeat是一个轻量的采集器,最新版的Filebeat体积大约是20M左右,而logstash有近百兆。Filebeat更利于部署实施,减轻宿主压力。

  • 之前曾有对filebeat和logstash的测试对比,在采集日志方面,filebeat比logstash花费更少CPU和内存。Filebeat在日志采集方面有更好的性能表现。

Filebeat和应用是挂钩的,因为我们需要知道针对每个落点去收集日志信息,所以轻量其实是我们考量的主要因素。

Filebeat会有一个或者多个的叫做Prospector的探测器,可以实时监听指定的文件或者制定的文件目录的变更状况,将变更状况及时的传递到下一层---Spooler处理。

Filebeat还有一个特性我们放到日志筛选那里进行介绍,它是定位来源的关键。

这两点刚好满足我们实现日志的实时采集的需求。通过Filebeat动态的将新增的日志进行及时存储取样。至此如何采集日志信息的问题已经可以完美解决。

缓冲(Kafka):吞吐量大、易扩展、上限高

在日志存储之前,我们引入了一个组件--- Kafka,作为日志缓冲层。 Kafka起一个缓冲的作用,避免高峰期应用对ES的冲击。造成由于ES瓶颈问题而引发数据丢失问题。同时它也起到了数据汇总的功能。

选用kafka来做日志缓冲有几个优点:

d47e62d2b349aca45e42305ed6714efbe5ed61d9 吞吐量大,一个topic可以拆分为多个partition。建议这几个partition在不同的磁盘中。
d47e62d2b349aca45e42305ed6714efbe5ed61d9 分布式系统易拓展。

d47e62d2b349aca45e42305ed6714efbe5ed61d9Kafka的性能主要取决于它对磁盘的连续读写,它的性能很大程度上是取决于磁盘处理的能力。可以说只要磁盘性能允许,它就可以无限制的接收来自Filebeat的日志信息,从而实现一个缓冲的作用。

f090ec86a7b3b759671aefc0cf3663b2bcc09587

筛选(Logstash提前埋点、方便定位

日志信息经过filebeat、kafka等工具的收集传递,给日志事件加了很多附加信息。利用Logstash实现二次处理,可在filter里进行过滤或处理。

我们在Filebeat收集信息的时候通过将同一个Server上的日志信息发送到同一个Kafka的topic中来实现日志的汇总,这个topic名称就是server的关键信息。在更细粒度的层面上你也可以将每一个App的信息都当作一个topic来进行汇总。Kafka中通过Filebeat接受到的日志信息中包含了一个标识---日志是从哪里来的。Logstash的作用就是在日志汇入ES之前,通过标识将对应的日志信息进行二次筛选汇总处理,输送给ES,为之后的搜索提供依据。方便我们清楚的定位问题。

4228ee459b84aefe25c8444426c261404c4f1acb

存储(ES):方便扩展、上手简单

Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

aecc2808cfe7ca83ea0e00b40c67742e1c90ae13

选用ElasticSearch的原因主要为:可分布式的部署,方便拓展;处理海量数据可以应对多种需求;强大的搜索功能,基于Lucene可以实现快速搜索;活跃的开发社区,资料多、上手简单。

检索(ES):分门别类

Elasticsearch本身就是一个强大的搜索引擎,支持通过系统、应用、应用实例分组、应用实例IP、关键字、日志级别、时间区间来检索所需要的日志信息。

3eda1278cee3ef99411d6e1dd604cedd5eb3d36c

展现(Kibana):简单配置、清晰明了

查看密密麻麻的日志信息的时候,常常会有一种晕眩感。需要通过精简提炼日志信息,对日志信息进行整合分析,以图表的形式将日志信息进行展示。在展示的过程中我们可以借鉴和吸收Kibana在日志可视化方面的努力,实现日志的可视化处理,只需通过简单的配置就可以看到对某一个服务或者某一个应用的清晰的可视化的日志分析结果。

845dee7b370963b2f72e008d4be22460b9cfcb27

(注:图片摘自互联网

https://blog.csdn.net/my_bai/article/details/68062701 服务调用折线图)

四、日志中心的关键配置

在此就不再赘述关于各个组件的安装方法了,大家可以很轻松的从网络上找到相关教程。我们在这里介绍一些关键的配置,确保大家在安装过程中关键环节少走一些弯路。

Filebeat的关键配置

7a792f3653195f8b59844f9c089a2f268f1c32f6
  • enabled配置为true,表示打开日志采集能力。

  • 在path中配置文件路径或者是文件目录位置,支持多级搜索。

对于EOS的应用我们是这样做的:统一输出在/opt/apps/logs/目录下,如:/opt/apps/logs/应用ID/应用ID_system.log, /opt/apps/logs/应用ID/应用ID_trace.log

  • 在output.kafka中配置输出对象。建议以自己的主机名作为topic名字,同一台机器上收取的各种日志会发送到kafka的同一个队列。

Kafka以及Zookeeper关键配置

caee878c71d86433a7e0d78790a239d4ebe5c033
  • zookeeper.connect为zookeeper的集群地址

38df0700245cbf0db9b7d7e999f66c2b0e9a8040
  • server.1,server.2, server.3,

    注意和/opt/zookeeper/myid的内容里的数字一致用来标识server。

Logstash的关键配置

a0b77a872e1dc37f44ae932b75441feee94b4d00
  • Input 配置数据源输入

  • Filter 将收取的源文件路径做截取,获取的文件名作为appid并将其存储在es数据中。作为后期筛选的标志。

  • Output 配置数据源输出,输出信息到elasticsearch中。

Elasticsearch关键配置

35f00b6149c1459d00d06b5c67250ed5bf84c62b
  • network.host 配置可访问es的地址,开发环境中配置为0.0.0.0代表允许任意一个ip访问,在生产环境中需配置为特定的ip,限制访问。

五、总结

日志中心在微服务架构中起到了至关重要的作用,它是微服务监控的一个非常重要的切入点,本文以我们的团队技术实践为蓝本阐述了其设计、实现与关键配置,并详细阐述了日志管理的7个关键步骤和一些考量原则。

首先,在日志的选择上,要以业务场景为原则;选择之后的采集环节,可侧重考虑轻量级的Filebeat;在采集之后,选用吞吐量大的Kafka避免系统瓶颈造成的数据丢失;在存储之前,采用Logstash提前标识,便于问题的定位 ;充分利用ES和Kibana的功能来实现存储、检索和展现。

采用这样的架构和原则,我们可以通过日志中心提供对日志的实时采集、分析、展示能力。并通过日志中心可以及时了解系统性能、用户行为,保障微服务的高可靠运行。


原文发布时间为:2018-06-14

本文作者:赵瑞栋

本文来自云栖社区合作伙伴“EAWorld”,了解相关信息可以关注“EAWorld”。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
11天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
115 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
算法 安全 Java
微服务(四)-config配置中心的配置加解密
微服务(四)-config配置中心的配置加解密
|
2月前
|
消息中间件 监控 开发工具
微服务(三)-实现自动刷新配置(不重启项目情况下)
微服务(三)-实现自动刷新配置(不重启项目情况下)
|
10天前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
22 4
|
10天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
26 3
|
10天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
23 3
|
17天前
|
消息中间件 存储 监控
微服务日志监控的挑战及应对方案
【10月更文挑战第23天】微服务化带来模块独立与快速扩展,但也使得日志监控复杂。日志作用包括业务记录、异常追踪和性能定位。
|
1月前
|
网络协议 Linux Windows
Rsyslog配置不同端口收集不同设备日志
Rsyslog配置不同端口收集不同设备日志
|
1月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
38 1
|
1月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
127 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......