Apache条件日志记录

条件日志

许多时候,根据与请求特征相关的环境变量来有选择地记录某些客户端请求会带来便利。首先,需要使用SetEnvIf指令来设置特定的环境变量以标识符合某种特定条件的请求,然后用CustomLog指令的 env= 子句,根据这些环境变量来决定记录或排除特定的请求。例如:

# 不记录本机发出的请求
SetEnvIf Remote_Addr “127\.0\.0\.1” dontlog
# 不记录对robots.txt文件的请求
SetEnvIf Request_URI “^/robots\.txt$” dontlog
# 记录其他请求
CustomLog logs/access_log common env=!dontlog

再如,将使用英语的请求记录到一个日志,而记录非英语的请求到另一个日志:

SetEnvIf Accept-Language “en” english
CustomLog logs/english_log common env=english
CustomLog logs/non_english_log common env=!english

虽然上述已经展示了条件日志记录的强大和灵活,但这不是控制日志内容的唯一手段,还可以用日志后继处理程序来剔除你不关心的内容,从而使日志更加有用。

# Don’t bother looking for favicon.ico
Redirect 404 /favicon.ico

# Don’t bother sending the custom error page for favicon.ico

ErrorDocument 404 “No favicon

SetEnvIf Request_URI \.ico$ ico-image
ErrorLog /path/to/error_log env!=ico-image

开源日志系统比较

1. 背景介绍

许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:

(1) 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;

(2) 支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统;

(3) 具有高可扩展性。即:当数据量增加时,可以通过增加节点进行水平扩展。

本文从设计架构,负载均衡,可扩展性和容错性等方面对比了当今开源的日志系统,包括facebook的scribe,apache的chukwa,linkedin的kafka和cloudera的flume等。 Continue reading “开源日志系统比较”