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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 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日志并进行多维度分析。
目录
相关文章
|
3月前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
40 0
|
5月前
|
SQL 消息中间件 缓存
Flink SQL中使用DEBUG模式来输出详细的日志信息,
Flink SQL中使用DEBUG模式来输出详细的日志信息,
143 0
|
8月前
|
弹性计算 监控 应用服务中间件
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
247 0
|
8月前
|
存储 监控
日志服务SLS全新发布按写入数据量计费模式节省计划
按写入数据量计费模式节省计划是一种“比按量计费更划算,比包年包月更灵活”的全新计费模式。支持0预付、全预付,您可以通过承诺在一定期限内消费一定的金额,获取比按量计费低至 50% 的价格。
219 0
|
8月前
|
存储 SQL 运维
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%
数据更安全、计费更灵活  阿里云日志服务SLS内核全面升级
815 0
阿里云日志服务SLS全面升级:秒级处理数千亿行日志、新计费模式可省32%
|
10月前
|
存储 监控 数据可视化
日志服务 SLS 全新发布按写入数据量计费模式
日志服务 SLS 全新推出的按写入数据量计费模式让 SLS 更普惠、更易用!仅收取原始数据(非压缩)写入费用、存储费用以及外网数据流量费用,帮助用户购买更简单、费用可预期、轻松拓展更丰富场景。
1885 0
|
12月前
|
JSON 数据格式 Python
SLS数据加工对Json数据解析与更新
本文档介绍对于包含Json格式字段的日志如何进行解析。 ## 场景一:Json对象展开与提取 日志中包含Json对象,通过e_json进行字段展开与对象提取 **示例1: Json一层展开** * 原始日志 ``` data: {"k1": "v1", "k2": {"k3": "v3", "k4": "v4"}} ``` * 加工规则 ```python e_json("data", de
|
存储 运维 监控
游戏日志分析准备:如何对游戏业务日志关联云数据库Redis做富化加工
随着移动互联网的发展,游戏几乎是进入快餐式消费时代,游戏公司也会面临方方面面的挑战,为了获得最佳的游戏运营方案,游戏公司希望将用户游戏日志与用户元数据进行联合分析。
183 0
游戏日志分析准备:如何对游戏业务日志关联云数据库Redis做富化加工
|
存储 数据采集 运维
基于SLS与表格存储对电商平台用户行为日志进行加工富化
网络时代中电商平台在企业和商家的品牌推广、商品和服务销售等环节发挥着日益重要的作用。但随着国内互联网行业人口红利的逐渐消失,电商平台间竞赛逐渐进入了下半场。运营模式和发展战略正不断向精细化、增转存方向转变。
285 0
|
监控 架构师 小程序
网站流量日志分析—数仓设计--维度建模三种模式|学习笔记
快速学习网站流量日志分析—数仓设计--维度建模三种模式
277 0
网站流量日志分析—数仓设计--维度建模三种模式|学习笔记