当前位置: 首页 > article >正文

Apache请求日志采集

Apache 请求日志记录了服务器接收到的 HTTP 请求的详细信息,用于监控、分析和调试。日志中包括诸如请求的来源 IP 地址、请求方法、响应状态码、处理时间等信息。

日志的作用:
  1. 监控与调试:日志可以帮助系统管理员监控服务器的运行状态,快速定位并解决请求失败或错误的问题。
  2. 性能优化:通过分析请求的处理时间和响应大小,可以识别出性能瓶颈,进而优化服务器配置和资源分配。
  3. 安全分析:日志可以用于检测异常访问模式和潜在的攻击活动,例如频繁的404错误、异常的请求方法或大量的请求来自同一IP地址。
  4. 用户行为分析:通过跟踪用户的访问模式和行为,可以对网站内容和用户体验进行优化,提高用户满意度。
  5. 访问统计:日志数据可以用来生成访问统计报告,了解网站的访问量、访问者的地理分布、最受欢迎的页面等信息。
  6. 合规性和审计:在需要符合特定法规或标准的情况下,日志可以作为审计的证据,证明系统的使用和访问符合规定。
  7. 个性化推荐:分析用户的访问习惯和偏好,可以为用户提供个性化的内容推荐。
触发条件:
  • 所有 HTTP 请求:每次客户端向服务器发出请求,都会在日志中生成一条记录。
  • 特定事件或条件:可以通过自定义配置记录特定的请求或事件,如错误状态码或特定的请求方法。

1.配置请求日志

1.1 日志来源

  • 默认日志路径:Apache 的默认访问日志通常位于 /var/log/apache2/access.log(Debian/Ubuntu 系统)或 /etc/httpd/logs/access_log(CentOS/RHEL 系统)。
  • 默认配置文件路径:Apache 的主配置文件通常位于 /etc/apache2/apache2.conf(Debian/Ubuntu 系统)或 /etc/httpd/conf/httpd.conf(CentOS/RHEL 系统)。

1.2修改日志路径和格式

在 Apache 中,可以通过修改配置文件来设置自定义日志格式和日志文件路径。

示例配置:

  • 主配置文件 /etc/apache2/apache2.conf/etc/httpd/conf/httpd.conf

apache

# 设置自定义日志格式

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined_with_all_vars

# 应用自定义日志格式到默认日志文件

CustomLog "/var/log/apache2/access.log" combined_with_all_vars

  • 虚拟主机配置/etc/apache2/sites-available/example.com.conf 或其他虚拟主机文件中:

apache

<VirtualHost *:80>

ServerName example.com

DocumentRoot "/var/www/example.com"

# 为虚拟主机设置自定义日志文件和格式

CustomLog "/var/log/apache2/example_access.log" combined_with_all_vars

</VirtualHost>

1.3 配置测试和重载

测试配置:

使用以下命令测试 Apache 配置文件是否有语法错误:

sudo apachectl configtest

# 或者

sudo httpd -t

1.4 重载重启配置

若无错误,使用以下命令重载 Apache 以应用配置更改:

sudo systemctl reload apache2

如果需要,使用以下命令重启 Apache:

sudo systemctl restart apache2

1.5 字段参考

Apache 字段

命名

示例值

中文解释

正则表达式

1

%a

remote_addr

192.168.0.1

请求的客户端 IP 地址

\b(?:[0-9]{1,3}.){3}[0-9]{1,3}\b

2

%{c}a

real_ip

10.0.0.1

连接的底层对等 IP 地址(代理下的最初发起请求的IP

\b(?:[0-9]{1,3}.){3}[0-9]{1,3}\b

3

%A

server_addr

127.0.0.1

本地 IP 地址

\b(?:[0-9]{1,3}.){3}[0-9]{1,3}\b

4

%B/%b

body_bytes_sent

2048

响应大小,不包括 HTTP 标头

\d+

5

%{VARNAME}C

cookie_VARNAME

cookie1=value1; cookie2=value2

请求中 Cookie 的内容

[A-Za-z0-9_]+(?:=[^\s;]+)?(?:\\s*;\\s*[A-Za-z0-9_]+(?:=[^\s;]+)?)*

6

%D

request_time_microseconds

123456

处理请求所花费的时间(微秒)

\d+

7

%{VARNAME}e

env_VARNAME

VARNAME=value

环境变量的内容

[A-Za-z0-9_]+(?:=[^\s]+)?

8

%f

filename

/path/to/file

文件名

.+

9

%h

remote_host

Example Domain

远程主机名

[a-zA-Z0-9.-]+.[a-zA-Z]{2,}

10

%{c}h

real_host

www.realexample.com

底层 TCP 连接的主机名

[a-zA-Z0-9.-]+.[a-zA-Z]{2,}

11

%H

request_protocol

HTTP/1.1

请求协议

HTTP/\d.\d

12

%{VARNAME}i

http_VARNAME

User-Agent: Mozilla/5.0

请求头内容

[A-Za-z0-9_-]+:\s[^\s]+

13

%k

keepalive_requests

0

Keepalive 请求数

0

15

%L

request_id

[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}

错误日志中的请求日志 ID

16

%m

request_method

GET

请求方法

[A-Z]+

18

%{VARNAME}o

response_header_VARNAME

Content-Type: text/html

响应头内容

[A-Za-z0-9_-]+:\s[^\s]+

19

%p

server_port

80

服务器端口

\d+

20

%P

process_id

1234

子进程 ID

\d+

21

%q

query_string

arg1=val1&arg2=val2

查询字符串

.+?

22

%r

request_line

GET /index.html HTTP/1.1

第一行请求

[A-Z]+\s/.+\sHTTP/\d.\d

23

%R

handler

directory

生成响应的处理程序

[a-zA-Z0-9_]+

24

%s

status

200

状态码

\d{3}

25

%t

time_local

[09/Apr/2023:12:00:00 +0000]

收到请求的时间

(?:\d1,2/[A−Za−z]3/\d4:\d2:\d2:\d2\+\d4)(?:\d1,2/[AZaz]3/\d4:\d2:\d2:\d2\+\d4)

26

%{format}t

time_format

2023-04-09 12:00:00

时间(自定义格式)

\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}

27

%T

request_time

0.123

处理请求所花费的时间(秒)

\d+.\d{3}

28

%{UNIT}T

request_time_UNIT

123ms

以不同单位表示的处理请求时间

\d+[a-z]+

29

%u

remote_user

username

远程用户

[a-zA-Z0-9_-]+

30

%U

request_uri

/index.html

请求的 URL 路径

.+

31

%v

server_name

server.example.com

服务器规范名称

[a-zA-Z0-9.-]+.[a-zA-Z]{2,}

32

%V

host

Example Domain

根据设置的服务器名称

[a-zA-Z0-9.-]+.[a-zA-Z]{2,}

33

%X

connection_status

+

连接状态

[+-]

34

%I

received_bytes

1500

接收的字节数

\d+

35

%O

sent_bytes

1024

发送的字节数

\d+

36

%S

bytes_transferred

3000

传输的字节数

\d+

默认配置日志通常包括 CLF(通用日志格式)和扩展格式。带虚拟主机的通用日志格式和 NCSA 扩展/组合日志格式也常见于不同的配置。

  1. 日志采集概述

2.1 access日志格式样例

172.16.100.2 - - [19/Aug/2024:10:31:34 +0800] "GET /zabbix/zabbix.php?action=dashboard.list HTTP/1.1" 200 10258 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"

这条Apache日志记录了在2024年8月19日上午10点31分34秒,一个来自IP地址172.16.100.2的客户端使用Chrome浏览器(版本127.0.0.0)成功访问了服务器上的 /zabbix/zabbix.php 页面,请求了仪表板列表,并接收到了10258字节的响应数据。

日志字段解释: 客户端IP地址: 172.16.100.2 ,发起请求的客户端的IP地址。2. 身份验证和授权: - - ,表示请求没有特定的用户身份验证或授权信息。3. 时间戳: [19/Aug/2024:10:31:34 +0800] ,请求发生的具体时间,包括日期、时间以及时区。4. 请求行: "GET /zabbix/zabbix.php?action=dashboard.list HTTP/1.1" ,包括:请求方法: GET ,表示请求类型为获取。请求资源: /zabbix/zabbix.php?action=dashboard.list ,请求的URL,包括查询参数 action=dashboard.list 。HTTP协议版本: HTTP/1.1 。5. 状态码: 200 ,表示请求成功,服务器正常响应。6. 内容大小: 10258 ,响应内容的字节数。7. 引用页: "-" ,表示没有引用页或该信息未提供。8. 用户代理: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0" ,客户端浏览器的详细信息,包括浏览器类型、操作系统、浏览器版本等。

2.1 access日志采集方式

Vector配置


2.3 access日志格式样例解析结果

{  
"remote_host": "172.16.100.2",
  "authentication_info": "-", 
   "timestamp": "19/Aug/2024:10:31:34 +0800", 
    "request_line": {    
    "method": "GET",  
      "resource": "/zabbix/zabbix.php",    
      "query_string": "action=dashboard.list",    
      "http_version": "HTTP/1.1" 
       }, 
        "status_code": 200, 
         "content_length": 10258,  
         "referrer": "-", 
          "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
          }

日志字段分析用途

  • %a%{c}a:客户端IP地址和底层对等IP地址,可以用来分析访问来源和识别代理后的原始IP。
  • %A:本地IP地址,有助于了解请求被哪个服务器处理。
  • %b%B:响应大小,分析带宽使用和页面加载性能。
  • %D:请求处理时间,可以用来识别慢速请求和性能问题。
  • %h%{c}h:远程主机名和底层TCP连接的主机名,有助于了解访问者的身份和地理位置。
  • %m:请求方法,分析GET、POST等请求的分布。
  • %q:查询字符串,了解用户的具体请求内容。
  • %r:请求行,包含请求方法、资源和HTTP版本,用于分析请求的类型和协议兼容性。
  • %s:状态码,分析成功请求和错误类型(如404、500等)。
  • %t:时间戳,了解请求发生的时间,有助于识别流量高峰时段。
  • %u:远程用户,如果进行了身份验证,可以用来分析特定用户的访问行为。
  • %U:请求的URL路径,分析页面访问的热门程度。
  • %{Referer}i%{User-agent}i:引用页和用户代理,分别用来分析流量来源和访问者使用的浏览器/操作系统。

通过对这些字段的分

5. 参考

  • Apache 官方文档: 用于理解 Ng 配置和日志处理。

mod_log_config - Apache HTTP Server Version 2.4


http://www.kler.cn/news/362716.html

相关文章:

  • uniapp中使用lottie实现JSON动画
  • 1024程序员节:致敬数字世界的构建者
  • Selenium + Titanium代理获取请求的接口数据
  • 【MySQL】表的增删改查(CRUD)
  • 软件开发术语(E开头)---持续更新
  • Selenium自动化测试工具
  • 数据库聚合函数
  • Django自定义过滤器
  • 【软件测试】JUnit
  • 基于FPGA的以太网设计(四)
  • 短剧小程序,打造专属短剧观看平台
  • MyBatis 基础知识:配置文件、映射器与 SQL 示例详解
  • 智能体时代:重塑人机交互的未来
  • 力扣刷题(sql)--零散知识点(1)
  • 恺撒密码简单实例
  • C语言程序设计:现代设计方法习题笔记《chapter3》
  • PyTorch求导相关
  • Eclipse Java 构建路径
  • ROS的导航功能包navfn中计算单元格的势值的原理介绍
  • 自动化抖音点赞取消脚本批量处理
  • 记一次真实项目的性能问题诊断、优化(阿里云redis分片带宽限制问题)过程
  • 富格林:严防欺诈漏洞安全交易
  • JVM(HotSpot):GC之垃圾回收器的分类
  • 2024年9月青少年软件编程(C语言/C++)等级考试试卷(三级)
  • 047_python基于Hadoop的租房数据分析系统的设计与实现
  • WRB Hidden Gap,WRB隐藏缺口,MetaTrader 免费公式!(指标教程)