内容 采集 软件(阿里云CDN团队空见:开源的系统和应用采集软件Tsar)
优采云 发布时间: 2021-09-29 08:24内容 采集 软件(阿里云CDN团队空见:开源的系统和应用采集软件Tsar)
在开源人LinuxCon + ContainerCon + CloudOpen China(简称LC3))事件中,阿里云CDN团队的空想(一个花哨的名字)分享了开源系统和应用采集软件沙皇。公司的背景、设计思路和用途、模块开发和未来规划。
其实这是阿里巴巴在做系统或者应用监控的时候的一个想法。组队学员在实际使用过程中比较舒服,软件的扩展性、稳定性、易用性也比较好,所以目前在所有机器上都可以使用。部署,作为基础监控代理,提供稳定的数据支持,同时对外开源。
沙皇背景
对于在线SA/PE/R&D,他在开发一个软件并部署的时候,需要关注软件的运行情况,需要到顶部查看CPU/内存/网络等基本指标是否正常整个服务器的/IO都OK。为这些指标找出一些软件瓶颈和有针对性的优化。事实上,现在市场上有很多类似的软件,都具有一定的特殊性。它可能只是一块采集。每个软件采集都有不同的指标。这些指标的使用是不一致的。因此,对用户的要求非常高,需要了解所有监控软件的使用方法,对于在线排查问题非常不便。这也是我们最初的痛点。我们发现我们拥有所有数据,但如何链接和使用它是不方便的。于是,我们有了沙皇的想法。
下图展示了目前网上很多命令的使用。整个Linux站中各个级别都有一些对应的命令。运维等用户的学习学习成本非常高,不利于我们统一监控。
需求与解决方案
所以我们最初的需求是要有一个简单好用,基础数据齐全,最好有应用数据采集的软件。因为刚才列出的指标都是一般指标,但是我们有应用软件,我们想知道应用软件的一些数据,比如QPS和响应时间。目前开源软件无法支持,业务需要自己编写采集工具进行数据采集和监控。
另外,我们希望一些数据可以在数据之间进行关联。比如当前CPU高,是否会导致其他数据指标出现一些波动?需要比较这些指标来确定问题。
同时,要对数据进行实时离线过滤和查看,可以在本地长期存储,也可以远程发送,便于在中心进行一些数据分析和挖掘。
有了这些要求,我们的解决方案就是模仿Sar。sar本身就是一个系统活动报告,实现系统指标。我们在它的基础上做了一些扩展。除了系统级数据采集,Tsar还可以做应用级的采集,也可以模块化,支持扩展。例如,现在采集中有十个指标。如果还有其他的应用指标和业务数据想要去采集,你可以很方便的在Tsar写一个模块到采集。它还支持简单的报警和远程发送。
设计和使用
沙皇的原则很简单。它主要利用了动态库的特性。我们每个采集模块都会实现一些功能,比如采集功能,分析处理功能,注册时提供的模块。基本字段,比如模块名称,模块中收录的字段,其中字段来自采集,采集之后如何处理和输出,这些函数注册在Tsar框架中,去到采集每周期@>时调用这些指令的函数,即可完成采集的处理和整个数据的输出。
整个模块的注册和执行过程如下:
下图是沙皇功能的大图。底部是系统计数器和软件界面。每个具体的模块都引用了Sar,它实现了很多系统指标采集。此外,还针对应用软件提供了LVS、Nginx等对比。常用应用软件模块。
在上面的采集过程中,会对模块进行一些过滤处理,具体执行各个模块的采集函数,根据格式获取数据并进行格式化。框架将格式化数据并将其保存到 /var/log/tsar.data。我们采集所有的原创数据都以文件的形式存储。与Sar有所不同。Tsar里面的字段是可读的,Sar看不到里面的意思。
数据采集到达后,支持发送到远端,比如发送到网络接口,或者发送到MySql、Nagios等。另外,数据展示分为两部分,分为分为实时显示和历史显示。在实时显示中,您需要查看指标每秒的样子。历史显示是过去每一分钟数据的历史。回放。目前Tsar支持秒、分、天等不同维度的数据显示。
沙皇的用法
Tsar的用法比较简单,不管是什么模块,都共享这个用法。上面最常用的命令是check命令,输出系统最新的监控指标。有了这个功能,所有的基础软件采集基本上可以每分钟调用一次检查,拿到最后一分钟的监控数据,把这些数据带到我们的监控平台,在监控配置和集中处理里面做一些事情。此命令使用最频繁。
-c 是定时执行命令。这样你当前打开的模块的所有采集函数都会执行一次,获取数据,并将数据保存在tsar.data的原创文件中,以备后用。
-i 是指定一个间隔,多少秒或多少分钟。
下图是部分用法的截图。实时模式下,可以指定-l或--live,可以实时活采集模块数据,分析结果。如果不指定,则默认为离线。时间间隔,如果不指定-i,默认为秒和分,实时每秒显示采集,离线每分钟显示一次。您还可以指定一个模块 --mod_name。如果指定几个模块,则可以显示多个指标。这样你就可以在一个屏幕上显示你关注的指标,让你看到它们之间的影响和关系,从而找到问题的症结所在。
Tsar 还支持多个项目模块。有时一个系统指标有多个实例。这里体现了item的概念,可以更灵活的展示数据。另外,--check是查看我们最后一分钟的数据,它会在这一行显示最后一分钟的每个指标和字段,可以非常方便的进行一些监控处理。
Tsar 本身是一个独立的软件,可以为其他系统提供丰富的数据源输入。
下图是一个比较常见的配置,包括配置文件、指定模块、指定输出等。
下图展示了如何输出到Mysql和Nagios的配置方法。
定制开发
Tsar目前支持C、bash、Lua三种方式来开发自定义模块,里面有近100个应用模块。模块组成包括模块名称、描述信息、采集函数、显示函数等。Tsar本身也可以使用tsardevel的脚本自动生成一个模板,在这个模板的基础上进行修改,效率更高。
具体模块开发内容如下:
采集功能是详细捕获value_1/2/3。无论是在计数器文件中还是在界面中,您都可以获取该值。但是得到的值并不是要显示的最终值,而是瞬时值。
显示值需要通过数据显示功能进行处理和计算。display函数中的两个输入参数会告诉你你的采集的最后两个数组的数据是什么。通过两个数组的计算,最后得到的结果就是最终显示的数字。前面的内容做完之后,就可以在模块中生成注册函数了。以下是一些关键信息,例如模块名称。用法、模块字段数据结构、字段数、采集函数和显示函数。
至此,一个模块基本完成。
将来的计划
我们对沙皇的未来规划主要是三个方面。
第一个是跨平台的,对于某些Linux版本不是特别好,所以我们会在跨平台方面多做尝试。
二是完善框架。目前的框架比较大。如果单个模块有一些异常,整个 采集 都会挂起。在本节中,我们将解耦一些模块和框架之间的强依赖关系,希望能够更好地容灾。
三是丰富了一些模块。已经有很多常用的系统模块,内部的应用模块也比较丰富。我们也希望大家可以在开源区提供更多的模块,让我们能够支持更多类型的采集 一些。
目前,在阿里巴巴整个开源代码库中,外部贡献者并不多,十几个人,内部贡献代码的有100多人。欢迎访问主页和代码库。有任何问题也可以联系本文分享者:孔健。
•首页:/
•代码:/alibaba/tsar