【开源】Tsar——灵活的系统和应用采集软件

简介: 在开源人的盛会LinuxCon + ContainerCon + CloudOpen中国(简称LC3)大会上,阿里云CDN团队的空见(花名),为大家分享了开源的系统和应用采集软件Tsar的背景、设计思路和用法、模块开发以及未来规划。

在开源人的盛会LinuxCon + ContainerCon + CloudOpen中国(简称LC3)大会上,阿里云CDN团队的空见(花名),为大家分享了开源的系统和应用采集软件Tsar的背景、设计思路和用法、模块开发以及未来规划。

实际上它是阿里巴巴在做系统或应用监控时候的一个idea,团队同学在实际的使用过程中比较舒服,软件扩展性、稳定性、易用性也比较好,所以目前在所有机器上都有部署,作为基础监控agent,来提供稳定的数据支持,同时也对外开源。

Tsar的背景

对于线上SA/PE/研发来说,当他开发了一个软件并部署之后,需要关注软件的运行情况,需要到上面来看整个服务器的CPU/内存/网络/IO等基本的指标是否OK,针对这些指标找一些软件的瓶颈和针对性的优化。其实现在市面上类似的软件非常多,所有的软件都有一定的专用性,可能只是采集某一块的东西,每个软件采集的指标不同,这些指标时间的用法是不一致的。所以对于使用的人的要求非常高,需要知道所有的监控软件怎样使用,对于排查线上问题非常不方便。这也是我们最开始的痛点,我们发现所有的数据我们都有,但是怎样去联动和使用起来是不方便的事情。于是,我们就萌生了Tsar的想法。
image.png

下图是现在线上有的很多命令的使用,针对于整个Linux站里各个层级都有一些对应的命令,对于运维等使用人员的学习上手成本非常高,不利于我们统一做一些监控。
image.png

需求与解法

所以我们最开始的需求就是希望有一个简单易用,基础数据齐全,最好也有应用数据的采集软件。因为刚才列的都是通用指标,但是我们有应用软件,所以我们希望知道应用软件上的一些数据,比如QPS、响应时间。目前的开源软件是无法支持的,需要业务自己写采集工具,做数据收集和监控。

另外我们希望数据之间能做一些数据关联,比如说当前CPU高了,是不是带来了一些其他数据指标的波动,这些指标之间需要对照去看,才能确定问题出在哪。

同时,数据也要能过滤、实时离线查看,并且可以本地长时间保存,也能远程发送,方便在中心做一些数据的分析和挖掘。

有了这些需求,我们的解法是模仿Sar,Sar本身是系统活动报告,实现系统指标的采集,我们基于它做了一些扩展。Tsar除了做系统层面数据采集,还能做应用层面采集,还可以进行模块化,并支持扩展。比如现在采集了十个指标,如果有另外有应用指标和业务数据想去采集,可以很方便的在Tsar里去写个模块来采集。同时也支持简单的报警和发送远端。

设计和用法

Tsar的原理非常简单,主要是用了动态库的特性,我们每一个采集模块里面都会实现一些函数,比如采集函数、分析处理函数,还有注册的时候提供的模块的基本字段,比如模块名、模块包含的字段、字段从哪里采集、采集完之后如何处理和输出,这些函数注册到Tsar的框架里,每一个周期去采集的时候调用这些指令的函数,就可以完成整个数据的采集和输出的过程。

整个模块的注册执行过程如下图:

image.png

下图是Tsar功能性大图,最下面是系统计数器和软件接口,具体的每一个模块是参考Sar实现了很多系统指标的采集,另外对于应用软件也提供了LVS、Nginx等比较常见的应用软件模块。
image.png

在上面采集过程中,会对模块做一些过滤处理,具体执行每个模块的采集函数,拿到这些数据,按照格式化,框架会把数据做格式化,存到/var/log/tsar.data中。我们采集到所有的原始数据,是以文件的形式存储在上面的,这里有一个跟Sar的区别,Tsar里面的字段是可读的,Sar是无法看到这里面的含义的。

这些数据采集到之后,支持对远端的发送,比如发送到一个网络的接口上,或者发送到MySql、Nagios等。另外,数据的展现分两块,分为实时的展现和历史的展现,实时的展现就需要隔一秒看下指标是什么样子的,历史的展现是对过去的每一分钟数据做一下历史的回放。目前,Tsar支持秒级、分钟级、按天等不同维度的数据展现。

Tsar的用法

Tsar用法是比较简单的,不管哪种模块,都是共享这个用法的。上面最常见的就是check这个指令,就是把系统最近一次的监控指标输出出来。有了这个功能之后,所有的基础软件的采集基本上每分钟都可以调用一个check,拿到最近一分钟的监控数据,把这份数据拿到我们监控平台上,里面去做一些监控配置和中心化处理。这个指令是用的最为频繁的。

image.png
-c是一个定时执行的指令,通过这个方式,会把你当前开启的模块所有的采集函数都执行一遍,拿到数据,把数据存到tsar.data的原始文件里去,供以后使用。
-i就是指定一个间隔时间,多少秒或多少分钟。

下图是一些用法的截图,在实时模式下可以指定-l 或者--live,可以现场采集模块数据,实时分析结果,不指定默认是离线方式。时间间隔,-i不指定的话,默认是秒和分钟,实时是每秒采集显示,离线是每分钟显示。也可以指定模块, --mod_name,指定了几个模块,就展示几个指标。通过这种方式,可以把你关注的指标在一屏里显示出来,这样可以看到他们之间的影响和关系,从而找到问题的症结所在。

image.png

Tsar也支持多item模块,有的时候一个系统指标是有多个实例的,item概念就在这里体现,可以比较灵活的展示数据。另外,--check是看我们最后一分钟的数据,它会把最后一分钟每个指标和字段在这一行里展示出来,可以很方便的做一些监控处理。
image.png

本身Tsar是单机软件,可以给其他系统提供丰富的数据源输入。

下图是比较常见的配置,包括配置文件、指定模块、指定输出等。
image.png

下图是如何输出到Mysql和Nagios的配置办法。

image.png

定制开发

Tsar目前支持C,bash、Lua三种方式开发自定义模块,内部已经有近100个应用模块。模块组成包括模块名称、描述信息、采集函数、展现函数等,Tsar本身也可以利用tsardevel的脚本自动生成一个模板,在这个模版的基础上进行修改,比较高效。

image.png

具体模块开发内容如下图:

image.png

采集函数是对value_1/2/3进行具体的抓取,不管是去计数器文件,还是接口里,都可以把值拿到。但是拿到的值并不是最终要展现的值,而是瞬间的值。

image.png

展现的值要通过数据展现函数来进行处理运算,展现函数里的两个输入参数会告诉你,你采集的最近2个数组的数据是什么,通过对2个数组的运算,最后得出来的结果就是最终展现的数字。当前面几个内容都做好了之后,最后在模块里做一下注册函数的生成就好了,这里有几个关键信息,比如模块名称。使用方式、模块字段数据结构、字段个数、采集函数和展现函数。

image.png

至此,一个模块基本就完成了。

未来规划

我们对Tsar的未来规划,主要三个方面。

第一个是跨平台,对于某些Linux版本支持的不是特别好,所以在跨平台方面我们会多多尝试。
第二个完善框架,目前框架比较大的问题,单个模块出现一些异常,整个采集就会挂掉,这块我们会去解耦一些模块和框架的强依赖关系,希望容灾性更好。
第三是丰富一些模块,常见的系统模块已经很多,内部的应用模块也比较丰富了,我们也希望开源这块大家可以多提供一些模块进来,能让我们支持的采集种类更丰富一些。

目前在阿里巴巴整个开源代码库里,外部的贡献者不多,十几个,内部有超过一百人在贡献代码,首页和代码库欢迎大家访问。有任何问题也可以联系本文分享者:空见。

image.png

•首页: http://tsar.taobao.org/
•代码: https://github.com/alibaba/tsar

活动推荐

【TechDay】阿里云CDN Tengine开源技术沙龙-上海站,将在8月29日下午阿里虹桥中心展开,多位专家现场探讨CDN QUIC、TLSv1.3、直播、Tengine实践等话题,参与活动即可赢取阿里云定制礼品,点击了解活动详情与报名:https://yq.aliyun.com/event/359

目录
相关文章
|
7月前
|
数据采集 机器学习/深度学习 自然语言处理
数据清洗怎么做?一文总结8大数据清洗方法
本文系统总结8大数据清洗核心方法:处理缺失值、重复数据、异常值;统一数据类型、标准化/归一化;解决格式/单位/编码不一致;分类变量特征编码;文本数据清洗。助你提升数据质量,夯实分析建模基础。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
消息中间件 NoSQL 调度
学Python的别告诉我你还不造celery是干嘛的
​写python的别告诉我你还不造celery干嘛的。Celery是一个简单、灵活且可靠的分布式任务队列系统,用于处理大量消息,提供实时处理,以及异步任务执行。其核心原理包括任务队列、消息传递、任务调度和任务执行。
|
域名解析 网络协议 Ubuntu
【域名解析DNS专栏】搭建私有DNS服务器:从BIND到CoreDNS的选择
【5月更文挑战第26天】本文对比了两种流行的DNS服务器软件BIND和CoreDNS。BIND以其稳定性及丰富功能著称,广泛兼容各类平台,适合复杂环境;CoreDNS则以其高性能、模块化设计和易用性脱颖而出。根据需求、资源和技术水平,用户可选择适合自己的DNS服务器。安装示例包括BIND在Ubuntu上的apt安装及基本配置,以及CoreDNS的snap安装和YAML配置。
2243 0
|
边缘计算 计算机视觉 异构计算
【YOLOv8改进 - 特征融合NECK】Slim-neck:目标检测新范式,既轻量又涨点
YOLO目标检测专栏探讨了模型优化,提出GSConv和Slim-Neck设计,以实现轻量级模型的高效检测。GSConv减小计算复杂度,保持准确性,适合实时任务。Slim-Neck结合GSConv优化架构,提高计算成本效益。在Tesla T4上,改进后的检测器以100FPS处理SODA10M数据集,mAP0.5达70.9%。论文和代码可在提供的链接中获取。文章还介绍了YOLOv8中GSConv的实现细节。更多配置信息见相关链接。
|
人工智能 前端开发 JavaScript
人工智能文生图技术介绍
文生图技术将文字描述转化为图像,免除了设计师的参与。它分为"代码式"和"AI"两类。代码式如PlantUML、Mermaid和Reveal.js,适合开发人员通过特定语法创建图表。AI文生图如MidJourney和文心一言,能根据文本生成图像,MidJourney在文生图领域表现突出。这些工具为不同工作场景提供了便利。
人工智能文生图技术介绍
|
数据管理
产品更新|子表单/关联表单、数据导入导出、版本权益等多项能力升级!
本期功能更新已全量发布,可直接在宜搭内体验。
1315 2
产品更新|子表单/关联表单、数据导入导出、版本权益等多项能力升级!
|
弹性计算
阿里云2核4G服务器优惠价格表_2024年最新整理报价
阿里云2核4G服务器多少钱一年?2核4G服务器1个月费用多少?2核4G服务器30元3个月、85元一年,轻量应用服务器2核4G4M带宽165元一年,企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1云服务器,阿里云百科整理官方活动链接
1735 0

热门文章

最新文章