(转)淘宝系统信息采集和监控工具tsar

时间:2021-01-03 23:14:51
淘宝系统信息采集和监控工具tsar

项目地址:https://github.com/alibaba/tsar

 

一.介绍

Tsar是淘宝的系统信息采集和监测工具,主要用来收集服务器的系统信息(如cpu,io,mem,tcp等)以及应用数据(如squid haproxy nginx等),这些信息可以保存在本地磁盘或者发送到Nagios中;

tsar支持实时查看和历史查看,方便了解应用和服务器的信息,且模块化的设计利于通过开发新模块来扩展新的功能,非常方便。

二.安装

方式1:

$ wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip --no-check-certificate

$ unzip tsar.zip

$ cd tsar

$ make

# make install

方式2:

GitHub方式 (以前没有试过,所以这次使用这种方式)

这种方法需要安装Git,下面就开始源码安装Git(如果不想这么麻烦可以直接yum install git)

1.下载Git

下载地址:https://www.kernel.org/pub/software/scm/git/

2.编译安装

[root@node1 ~]#  tar xf git-2.10.0.tar.gz -C /usr/local/src/

[root@node1 ~]#  cd /usr/local/src/git-2.10.0/

[root@node1 ~]#  ./configure --prefix=/usr/local/application/git

configure时出现错误,因为gcc未安装,直接yum install gcc即可

[root@node1 ~]#   make

make时出现缺少zlib.h错误,直接yum install zlib zlib-devel 即可

[root@node1 ~]#   make install

安装成功后记得要添加Git路径:

export PATH=$PATH:/usr/local/application/git/bin/

 

3.安装Tsar

[root@node1 application]# pwd

/usr/local/application

[root@node1 application]#  git clone git://github.com/kongjian/tsar.git

[root@node1 application]#  cd tsar

[root@node1 tsar]#  make

[root@node1 tsar]#  make install

4.安装后可以看到如下文件

/etc/tsar/tsar.conf   #Tsar的主配置文件

/etc/cron.d/tsar,    #运行Tsar的定时脚本,默认每分钟

/etc/logrotate.d/   #日志滚动脚本,每月回滚一次Tsar的日志文件

/usr/local/tsar/modules    #存放所有的模块库文件

 

三.配置

安装后默认不会显示输出,只需要运行tsar -l 查看是否实时监控

配置文件内容:

[root@node1 tsar]# cat tsar.conf

####debug_level(INFO DEBUG WARN ERROR FATAL)

debug_level ERROR

####[module]

mod_cpu on

mod_mem on

mod_swap on

mod_tcp on

mod_udp on

mod_traffic on

mod_io on

mod_pcsw on

mod_partition on

mod_tcpx on

mod_load on

mod_apache off

mod_lvs off

mod_haproxy off

mod_squid off

mod_nginx off

mod_swift off

mod_swift_code off

mod_swift_domain off

mod_swift_esi off

mod_swift_fwd off

mod_swift_store off

mod_swift_swapdir off

mod_swift_purge off

mod_swift_sys off

mod_swift_tcmalloc off

mod_tmd off

mod_percpu off

mod_tcprt off

mod_proc off pidname

mod_pharos off

mod_tmd4 off

mod_keyserver off

#mod_erpc on /etc/tsar/erpc.conf

####output_interface file,db,nagios

output_interface file

####[output_file] original data to store

output_file_path /var/log/tsar.data

####[output_stdio] these mod will be show as using tsar command

output_stdio_mod mod_swap,mod_partition,mod_cpu,mod_mem,mod_lvs,mod_haproxy,mod_traffic,mod_squid,mod_load,mod_tcp,mod_udp,mod_tcpx,mod_apache,mod_pcsw,mod_io,mod_percpu

####[output_db]

#output_db_mod mod_swap,mod_partition,mod_cpu,mod_mem,mod_traffic,mod_load,mod_tcp,mod_udp,mod_pcsw,mod_io

#output_db_addr console2:56677

####[output_tcp]

#output_tcp_mod mod_swap,mod_cpu

#output_tcp_addr localhost:9666

#output_tcp_merge on

####support include other mod conf

include /etc/tsar/conf.d/*.conf

####The IP address or the host running the NSCA daemon

#server_addr nagios.server.com

####The port on which the daemon is running - default is 5667

#server_port 8086

####The cycle of send alert to nagios

#cycle_time 300

####nsca client program

#send_nsca_cmd /usr/bin/send_nsca

#send_nsca_conf /home/a/conf/amon/send_nsca.conf

####tsar mod alert config file

####threshold servicename.key;w-min;w-max;c-min;cmax;

#threshold cpu.util;N;N;N;N;

 

可以通过编辑/etc/tsar/tsar.conf文件来配置tsar:

  • 添加模块只需添加一行 mod_modname  on
  • 开启或关闭模块功能使用 mod_modname  on/off
  • 指定模块参数使用 mod_modname on 参数  ,例如mod_erpc on /etc/tsar/erpc.conf
  • output_stdio_mod设定输出到标准I/O的模块(即可以使用tsar命令显示输出的模块)
  • output_interface 指定输出方式,默认为本地文件,可用参数有file  db  nagios
  • output_file_path指定数据存放文件(也可以修改日志回滚脚本/etc/logrotate.d/tsar来实现)

四.tsar用法

不跟参数:查看历史数据,如tsar

--modname:查看指定模块的输出,如下图


-check:显示最后一个警报记录,只用于淘宝内部警报;

-C , --check:显示最后一个收集的数据,如下图


-c , --cron:运行于cron模式,输出数据到文件中,默认文件为/var/log/tsar.data;

-l ,--live:实时显示信息,如下图


-i , --interval:控制时间间隔,在打印历史数据中(不和--live一起使用),单位是分钟,默认显示间隔5分钟;而实时模式(和--live一起使用)下,单位是秒,默认是5秒,如下图


-m , --merge:对有多个数据的展示,进行汇总,如机器上跑了3个squid,可以用 tsar --squid -m的放式进行展示汇总。如下图

-L , --list:显示可用模块,如下图


-n , --ndays:显示过去几天的值,默认为1;

-d , --date:显示指定日期的数据,日期格式为:YYYYMMDD或一个整型值,如下图



-f , --file:指定tsar要读取的tsar.data 文件;

-D , --detail:不转换数据到K M G,如下图



-s , --spec:指定模块的详细字段,如下图


五.补充

1.输出到Mysql

使用这个特性只需在配置文件中添加输出类型output_interface file,db,还要开启相关模块的功能,而且还要设定tsar2db 监听的IP(主机名)和端口

####[output_db]

output_db_mod  mod_cpu,mod_mem,mod_traffic,mod_load,mod_tcp,mod_udp,mod_io

output_db_addr  hostname:56677


项目地址:https://github.com/alibaba/tsar2db
下载地址:https://codeload.github.com/alibaba/tsar2db/zip/master
tsar2db用来收集一个cdn节点内tsar的采集数据,存到mysql数据库,提供给其它应用查询
 
数据保留最近3个月的,各表字段含义和tsar采集定义相同
从mysql的tsar库中可以看到整个cdn节点tsar采集到的数据
配置tsar向tsar2db传送数据
 
vi /etc/tsar/tsar.conf
output_db_addr console2:56677
将console2替换成tsar2db的hostname
tsar2db的编译依赖mysql-devel,运行依赖于httpd和mysql-server,其中httpd是用来提供cgi环境供查询
 
mysql可以下载:
mysql:http://vault.centos.org/5.3/updates/x86_64/RPMS/mysql-5.0.77-3.el5.x86_64.rpm
mysql-devel:http://vault.centos.org/5.3/updates/x86_64/RPMS/mysql-devel-5.0.77-3.el5.x86_64.rpm
mysql-server:http://vault.centos.org/5.3/updates/x86_64/RPMS/mysql-server-5.0.77-3.el5.x86_64.rpm
查询时通过cgi接口指定时间和模块,查看具体数据,比如:
 
[kongjian@console1 cdnlog]$ curl http://localhost:8082/query.cgi
Error:miss table name.
Table:load mem cpu tcp squid haproxy lvs switch traffic udp tcpx apache partition swap io pcsw 
Host:cache161.cn20 
Start/End:timestamp or stardtime, 1292472000 or 2010-12-16_12:00:00 
Sample as:query.cgi?table=load&start=1292472000&end=1292472060&host=mmdev2.corp.alimama.com

测试环境:
数据收集端/tsar端:192.168.85.130   node1.liv.com
tsar2db端+Mysql端:192.168.85.131    node2.liv.com
 
详细配置:
192.168.85.131主机上安装相关包:
[root@node2 ~]# yum install http mysql mysql-devel mysql-server -y
[root@node2 ~]# wget https://codeload.github.com/alibaba/tsar2db/zip/master
[root@node2 ~]# unzip tsar2db-master.zip

 

tsar2db怎么都安装不了,查了很多资料,都是让参考tsar2db项目(Github上的介绍的不清楚,我也没搞懂怎么操作),
他也没有亲自测试过,难道数据入库不行么?编译依赖的包我都装了啊,怎么还是不行!


好吧!果然百度搜的文章是一大抄啊,几乎全一样,而用Google搜了一下,还真找到了解决办法,原来tsar2db的安装
不仅需要mysql的一些包,还需要tcp_wrappers  tcp_wrappers-devel这两个包,安装这两个包后,重新编译后就没
问题了;

参考文章:http://xiaofengwu.tumblr.com/post/67420208992/ubuntu1204%E5%AE%89%E8%A3%85tsar2db
安装内容在Makefile文件中,而Makefile文件主要看install部分,install部分主要是编译好之后一些文件的复制以及
数据库表的构建。现在针对我的系统上apache和mysql具体情况来重新配置Makefile文件,配置后的Makefile文件如下,
只针对install部分做了修改:
 

然后编译安装:


接着配置tsar向tsar2db传送数据:
启动tsar2db服务:


或者

测试:

tsar端(192.168.85.130)收集数据:


tsar2db端(192.168.85.131)查看数据库中是否有数据:





查询时通过CGI接口指定时间,主机和查询模块来查看具体数据:
而且由于注释了Makefile E中的cp src/query.cgi /home/a/share/cgi-bin/query.cgi一行,所以要重新创建

这里提示没有MySQLdb模块,所以还需要进行安装:
[root@node2 tsar2db-master]# yum install  MySQL-python  python-setuptools  -y

 

然后执行查询测试:

查询格式为:
http://IP或主机名/cgi-bin/query.cgi?table=mem&start=1473566101&end=1474719482&host=node1.liv.com

其中table为查询的表名,start为起始时间(mysql中可以看到),host为主机名(收集数据的主机)

而且还要注意的是:

1./usr/lib/cgi-bin/query.cgi文件中
db = MySQLdb.connect(host="localhost", unix_socket="/var/lib/mysql/mysql.sock", user=db_user, 
passwd=db_pw, db=db_name)行中的unix_socket一定要是mysql的socket文件的路径(find查一下),记得要修改!
2.数据库如果设置的有密码,那么/etc/trsa2db/tsar2db.cfg文件要配置
[root@node2 tsar2db]# cat tsar2db.cfg
#mysql database hostname or ip
db_address=localhost
#database port default is 3306
db_port=3306
#mysql user info for tsar
db_name=tsar
db_user=root
db_pw=123456
#tsar2db port.same as output_nagios_addr at /etc/tsar/tsar.conf
server_port=56677
#log for tsar2db.see more@/var/log/message
debug=0
pid_file=/var/run/tsar2db.pid
3.httpd.conf文件中要修改如下(默认的cgi-bin目录是/var/www/cgi-bin)
ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin/"
 
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
 
4.两主机做好主机名解析,且最好关闭防火墙和SELinux
配置好之后在浏览器中输入:
http://node2.liv.com/cgi-bin/query.cgi?table=cpu&start=1474716781&end=1474722361&host=node1.liv.com



如果输入正确的URL后页面显示为空白,而数据采集和入库都没问题的话,多看看/usr/lib/cgi-bin/query.cgi文件,
根据该文件内容找出问题所在。我之前遇到过空白页的问题,后来根据文件中的re模块部分,猜测是Python有问题,
升级了Python问题果然解决了!

还有,如果显示空白页,可以依次减少参数,如果http://node2.liv.com/cgi-bin/query.cgi?table=cpu显示的
有一行数据,那么可以确定,是你的参数有错误,根据query.cgi文件修改即可!

2.输出到Nagios

编辑配置文件中的输出类型为output_interface file,nagios

然后指定nagios的IP地址,端口和发送间隔,如

####The IP address or the host running the NSCA daemon

server_addr nagios.server.com

####The port on which the daemon is running - default is 5667

server_port 8086

####The cycle of send alert to nagios

cycle_time 300

由于tsar使用Nagios的被动模式,所以还需要指定nsca库和它的配置文件路径:

####nsca client program

send_nsca_cmd /usr/bin/send_nsca

send_nsca_conf /home/a/conf/amon/send_nsca.conf

然后指定要监控的模块和字段,且指定其有4个阀值:

####tsar mod alert config file

####threshold servicename.key;w-min;w-max;c-min;cmax;

threshold cpu.util;50;60;70;80;

由于没有Nagios环境,所以这里不再测试!