温馨提示×

Apache日志如何导入分析

小樊
36
2026-07-13 07:19:18
栏目: 编程语言

Apache 日志的导入与分析通常分为 日志获取 → 导入 → 解析 → 分析/可视化 几个步骤。下面按 常见场景 给你一个完整、实用的说明。


一、Apache 日志类型

常见日志格式有两种:

1️⃣ Common Log Format(CLF)

127.0.0.1 - - [10/Oct/2024:13:55:36 +0800] "GET /index.html HTTP/1.1" 200 1024

2️⃣ Combined Log Format(最常用)

127.0.0.1 - - [10/Oct/2024:13:55:36 +0800] "GET /index.html HTTP/1.1" 200 1024 "https://example.com/" "Mozilla/5.0"

默认路径一般在:

/var/log/apache2/access.log      # Debian/Ubuntu
/var/log/httpd/access_log        # CentOS/RHEL

二、基础分析(无需导入)

1️⃣ 命令行直接分析(快速)

访问量 Top IP

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

最频繁访问的 URL

awk '{print $7}' access.log | sort | uniq -c | sort -nr | head

统计 HTTP 状态码

awk '{print $9}' access.log | sort | uniq -c | sort -nr

按小时统计访问量

awk '{print $4}' access.log | cut -d: -f2 | sort | uniq -c

适合:快速排查、临时分析


三、导入到数据库分析(推荐)

方案一:导入 MySQL / MariaDB

1️⃣ 建表

CREATE TABLE apache_log (
  ip VARCHAR(50),
  datetime DATETIME,
  method VARCHAR(10),
  url TEXT,
  protocol VARCHAR(10),
  status INT,
  size INT,
  referer TEXT,
  useragent TEXT
);

2️⃣ 使用 goaccess 或脚本转换后导入

(Apache 日志不适合直接用 LOAD DATA INFILE,推荐用 Python 解析)


四、使用 GoAccess(强烈推荐)

最省事、最专业

1️⃣ 安装

# Ubuntu
apt install goaccess

# CentOS
yum install goaccess

2️⃣ 实时终端分析

goaccess /var/log/apache2/access.log

3️⃣ 生成 HTML 报告

goaccess /var/log/apache2/access.log \
  -o /var/www/html/report.html \
  --log-format=COMBINED

浏览器打开 report.html 即可看到:

  • 访问量
  • PV / UV
  • 热门 URL
  • 操作系统 / 浏览器
  • 状态码统计

适合:运维、安全、日常监控


五、导入 ELK(企业级)

架构

Apache → Filebeat → Logstash → Elasticsearch → Kibana

1️⃣ Filebeat 配置

- type: log
  paths:
    - /var/log/apache2/access.log

2️⃣ Logstash 解析示例

grok {
  match => {
    "message" => "%{COMBINEDAPACHELOG}"
  }
}

3️⃣ Kibana 中分析

  • 访问趋势
  • 异常 IP
  • 爬虫识别
  • 攻击行为(SQL 注入、扫描)

适合:日志量大、多服务器、安全分析


六、Python 自定义分析(灵活)

示例:解析 Apache 日志

import re

pattern = re.compile(
    r'(?P<ip>[\d\.]+) .* \[(?P<time>.*?)\] "(?P<method>\w+) (?P<url>.*?)" (?P<status>\d+)'
)

with open("access.log") as f:
    for line in f:
        m = pattern.search(line)
        if m:
            print(m.group("ip"), m.group("url"))

适合:定制分析、AI/安全检测


七、常见分析目标

目标 工具
访问量统计 goaccess / awk
异常 IP ELK / Python
爬虫识别 User-Agent
攻击检测 ELK / 正则
性能分析 响应码 + URL

八、推荐方案总结

场景 推荐
快速查看 awk + goaccess
日常运维 goaccess
企业级 ELK
二次开发 Python

如果你愿意,我可以:

  • ✅ 帮你 写完整 Apache 日志解析脚本
  • ✅ 给你 ELK 完整配置
  • ✅ 帮你 分析真实日志(可脱敏)

只要告诉我你的 使用场景和日志量 即可。

0