ocollector通过内置的多种数据收集器进行数据处理与合并,发送到opentsdb中。
有别于其他客户端的地方,
- 零模块:不需要安装任何模块,程序只有一个文件。
- 零安装:
./ocollector --help
,指定几个命令行参数,there you go! - 支持Windows和Linux:Windows和Linux使用相同的代码,Windows提供exe直接部署。
- 版本迭代速度快:有了零部署的支持,我们来向hids展示什么叫plugin.
- 有sdo特色的xx主义: 做其他开源项目没做过的,做适合于内部系统的,做我们觉得cool的
yes,已经够简单了。echo 'put blah blah blah...' | nc op.sdo.com 4242
但如果让10个人实现,第一个用nc,第二个用java写socket,第三个人php调tsd的REST接口,最后又乱了。
所以应该禁止分裂,否则OIWBID
OIWBID = Otherwise I Will Burn it Down.
There should be one—and preferably only one—obvious way to do it. -- The Zen of Python
-
解决公司内Windows和Linux共存的问题
OK,任何脚本语言Perl, Ruby, Python都是跨操作系统的,但脚本部署什么都不跨。
Windows下Perl有
Cygwin, ActivePerl, Stawbarry Perl
三种, 乘以Windows32/64两个版本, 乘以Windows2K和Windows2K3,一共有12种可能。假设Linux上只有一种,那至少有13种组合,除去通用的多数,总有2,3个情况需要区别对待。 如果这些细节需要每个脚本考虑,那部署出去的脚本会乱成什么样子?
-
给定一个问题,只有一种最好实现,ocollector保证不是最差的。
例如,Windows和Linux取当前连接数,有以下几种做法:
- Linux:
netstat -ant | grep -c 'ESTABLISHED'
- Linux:
netstat -st | grep -c 'connections established'
- Windows:
netstat -ano | grep -c 'ESTABLISED'
- Windows:
snmp -v 2c -c your_community some_oid_to_obtain_netstat
- Linux:
其中2和3是很糟糕的做法,当连接数一多,就会耗用大量CPU.
$ time netstat -st | grep 'connections established'
12129 connections established
real 0m0.002s
$ time netstat -ant | grep -c 'ESTABLISHED'
11813
real 0m1.669s
显示不是每人都知道哪种实现最好。 尽管ocollector也不能,但它可以修改内部实现,对外参数维持不变。否则今天是:check_linux_connections.sh
, 明天是check_linux_connectionsEx.sh
我们做出了一个艰难的决定:去偷别人好的代码,并把它转化为ocollector的类。 现在请重新定义什么叫重新造轮子吧。
-
没有perl,且无法安装: 使用打包的exe,大概1.25MB
$ curl -LO op.sdo.com/download/ocollector.exe
-
没有perl,但可以安装: 有两种选择,一是安装ActivePerl, 二是装cygwin,利用其自带的Perl:Cygwin
-
装有cygwin且有curl,那么:
$ curl -LO op.sdo.com/download/ocollector
Linux只要:
$ curl -LO op.sdo.com/download/ocollector
- 提示找不到Error.pm和version.pm
某些环境偶尔会报找不到Error.pm或是version.pm,请去Issue中提交。 然后用yum安装(先用起来):
$ yum -y install Perl-Error Perl-version
-
Windows中如何让命令在后台运行?
见Command Line Kung Fu, 用start命令能模拟nohup,但的确还有一个框。未来会改为服务形式,但不是近阶段目标。
$ start /MIN perl ocollector /s /b *ocollection_options*
-
如何不用服务也不哟啊框?
可利用cygwin的bash执行脚本,当cygwin的ssh超时时间到后,脚本就会成为一个没有框的进程。
-
Windows下远程桌面启动ocollector,会随着远程桌面退出而关闭
因为会话被注销了。请先执行命令:
tscon 0
,然后启动ocollector。tscon命令参考这里:Connect to Another Session by Using the TSCON Command
参考Wiki或内部metric介绍网站
或者 ./ocollector -h
的输出以及相关wiki。