微服务实践04--DevOps05--日志管理01--1.业务日志

简介: 微服务实践04--DevOps05--日志管理01--1.业务日志

微服务实践目录,可以参见连接。

日志的目标是进行行为跟踪,将用户行为、系统行为记录下来用于之后的分析的过程都可以称之为日志。在业界逐渐向微服务迁移的过程中,很多的行为记录手段都逐渐的成为业界热门。例如:调用链跟踪,度量指标(metrics),日志收集系统,日志分析系统,应用性能监控(APM)等。

随着微服务概念在业界不断的发展与演进,我也针对微服务中行为跟踪进行了一些研究。在针对不同的环境下需要使用不同的方式去完成行为的跟踪与记录:

  • 调用链跟踪,应用性能监控(APM)

    在分布式系统中可以主体架构会采用事件驱动架构模式,或者知识库架构模式完成系统整体流程的设计。在这种情况下从用户界面不可能直观的判断系统中的问题具体出现在哪里,为什么出现。所以调用链跟踪营运而生。具体原理可以参见Google论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》。它解决了系统瞬时状态信息的采集工作。限制在于不管是那个开源实现,商业实现都会以为加入调用链跟踪的功能造成系统整体性能下降。所以,一般情况下在生产环境不建议打开,打开也只运行10分钟以内以防止影响业务。

  • 度量指标

    度量指标也是一项内容较多的技术,并且也可以在其他地方看到的名词。从技术角度说明在不同的技术栈的不同实现范围内都会有不同的度量指标,可以从不同的角度了解系统的各个方面。方便之后作为企业业务方向、系统运维方向的优化、调整、重构计划的指导。从业务角度讲可以为运营人员提供更加明确的系统运行情况,帮助运营人员从感性的认知系统到理性认知的转变,跳出大概是多少的猜测。现阶段度量指标没有标准规范与通用实现。在Spring Cloud中有部分实现,但也不是很全。

  • 日志收集系统

    日志收集系统大家都比较熟悉,如:ELK系列的FileBate、Logstash,Apache旗下的Flume,FaceBook的Scribe等等。这些实现各有千秋,但整体思想没有太大的差异。最主要的目标都为从宿主机将日志收集到日志系统中。下面会详细的说明。

  • 日志分析系统

    如下图中的日志处理技术全景中说明的一样,日志分析将日志建立索引,进行全文检索,日志聚合等操作。

日志处理技术全景

系统设计

以上的内容会在之后的文章中做介绍。现在我们拉回来,开始讨论日志。这里深入日志这个话题讨论一点内容。

模式选择

一般的日志收集方式分为两种:拉和推,与消息通信中的Pull和Push的概念是相同的。拉取的方式为由Master主动发起日志获取动作,然后在各个Agent上将日志拉到Master节点。推的方式为由Agent主动的向Master发送日志,Master在接收到日志之后将数据存储起来。

  • 推模式:

    对于 event-drive 类型的监控更为灵活方便
    应用多点部署不影响监控
    可能对监控系统 DDos
    要注意推送频率控制,以及失败后的重试机制

  • 拉模式:

    方便控制收集频率,对应用压力可控,侵入也小
    更及时的发现服务宕机
    需要大量配置监控接入点,尤其是应用集群化
    指标不够实时,顺序可能错乱
    监控指标一般是通过 log 文件或 HTTP 接口对外暴露,parser 较为复杂

对比以上特点之后,推模式更适用于业务日志类型的内容,具体如下:

  • 异步系统,事件驱动架构模式不影响正常业务进行。
  • 实时性可以满足业务日志需求。基本上在用户操作完成之后就可以看到业务日志。
  • 推送频率即为用户使用频率。不会因为系统复杂性而成本增长。

拉模式非常适用于系统日志的收集工作,之后会在微服务实践-系统日志中说明拉模式的使用。

技术选型

选择了日志收集方式之后,我们看一下技术选型:
下图来自于Flume官网
Flume架构

下图来自于ELK官网:
Logstash架构

根据以上两图,并综合Logstash和Flume的特点对比如下:

  • 各有侧重,Logstash偏重于对数据的预处理;Flume偏重数据的传输;
  • 生态环境,Logstash是老牌的运维日志监控工具,有着非常多的插件,配置灵活;FLume则是强调用户的自定义开发。
  • 持久化,Logstash的input和filter还有output之间都存在buffer,进行缓冲;Flume直接使用channel做持久化(可以理解为没有filter)

从上可以得出结论,更注重稳定性,效率方面的内容使用Flume比较好。比较注重灵活性,可配置性方面可以使用Logstash。我们这里选择Logstash是因为可以满足业务日志需求,是因为业务日志不需要太高的性能、并且可以在Flow中处理简单逻辑、达到数据清洗的目的。

方案制定

接下来看业务日志的部署结构:
本图来自ELK官网
ELK部署结构

从上图看,要完整的部署Logstash是一件比较复杂的事情。我这里主要的目标是业务日志可以在软件工程师在不修改任何代码的情况下可以将业务日志输出到数据库中,所以,简化后的操作如下图所示:
业务日志架构图

日志又可以分为业务日志,系统日志。业务日志又可以分为操作日志、行为日志、搜索日志等。本次内容设计为业务日志中操作日志的记录系统。操作日志流程:为系统用户访问系统服务。各服务根据业务特点,调用操作日志API,然后API通过Log4J2的Syslog功能将日志信息发送到logstash中。然后由Logstash写入到数据库中。

实施步骤:

  • 在Log4j2添加Syslog配置

配置

  • 对Java封装
private static Logger logger = LogManager.getLogger("BusinessLog");

然后在封装类中提供业务日志输出方法即可。

  • 安装Logstash

    1. 从ELK官网下载Logstash的CentOS7器安装包
    2. 运行rpm -ivh logstash-6.4.2.rpm
    3. 运行systemctl start logstash
    4. 安装插件/usr/share/logstash/bin/logstash-plugin install logstash-input-jdbc
  • 创建配置文件/etc/logstash/conf.d/demo.conf

配置文件

  • 重新启动logstash即可使用。
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
5月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
2057 10
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
5月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
556 1
日志收集和Spring 微服务监控的最佳实践
|
11月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2749 1
|
11月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1247 0
|
11月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
1075 0
|
11月前
|
Java API 开发者
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——slf4j 介绍
在软件开发中,`System.out.println()`常被用于打印信息,但大量使用会增加资源消耗。实际项目推荐使用slf4j结合logback输出日志,效率更高。Slf4j(Simple Logging Facade for Java)是一个日志门面,允许开发者通过统一方式记录日志,无需关心具体日志系统。它支持灵活切换日志实现(如log4j或logback),且具备简洁占位符和日志级别判断等优势。阿里巴巴《Java开发手册》强制要求使用slf4j,以保证日志处理方式的统一性和维护性。使用时只需通过`LoggerFactory`创建日志实例即可。
758 0
|
7月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
10月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
544 12
|
12月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。