深色模式
常见日志格式解析
不同组件日志格式各异,采集前要先告诉解析器字段映射。本文给出 nginx access、apache、syslog 三类格式的字段说明与解析配置,照抄即可用。
适用环境
bash
# 查看本机各类日志样本
head -n 2 /var/log/nginx/access.log
head -n 2 /var/log/apache2/access.log
head -n 2 /var/log/syslog1
2
3
4
2
3
4
操作步骤
1. nginx access(combined 格式)
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"1
Filebeat 解析:
yaml
filebeat.inputs:
- type: filestream
paths: ["/var/log/nginx/access.log"]
parsers:
- nginx: {}1
2
3
4
5
2
3
4
5
2. apache combined
%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i"1
Fluent Bit 解析:
ini
[PARSER]
Name apache
Format regex
Regex ^(?<host>[^ ]*) .* \[(?<time>[^\]]*)\] "(?<method>\S+) (?<path>\S+) [^"]*" (?<code>[0-9]{3})1
2
3
4
2
3
4
3. syslog(RFC3164)
<pri>MMM DD HH:MM:SS hostname proc[pid]: message1
bash
# systemd 环境直接用 journalctl -o json 更稳定
journalctl -u sshd -o json -n 51
2
2
验证
bash
# 用 awk 抽样确认字段分隔是否符合预期
head -n 1 /var/log/nginx/access.log | awk '{print $1, $9, $7}'1
2
2
常见坑
WARNING
nginx 的 $time_local 与 ES 的日期格式不同,需在解析时指定 time_format 或用 grok 转换,否则时间字段无法用于范围查询。
DANGER
apache 的 %t 含方括号且含时区字符,正则不匹配会整行解析失败被丢弃,务必用真实样本反复测试正则。