← 返回首页
📝

Linux日志管理基础

📂 devops ⏱ 2 min 253 words

Linux日志管理基础

日志的重要性

日志是系统运行的记录,对于故障排查、安全审计和性能分析至关重要。

系统日志文件

文件 说明
/var/log/syslog 系统日志
/var/log/auth.log 认证日志
/var/log/kern.log 内核日志
/var/log/dmesg 启动日志
/var/log/cron.log 定时任务日志
/var/log/boot.log 启动日志

journalctl

systemd的journal工具是查看日志的主要方式。

基本查询

# 查看所有日志
journalctl

# 查看最近的日志
journalctl -n 100

# 实时跟踪
journalctl -f

# 按时间过滤
journalctl --since "2024-01-01"
journalctl --since "1 hour ago"
journalctl --since "2024-01-01" --until "2024-01-02"

按服务过滤

# 查看特定服务日志
journalctl -u nginx

# 查看多个服务
journalctl -u nginx -u mysql

# 实时跟踪服务日志
journalctl -u nginx -f

日志级别

# 按优先级过滤
# emerg, alert, crit, err, warning, notice, info, debug
journalctl -p err        # 错误及以上
journalctl -p warning    # 警告及以上

日志分析

使用grep

# 搜索错误信息
grep "error" /var/log/syslog
grep -i "error" /var/log/syslog

# 统计错误数量
grep -c "error" /var/log/syslog

# 查看特定IP的访问
grep "192.168.1.100" /var/log/nginx/access.log

使用awk

# 提取特定字段
awk '{print $1, $4}' /var/log/auth.log

# 统计登录失败
awk '/Failed password/ {print $11}' /var/log/auth.log | sort | uniq -c | sort -rn

使用sed

# 提取时间段的日志
sed -n '/2024-01-01 10:00/,/2024-01-01 11:00/p' /var/log/syslog

日志轮转

logrotate负责日志文件的轮转和压缩。

配置文件

# /etc/logrotate.conf
daily           # 每天轮转
rotate 7        # 保留7份
compress        # 压缩
delaycompress   # 延迟压缩
missingok       # 文件缺失不报错
notifempty      # 空文件不轮转
create 0644 root root  # 创建新文件权限

自定义配置

# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0644 myapp myapp
    postrotate
        systemctl reload myapp
    endscript
}

日志远程发送

rsyslog配置

# 发送端配置
# /etc/rsyslog.d/client.conf
*.* @@192.168.1.100:514

# 接收端配置
# /etc/rsyslog.d/server.conf
$ModLoad imtcp
$InputTCPServerRun 514

实践:Nginx日志分析

#!/bin/bash
LOG="/var/log/nginx/access.log"

echo "=== 访问统计 ==="
echo "总请求数: $(wc -l < $LOG)"

echo ""
echo "=== 状态码分布 ==="
awk '{print $9}' $LOG | sort | uniq -c | sort -rn

echo ""
echo "=== 访问最多的IP ==="
awk '{print $1}' $LOG | sort | uniq -c | sort -rn | head -10

echo ""
echo "=== 访问最多的URL ==="
awk '{print $7}' $LOG | sort | uniq -c | sort -rn | head -10

总结

日志管理是运维工作的重要组成部分。掌握日志查看和分析技能,能够快速定位和解决问题。