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

目录
相关文章
|
监控 API C++
利用C++构建PC端监控软件:实时屏幕录制
在今天的数字化世界中,监控软件变得越来越重要。无论是家庭用户需要监控他们的孩子,还是企业需要监控员工的电脑活动,实时屏幕录制是一种有效的方法。本文将向您介绍如何使用C++构建PC端监控软件,实现实时屏幕录制功能。此外,我们还将讨论如何自动提交监控到的数据到一个网站上。
482 0
|
18天前
|
数据采集 监控 数据可视化
Fortran 在单位网络监控软件数据处理中的应用
在数字化办公环境中,Fortran 语言凭借其高效性和强大的数值计算能力,在单位网络监控软件的数据处理中展现出独特优势。本文介绍了 Fortran 在数据采集、预处理和分析可视化三个阶段的应用,展示了其在保障网络安全稳定运行和有效管理方面的价值。
45 10
|
24天前
|
监控 安全 数据安全/隐私保护
系统监控软件有哪些
【10月更文挑战第17天】
33 10
|
3月前
|
存储 监控 Devops
|
JSON 监控 数据可视化
实时日志分析:通过Golang编写实时日志分析模块,加强公司监控管理软件的日志监控功能
在当今数字化时代,企业面临着庞大而复杂的网络环境,对实时监控和日志分析的需求变得日益迫切。本文将介绍如何使用Golang编写实时日志分析模块,以增强公司监控管理软件的日志监控功能。通过本文的指导,你将能够建立一个定制的实时日志分析系统,更好地监测和管理公司的网络活动。
333 0
|
数据采集 监控 前端开发
LS支持持续性能数据采集与监控
小王所在的公司最近在做降本增效,要求上半年每个人的微服务接口性能提升至少30%。小王思虑很久也没想到优化点,于是开始向ChatGPT寻求帮助。
204 0
LS支持持续性能数据采集与监控
|
监控 测试技术 API
移动端性能监测工具篇之U-APM
移动端性能监测工具篇之U-APM
374 0
|
测试技术 Linux 调度
实时优化: Linux实时的一些小概念
![](http://blog.iotwrt.com/images/realtime2.svg) 我们都知道对于机器人应用来说实时性很重要, 以及Linux不是一个实时系统, 但是说: * 实时性到底对我的程序有什么影响? * 默认情况下, Linux的实时性怎么样? * rt-linux 有什么用? 所以这里简单的做个实验, 来直观的认识一下. 注: 下面的测试数
1639 0
|
数据采集 大数据 索引
分布式数据采集软件较常规大数据采集软件的优势是什么?
为什么分布式数据采集软件能够收到互联网发展的青睐呢?大数据时代的发展,大数据在目前的企业发展,政府决策以及社会动态分析等等方面都发挥着重要的作用,如何在目前的互联网大平台下,实现大规模、快速采集数据成为焦点。
2239 0