0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍各种日志采集方式的特点及其最佳使用场景

工程师邓生 来源:阿里云云原生 作者:牛通(奇卫) 2022-08-31 10:59 次阅读

日志,对于一个程序的重要程度不言而喻。无论是作为排查问题的手段,记录关键节点信息,或者是预警,配置监控大盘等等,都扮演着至关重要的角色。是每一类,甚至每一个应用程序都需要记录和查看的重要内容。而在云原生时代,日志采集无论是在采集方案,还是在采集架构上,都会和传统的日志采集有一些差异。我们汇总了一下在日志的采集过程中,经常会遇到一些实际的通用问题,例如:

部署在 K8s 的应用,磁盘大小会远远低于物理机,无法把所有日志长期存储,又有查询历史数据的诉求

日志数据非常关键,不允许丢失,即使是在应用重启实例重建后

希望对日志做一些关键字等信息的报警,以及监控大盘

权限管控非常严格,不能使用或者查询例如 SLS 等日志系统,需要导入到自己的日志采集系统

JAVA,PHP 等应用的异常堆栈会产生换行,把堆栈异常打印成多行,如何汇总查看呢?

那么在实际生产环境中,用户是如何使用日志功能采集的呢?而面对不同的业务场景,不同的业务诉求时,采用哪种采集方案更佳呢?Serverless 应用引擎 SAE(Serverless App Engine)作为一个全托管、免运维、高弹性的通用 PaaS 平台,提供了 SLS 采集、挂载 NAS 采集、Kafka 采集等多种采集方式,供用户在不同的场景下使用。本文将着重介绍各种日志采集方式的特点,最佳使用场景,帮助大家来设计合适的采集架构,并规避一些常见的问题。

SAE 的日志采集方式

Cloud Native

SLS 采集架构

SLS 采集日志是 SAE 推荐的日志采集方案。一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等能力。

SAE 内置集成了 SLS 的采集,可以很方便的将业务日志,容器标准输出采集到 SLS 。SAE 集成 SLS 的架构图如下图所示: 3d6f2136-2862-11ed-ba43-dac502259ad0.png

SAE 会在 pod 中,挂载一个 logtail (SLS 的采集器)的 Sidecar。

然后将客户配置的,需要采集的文件或者路径,用 volume 的形式,给业务 Container 和 logtail Sidecar 共享。这也是 SAE 日志采集不能配置/home/admin 的原因。因为服务的启动容器是放在/home/admin 中,挂载 volume 会覆盖掉启动容器。

同时 logtail 的数据上报,是通过 SLS 内网地址去上报,因此无需开通外网。

SLS 的 Sidecar 采集,为了不影响业务 Container 的运行,会设置资源的限制,例如 CPU 限制在 0.25C ,内存限制在 100M。

SLS 适合大部分的业务场景,并且支持配置告警和监控图。绝大多数适合直接选择 SLS 就可以了。

NAS 采集架构

NAS 是一种可共享访问、弹性扩展、高可靠以及高性能的分布式文件系统。本身提供高吞吐和高 IOPS 的同时支持文件的随机读写和在线修改。比较适合日志场景。如果想把比较多或比较大的日志在本地留存,可以通过挂载 NAS,然后将日志文件的保存路径指向 NAS 的挂载目录即可。NAS 挂载到 SAE 不牵扯到太多技术点和架构,这里就略过不做过多的介绍了。

NAS 作为日志采集时,可以看作是一块本地盘,即使实例崩溃重建等等各种以外情况,也都不会出现日志丢失的情况,对于非常重要,不允许丢失数据的场景,可以考虑此方案。

Kafka 采集架构

用户本身也可以将日志文件的内容采集到 Kafka,然后通过消费 Kafka 的数据,来实现日志的采集。后续用户可以结合自身的需求,将 Kafka 中的日志导入到 ElasticSearch ,或者程序去消费 Kafka 数据做处理等。

日志采集到 Kafka本身有多种方式,例如最常见的 logstach,比较轻量级的采集组建 filebeat,vector 等等。SAE 使用的采集组件是 vector,SAE 集成 vector 的架构图如下图所示: 3d801dd8-2862-11ed-ba43-dac502259ad0.png

SAE 会在 pod 中,挂载一个 logtail(vector 采集器)的 Sidecar。

然后将客户配置的,需要采集的文件或者路径,用 volume 的形式,给业务 Container 和 vector Sidecar 共享

vector 会将采集到的日志数据定时发送到 Kafka。vector 本身有比较丰富的参数设置,可以设置采集数据压缩,数据发送间隔,采集指标等等。

Kafka 采集算是对 SLS 采集的一种补充完善。实际生产环境下,有些客户对权限的控制非常严格,可能只有 SAE 的权限,却没有 SLS 的权限,因此需要把日志采集到 Kafka 做后续的查看,或者本身有需求对日志做二次处理加工等场景,也可以选择 Kafka 日志采集方案。 下面是一份基础的 vector.toml 配置:

data_dir = "/etc/vector"

[sinks.sae_logs_to_kafka]
type = "kafka"
bootstrap_servers = "kafka_endpoint"
encoding.codec = "json"
encoding.except_fields = ["source_type","timestamp"]
inputs = ["add_tags_0"]
topic = "{{ topic }}"

[sources.sae_logs_0]
type = "file"
read_from = "end"
max_line_bytes = 1048576
max_read_bytes = 1048576
multiline.start_pattern = '^[^\s]'
multiline.mode = "continue_through"
multiline.condition_pattern = '(?m)^[\s|\W].*$|(?m)^(Caused|java|org|com|net).+$|(?m)^\}.*$'
multiline.timeout_ms = 1000
include = ["/sae-stdlog/kafka-select/0.log"]

[transforms.add_tags_0]
type = "remap"
inputs = ["sae_logs_0"]
source = '.topic = "test1"'

[sources.internal_metrics]
scrape_interval_secs = 15
type = "internal_metrics_ext"
[sources.internal_metrics.tags]
host_key = "host"
pid_key = "pid"

[transforms.internal_metrics_filter]
type = "filter"
inputs = [ "internal_metrics"]
condition = '.tags.component_type == "file" || .tags.component_type == "kafka" || starts_with!(.name, "vector")'

[sinks.internal_metrics_to_prom]
type = "prometheus_remote_write"
inputs = [ "internal_metrics_filter"]
endpoint = "prometheus_endpoint"

重要的参数解析:

multiline.start_pattern 是当检测到符合这个正则的行时,会当作一条新的数据处

multiline.condition_pattern 是检测到符合这个正则的行时,会和上一行做行合并,当作一条处理

sinks.internal_metrics_to_prom 配置了之后,会将配置一些 vector 的采集元数据上报到 prometheus

下面是配置了 vector 采集的元数据到 Prometheus,在 Grafana 的监控大盘处配置了 vector 的元数据的一些采集监控图: 3d952c0a-2862-11ed-ba43-dac502259ad0.png

最佳实践

Cloud Native

在实际使用中,可以根据自身的业务诉求选择不同的日志采集方式。本身 logback 的日志采集策略,需要对文件大小和文件数量做一下限制,不然比较容易把 pod 的磁盘打满。以 JAVA 为例,下面这段配置,会保留最大 7 个文件,每个文件大小最大 100M。

class="ch.qos.logback.core.rolling.RollingFileAppender">
${user.home}/logs/test/test.log

${user.home}/logs/test/test.%i.log
1
7


class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
100MB



UTF-8
%d{yyyy-MM-dd HH:mm:ss}|%msg%n


这段 log4j 的配置,是一种比较常见的日志轮转配置。 常见的日志轮转方式有两种,一种是 create 模式,一种是 copytruncate 模式。而不同的日志采集组件,对两者的支持程度会存在一些区别。 create 模式是重命名原日志文件,创建新的日志文件替换。log4j 使用的就是这种模式,详细步骤如下图所示: 3da5b82c-2862-11ed-ba43-dac502259ad0.png

当日志的 event log 写入前会判断是否达到文件设置最大容量,如果没达到,则完成写入,如果达到了,则会进入阶段二

首先关闭当前 currentlyActiveFile 指向的文件,之后对原文件进行重命名,并新建一个文件,这个文件的名字和之前 currentlyActiveFile 指向的名字一致

把 currentlyActiveFile 指向的文件变为阶段二新创建的文件

copytruncate 模式的思路是把正在输出的日志拷(copy)一份出来,再清空(trucate)原来的日志。 目前主流组件的支持程度如下:

3dc7d402-2862-11ed-ba43-dac502259ad0.png

实际案例演示

Cloud Native

下面介绍一下客户实际生产环境中的一些真实场景。

某客户 A 通过日志轮转设置程序的日志,并将日志采集到 SLS。并通过关键字配置相关报警,监控大盘等。 首先通过 log4j 的配置,使日志文件最多保持 10 个,每个大小 200M,保持磁盘的监控,日志文件保存在/home/admin/logs 路径下。这里不进行过多介绍了,可以最佳实践场景介绍的配置。 随后通过 SAE 的 SLS 日志采集功能,把日志采集到 SLS 中。 3dd73f46-2862-11ed-ba43-dac502259ad0.png

最后,通过程序中日志的一些关键字,或者一些其他规则,例如 200 状态码比例等进行了报警配置。

3de82f18-2862-11ed-ba43-dac502259ad0.png

通过 Nginx 的日志完成监控大盘的配置。 3dfc3b84-2862-11ed-ba43-dac502259ad0.png

常见问题

Cloud Native

日志合并介绍

很多时候,我们需要采集日志,并不是单纯的一行一行采集,而是需要把多行日志合并成一行进行采集,例如 JAVA 的异常日志等。这个时候就需要用到日志合并功能了。

在 SLS 中,有多行模式的采集模式,这个模式需要用户设置一个正则表达式,用来做多行合并。 vector 采集也有类似的参数,multiline.start_pattern 用于设置新行的正则,符合此正则会被认为是一个新行。可以结合 multiline.mode 参数一起使用。更多参数请参看vector官网。

日志采集丢失分析

无论是 SLS 采集和 vector 采集到 Kafka 为了保证采集日志不丢失。都会将采集的点位(CheckPoint)信息保存到本地,如果遇到服务器意外关闭、进程崩溃等异常情况时,会从上一次记录的位置开始采集数据,尽量保证数据不会丢失。

但是这并不能保证日志一定不会丢失。在一些极端场景下,是有可能造成日志采集丢失的,例如: 1. K8s pod 进程崩溃,liveness 连续失败等异常导致 pod 重建 2. 日志轮转速度极快,例如1秒轮转1次。 3. 日志采集速度长期无法达到日志产生速度。 针对场景 2,3,需要去检查自身的应用程序,是否打印了过多不必要的日志,或者日志轮转设置是否异常。因为正常情况下,这些情况不应该出现。针对场景 1,如果对日志要求非常严格,在 pod 重建后也不能丢失的话,可以将挂载的 NAS 作为日志保存路径,这样即使在 pod 重建后,日志也不会丢失。

总结

Cloud Native

本文着重介绍了 SAE 提供了多种日志采集方案,以及相关的架构,场景使用特点。总结起来三点:

1、SLS 采集适配性强,实用大多数场景

2、NAS 采集任何场景下都不会丢失,适合对日志要求非常严格的场景

3、Kafka 采集是对 SLS 采集的一种补充,有对日志需要二次加工处理,或者因为权限等原因无法使用 SLS 的场景,可以选择将日志采集到 Kafka 自己做搜集处理。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2953

    浏览量

    104496
  • PHP
    PHP
    +关注

    关注

    0

    文章

    452

    浏览量

    26632
  • 采集器
    +关注

    关注

    0

    文章

    192

    浏览量

    18154
  • SLS
    SLS
    +关注

    关注

    0

    文章

    15

    浏览量

    8897

原文标题:一文搞懂SAE日志采集架构

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    便携式示波器的技术原理和应用场景

    便携式示波器作为示波器的一种,具有体积小、重量轻、便于携带等特点,在多个领域有着广泛的应用。以下是对其技术原理和应用场景的详细介绍:一、技术原理便携式示波器的基本原理与传统示波器相同,都是通过
    发表于 10-24 14:31

    日志篇:模组日志总体介绍

    各种故障进行分析。 二、4G模组日志的几种类型界 4G 模组的日志有两种类型: 业务日志和底层日志。业务
    的头像 发表于 10-24 07:16 131次阅读
    <b class='flag-5'>日志</b>篇:模组<b class='flag-5'>日志</b>总体<b class='flag-5'>介绍</b>

    高速数字化仪的技术原理和应用场景

    高速数字化仪是一种用于采集高速模拟信号,并将其转换为数字信号进行处理和储存的设备。以下是对其技术原理和应用场景的详细介绍:一、技术原理 采样:高速数字化仪的采样率是指每秒钟采样多少次,采样率越高
    发表于 10-21 14:34

    智能IC卡测试设备的技术原理和应用场景

    智能IC卡测试设备的技术原理和应用场景,可以从以下几个方面进行阐述:技术原理智能IC卡测试设备的技术原理主要围绕IC卡的通信和数据处理机制展开。IC卡(包括智能IC卡)通常内置有微电子芯片,该芯片
    发表于 09-26 14:27

    国产光耦继电器的性能特点及应用场景

    光耦继电器作为一种重要的电子元件,广泛应用于各种电气设备和系统中。近年来,随着我国科技水平的提升和对新能源的重视,国产光耦继电器在性能和应用范围上都有了显著的进步。本文将深入探讨国产光耦继电器的性能特点及其在不同领域的应
    的头像 发表于 07-26 14:04 327次阅读
    国产光耦继电器的性能<b class='flag-5'>特点</b>及应<b class='flag-5'>用场景</b>

    opc数据采集平台的应用场景

    OPC数据采集平台广泛应用于各种工业自动化和物联网领域,以下是一些典型的应用场景: 1. 制造业:在制造业中,OPC数据采集平台用于监控和控制生产线上的
    的头像 发表于 07-26 14:02 317次阅读

    海外大带宽云服务器的特点及应用场景

    海外大带宽云服务器因其能提供快速、稳定的数据传输服务,对于需求大流量处理和全球覆盖的业务尤为关键。以下是关于海外大带宽云服务器的详细探讨,以及一些相关的注意事项和应用场景,rak部落小编为您整理发布海外大带宽云服务器的特点及应用场景
    的头像 发表于 07-04 09:22 223次阅读

    数据采集网关的功能和应用场景

    随着信息技术的飞速发展,物联网系统在各行业的应用越来越广泛,数据采集网关作为物联网系统中的重要组成部分,发挥着至关重要的作用。本文将详细介绍数据采集网关的功能及应用场景,以便读者更好地
    的头像 发表于 06-13 15:22 615次阅读
    数据<b class='flag-5'>采集</b>网关的功能和应<b class='flag-5'>用场景</b>

    电池的常见类型及其特点

    电池,作为现代社会中不可或缺的能源供应设备,广泛应用于各个领域,从便携式电子设备到大型工业设备,甚至包括新能源汽车等。随着科技的进步,电池的种类也日益增多,每种电池都有其独特的特点和应用场景。本文将详细介绍几种常见的电池类型
    的头像 发表于 05-21 16:41 4603次阅读

    工业数据采集网关的功能、特点、应用场景及其实操性

    随着工业4.0和物联网(IoT)技术的深入发展,工业数据采集网关作为连接现场设备与上层管理系统的关键节点,其在智能工厂中的作用愈发凸显。本文将深入探讨工业数据采集网关的功能、特点、应用场景
    的头像 发表于 05-15 15:35 777次阅读
    工业数据<b class='flag-5'>采集</b>网关的功能、<b class='flag-5'>特点</b>、应<b class='flag-5'>用场景</b><b class='flag-5'>及其</b>实操性

    无功补偿装置的安装方式

    无功补偿装置的安装方式通常根据具体的应用场景和电力系统的需求来决定,以下是一些常见的安装方式及其特点
    的头像 发表于 04-24 14:18 480次阅读

    NanoEdge AI的技术原理、应用场景及优势

    硬件设计则是为了确保设备在执行这些任务时能够保持低能耗,从而提高其续航能力。 2、应用场景 NanoEdge AI 可以广泛应用于各种物联网设备和传感器,如智能家居、工业自动化、智能交通、医疗健康
    发表于 03-12 08:09

    AG32VF-MIPI应用场景

    to 1.2Gbps MIPI D-PHY以及DSI硬核 AG32VF-MIPI的应用场景,包括了基本的MIPI屏幕驱动,以及各种显示桥接场合,如下图所示。 AG32VF-MIPI系列产品即将正式发布。
    发表于 01-22 08:56

    接地系统的几种方式及其用场

    接地系统的几种方式及其用场合 接地系统是指将电气设备或设备的外部金属部分连接到地面的一种设施,用于保护设备和用户的安全。接地系统的主要作用是将故障电流迅速引入地下,确保设备处于安全的工作状态。根据
    的头像 发表于 12-26 13:42 1532次阅读

    ARM核心板的基本原理、特点和应用场景

    ARM核心板是一种基于ARM架构的开发板,它集成了ARM处理器、存储器、通信接口等多种功能模块,可以用于各种嵌入式系统的开发和应用。本文将介绍ARM核心板的基本原理、特点和应用场景。一
    的头像 发表于 11-21 16:13 6325次阅读
    ARM核心板的基本原理、<b class='flag-5'>特点</b>和应<b class='flag-5'>用场景</b>