实时日志监控与报警脚本:

该脚本能够实时监控日志文件,一旦检测到特定的错误关键字,就会发送报警邮件。

#!/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"