Tengine试用手记

taobao技术团队最近把Tengine开放出来了。

Tengine基于目前很流行的Nginx,在Nginx基础上整合了一些第三方模块,并加入taobao团队研发的一些模块。由于Nginx有设计精美的模块机制,使得整合与模块开发非常方便,在此之前taobao团队开放的另一个项目openresty就是在Nginx基础上完成的。

最新版本的tengine基于nginx-1.0.10稳定版(最新的nginx稳定版是1.0.11)。我在试用时加入了人人网系统运维团队开发的ngx_http_accounting_modulehttp_upstream_consistent_hash_module,并按照部署需求进行了RPM包的制作,这个流程与Nginx官方版本一致性很高,几乎不用做修改就能整合到现在的工作流。

可以看出为适应大规模运维的需求,tengine对nginx做了一些修改:

  • access_log/error_log支持file/pipe/syslog

  • worker_processes和worker_cpu_affinity自动设置

  • expires_by_types

  • stub_status增加了响应时间

  • sysguard

  • limit_req和forbid_action

我们关注一下log部分的变化。

tengine对log部分做了较大改变,在原有的文件作为输出目标基础上,增加了syslog和pipe功能。syslog作为日志输出,在nginx-0.6.35时就有过一个patch,但是由于种种原因被拒绝加入官方代码(这可能也是taobao撇开nginx.org另立山头的原因之一)。

syslog的配置语法为:

access_log  syslog:user::debug  main;

access_log  syslog:user::192.168.10.10:514  main;

配置之后需要对syslogd的配置文件做一些修改。虽然部署很方便,但是syslog的方案比较鸡肋,因为现在已经有比较多的更“现代”的方法来进行分布式数据的收集,比如scribe。

使用pipe方式则可以方便地与scribe等系统进行整合。

测试中我使用了更简单的一个方案:通过netcat将管道中的日志发送到远程日志收集端。

配置文件是这样的:

# 将日志实时发送到远程主机192.168.10.10的8000端口,使用TCP协议
access_log   "pipe:/usr/bin/nc  192.168.10.10  8000" main;

在此我选用了便于脚本化且功能强大的netcat。你也可以把其它工具来进行整合,比如与gzip组合使用,进行压缩以降低传输的流量。

pipe方式的日志方式,使得无数想法成为可能,大大提高了运维的灵活性。

关于提到的其它特性更详细的使用说明,可以参考Tengine官方网站的文档。

欢迎留言交流。@我#renren.com @我#weibo.com