【开源】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

目录
相关文章
|
19小时前
|
数据采集 存储 监控
Java爬虫:数据采集的强大工具
在数据驱动的时代,Java爬虫技术凭借其强大的功能和灵活性,成为企业获取市场信息、用户行为及竞争情报的关键工具。本文详细介绍了Java爬虫的工作原理、应用场景、构建方法及其重要性,强调了在合法合规的前提下,如何有效利用Java爬虫技术为企业决策提供支持。
|
21天前
|
数据采集 存储 监控
公司监控软件:基于 PHP 的分布式监控系统设计
本文介绍了基于 PHP 的分布式监控系统的设计与实现。该系统包括监控节点、数据采集模块、数据传输模块和监控中心,能够高效地收集、传输和分析各节点的数据,确保系统的稳定运行和安全防护。通过示例代码展示了数据采集、传输及存储的具体实现方法,并强调了安全与可靠性的重要性。
38 3
|
3月前
|
Prometheus 监控 数据可视化
Grafana 插件生态系统:扩展你的监控能力
【8月更文第29天】Grafana 是一个流行的开源平台,用于创建和共享统计数据的仪表板和可视化。除了内置的支持,Grafana 还有一个强大的插件生态系统,允许用户通过安装插件来扩展其功能。本文将介绍一些 Grafana 社区提供的插件,并探讨它们如何增强仪表盘的功能性。
256 1
|
3月前
|
Prometheus 监控 Cloud Native
【揭秘可观测性】构建完美参考框架,打造系统监控的瑞士军刀!
【8月更文挑战第25天】在现代软件设计中,可观测性是确保系统稳定性和效率的关键因素。它主要由日志、指标及链路追踪(统称LMx)三大核心组件构成。本文详细介绍了构建高效可观测性框架的六个步骤:需求分析、工具选择、数据收集策略设计、实施集成、数据可视化及持续优化。并通过一个Spring Boot应用集成Prometheus和Micrometer收集指标的示例,展示了具体实践方法。合理构建可观测性框架能显著提升团队对软件系统的管理和监控能力,进而增强系统整体性能和可靠性。
76 2
|
3月前
|
存储 监控 Devops
|
JSON 监控 数据可视化
实时日志分析:通过Golang编写实时日志分析模块,加强公司监控管理软件的日志监控功能
在当今数字化时代,企业面临着庞大而复杂的网络环境,对实时监控和日志分析的需求变得日益迫切。本文将介绍如何使用Golang编写实时日志分析模块,以增强公司监控管理软件的日志监控功能。通过本文的指导,你将能够建立一个定制的实时日志分析系统,更好地监测和管理公司的网络活动。
334 0
|
6月前
|
弹性计算 运维 监控
【最佳实践】主机场景下如何使用ilogtail采集超大规模文件
目标读者数字化系统开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。使用场景客户的某些场景下,业务拆分的比较细,每个业务会定时输出一个日志文件(比如每小时输出一个文件),那么在一台机器上,可能会产生大量的日志文件。由于某些原因,用户不想在业务服务器上安装采集端,因此采用比...
392 0
【最佳实践】主机场景下如何使用ilogtail采集超大规模文件
|
数据采集 监控 前端开发
LS支持持续性能数据采集与监控
小王所在的公司最近在做降本增效,要求上半年每个人的微服务接口性能提升至少30%。小王思虑很久也没想到优化点,于是开始向ChatGPT寻求帮助。
205 0
LS支持持续性能数据采集与监控
|
监控 测试技术 API
移动端性能监测工具篇之U-APM
移动端性能监测工具篇之U-APM
377 0
下一篇
无影云桌面