把 nginx 日志导入到某个地方,常见有几种场景。下面按「常见需求」给你一个清晰对照,你可以直接对号入座。
适合:长期存储、复杂查询
默认格式:
127.0.0.1 - - [10/Oct/2024:12:00:00 +0800] "GET /index.html HTTP/1.1" 200 1024
goaccess(最简单)yum install goaccess -y
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
import mysql.connector
conn = mysql.connector.connect(
host="localhost",
user="root",
password="123456",
database="nginx_log"
)
cursor = conn.cursor()
with open("/var/log/nginx/access.log") as f:
for line in f:
# 简单示例,实际建议正则解析
print(line)
✅ 推荐:先解析(正则 / csv),再批量 insert
适合:日志分析、可视化、搜索
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
output.elasticsearch:
hosts: ["localhost:9200"]
Kibana 中即可看到 nginx 日志
适合:海量日志、实时分析
CREATE TABLE nginx_log (
ip String,
time DateTime,
method String,
url String,
status UInt16
) ENGINE = MergeTree()
ORDER BY time;
然后用:
导入
适合:离线分析
flume-ng agent -c conf -f nginx-flume.conf
/var/log/nginx/
├── access.log
├── error.log
检查格式:
head -n 5 /var/log/nginx/access.log
如果是 JSON 格式(推荐):
log_format json '{"ip":"$remote_addr","time":"$time_iso8601","method":"$request_method"}';
access_log /var/log/nginx/access.log json;
| 需求 | 推荐方案 |
|---|---|
| 简单查看 | goaccess |
| 搜索 + 可视化 | ELK |
| 大数据量分析 | ClickHouse |
| 业务系统 | MySQL / PostgreSQL |
你可以直接告诉我:
我可以给你一套 可直接用的完整配置 ✅