多模式日志数据流的实时加工与集散

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储 OSS,内容安全 1000次 1年
简介: 日志处理是一个极其繁琐的过程,究其原因是日志的边界情况特别多,而且可能随时在变。阿里云 SLS 数据加工服务是专门针对日志规整、富化、集散等处理场景。本文主要介绍在多模式混杂的日志集散场景下,如何快速使用 SLS 数据加工服务完成需求。

概述

日志是我们在做系统运维时最重要的信息之一,其最大的优点是简单直接。不过在整个日志的生命周期里有这么一对很难调和的矛盾:输出和采集日志要求尽可能的简单便捷 vs 日志分析时需要数据格式化并能够按需存储。为了保证服务端的稳定,我们往往会将多种模式的日志数据采集到到统一的存储目标中(即更加偏向于矛盾前者),其原因也比较明显:

  • 业务系统在写日志时混合输出,采集端无法识别。这种情况十分常见,不同的代码风格、或者系统初期考虑不周等等都会出现。
  • 日志采集端做统一采集。这种情况一方面简化采集配置,方便管理;另一方面简单的采集过程也可以减少对业务服务器的压力。

随着日志应用场景越来越广,甚至很多已经将业务数据写入日志用于业务分析,以上矛盾越来越显现。为了能够尽量解决如上所述的输出加采集和分析之间的矛盾,一般会在使用日志数据分析前做预加工。针对如上的多模式数据计算,需要能满足如下2个需求:

  1. 不同的模式的数据需要使用其相应的计算逻辑,并分散输出到特定的下游目标中,以供特定的业务分析使用
  2. 多模式参数实现配置化,但需要增加新模式时不需要重启计算任务,而是直接修改配置即可生效

SLS 数据加工

阿里云 SLS 数据加工服务是专注于日志实时处理的平台,其主要特点是免运维、低代码。这里,我们看下如何使用 SLS 数据加工服务解决上文所述的多模式数据混合存储的场景需求。下文会使用阿里云 SLS 的术语,可参考其文档

SLS 日志流集散
如上图所示,如下是完整的日志数据链路:

  1. 业务系统包括3个模块A、B、C,其中A和B在同一台服务器上,日志输出到了同一个文件中。但是三个模块输出的日志模式是完全不一样(如下文)。
  2. 为了简化日志输出和采集,不对服务日志输出模式做调整,并将所有日志统一采集到到 logstore-0 中。该 logstore 用于存储原始数据,无法直接做分析使用。
  3. logstore-0 之上配置数据加工,数据加工需要完成3个需求:
    a. 获取日志模式配置,该配制可以存储在阿里云 OSS或者 RDS 中
    b. 针对数据应用相应的模式参数做解析
    c. 将解析后的数据输出到其特定的目标中
  4. 以上所有配置以后,就可以在对应的目标 logstore 中做相应的分析。其中A和B是提供业务人员直接在SLS上做统计分析,C则进一步进入数据下游。

这里假设A、B、C 3种数据模式都是 csv 格式,其数据列和分隔符都不一样,其处理结果最终需要分别输出到不同的 logstore 中:logstore-Alogstore-Blogstore-C。不同的日志模式配下:

A => #fields:"x,y,z" #sep:"," #target:"logstore-A"
B => #ields:"u,v"    #sep:"|" #target:"logstore-B"
C => #fields:"r,s,t" #sep:" " #target:"logstore-C"

配置详情

这里直接演示在阿里云控制台的配置详情。首先,我们需要准备数据模式。如上文所说,我们可以将模式存储在阿里云 OSS 或者 RDS 中,这里以 OSS 存储为例。将上文所说的模式打包成 JSON 文件 schemas.json,并上传至 OSS bucket 中,获取拥有读取该 bucket 权限的 access key,操作细节可参考 OSS 文档。模式文件内容参考如下:

{
  "A": {
    "fields": ["x", "y", "z"],
    "sep": ",",
    "target": "logstore-A"
  },
  "B": {
    "fields": ["u", "v"],
    "sep": "|",
    "target": "logstore-B"
  },
  "C": {
    "fields": ["r", "s", "t"],
    "sep": " ",
    "target": "logstore-C"
  }
}

接下来需要在 SLS 控制台配置数据加工。配置细节可以参考其 快速入门调试指南,这里主要介绍本文主题相关的配置。logstore-0 中原始数据如下图,所有数据信息都包含在 content 字段中,需要从中提取详细的字段:
原始数据

数据加工脚本如下,其是遵循 Python 语法的 DSL,其逻辑相比于直接编程实现有极大的简化:

e_set("schema_name", lst_get(str_split(v("content"), sep=":"), 0))
e_set("content", lst_get(str_split(v("content"), sep=":"), 1))
e_set(
    "schemas",
    res_oss_file(
        "oss-cn-shanghai.aliyuncs.com",
        "<access-key-id>",
        "<access-key-secret>",
        "<oss-bucket-name>",
        "schemas.json",
        format="json",
        change_detect_interval=3600,
    ),
)
e_set("schema", dct_get(v("schemas"), v("schema_name")))
e_csv("content", dct_get(v("schema"), "fields"), sep=dct_get(v("schema"), "sep"))
e_set("logstore", dct_get(v("schema"), "target"))
e_drop_fields("schemas", "schema", "schema_name", "content")
e_output(name=v("logstore"), project="sls-project", logstore=v("logstore"))

最终经过数据加工处理后的数据如图,可以看到数据已经被规整化,提取出了详细的字段信息,并输出到所需的下游 logstore 中:
截屏2021-10-08 下午1.38.42.png

总结

日志处理是一个极其繁琐的过程,究其原因是日志的边界情况特别多,而且可能随时在变。阿里云 SLS 数据加工服务是专门针对日志规整、富化、集散等处理场景。如上文所述,在多模式混杂的日志集散场景中,使用 SLS 数据加工服务可以便捷的完成需求。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
12460 117
|
7月前
|
SQL 运维 监控
SLS 数据加工全面升级,集成 SPL 语法
在系统开发、运维过程中,日志是最重要的信息之一,其最大的优点是简单直接。SLS 数据加工功能旨在解决非结构化的日志数据处理,当前全面升级,集成 SPL 语言、更强的数据处理性能、更优的使用成本。
18234 149
|
7月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8月前
|
关系型数据库 数据库
|
8月前
|
SQL 关系型数据库 MySQL
|
9月前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
87 0
|
9月前
|
SQL 消息中间件 缓存
Flink SQL中使用DEBUG模式来输出详细的日志信息,
Flink SQL中使用DEBUG模式来输出详细的日志信息,
350 0
|
弹性计算 监控 应用服务中间件
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
|
存储 监控
日志服务SLS全新发布按写入数据量计费模式节省计划
按写入数据量计费模式节省计划是一种“比按量计费更划算,比包年包月更灵活”的全新计费模式。支持0预付、全预付,您可以通过承诺在一定期限内消费一定的金额,获取比按量计费低至 50% 的价格。
349 0
|
9月前
|
JSON API 数据处理
Logtail 混合模式:使用插件处理文件日志
作为一个服务百万机器的日志采集 agent,Logtail 目前已经提供了包括日志切分、日志解析(完整正则、JSON、分隔符)、日志过滤在内的常见处理功能,能够应对绝大多数场景的处理需求。但有些时候,由于应用的历史原因或是本身业务日志的复杂性,单一功能可能无法满足所采集日志的处理需求,比如:日志可能...
171 1
Logtail 混合模式:使用插件处理文件日志