nobody 23093 0.0 0.0 111044 4460 ? S 18:27 0:00 /usr/bin/python /opt/modules/tengine/sbin/scribe_ngx -h 192.168.1.14:1463 collect-vv-175
然后我们来配置192.168.1.14:/etc/scribe.conf
port=1463
max_msg_per_second=2000000
check_interval=3
# DEFAULT - forward all messages to Scribe on port 1463
<store>
category=default
type=multi
#注意这里,用multi存储,而不是默认中的buffer
target_write_size=20480
max_write_interval=1
buffer_send_rate=1
retry_interval=30
retry_interval_range=10
<store0>
type=network
remote_host=192.168.1.33
#远端收集服务器,主机名或IP
remote_port=1463
</store0>
<store1>
type=file
fs_type=std
file_path=/data1/scribe
#再存一份本地文件,更加保险。
base_filename=thisisoverwritten
max_size=100000000000
#日志文件最大大小,超过将自动切分而无视时间设置
add_newlines=1
#每行增加一个回车,比较重要
rotate_period=hourly
#每小时切分日志
rotate_minute=0
rotate_hour=0
</store1>
</store>
然后用scribed -c /etc/scribe.conf &启动scribe,当然,收集服务器192.168.1.33也需要启动scribe。收集服的scribe只要按照默认启动就可以了,我在收集服配置的日志路径是/data/scribe
然后通过http访问192.168.1.14,你将在192.168.1.14:/data1/scribe和192.168.1.33:/data/scribe下都看到日志文件被创建起来,并随着访问而不断增大。
从整个描述过程中,可以看出来,在webserver上,我实际上是吧tengine和scribe放到了同一台服务器上。其实这样会降低服务器的web负载效率,毕竟还有个scribe在占用进程和文件描述符。不过,这样放置的目的主要是为了在本机也要保存日志,而tengine或者nginx默认不能同时配置两个access_log,如果不涉及同步保存,可以只发送日志到远端服务器,把pipe里面的IP改成远端的IP,然后把scribe设置成buffer存储,设置primary和secondary就可以了。
最后,感谢淘宝对开源做出的贡献。如果没有pipe功能,恐怕我就需要去修改nginx的源代码了。