多模式日志数据流的实时加工与集散-阿里云开发者社区

开发者社区> 灵圣> 正文

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

简介: 日志处理是一个极其繁琐的过程,究其原因是日志的边界情况特别多,而且可能随时在变。阿里云 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 数据加工服务可以便捷的完成需求。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8209 0
MongoDB应用案例:使用 MongoDB 存储日志数据
线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误、警告、及用户行为等信息,通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题,但当产生大量的日志之后,要想从大量日志里挖掘出有价值的内容,则需要对数据进行进一步的存储和分析。 本文以存储 web 服务的访问日志为例,介
11372 0
SpringBoot中logback日志保存到mongoDB
版权声明:本文为博主武伟峰原创文章,转载请注明地址http://blog.csdn.net/tianyaleixiaowu。 前面提到过logback输出日志的多种方式,这一篇看一下自定义Appender,将logback输出的日志保存到mongo中。
1198 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
9995 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
11802 0
Docker时代——如何实现日志数据一键上云
1 准备工作 1.1 开通MaxCompute服务 参考使用MaxCompute的准备工作 1.2 开通Datahub服务 进入Datahub Web控制台,创建project(注意:首次使用的用户需要申请开通) 1.3 安装Docker环境 Docker官方说明了在不同操作系统下安装Docker的方法,您可以点击此处查看。
3891 0
一文深度解读阿里云CDN实时日志的前世今生:挖掘实时数据的无限价值
阿里云CDN实时日志服务可以将CDN采集的日志,秒级的交付给用户, 并且可以对采集到的日志进行实时、交互式分析和报表呈现,为监控、报警、渠道分析、运营分析提供实时、可靠的数据参考,让用户远离锁事,专注数据价值。
4470 0
+关注
16
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载