在github上有3块tsar代码,分别为:
1 tsar 项目, tsar项目 https://github.com/alibaba/tsar
2 tsar 添加自定义nginx监控模块 tsar_nginx_mod https://github.com/taobao/tsar-mod_nginx
3 tsar结果导出到mysql tsar2db https://github.com/alibaba/tsar2db
这里介绍
一 tsar安装使用
二 自定义添加nginx_mod监控模块
tsar 介绍:
简介
tsar是淘宝自己开发的一个采集工具,主要用来收集服务器的系统信息(如cpu,io,mem,tcp等),以及应用数据(如squid haproxy nginx等)。
收集到的数据存储在磁盘上,可以随时查询历史信息,输出方式灵活多样,另外支持将数据存储到mysql中,也可以将数据发送到nagios报警服务器。
tsar在展示数据时,可以指定模块,并且可以对多条信息的数据进行merge输出,带–live参数可以输出秒级的实时信息。
总体架构
Tsar是基于模块化设计的程序,程序有两部分组成:框架和模块。
框架程序源代码主要在src目录,而模块源代码主要在modules目录中。
框架提供对配置文件的解析,模块的加载,命令行参数的解析,应用模块的接口对模块原始数据的解析与输出。 模块提供接口给框架调用。
tsar依赖与cron每分钟执行采集数据,因此它需要系统安装并启用crond,安装后,tsar每分钟会执行tsar –cron来定时采集信息,并且记录到原始日志文件。
tsar的运行流程图如下:
主要执行流程有:
1.解析输入
根据用户的输入,初始化一些全局信息,如间隔时间,是否merge,是否指定模块,运行模式
2.读取配置文件信息
主要解析tsar的配置文件,如果include生效,则会解析include的配置文件
配置文件用来获得tsar需要加载的模块,输出方式,每一类输出方式包含的模块,和此输出方式的接收信息
如mod_cpu on代表采集cpu的信息
output_interface file,nagios表示向文件和nagios服务器发送采集信息和报警信息
3.加载相应模块
根据配置文件的模块开启关闭情况,将模块的动态库load到系统
4.tsar的三种运行模式
tsar在运行的时候有三种模式:
print模式仅仅输出指定的模块信息,默认显示最近一天的;
live模式是输出当前信息,可以精确到秒级
cron模式,此一般是crontab定时执行,每一分钟采集一次所有配置的模块信息,并将数据写入原始文件,在cron运行的时候 会判断是否配置输出到db或者nagios,如果配置则将相应格式的数据输出到对应接口。
5.释放资源
程序最后,释放动态库,程序结束
一 tsar安装
从github上检出代码:
$git clone git://github.com/kongjian/tsar.git
$cd tsar
$make
$make install
或者直接从github上下载源码
$wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip
$unzip tsar.zip
$cd tsar
$make
$make install
tsar-master目录下
安装 tsardevel
make tsardevel
安装完有4个配置文件
/etc/tsar/tsar.conf
, which is tsar’s main configuration file;/etc/cron.d/tsar
, is used to run tsar to collect information every minute;/etc/logrotate.d/tsar
will rotate tsar’s log files every month;/usr/local/tsar/modules
is the directory where all module libraries (*.so) are located;
安装完使用tsar -l 实时输出信息 5秒一次
tsar -l -i 2 两秒一次
看到上面有nginx的信息,其中包括指标 qps rt 是我已经配置好的,
与 /etc/tsar/tsar.conf 中的配置无关,我没有使用这里的配置
这里肯定也能监控nginx ,我没有实验,我用的是添加nginx监控模块,tsar_nginx_mod https://github.com/taobao/tsar-mod_nginx
我对比过这个监控模块的代码和默认的nginx模块代码, 监控模块比默认的代码多很多。
配置
debug_level 指定tsar的运行级别,主要用来调试使用
mod_xxx on/off 开启指定模块
out_interface 设置输出类型,支持file,nagios,db
out_stdio_mod 设置用户终端默认显示的模块
output_db_mod 设置哪些模块输出到数据库
output_db_addr 数据库的ip和端口
output_nagios_mod 设置哪些模块输出到nagios
include 支持include配置,主要用来加载用户的自定义模块
二 添加自定义nginx监控模块
1 安装tsardevel 下载地址: http://code.taobao.org/p/tsar/wiki/get/
2 从 github tsar_nginx_mod https://github.com/taobao/tsar-mod_nginx 下载nginx监控模块文件, 其实就一个 .c文件
tsardevel nginx 默认在当前目录想创建nginx目录,
里面有文件makefile mod_nginx.c mod_nginx.conf
用上述github下载的文件替换掉 mod_nginx.c文件
然后make && make install 即可
3、nginx模块不能用问题的处理
此时通过使用tsar –nginx –live -i 1 命令查看,发现所有的结果值都是横线。出现该问题的原因非常简单,因为nginx没有开启status统计页面 。因为该工具统计的原理是通过获取status页面的输出结果,并对输出内容进行统计和计算得出的结果。而且其获取状态页的url默认是http://127.0.0.1/nginx_status ,所以在nginx上你必须有如下的配置:
注:以上的url并非不能更改,可以修改环境变量实现。其自带的几个环境变量如下。
tsar 监控的cpu 内存 等信息是安装tsar本机的
但是nginx模块监控的nginx可以是远程的
只要修改上述四个变量即可
例如
export NGX_TSAR_HOST=x.x.x.x
export NGX_TSAR_PORT=80
export NGX_TSAR_SERVER_NAME=www.xxxx.com
export NGX_TSAR_URI=/ngx_status
我监控的结果如下:
结尾: 1这里没有 tsar2db的例子
2 如果想用1台服务器监控多台服务器的nginx
如果想监控多台服务器, 是否可以在每台服务器上安装tsar, 然后输出到同一个mysqldb。