日志管理分类

日志文件是用户管理和监控 Apache 安全的非常好的第一手资料,它清晰地记录了客户端访问 Apache 服务器资源的每一条记录,以及在访问中出现的错误信息,可以这样说,Apache 可以记录 Web 访问中感兴趣的几乎所有信息。

当运行 Apache 服务器时生成 4 个标准的日志文件:

  • 错误日志
  • 访问日志
  • 传输日志
  • Cookie 日志

其中比较常见的是访问日志(access_log)和错误日志(error_log),其中传输日志和 cookie 日志被 Apache 2.0 以上的版本丢弃,所以本文不讨论这两种日志。当然,如果使用 SSL 服务的话,还可能存在 ssl_access_log、ssl_error_log 和 ssl_request_log 三种日志文件。

另外,值得注意的是:上述几种日志文件如果长度过大,还可能生成注入 access_log.1,error_log.2 等的额外文件,其格式与含义与上述几种文件相同,只不过系统自动为其进行命名而已。

日志相关的配置指令

Apache 中提供如下 4 条与日志相关的配置指令:

  • ErrorLog 指令:用于指定错误日志的存放路径,使用语法为:ErrorLog 文件名;
  • LogLevel:用于指定错误日志的错误登记,使用语法为:Loglevel 等级;
  • LogFormat:用于为日志记录格式命名,使用语法为:LogFormat 记录格式说明字符串 格式称谓;
  • CustomLog:用于指定访问日志存放路径和记录格式,指定访问日志由指定的程序生成并指定日志的记录格式,使用语法为:CustomLog 日志文件名 格式称谓。

在上述几个文件当中,除了 error_log 和 ssl_error_log 之外,所有日志文件以由 CustomLog 和 LogFormat 指令指定的格式生成。这些指令在 httpd.conf 文件中出现。使用 LogFormat 指令可以定义新的日志文件格式:

 LogFormat “%h  %l  %u  %t  \ “%> %s %b “common

假定使用的是 common 日志格式或者 combined 日志格式,这两种格式都在默认的配置文件中定义。表 1 列出了 LogFormat 语句可以使用的变量:

表 1. LogFormat 语句的变量

变 量 含 义
%b 发送字节,不包括 HTTP 标题
%f 文件名
%{VARIABLE}e 环境变量 VARIABLE 的内容
%h 远程主机
%a 远程 IP 地址
%{HEADER}i HEADER 内容;发送到服务器的请求的标题行
%l 远程登录名(如果提供该值,则从 identd 获得)
%{NOTE}n 来自另一个模块的 NOTE 通知的内容
%{HEADER}o HEADER 的内容,回复中的标题行
%p 服务器服务于请求的规范端口
%P 服务于请求的子进程的 ID
%r 请求的第一行
%s 状态。对于内部重定向的请求,该状态为初始请求—最后是 %>s
%t 时间,格式为 common 日志格式中的时间格式
%{format}t 时间,格式由 format 给出。可以是 strftime(3)格式
%T 服务请求花费的时间,以秒计
%u 来自 auth 的远程用户;如果返回的状态(%s)为 401 则可能是假的
%U 请求的 URL 路径
%v 服务于该请求的服务器的规范 ServerName

在每个变量中,可以在前面设置一个条件,决定是否显示该变量。如果不显示,则显示 -。这些条件是数值返回值列表的形式。另外,还可以使用 CustomLog 指令指定日志文件的位置和格式。如果没有指定日志文件的绝对路径,则日志文件的位置假定为相对于 ServerRoot。下面是 httpd.conf 文件中指定日志文件的语句:

 //
// The location and format of the access logfile(Common Logfile Format).
// If you do not define any access logfiles within a <VirtualHost>
// container, they will be logged here. Contrariwise, if you *do*
// define per-<VirtualHost> access logfiles, transactions will be
// logged therein and *not* in this file.
//
CustomLog logs/access_log common ErrorLog logs/error_log

日志记录等级和分类

一般说来,Apache 中的错误日志记录等级有如表 2 所示的八类:

表 2. 错误日志记录的等级

紧急性 等级 解释
1 Emerg 出现紧急状况使得系统不可用
2 Alert 需要立即引起注意的状况
3 Crit 危险情况的警告
4 Error 除上述 3 种情况之外的其他错误
5 Warn 警告信息
6 Notice 需要引起注意的情况,不如第 4 和第 5 类重要
7 Info 需要报告的一般消息
8 Debug 运行于 debug 模式的程序产生的消息

另外,在 Apache 中,将访问日志分为如下 4 类:

  • 普通日志格式(common log format,CLF):大多数日志分析软件都支持这种格式,其在 LogFormat 指定中定义的昵称为 common;
  • 参考日志格式(referer log format):记录客户访问站点的用户身份,其在 LogFormat 指定中定义的昵称为 referer;
  • 代理日志格式(agent log format):记录请求的用户代理,其在 LogFormat 指定中定义的昵称为 agent;
  • 综合日志格式(combined log format):即结合上述三种格式的日志信息,其在 LogFormat 指定中定义的昵称为 combined。

在实际的使用过程中,由于综合日志格式有效地结合了其他 3 种日志格式和信息,所以在配制访问日志时,可以有两种方式:

(1)分别使用 3 个文件进行分别记录,相应配置示例如下:

 LogFormat “%h %l %u %t \ “%r\” %>s %b” common
LogFormat “%{Referer}i->%U” referer
LogFormat “%{Apache User-agent}i” agent
CustomLog logs/access_log common
CustomLog logs/referer_log referer
CustomLog logs/agent_log agent

(2)使用一个综合文件进行记录,相应配置示例如下:

LogFormat “%h %l %u %t \ “%r\” %>s %b \”%{Referer}i\” \
“%{Apache User-Agent}i\””combined
CustomLog logs/access_log combined

这几天比较热门的记录访客的端口号,在日志文件格式中添加获取客户端端口号的环境变量: %{REMOTE_PORT}e

环境器环境变量在mod_rewrite模块有如下的说明

Apache 日志管理,获取客户端端口号的更多相关文章

  1. Apache 日志管理

    日志参数 %% 百分号(Apache2.0.44或更高的版本) %a 远端IP地址 %A 本机IP地址 %B 除HTTP头以外传送的字节数 %b 以CLF格式显示的除HTTP头以外传送的字节数,也就是 ...

  2. apache日志管理【转】

    web服务器日志轮循比较好的方式有三种:第一种方法是利用Linux系统自身的日志文件轮循机制:logrotate:第二种方法是利用apache自带的日志轮循程序rotatelogs:第三种是使用在ap ...

  3. F5中源地址转换(AutoMap)模式下后端服务器获取客户端真正的IP地址

    F5中开启AutoMap,并传递X-Forwarded-For值 开启F5源地址转换"Auto Map" 方式一: 在http profile中开启X-Forwarded-For ...

  4. C# 获取随机可用端口号

    TCP与UDP段结构中端口地址都是16比特,可以有在0---65535范围内的端口号.对于这65536个端口号有以下的使用规定: (1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来 ...

  5. logstash快速入门 (这篇文章很不错 ) | 两种方式往logstash传输数据实例:Apache 日志(从文件获取)、Syslog方式

    原文地址:http://www.2cto.com/os/201411/352015.html 原文地址:http://logstash.net/docs/1.4.2/tutorials/getting ...

  6. 【Apache运维基础(6)】Apache的日志管理与分析

    简述 Apache 访问日志在实际工作中非常有用,比较典型的例子是进行网站流量统计,查看用户访问时间.地理位置分布.页面点击率等.Apache 的访问日志具有如下4个方面的作用: 记录访问服务器的远程 ...

  7. python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理

    作为一个php程序员,同时有对网络方面感兴趣,php就比较蛋疼了,所以就抽了些时间看python 之前学python基础因为工作原因,断断续续的看了个基础,差不多是可以写代码了 最近在看<pyt ...

  8. [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果

    [C#]使用 C# 代码实现拓扑排序   目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...

  9. java版gRPC实战之六:客户端动态获取服务端地址

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. Visual Studio 创建C++或C#Windows程序

    使用工具Visual Studio,创建一个C++或C#Windows程序,在主窗口中显示“Hello World”,用户可以用鼠标拖动“Hello World”在主窗口中移动 首先创建一个项目​ 选 ...

  2. 在AndroidStudio不能找到so文件问题:couldn't find libweibosdkcore.so

    解决步骤已经写到我的公众号,二维码在下面. 欢迎观看我的CSDN学院课程,地址:http://edu.csdn.net/course/detail/2877 本人联系方式: 更多精彩分享,可关注我的微 ...

  3. php部分---PDO;

    PDO数据访问抽象层 PDO的三个功能: 1.操作其它数据库2.事务功能3.防止SQL注入攻击 操作数据库: 造PDO对象 //$dsn = "mysql:dbname=mydb;host= ...

  4. Apache常用配置项

    301是永久重定向 302是临时重定向 编辑虚拟主机的配置文件需要用到apache的rewrite模块 所以要用要先检查apache是否安装了rewrite模块 # ./bin/apachectl - ...

  5. Hibernate配置log4j日志环境

    1.准备所需的jar 说明:具体所使用的jar包的版本与你所使用的Hibernate版本有关,我用的是(hibernate-release-4.3.11.Final) <1>准备slf4j ...

  6. shh简化

    对于SSH框架中部分的操作简化我分为两大类: 一:操作 1. 在SSH的struts.xml里 name="Action类_*" class="注入的实例"(同 ...

  7. Django中Form的Textarea字段

    开始以为是这个样子: class BlogForm(forms.Form): title    = forms.CharField(required = True) content  = forms. ...

  8. android studio 插件

    引用于:http://www.zhihu.com/question/28026027 adb-idea 支持直接在AS面板中进行ADB操作,个人觉得太实用,上面有哥们已提及,这里再介绍下: Unins ...

  9. 总是弹出visual studio 实时调试器 三种解决办法

    最近服务器老是弹出visual studio 实时调试器很是郁闷呀.关还关不掉.怎么解决呢 ,现像如下图所示: 下面我们一起来分析一下这种情况的原因: 弹出应用程序: Visual Studio 实时 ...

  10. JDK、JRE、JVM

    首先来说一下JDKJDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Env ...