日志分析脚本 #

一、基本日志分析 #

bash
#!/bin/bash

# 统计访问量
count_requests() {
    local log_file="$1"
    wc -l < "$log_file"
}

# 统计独立IP
count_unique_ips() {
    local log_file="$1"
    awk '{print $1}' "$log_file" | sort -u | wc -l
}

# 统计状态码
count_status_codes() {
    local log_file="$1"
    awk '{print $9}' "$log_file" | sort | uniq -c | sort -rn
}

二、高级日志分析 #

bash
#!/bin/bash

# 分析访问最多的URL
top_urls() {
    local log_file="$1"
    local count="${2:-10}"
    
    awk '{print $7}' "$log_file" | sort | uniq -c | sort -rn | head -n "$count"
}

# 分析访问最多的IP
top_ips() {
    local log_file="$1"
    local count="${2:-10}"
    
    awk '{print $1}' "$log_file" | sort | uniq -c | sort -rn | head -n "$count"
}

# 按时间段分析
analyze_by_hour() {
    local log_file="$1"
    
    awk '{print substr($4, 14, 2)}' "$log_file" | sort | uniq -c
}

三、完整日志分析脚本 #

bash
#!/bin/bash

analyze_log() {
    local log_file="$1"
    
    if [[ ! -f "$log_file" ]]; then
        echo "日志文件不存在: $log_file"
        return 1
    fi
    
    echo "======================================"
    echo "    日志分析报告"
    echo "======================================"
    echo ""
    
    echo "总请求数: $(count_requests "$log_file")"
    echo "独立IP数: $(count_unique_ips "$log_file")"
    echo ""
    
    echo "=== 状态码分布 ==="
    count_status_codes "$log_file"
    echo ""
    
    echo "=== 访问最多的IP (Top 10) ==="
    top_ips "$log_file" 10
    echo ""
    
    echo "=== 访问最多的URL (Top 10) ==="
    top_urls "$log_file" 10
    echo ""
    
    echo "=== 按小时分布 ==="
    analyze_by_hour "$log_file"
}

analyze_log "/var/log/nginx/access.log"

下一步 #

你已经掌握了日志分析脚本,接下来让我们学习 备份脚本

最后更新:2026-03-27