日志分析脚本 #
一、基本日志分析 #
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