温馨提示×

Linux日志格式如何解析

小樊
36
2026-08-17 11:05:13
栏目: 智能运维

解析 Linux 日志的关键在于先判断日志来源和格式类型,再选择合适的方法。下面按常见日志类型、格式说明和解析方式系统讲解。


一、常见 Linux 日志类型

1. 系统日志(最常见)

  • /var/log/messages(RHEL/CentOS)
  • /var/log/syslog(Debian/Ubuntu)
  • rsyslog / syslog 产生

典型格式:

Jun 18 10:23:01 hostname sshd[1234]: Failed password for root from 192.168.1.10 port 22 ssh2

字段含义:

时间 主机名 服务[进程ID]: 日志内容

2. systemd 日志(journalctl)

  • 二进制格式
  • 使用 journalctl 查看
journalctl
journalctl -u sshd
journalctl --since "2025-01-01" --until "2025-01-02"

输出示例:

Jan 01 10:00:01 host sshd[1234]: Accepted password for user from 10.0.0.1 port 22

3. 应用日志

  • Nginx:/var/log/nginx/access.log
  • Apache:/var/log/httpd/access_log
  • MySQL:/var/log/mysql/error.log

Nginx access 日志:

127.0.0.1 - - [18/Jun/2025:10:00:00 +0800] "GET /index.html HTTP/1.1" 200 1024

二、日志格式解析方法

方法一:使用 awk(最常用)

示例:提取 SSH 登录失败 IP

grep "Failed password" /var/log/secure
awk '/Failed password/ {print $(NF-3)}' /var/log/secure

提取字段示例

awk '{print $1, $2, $3, $5}' /var/log/messages

方法二:使用 sed / grep

grep "error" /var/log/messages
grep -i "fail" /var/log/syslog

方法三:使用 journalctl JSON 输出(推荐)

journalctl -o json
journalctl -o json-pretty

解析 JSON 示例(jq):

journalctl -o json | jq '.MESSAGE'

方法四:Python 解析日志(适合复杂格式)

import re

pattern = r'(?P<date>\w+\s+\d+\s+\d+:\d+:\d+)\s+(?P<host>\S+)\s+(?P<service>\S+):\s+(?P<msg>.*)'

with open('/var/log/messages') as f:
    for line in f:
        m = re.match(pattern, line)
        if m:
            print(m.groupdict())

三、结构化日志(现代做法)

1. JSON 日志

{"time":"2025-06-18T10:00:00Z","level":"ERROR","msg":"db connect failed"}

解析:

jq '.msg' app.log

2. 使用 rsyslog 输出 JSON

module(load="mmjsonparse")
action(type="omfile" file="/var/log/app.json")

四、日志解析实战示例

统计 SSH 暴力破解 IP

grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr

统计 Nginx 访问最多的 IP

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

五、推荐工具

工具 用途
awk / sed / grep 快速解析
jq JSON 日志
journalctl systemd 日志
Python / Go 复杂解析
ELK / Loki 大规模日志分析

六、经验建议

✅ 先确认日志格式(syslog / json / 自定义)
✅ 能用 journalctl 就别直接读文件
✅ 生产环境建议日志结构化(JSON)
✅ 大文件避免 cat,用 awk / grep


如果你有具体日志样例(比如 SSH、Nginx、Docker、K8s 日志),可以直接贴出来,我可以帮你写精准解析规则

0