实时日志监控与报警脚本:
该脚本能够实时监控日志文件,一旦检测到特定的错误关键字,就会发送报警邮件。
#!/bin/bash
LOG_FILE="/path/to/your/logfile.log"
KEYWORD="ERROR"
EMAIL="admin@example.com"
tail -f $LOG_FILE | while read line; do
if echo "$line" | grep -q "$KEYWORD"; then
echo "Alert: $line" | mail -s "Error Detected in $LOG_FILE" $EMAIL
fi
done
日志按时间分割脚本:
模拟logrotate功能,每天将旧日志重命名并创建新日志。
#!/bin/bash
LOG_FILE="/path/to/your/logfile.log"
DATE=$(date +%Y%m%d)
mv $LOG_FILE $LOG_FILE.$DATE
异常日志聚合分析脚本:
从多个服务器的日志文件中收集错误日志,并聚合分析。
#!/bin/bash
SERVERS=("server1" "server2" "server3")
ERROR_DIR="/path/to/error_logs"
mkdir -p "$ERROR_DIR"
for SERVER in "${SERVERS[@]}"; do
SSH_CMD="ssh $SERVER 'cat /path/to/logs/error.log'"
ERRORS=$(eval $SSH_CMD)
echo "$ERRORS" | grep 'ERROR' >> "$ERROR_DIR/${SERVER}_errors.log"
done
日志时间戳转换脚本:
将日志文件中的时间戳从UNIX时间戳转换为可读的日期格式。
#!/bin/bash
LOG_FILE="/path/to/your/logfile_with_timestamps.log"
while IFS= read -r line; do
TIMESTAMP=$(echo $line | cut -d' ' -f1)
MESSAGE=$(echo $line | cut -d' ' -f2-)
HUMAN_READABLE_DATE=$(date -d @"$TIMESTAMP" +"%Y-%m-%d %H:%M:%S")
echo "$HUMAN_READABLE_DATE $MESSAGE"
done < "$LOG_FILE"
日志IP地址统计脚本:
统计日志文件中访问者的IP地址及其出现次数,并排序输出。
#!/bin/bash
LOG_FILE="/path/to/your/access.log"
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr
日志请求类型分析脚本:
分析日志文件中不同HTTP请求类型(如GET、POST)的比例。
#!/bin/bash
LOG_FILE="/path/to/your/access.log"
declare -A request_types
while IFS= read -r line; do
method=$(echo $line | awk '{print $6}')
if [[ "${request_types[$method]}" ]]; then
((request_types[$method]++))
else
request_types[$method]=1
fi
done < "$LOG_FILE"
echo "Request Type Statistics:"
for method in "${!request_types[@]}"; do
echo "$method: ${request_types[$method]}"
done
日志响应时间分析脚本:
分析日志文件中每个请求的响应时间,并统计不同时间段的请求数量。
#!/bin/bash
LOG_FILE="/path/to/your/access.log"
declare -A response_times
bins=("0-100ms" "101-200ms" "201-500ms" "501-1000ms" "1000ms+")
while IFS= read -r line; do
response_time=$(echo $line | awk '{print $10}')
if (( echo "$response_time <= 100" | bc -l )); then
bin="0-100ms"
elif (( echo "$response_time <= 200" | bc -l )); then
bin="101-200ms"
elif (( echo "$response_time <= 500" | bc -l )); then
bin="201-500ms"
elif (( echo "$response_time <= 1000" | bc -l )); then
bin="501-1000ms"
else
bin="1000ms+"
fi
((response_times[$bin]++))
done < "$LOG_FILE"
echo "Response Time Statistics:"
for bin in "${!response_times[@]}"; do
echo "$bin: ${response_times[$bin]}"
done
日志文件内容差异分析脚本:
比较两个日志文件之间的差异,并输出不同之处。
#!/bin/bash
LOG_FILE1="/path/to/log1.log"
LOG_FILE2="/path/to/log2.log"
diff -B --side-by-side $LOG_FILE1 $LOG_FILE2
日志中特定用户活动跟踪脚本:
从日志文件中提取特定用户的所有活动记录,并按时间排序。
#!/bin/bash
LOG_FILE="/path/to/user_activity.log"
USER_NAME="target_user"
awk -v user="$USER_NAME" '$0 ~ user {print}' $LOG_FILE | sort
日志文件压缩与备份脚本:
将日志文件压缩后备份到指定的远程服务器或本地目录。
#!/bin/bash
LOG_DIR="/path/to/logs"
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d)
BACKUP_FILE="logs_backup_$DATE.tar.gz"
tar -czvf $BACKUP_DIR/$BACKUP_FILE $LOG_DIR
echo "Backup completed: $BACKUP_DIR/$BACKUP_FILE"
评论区