SREWorks v1.5 版本发布 | 基于实时作业平台的日志聚类开源

news2024/11/29 2:35:38

在经过v1.0~v1.4四个版本迭代后,SREWorks的核心底座已经表现出极高的稳定性和成熟性。在v1.5版本中,SREWorks开发团队在核心底座上,进行了较多的数智化能力迭代。同时,在数智能力迭代过程中,我们也维持着与SREWorks用户较高的沟通频率。我们发现大家普遍对于监控数据之上的数智化能力比较关注,于是我们在这些点上做了一些深挖分析,发现普遍都会遇到这样几个问题:

  1. 自研监控系统在数据体量上升后,可靠性下降。
  2. 日志等各类非结构化的数据引入,导致工程复杂性急剧上升,实时性方面也面临更大的挑战。
  3. 简单的表达式(expression)往往无法满足业务多样化的监控需求。

于是很多用户选择从自研监控系统切换至流计算引擎Flink,但是Flink Job本身的使用门槛以及运维又成为一大难题。SREWorks开发团队经过多轮的分析研究,决定将这些问题拆成两阶段解决:

  1. 降低Flink Job的使用门槛,赋能SRE将运维需求快速转化为计算力,使SRE能够真正具备touch数据的能力。
  2. 利用SREWorks工程能力构建开源Flink运维产品,进一步降低Flink运维难度。

在v1.5版本中,我们先将完成阶段1的开源,同时在实时作业平台之上,我们会引入大家呼声较高的日志聚类作为这种数智能力的最佳实践:通过Flink ML极大地提升海量日志的实时聚合效率。有关阶段2,近期会披露一篇有关Flink智能诊断利器——Flink Advisor介绍,本文暂不展开。下面先开始阶段1的开源产品:实时作业平台。

实时作业平台

在SREWorks刚开源的一段时间里,因为SREWorks中包含了社区版的Ververica Platform来管理Flink Job,有段时间,社区版vvp的使用答疑居然占据了我们大部分和用户沟通时间。于是经过这些需求的沉淀和打磨,我们将实时处理链路也集成到作业平台中,作业平台中的作业分为定时作业 和 实时作业:

  • 定时作业提供分钟级的作业执行调度,适用于小数据量、低时效性的批处理场景。
  • 实时作业基于 Flink + 社区版Ververica Platform 提供实时作业管理。

image.png

在收集了大量的用户反馈之后,我们决定将SRE较习惯的Step By Step的步骤型的编排作业能力融合到实时作业中去,进一步降低SRE的使用门槛,最终功能如下图所示:图片我们将一个Flink Job拆成了三种结构便于管理:

  • 输入源: 对应Flink的Source源,可有多个输入源。
  • Python处理:对应Flink汇总的处理过程,当前基于pyFlink,可直接编写Python脚本,也可以根据业务需求拆分成多个Python处理过程。
  • 输出:对应Flink的Sink,可有多个输出。

输入源&输出

在输入输出这块,我们直接读取Ververica Platform已经注册的Connector供用户选择,以及在配置参数时的下拉提醒,极大地避免用户手写CREATE TABLE时候字段及参数的疏漏。图片

运行环境

常使用Python的同学可以知道,Python运行环境管理是一个比较麻烦的问题:如果使用Docker镜像来管理出包过程过于冗长,如果使用requirements来进行管理又常常会遇到包装不上的问题。于是实时作业平台中,我们做了一个折中的处理,使用Python虚拟环境来进行管理。图片

图片

同时,我们也对环境这个概念进行了组合化的扩展:Flink的容器镜像、PyFlink的运行时Jar包等一系列的对象,都算作环境中的设置。由于环境收敛了所有的可变资源,大大降低SRE维护作业的复杂度,原本多个运行时资源间版本不兼容的问题一去不复返,所有同一环境作业,都使用同一组合。

当前v1.5提供两个环境可用:flink-ml 和 default,环境的自主管理能力会在下个版本上线。

Flink作业运维

实时作业平台做了较多抽象,简化了作业提交的流程,但在Flink作业运维上我们深知其中的复杂度,并没有额外做过多的包装,直接使用Flink Dashboard作为运行中的观测平台,方便熟悉Flink的同学快速上手排查问题。下图为实时作业平台中启动作业的Flink Dashboard页面:图片

日志聚类

在实时作业平台之上,本次v1.5版本同时开源了日志聚类算法,有关算法原理可以参考《基于Flink ML搭建的智能运维算法服务及应用》,本文主要阐述开源工程实践。

日志聚类的算法代码位于目录https://github.com/alibaba/SREWorks/tree/master/saas/aiops/api/log-clustering

├── db-init.py
├── log-clustering-job
│   ├── pythons
│   │   └── log_cluster_pattern.py
│   ├── settings.json
│   ├── sinks
│   │   └── pattern_output.json
│   ├── sources
│   │   └── log_input.json
│   └── template.py
└── ...

目录主要由两部分组成:

  • db-init.py:特征工程的数据库初始化,需要用少量典型的日志样本初始化日志关键词列表以及日志样板特征。
  • log-clustering-job/*:日志聚类算法作业,在v1.5版本中已默认导入至作业平台中,手工将其打成zip包导入亦能实现相同的效果。

下面我们基于这个开源工程,完成一次完整的日志聚类的实践。本次实践的输入为kafka(SREWorks内置的kafka)的日志流,输出为MySQL中的特征库。

image.png

STEP 1 特征工程初始化

我们本次实践以SREWorks中应用引擎(AppManager)日志为例:

先用标签name=sreworks-appmanager-server查询出AppManager Pod的名称,这个标签在后面采集的时候还会被用到。

$ kubectl get pods -l name=sreworks-appmanager-server -n sreworks
NAME                                         READY   STATUS    RESTARTS   AGE
sreworks-appmanager-server-c9b6c7776-m98wn   1/1     Running   0          5h39m

然后提取该Pod的少量日志作为初始化日志样本,存储文件名为 example.log

kubectl logs --tail=100 sreworks-appmanager-server-c9b6c7776-m98wn -n sreworks > example.log`

example.log里面日志的内容大概是这样:

[2023-05-26 21:46:02 525] DEBUG [http-nio-7001-exec-6][o.s.web.servlet.DispatcherServlet:119]- GET "/realtime/app-instances?stageIdList=prod&appId=&clusterId=1id&optionKey=source&optionValue=app", parameters={masked}
[2023-05-26 21:46:02 526] DEBUG [http-nio-7001-exec-6][o.s.w.s.m.m.a.RequestMappingHandlerMapping:522]- Mapped to com.alibaba.tesla.appmanager.server.controller.RtAppInstanceController#list(RtAppInstanceQueryReq, HttpServletRequest, OAuth2Authentication)
[2023-05-26 21:46:02 527] DEBUG [http-nio-7001-exec-6][o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor:268]- Using 'application/json', given [*/*] and supported [application/json, application/*+json]
[2023-05-26 21:46:02 527] DEBUG [http-nio-7001-exec-6][o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor:119]- Writing [TeslaBaseResult(code=200, message=SUCCESS, requestId=null, timestamp=1685137562527, data=Pagination( (truncated)...]
[2023-05-26 21:46:02 527] DEBUG [http-nio-7001-exec-6][o.s.web.servlet.DispatcherServlet:1131]- Completed 200 OK.
..

使用 db-init.py 进行特征工程数据库初始化,该动作会在数据库中增加一张表,并且将 example.log中的日志处理成特征行存入表中:

pyon3 ./db-init.py example.log --host *** --user *** --password *** --database *** --table***

这个数据库的连接变量记一下,在下一步中马上就会用到。

STEP 2 作业参数运行配置并启动

打开SREWorks中的实时作业平台,点开《日志聚类模式提取》这个作业对应的【运行参数】按钮,在启动参数中,将STEP1 中数据库连接参数填入:

image.png

填写完成后,我们可以直接点击作业启动。作业启动后,我们点击【运行中】的状态可以直接跳转到Flink Dashboard看到整个流计算处理链路已经准备就绪,但还没有日志输入。

image.png

STEP 3 日志采集输入并聚类

ilogtail是阿里云开源的可观测工具,在阿里云的采集场景中有着非常广泛的应用。ilogtail对于云原生的适配也非常好,采用DaemonSet的方式在每个Node中拉起,Pod中只要包含对应的label就会对其进行采集。

于是,我们可以通过运维市场,非常方便地将ilogtail安装进集群,同时安装的时候,对应的采集label配置为name=sreworks-appmanager-server即是对应用引擎(AppManager)进行日志采集。

image.png

在日志采集运行起来之后,通过Flink Dashboard我们可以看到原本空空的实时处理链路一下子就繁忙了起来,像一个工厂的流水线一样,每个运算单元都在不断地收发处理数据。图片通过查看MySQL中的特征(pattern)表,我们可以看到日志特征处理完之后已经被落到了我们在STEP 2中定义的MySQL表中。

图片

特征表中的几个关键点我们可以关注一下:

  • 特征表为日志的特征收敛,在初期数据量会迅速扩大,经过一段时间后,当没有新的特征之后,数据量会趋于平稳。
  • 特征表中的字段 pattern 为这行日志的摘要,字段 top_pattern 为聚类后处于中心的日志摘要,通过top_pattern我们可以很方便地统计出总共有几类日志,也可以看出每一类日志下有哪些日志。

如下图可以看到这些文本非常相似但又不同的debug日志,被聚到了同一个** top_pattern** 下。

image.png

日志聚类的实践应用

围绕日志聚类算法,可以展开很多数智化的实践。围绕《基于Flink ML搭建的智能运维算法服务及应用》已披露的案例,结合着上文的工程实践,我们可以再来看一下完整的链路:

image.png

  • STEP 3中我们查看的特征(pattern)表可以进一步演进为一个日志知识库,引导SRE结合运维经验来进行标注。
  • 日志知识库沉淀的日志输入答疑机器人作为答疑语料,快速解决用户问题,降低工单数量。

期待大家集成并使用日志聚类算法之后的反馈,同时SREWorks团队也会根据内部的运行效果和大家的反馈,持续打磨数智运维算法。

企业应用开发部署增强

在v1.5版本中,我们同样对底座的应用开发能力进行了增强,包含以下这些功能点:

  • 企业应用增加多分支开发能力,适配企业的多版本迭代需求。
  • 企业应用实例部署完整的OAM可视化。

image.png

在企业应用上,我们常常结合SREWorks一线用户的声音,将内部使用的强大能力通过产品化的打磨优化,提供给SREWorks的用户们。我们也会保持这种状态,期望云原生的应用开发模式和数智运维体系,能够助力企业聚焦业务价值,进行快速的功能产品发展迭代。

如何从当前版本升级到v1.5

  • 升级包含底座,页面可能会有5-10分钟的不可访问,请注意。
  • 用户自行开发的云原生应用不会受影响(不重启),SREWorks网关到应用的流量会有中断。
git clone http://github.com/alibaba/sreworks.git -b v1.5 sreworks

cd sreworks
./sbin/upgrade-cluster.sh --kubeconfig="****"

如在使用过程中遇到问题,欢迎各位在GitHub中提出Issues或Pull requests。

SREWorks开源地址: https://github.com/alibaba/sreworks

也欢迎各位加入钉钉群(群号:35853026)分享和交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.2.4 IP数据报(二)分析Wireshark捕获的数据帧

5.2.4 IP数据报(二)分析Wireshark捕获的数据帧 为了更好的理解IP数据报的格式,我们通过一个实例学习IP数据报的格式 例:使用数据报捕获工具Wireshark采集我自己主机传输的一条报文,其中有个数据帧的内容如图所示&…

凝心聚力,共创未来 | 2023 开放原子全球开源峰会 OpenCloudOS 社区年会即将启幕

近年来,随着云原生技术的不断发展,催生出越来越多的新场景。作为企业 IT 系统的底层技术,其操作系统所面临的问题也变得越来越复杂。面对云原生等新技术对操作系统提出的新挑战、新要求,如何凝聚生态合作伙伴的优势力量&#xff0…

AI|用过的AI工具都给你整理好了

AI|用过的AI工具都给你整理好了 最近两周冷静下来了,而且个人状况因为二阳有所影响,没有过多关注这些AI工具;前两天给公司伙伴分享的契机,整理了一下这两个月用过的一些AI工具,部分是日常工作也在使用的&a…

展望开源产业与数字经济未来|2023 开放原子全球开源峰会开源创新理论与实践分论坛即将启幕

开源创新社会实践催生伟大的理论,也需要伟大理论的指导。在这个数字化和信息化高速发展的时代,开源技术已经成为推动科技进步和创新的关键力量,仍在不断创新迭代的开源理论及其实践更是深刻影响着与开源行业深度绑定的数字经济的未来发展。 6…

如何将多张图片分别生成二维码?图片批量建码怎么做?

当我们想要将图片生成二维码时,一般会使用二维码生成器(免费在线二维码生成器-二维码在线制作-音视频二维码在线生成工具-机智熊二维码)来操作,只需要上传图片就可以一键生成二维码,操作非常的简单快捷。那么当我们需要…

1167 Cartesian Tree(37行代码+详细注释)

分数 30 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 A Cartesian tree is a binary tree constructed from a sequence of distinct numbers. The tree is heap-ordered, and an inorder traversal returns the original sequence. For example, given the sequence …

火山引擎DataLeap的Catalog系统搜索实践 (二):整体架构

整体架构 火山引擎DataLeap的Catalog搜索系统使用了开源的搜索引擎Elasticsearch进行基础的文档检索(Recall阶段),因此各种资产元数据会被存放到Elasticsearch中。整个系统包括4个主要的数据流程: 实时导入。资产元数据变更时相应…

华为路由器 IPSec VPN 配置

需求&#xff1a; 通过 IPSecVPN 实现上海与成都内网互通 拓扑图如下&#xff1a; 一、首先完成网络配置 1、R1 路由器设置 <Huawei>sys [Huawei]sys R1 [R1]un in en# 开启DHCP [R1]dhcp enable# 设置内网接口 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip addr 10.…

基于Springboot+Vue的校园招聘系统(进阶版)

本项目是一年前写的一个项目的升级版&#xff0c;因为某些原因将它作了一个升级改进&#xff0c; 好多兄弟来问有没有演示&#xff0c;现在先来写个说明&#xff01;&#xff01;&#xff01; 目录 一. &#x1f981; 前言二. &#x1f981; 开源代码与组件使用情况说明三. &am…

工作笔记-volta,package打包,

第一个 &#xff1a;前端项目启动错误 今天写前端工程的时候&#xff0c;运行了npm run dev&#xff0c;结果出现以下问题&#xff0c; 先认为是node版本原因&#xff0c;我的是14&#xff0c;同事说要切换到12&#xff0c;于是切到了12&#xff0c; 用到了volta , 安装和使用…

大咖云集共话AIGC,亚马逊云科技中国峰会亮点抢先看

充满想象的AIGC时代&#xff0c;企业如何抓住机遇实现双效提升&#xff1f;要说2023年科技圈顶流话题&#xff0c;非AIGC&#xff08;AI-generated Content&#xff0c;人工智能生成内容&#xff09;莫属。当前&#xff0c;以GPT模型为代表的AIGC正在持续渗透各行各业&#xff…

信道的数学模型

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 信道的数学模型广义…

OpenMMLab-AI实战营第二期-课程笔记-Class 1:开营仪式OpenMMLab概述

Class 1&#xff1a;开营仪式&OpenMMLab概述 文章目录 Class 1&#xff1a;开营仪式&OpenMMLab概述开营仪式OpenMMLab 简介why&#xff1f;when&#xff1f;what&#xff1f;for who&#xff1f;OpenMMLab 总体框架 二十分钟入门计算机视觉开源神器OpenMMLabOpenMMLab概…

SQL审核工具Yearning搭建及使用

一、背景 实际的业务场景中&#xff0c;我们难免会直接对生产库的数据进行修改。很多朋友都是发sql给运维&#xff0c;然后运维执行。过程不可控&#xff0c;出错几率很大。 而且没有审核&#xff0c;不知道提交的具体是什么sql&#xff0c;极有可能是删库跑路的sql&#xff0…

0基础学习VR全景平台篇第34篇:场景功能-沙盘功能

本期为大家带来蛙色VR平台&#xff0c;场景功能—沙盘功能的操作讲解。 功能位置示意 一、本功能将用在哪里&#xff1f; 沙盘功能&#xff0c;可将区域的平面图、卫星图、手绘图等上传或直接使用高德地图信息&#xff0c;嵌入在VR全景作品中呈现出来&#xff1b; 支持嵌入沙…

【OpenCV】OpenCV4.7.0 + Visual Studio 2019环境配置 + 运行opencv

本文目录 01、OpenCV的下载与安装02、Visual Studio 2019环境配置03、OpenCV接口测试 01、OpenCV的下载与安装 这里贴上网址&#xff1a; https://opencv.org/ 进入会看到主界面&#xff0c;跟着一步一步来下载就好&#xff1a; 当把上面这个下载下来之后&#xff0c;会得到一…

git merge和git rebase有什么区别?

git merge和git rebase有什么区别 git rebase和git merge是在日常开发中常用的用于分支合并的命令&#xff0c;也是非常容易误用的两个命令。本文将通过图文的方式去详解二者之间的区别。 git merge git merge会为本次的合并过程生成一条新的commit&#xff0c;并将该commit…

亚马逊云科技中国峰会带你玩转AIGC全攻略原

充满想象的AIGC时代&#xff0c;企业如何抓住机遇实现双效提升&#xff1f;要说2023年科技圈顶流话题&#xff0c;非AIGC&#xff08;AI-generated Content&#xff0c;人工智能生成内容&#xff09;莫属。当前&#xff0c;以GPT模型为代表的AIGC正在持续渗透各行各业&#xff…

LLVM for TVM

田海立CSDN 2023-06-01 本文简明列举LLVM作为target&#xff0c;如何集成到TVM里的。 {cmake/modules/LLVM.cmake} 0. 设置编译选项 -- USE_LLVM build option: - USE_LLVM: ON/OFF/<path to llvm-config> {set in cmake/config.cmake, and copy into build/} 1. 执行…

Linux系统上安装VScode且配置C/C++环境

Linux系统给人的印象一直是命令行的形式&#xff0c;今天终于长了见识&#xff0c;其实Linux系统也可以像Windows系统一样&#xff0c;安装、使用VScode软件 1 进入VScode官网下载VScode Linux安装版2 将下载到电脑上压缩包通过tcp指令传到Linux系统上3 在放置安装包的目录下通…